diff options
| author | David S. Miller <davem@davemloft.net> | 2010-02-16 22:09:29 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-02-16 22:09:29 -0800 | 
| commit | 2bb4646fce8d09916b351d1a62f98db7cec6fc41 (patch) | |
| tree | c1f0d002e69868606eca9d1b919835f422892063 | |
| parent | 6836b9bdd98e3b500cd49512484df68f46e14659 (diff) | |
| parent | b0483e78e5c4c9871fc5541875b3bc006846d46b (diff) | |
| download | olio-linux-3.10-2bb4646fce8d09916b351d1a62f98db7cec6fc41.tar.xz olio-linux-3.10-2bb4646fce8d09916b351d1a62f98db7cec6fc41.zip  | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
630 files changed, 11984 insertions, 6373 deletions
diff --git a/Documentation/ABI/testing/ima_policy b/Documentation/ABI/testing/ima_policy index 6434f0df012..6cd6daefaae 100644 --- a/Documentation/ABI/testing/ima_policy +++ b/Documentation/ABI/testing/ima_policy @@ -20,7 +20,7 @@ Description:  			lsm:	[[subj_user=] [subj_role=] [subj_type=]  				 [obj_user=] [obj_role=] [obj_type=]] -		base: 	func:= [BPRM_CHECK][FILE_MMAP][INODE_PERMISSION] +		base: 	func:= [BPRM_CHECK][FILE_MMAP][FILE_CHECK]  			mask:= [MAY_READ] [MAY_WRITE] [MAY_APPEND] [MAY_EXEC]  			fsmagic:= hex value  			uid:= decimal value @@ -40,11 +40,11 @@ Description:  			measure func=BPRM_CHECK  			measure func=FILE_MMAP mask=MAY_EXEC -			measure func=INODE_PERM mask=MAY_READ uid=0 +			measure func=FILE_CHECK mask=MAY_READ uid=0  		The default policy measures all executables in bprm_check,  		all files mmapped executable in file_mmap, and all files -		open for read by root in inode_permission. +		open for read by root in do_filp_open.  		Examples of LSM specific definitions: @@ -54,8 +54,8 @@ Description:  			dont_measure obj_type=var_log_t  			dont_measure obj_type=auditd_log_t -			measure subj_user=system_u func=INODE_PERM mask=MAY_READ -			measure subj_role=system_r func=INODE_PERM mask=MAY_READ +			measure subj_user=system_u func=FILE_CHECK mask=MAY_READ +			measure subj_role=system_r func=FILE_CHECK mask=MAY_READ  		Smack: -			measure subj_user=_ func=INODE_PERM mask=MAY_READ +			measure subj_user=_ func=FILE_CHECK mask=MAY_READ diff --git a/Documentation/cpu-freq/governors.txt b/Documentation/cpu-freq/governors.txt index aed082f49d0..737988fca64 100644 --- a/Documentation/cpu-freq/governors.txt +++ b/Documentation/cpu-freq/governors.txt @@ -145,8 +145,8 @@ show_sampling_rate_max: THIS INTERFACE IS DEPRECATED, DON'T USE IT.  up_threshold: defines what the average CPU usage between the samplings  of 'sampling_rate' needs to be for the kernel to make a decision on  whether it should increase the frequency.  For example when it is set -to its default value of '80' it means that between the checking -intervals the CPU needs to be on average more than 80% in use to then +to its default value of '95' it means that between the checking +intervals the CPU needs to be on average more than 95% in use to then  decide that the CPU frequency needs to be increased.    ignore_nice_load: this parameter takes a value of '0' or '1'. When diff --git a/Documentation/fault-injection/fault-injection.txt b/Documentation/fault-injection/fault-injection.txt index 07930564079..7be15e44d48 100644 --- a/Documentation/fault-injection/fault-injection.txt +++ b/Documentation/fault-injection/fault-injection.txt @@ -143,8 +143,8 @@ o provide a way to configure fault attributes    failslab, fail_page_alloc, and fail_make_request use this way.    Helper functions: -	init_fault_attr_entries(entries, attr, name); -	void cleanup_fault_attr_entries(entries); +	init_fault_attr_dentries(entries, attr, name); +	void cleanup_fault_attr_dentries(entries);  - module parameters diff --git a/Documentation/input/multi-touch-protocol.txt b/Documentation/input/multi-touch-protocol.txt index a12ea3b586e..8490480ce43 100644 --- a/Documentation/input/multi-touch-protocol.txt +++ b/Documentation/input/multi-touch-protocol.txt @@ -27,12 +27,30 @@ set of events/packets.  A set of ABS_MT events with the desired properties is defined. The events  are divided into categories, to allow for partial implementation.  The -minimum set consists of ABS_MT_TOUCH_MAJOR, ABS_MT_POSITION_X and -ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked.  If the -device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size -of the approaching finger. Anisotropy and direction may be specified with -ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION.  The -ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a +minimum set consists of ABS_MT_POSITION_X and ABS_MT_POSITION_Y, which +allows for multiple fingers to be tracked.  If the device supports it, the +ABS_MT_TOUCH_MAJOR and ABS_MT_WIDTH_MAJOR may be used to provide the size +of the contact area and approaching finger, respectively. + +The TOUCH and WIDTH parameters have a geometrical interpretation; imagine +looking through a window at someone gently holding a finger against the +glass.  You will see two regions, one inner region consisting of the part +of the finger actually touching the glass, and one outer region formed by +the perimeter of the finger. The diameter of the inner region is the +ABS_MT_TOUCH_MAJOR, the diameter of the outer region is +ABS_MT_WIDTH_MAJOR. Now imagine the person pressing the finger harder +against the glass. The inner region will increase, and in general, the +ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR, which is always smaller than +unity, is related to the finger pressure. For pressure-based devices, +ABS_MT_PRESSURE may be used to provide the pressure on the contact area +instead. + +In addition to the MAJOR parameters, the oval shape of the finger can be +described by adding the MINOR parameters, such that MAJOR and MINOR are the +major and minor axis of an ellipse. Finally, the orientation of the oval +shape can be describe with the ORIENTATION parameter. + +The ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a  finger or a pen or something else.  Devices with more granular information  may specify general shapes as blobs, i.e., as a sequence of rectangular  shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices @@ -42,11 +60,9 @@ report finger tracking from hardware [5].  Here is what a minimal event sequence for a two-finger touch would look  like: -   ABS_MT_TOUCH_MAJOR     ABS_MT_POSITION_X     ABS_MT_POSITION_Y     SYN_MT_REPORT -   ABS_MT_TOUCH_MAJOR     ABS_MT_POSITION_X     ABS_MT_POSITION_Y     SYN_MT_REPORT @@ -87,6 +103,12 @@ the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates  the notion of pressure. The fingers of the hand and the palm all have  different characteristic widths [1]. +ABS_MT_PRESSURE + +The pressure, in arbitrary units, on the contact area. May be used instead +of TOUCH and WIDTH for pressure-based devices or any device with a spatial +signal intensity distribution. +  ABS_MT_ORIENTATION  The orientation of the ellipse. The value should describe a signed quarter @@ -170,6 +192,16 @@ There are a few devices that support trackingID in hardware. User space can  make use of these native identifiers to reduce bandwidth and cpu usage. +Gestures +-------- + +In the specific application of creating gesture events, the TOUCH and WIDTH +parameters can be used to, e.g., approximate finger pressure or distinguish +between index finger and thumb. With the addition of the MINOR parameters, +one can also distinguish between a sweeping finger and a pointing finger, +and with ORIENTATION, one can detect twisting of fingers. + +  Notes  ----- diff --git a/Documentation/trace/ftrace-design.txt b/Documentation/trace/ftrace-design.txt index 239f14b2b55..6a5a579126b 100644 --- a/Documentation/trace/ftrace-design.txt +++ b/Documentation/trace/ftrace-design.txt @@ -1,5 +1,6 @@  		function tracer guts  		==================== +		By Mike Frysinger  Introduction  ------------ @@ -173,14 +174,16 @@ void ftrace_graph_caller(void)  	unsigned long *frompc = &...;  	unsigned long selfpc = <return address> - MCOUNT_INSN_SIZE; -	prepare_ftrace_return(frompc, selfpc); +	/* passing frame pointer up is optional -- see below */ +	prepare_ftrace_return(frompc, selfpc, frame_pointer);  	/* restore all state needed by the ABI */  }  #endif -For information on how to implement prepare_ftrace_return(), simply look at -the x86 version.  The only architecture-specific piece in it is the setup of +For information on how to implement prepare_ftrace_return(), simply look at the +x86 version (the frame pointer passing is optional; see the next section for +more information).  The only architecture-specific piece in it is the setup of  the fault recovery table (the asm(...) code).  The rest should be the same  across architectures. @@ -205,6 +208,23 @@ void return_to_handler(void)  #endif +HAVE_FUNCTION_GRAPH_FP_TEST +--------------------------- + +An arch may pass in a unique value (frame pointer) to both the entering and +exiting of a function.  On exit, the value is compared and if it does not +match, then it will panic the kernel.  This is largely a sanity check for bad +code generation with gcc.  If gcc for your port sanely updates the frame +pointer under different opitmization levels, then ignore this option. + +However, adding support for it isn't terribly difficult.  In your assembly code +that calls prepare_ftrace_return(), pass the frame pointer as the 3rd argument. +Then in the C version of that function, do what the x86 port does and pass it +along to ftrace_push_return_trace() instead of a stub value of 0. + +Similarly, when you call ftrace_return_to_handler(), pass it the frame pointer. + +  HAVE_FTRACE_NMI_ENTER  --------------------- diff --git a/Documentation/trace/ftrace.txt b/Documentation/trace/ftrace.txt index 8179692fbb9..bab3040da54 100644 --- a/Documentation/trace/ftrace.txt +++ b/Documentation/trace/ftrace.txt @@ -1625,7 +1625,7 @@ If I am only interested in sys_nanosleep and hrtimer_interrupt:   # echo sys_nanosleep hrtimer_interrupt \  		> set_ftrace_filter - # echo ftrace > current_tracer + # echo function > current_tracer   # echo 1 > tracing_enabled   # usleep 1   # echo 0 > tracing_enabled diff --git a/MAINTAINERS b/MAINTAINERS index fe17b8016bc..64a237bb01a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3411,8 +3411,10 @@ S:	Maintained  F:	drivers/scsi/sym53c8xx_2/  LTP (Linux Test Project) -M:	Subrata Modak <subrata@linux.vnet.ibm.com> -M:	Mike Frysinger <vapier@gentoo.org> +M:	Rishikesh K Rajak <risrajak@linux.vnet.ibm.com> +M:	Garrett Cooper <yanegomi@gmail.com> +M:     Mike Frysinger <vapier@gentoo.org> +M:     Subrata Modak <subrata@linux.vnet.ibm.com>  L:	ltp-list@lists.sourceforge.net (subscribers-only)  W:	http://ltp.sourceforge.net/  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git @@ -1,7 +1,7 @@  VERSION = 2  PATCHLEVEL = 6  SUBLEVEL = 33 -EXTRAVERSION = -rc5 +EXTRAVERSION = -rc8  NAME = Man-Eating Seals of Antiquity  # *DOCUMENTATION* diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4c33ca82f9b..184a6bd5482 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -702,6 +702,7 @@ config ARCH_OMAP  	select ARCH_HAS_CPUFREQ  	select GENERIC_TIME  	select GENERIC_CLOCKEVENTS +	select ARCH_HAS_HOLES_MEMORYMODEL  	help  	  Support for TI's OMAP platform (OMAP1 and OMAP2). diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 9e758257274..356d702c080 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -94,7 +94,7 @@ CFLAGS_ABI	+=-funwind-tables  endif  ifeq ($(CONFIG_THUMB2_KERNEL),y) -AFLAGS_AUTOIT	:=$(call as-option,-Wa$(comma)-mimplicit-it=thumb,-Wa$(comma)-mauto-it) +AFLAGS_AUTOIT	:=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)  AFLAGS_NOWARN	:=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)  CFLAGS_THUMB2	:=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)  AFLAGS_THUMB2	:=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb diff --git a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c index 8bf4153d084..3bf6304158f 100644 --- a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c @@ -13,6 +13,7 @@  #include <linux/platform_device.h>  #include <linux/ata_platform.h>  #include <linux/mv643xx_eth.h> +#include <linux/gpio.h>  #include <linux/spi/flash.h>  #include <linux/spi/spi.h>  #include <linux/spi/orion_spi.h> @@ -53,6 +54,11 @@ static void __init rd88f6192_init(void)  	 */  	kirkwood_init(); +	orion_gpio_set_valid(RD88F6192_GPIO_USB_VBUS, 1); +	if (gpio_request(RD88F6192_GPIO_USB_VBUS, "USB VBUS") != 0 || +	    gpio_direction_output(RD88F6192_GPIO_USB_VBUS, 1) != 0) +		pr_err("RD-88F6192-NAS: failed to setup USB VBUS GPIO\n"); +  	kirkwood_ehci_init();  	kirkwood_ge00_init(&rd88f6192_ge00_data);  	kirkwood_sata_init(&rd88f6192_sata_data); diff --git a/arch/arm/mach-mx25/clock.c b/arch/arm/mach-mx25/clock.c index 6e838b85771..6acc88bcdc4 100644 --- a/arch/arm/mach-mx25/clock.c +++ b/arch/arm/mach-mx25/clock.c @@ -119,6 +119,11 @@ static unsigned long get_rate_nfc(struct clk *clk)  	return get_rate_per(8);  } +static unsigned long get_rate_gpt(struct clk *clk) +{ +	return get_rate_per(5); +} +  static unsigned long get_rate_otg(struct clk *clk)  {  	return 48000000; /* FIXME */ @@ -144,7 +149,7 @@ static void clk_cgcr_disable(struct clk *clk)  	__raw_writel(reg, clk->enable_reg);  } -#define DEFINE_CLOCK(name, i, er, es, gr, sr)		\ +#define DEFINE_CLOCK(name, i, er, es, gr, sr, s)	\  	static struct clk name = {			\  		.id		= i,			\  		.enable_reg	= CRM_BASE + er,	\ @@ -153,27 +158,30 @@ static void clk_cgcr_disable(struct clk *clk)  		.set_rate	= sr,			\  		.enable		= clk_cgcr_enable,	\  		.disable	= clk_cgcr_disable,	\ +		.secondary	= s,			\  	} -DEFINE_CLOCK(gpt_clk,    0, CCM_CGCR0,  5, get_rate_ipg, NULL); -DEFINE_CLOCK(cspi1_clk,  0, CCM_CGCR1,  5, get_rate_ipg, NULL); -DEFINE_CLOCK(cspi2_clk,  0, CCM_CGCR1,  6, get_rate_ipg, NULL); -DEFINE_CLOCK(cspi3_clk,  0, CCM_CGCR1,  7, get_rate_ipg, NULL); -DEFINE_CLOCK(uart1_clk,  0, CCM_CGCR2, 14, get_rate_uart, NULL); -DEFINE_CLOCK(uart2_clk,  0, CCM_CGCR2, 15, get_rate_uart, NULL); -DEFINE_CLOCK(uart3_clk,  0, CCM_CGCR2, 16, get_rate_uart, NULL); -DEFINE_CLOCK(uart4_clk,  0, CCM_CGCR2, 17, get_rate_uart, NULL); -DEFINE_CLOCK(uart5_clk,  0, CCM_CGCR2, 18, get_rate_uart, NULL); -DEFINE_CLOCK(nfc_clk,    0, CCM_CGCR0,  8, get_rate_nfc, NULL); -DEFINE_CLOCK(usbotg_clk, 0, CCM_CGCR0, 28, get_rate_otg, NULL); -DEFINE_CLOCK(pwm1_clk,	 0, CCM_CGCR1, 31, get_rate_ipg, NULL); -DEFINE_CLOCK(pwm2_clk,	 0, CCM_CGCR2,  0, get_rate_ipg, NULL); -DEFINE_CLOCK(pwm3_clk,	 0, CCM_CGCR2,  1, get_rate_ipg, NULL); -DEFINE_CLOCK(pwm4_clk,	 0, CCM_CGCR2,  2, get_rate_ipg, NULL); -DEFINE_CLOCK(kpp_clk,	 0, CCM_CGCR1, 28, get_rate_ipg, NULL); -DEFINE_CLOCK(tsc_clk,	 0, CCM_CGCR2, 13, get_rate_ipg, NULL); -DEFINE_CLOCK(i2c_clk,	 0, CCM_CGCR0,  6, get_rate_i2c, NULL); -DEFINE_CLOCK(fec_clk,	 0, CCM_CGCR0, 23, get_rate_ipg, NULL); +DEFINE_CLOCK(gpt_clk,    0, CCM_CGCR0,  5, get_rate_gpt, NULL, NULL); +DEFINE_CLOCK(uart_per_clk, 0, CCM_CGCR0, 15, get_rate_uart, NULL, NULL); +DEFINE_CLOCK(cspi1_clk,  0, CCM_CGCR1,  5, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(cspi2_clk,  0, CCM_CGCR1,  6, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(cspi3_clk,  0, CCM_CGCR1,  7, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(fec_ahb_clk, 0, CCM_CGCR0, 23, NULL,	 NULL, NULL); +DEFINE_CLOCK(uart1_clk,  0, CCM_CGCR2, 14, get_rate_uart, NULL, &uart_per_clk); +DEFINE_CLOCK(uart2_clk,  0, CCM_CGCR2, 15, get_rate_uart, NULL, &uart_per_clk); +DEFINE_CLOCK(uart3_clk,  0, CCM_CGCR2, 16, get_rate_uart, NULL, &uart_per_clk); +DEFINE_CLOCK(uart4_clk,  0, CCM_CGCR2, 17, get_rate_uart, NULL, &uart_per_clk); +DEFINE_CLOCK(uart5_clk,  0, CCM_CGCR2, 18, get_rate_uart, NULL, &uart_per_clk); +DEFINE_CLOCK(nfc_clk,    0, CCM_CGCR0,  8, get_rate_nfc, NULL, NULL); +DEFINE_CLOCK(usbotg_clk, 0, CCM_CGCR0, 28, get_rate_otg, NULL, NULL); +DEFINE_CLOCK(pwm1_clk,	 0, CCM_CGCR1, 31, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(pwm2_clk,	 0, CCM_CGCR2,  0, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(pwm3_clk,	 0, CCM_CGCR2,  1, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(pwm4_clk,	 0, CCM_CGCR2,  2, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(kpp_clk,	 0, CCM_CGCR1, 28, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(tsc_clk,	 0, CCM_CGCR2, 13, get_rate_ipg, NULL, NULL); +DEFINE_CLOCK(i2c_clk,	 0, CCM_CGCR0,  6, get_rate_i2c, NULL, NULL); +DEFINE_CLOCK(fec_clk,	 0, CCM_CGCR1, 15, get_rate_ipg, NULL, &fec_ahb_clk);  #define _REGISTER_CLOCK(d, n, c)	\  	{				\ @@ -208,13 +216,21 @@ static struct clk_lookup lookups[] = {  	_REGISTER_CLOCK("fec.0", NULL, fec_clk)  }; -int __init mx25_clocks_init(unsigned long fref) +int __init mx25_clocks_init(void)  {  	int i;  	for (i = 0; i < ARRAY_SIZE(lookups); i++)  		clkdev_add(&lookups[i]); +	/* Turn off all clocks except the ones we need to survive, namely: +	 * EMI, GPIO1-3 (CCM_CGCR1[18:16]), GPT1, IOMUXC (CCM_CGCR1[27]), IIM, +	 * SCC +	 */ +	__raw_writel((1 << 19), CRM_BASE + CCM_CGCR0); +	__raw_writel((0xf << 16) | (3 << 26), CRM_BASE + CCM_CGCR1); +	__raw_writel((1 << 5), CRM_BASE + CCM_CGCR2); +  	mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);  	return 0; diff --git a/arch/arm/mach-mx25/mx25pdk.c b/arch/arm/mach-mx25/mx25pdk.c index 921bc99ea23..6f06089246e 100644 --- a/arch/arm/mach-mx25/mx25pdk.c +++ b/arch/arm/mach-mx25/mx25pdk.c @@ -91,7 +91,7 @@ static void __init mx25pdk_init(void)  static void __init mx25pdk_timer_init(void)  { -	mx25_clocks_init(26000000); +	mx25_clocks_init();  }  static struct sys_timer mx25pdk_timer = { diff --git a/arch/arm/mach-mx3/mx31ads.c b/arch/arm/mach-mx3/mx31ads.c index 3e7bafa2ddb..938c549767d 100644 --- a/arch/arm/mach-mx3/mx31ads.c +++ b/arch/arm/mach-mx3/mx31ads.c @@ -173,6 +173,7 @@ static void expio_unmask_irq(u32 irq)  }  static struct irq_chip expio_irq_chip = { +	.name = "EXPIO(CPLD)",  	.ack = expio_ack_irq,  	.mask = expio_mask_irq,  	.unmask = expio_unmask_irq, @@ -302,6 +303,7 @@ static struct regulator_init_data ldo1_data = {  		.min_uV = 2800000,  		.max_uV = 2800000,  		.valid_modes_mask = REGULATOR_MODE_NORMAL, +		.valid_ops_mask = REGULATOR_CHANGE_STATUS,  		.apply_uV = 1,  	},  }; @@ -322,6 +324,7 @@ static struct regulator_init_data ldo2_data = {  		.min_uV = 3300000,  		.max_uV = 3300000,  		.valid_modes_mask = REGULATOR_MODE_NORMAL, +		.valid_ops_mask = REGULATOR_CHANGE_STATUS,  		.apply_uV = 1,  	},  	.num_consumer_supplies = ARRAY_SIZE(ldo2_consumers), @@ -459,6 +462,7 @@ static int mx31_wm8350_init(struct wm8350 *wm8350)  static struct wm8350_platform_data __initdata mx31_wm8350_pdata = {  	.init = mx31_wm8350_init, +	.irq_base = MXC_BOARD_IRQ_START + MXC_MAX_EXP_IO_LINES,  };  #endif diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c index 2ba9ab95373..04f1d29cba2 100644 --- a/arch/arm/mach-omap1/clock.c +++ b/arch/arm/mach-omap1/clock.c @@ -214,8 +214,8 @@ int omap1_select_table_rate(struct clk *clk, unsigned long rate)  	struct mpu_rate * ptr;  	unsigned long dpll1_rate, ref_rate; -	dpll1_rate = clk_get_rate(ck_dpll1_p); -	ref_rate = clk_get_rate(ck_ref_p); +	dpll1_rate = ck_dpll1_p->rate; +	ref_rate = ck_ref_p->rate;  	for (ptr = omap1_rate_table; ptr->rate; ptr++) {  		if (ptr->xtal != ref_rate) @@ -306,7 +306,7 @@ long omap1_round_to_table_rate(struct clk *clk, unsigned long rate)  	long highest_rate;  	unsigned long ref_rate; -	ref_rate = clk_get_rate(ck_ref_p); +	ref_rate = ck_ref_p->rate;  	highest_rate = -EINVAL; diff --git a/arch/arm/mach-omap2/clock34xx_data.c b/arch/arm/mach-omap2/clock34xx_data.c index c6031d74d6f..74930e3158e 100644 --- a/arch/arm/mach-omap2/clock34xx_data.c +++ b/arch/arm/mach-omap2/clock34xx_data.c @@ -671,7 +671,6 @@ static struct clk dpll4_m3x2_ck = {  	.name		= "dpll4_m3x2_ck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &dpll4_m3_ck, -	.init		= &omap2_init_clksel_parent,  	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),  	.enable_bit	= OMAP3430_PWRDN_TV_SHIFT,  	.flags		= INVERT_ENABLE, @@ -811,7 +810,6 @@ static struct clk dpll4_m6x2_ck = {  	.name		= "dpll4_m6x2_ck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &dpll4_m6_ck, -	.init		= &omap2_init_clksel_parent,  	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),  	.enable_bit	= OMAP3430_PWRDN_EMU_PERIPH_SHIFT,  	.flags		= INVERT_ENABLE, @@ -1047,7 +1045,6 @@ static struct clk iva2_ck = {  	.name		= "iva2_ck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &dpll2_m2_ck, -	.init		= &omap2_init_clksel_parent,  	.enable_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, CM_FCLKEN),  	.enable_bit	= OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT,  	.clkdm_name	= "iva2_clkdm", @@ -1121,7 +1118,6 @@ static struct clk gfx_l3_ck = {  	.name		= "gfx_l3_ck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &l3_ick, -	.init		= &omap2_init_clksel_parent,  	.enable_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),  	.enable_bit	= OMAP_EN_GFX_SHIFT,  	.recalc		= &followparent_recalc, diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index 2210e227d78..9d882bcb56e 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c @@ -346,37 +346,37 @@ static struct clk aess_fclk = {  };  static const struct clksel_rate div31_1to31_rates[] = { -	{ .div = 1, .val = 0, .flags = RATE_IN_4430 }, -	{ .div = 2, .val = 1, .flags = RATE_IN_4430 }, -	{ .div = 3, .val = 2, .flags = RATE_IN_4430 }, -	{ .div = 4, .val = 3, .flags = RATE_IN_4430 }, -	{ .div = 5, .val = 4, .flags = RATE_IN_4430 }, -	{ .div = 6, .val = 5, .flags = RATE_IN_4430 }, -	{ .div = 7, .val = 6, .flags = RATE_IN_4430 }, -	{ .div = 8, .val = 7, .flags = RATE_IN_4430 }, -	{ .div = 9, .val = 8, .flags = RATE_IN_4430 }, -	{ .div = 10, .val = 9, .flags = RATE_IN_4430 }, -	{ .div = 11, .val = 10, .flags = RATE_IN_4430 }, -	{ .div = 12, .val = 11, .flags = RATE_IN_4430 }, -	{ .div = 13, .val = 12, .flags = RATE_IN_4430 }, -	{ .div = 14, .val = 13, .flags = RATE_IN_4430 }, -	{ .div = 15, .val = 14, .flags = RATE_IN_4430 }, -	{ .div = 16, .val = 15, .flags = RATE_IN_4430 }, -	{ .div = 17, .val = 16, .flags = RATE_IN_4430 }, -	{ .div = 18, .val = 17, .flags = RATE_IN_4430 }, -	{ .div = 19, .val = 18, .flags = RATE_IN_4430 }, -	{ .div = 20, .val = 19, .flags = RATE_IN_4430 }, -	{ .div = 21, .val = 20, .flags = RATE_IN_4430 }, -	{ .div = 22, .val = 21, .flags = RATE_IN_4430 }, -	{ .div = 23, .val = 22, .flags = RATE_IN_4430 }, -	{ .div = 24, .val = 23, .flags = RATE_IN_4430 }, -	{ .div = 25, .val = 24, .flags = RATE_IN_4430 }, -	{ .div = 26, .val = 25, .flags = RATE_IN_4430 }, -	{ .div = 27, .val = 26, .flags = RATE_IN_4430 }, -	{ .div = 28, .val = 27, .flags = RATE_IN_4430 }, -	{ .div = 29, .val = 28, .flags = RATE_IN_4430 }, -	{ .div = 30, .val = 29, .flags = RATE_IN_4430 }, -	{ .div = 31, .val = 30, .flags = RATE_IN_4430 }, +	{ .div = 1, .val = 1, .flags = RATE_IN_4430 }, +	{ .div = 2, .val = 2, .flags = RATE_IN_4430 }, +	{ .div = 3, .val = 3, .flags = RATE_IN_4430 }, +	{ .div = 4, .val = 4, .flags = RATE_IN_4430 }, +	{ .div = 5, .val = 5, .flags = RATE_IN_4430 }, +	{ .div = 6, .val = 6, .flags = RATE_IN_4430 }, +	{ .div = 7, .val = 7, .flags = RATE_IN_4430 }, +	{ .div = 8, .val = 8, .flags = RATE_IN_4430 }, +	{ .div = 9, .val = 9, .flags = RATE_IN_4430 }, +	{ .div = 10, .val = 10, .flags = RATE_IN_4430 }, +	{ .div = 11, .val = 11, .flags = RATE_IN_4430 }, +	{ .div = 12, .val = 12, .flags = RATE_IN_4430 }, +	{ .div = 13, .val = 13, .flags = RATE_IN_4430 }, +	{ .div = 14, .val = 14, .flags = RATE_IN_4430 }, +	{ .div = 15, .val = 15, .flags = RATE_IN_4430 }, +	{ .div = 16, .val = 16, .flags = RATE_IN_4430 }, +	{ .div = 17, .val = 17, .flags = RATE_IN_4430 }, +	{ .div = 18, .val = 18, .flags = RATE_IN_4430 }, +	{ .div = 19, .val = 19, .flags = RATE_IN_4430 }, +	{ .div = 20, .val = 20, .flags = RATE_IN_4430 }, +	{ .div = 21, .val = 21, .flags = RATE_IN_4430 }, +	{ .div = 22, .val = 22, .flags = RATE_IN_4430 }, +	{ .div = 23, .val = 23, .flags = RATE_IN_4430 }, +	{ .div = 24, .val = 24, .flags = RATE_IN_4430 }, +	{ .div = 25, .val = 25, .flags = RATE_IN_4430 }, +	{ .div = 26, .val = 26, .flags = RATE_IN_4430 }, +	{ .div = 27, .val = 27, .flags = RATE_IN_4430 }, +	{ .div = 28, .val = 28, .flags = RATE_IN_4430 }, +	{ .div = 29, .val = 29, .flags = RATE_IN_4430 }, +	{ .div = 30, .val = 30, .flags = RATE_IN_4430 }, +	{ .div = 31, .val = 31, .flags = RATE_IN_4430 },  	{ .div = 0 },  }; diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index a26d6a08ae3..12f0cbfc289 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c @@ -137,7 +137,7 @@ return_sleep_time:  	local_irq_enable();  	local_fiq_enable(); -	return (u32)timespec_to_ns(&ts_idle)/1000; +	return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC;  }  /** diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index bd8cb597472..7027cdc1ba4 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -505,7 +505,7 @@ static void __init gpmc_mem_init(void)  void __init gpmc_init(void)  {  	u32 l; -	char *ck; +	char *ck = NULL;  	if (cpu_is_omap24xx()) {  		ck = "core_l3_ck"; @@ -521,6 +521,9 @@ void __init gpmc_init(void)  		l = OMAP44XX_GPMC_BASE;  	} +	if (WARN_ON(!ck)) +		return; +  	gpmc_l3_clk = clk_get(NULL, ck);  	if (IS_ERR(gpmc_l3_clk)) {  		printk(KERN_ERR "Could not get GPMC clock %s\n", ck); @@ -534,6 +537,8 @@ void __init gpmc_init(void)  		BUG();  	} +	clk_enable(gpmc_l3_clk); +  	l = gpmc_read_reg(GPMC_REVISION);  	printk(KERN_INFO "GPMC revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);  	/* Set smart idle mode and automatic L3 clock gating */ diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index a091b53657b..3d65c50bd01 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -188,6 +188,8 @@ void __init omap3_check_revision(void)  	u16 hawkeye;  	u8 rev; +	omap_chip.oc = CHIP_IS_OMAP3430; +  	/*  	 * We cannot access revision registers on ES1.0.  	 * If the processor type is Cortex-A8 and the revision is 0x0 @@ -196,6 +198,7 @@ void __init omap3_check_revision(void)  	cpuid = read_cpuid(CPUID_ID);  	if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) {  		omap_revision = OMAP3430_REV_ES1_0; +		omap_chip.oc |= CHIP_IS_OMAP3430ES1;  		return;  	} @@ -216,18 +219,28 @@ void __init omap3_check_revision(void)  		case 0: /* Take care of early samples */  		case 1:  			omap_revision = OMAP3430_REV_ES2_0; +			omap_chip.oc |= CHIP_IS_OMAP3430ES2;  			break;  		case 2:  			omap_revision = OMAP3430_REV_ES2_1; +			omap_chip.oc |= CHIP_IS_OMAP3430ES2;  			break;  		case 3:  			omap_revision = OMAP3430_REV_ES3_0; +			omap_chip.oc |= CHIP_IS_OMAP3430ES3_0;  			break;  		case 4: +			omap_revision = OMAP3430_REV_ES3_1; +			omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; +			break; +		case 7:  		/* FALLTHROUGH */  		default:  			/* Use the latest known revision as default */ -			omap_revision = OMAP3430_REV_ES3_1; +			omap_revision = OMAP3430_REV_ES3_1_2; + +			/* REVISIT: Add CHIP_IS_OMAP3430ES3_1_2? */ +			omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;  		}  		break;  	case 0xb868: @@ -235,14 +248,18 @@ void __init omap3_check_revision(void)  		 *  		 * Set the device to be OMAP3505 here. Actual device  		 * is identified later based on the features. +		 * +		 * REVISIT: AM3505/AM3517 should have their own CHIP_IS  		 */  		omap_revision = OMAP3505_REV(rev); +		omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;  		break;  	case 0xb891:  	/* FALLTHROUGH */  	default:  		/* Unknown default to latest silicon rev as default*/  		omap_revision = OMAP3630_REV_ES1_0; +		omap_chip.oc |= CHIP_IS_OMAP3630ES1;  	}  } @@ -360,6 +377,7 @@ void __init omap2_check_revision(void)  		omap3_check_revision();  		omap3_check_features();  		omap3_cpuinfo(); +		return;  	} else if (cpu_is_omap44xx()) {  		omap4_check_revision();  		return; @@ -374,27 +392,14 @@ void __init omap2_check_revision(void)  	if (cpu_is_omap243x()) {  		/* Currently only supports 2430ES2.1 and 2430-all */  		omap_chip.oc |= CHIP_IS_OMAP2430; +		return;  	} else if (cpu_is_omap242x()) {  		/* Currently only supports 2420ES2.1.1 and 2420-all */  		omap_chip.oc |= CHIP_IS_OMAP2420; -	} else if (cpu_is_omap3505() || cpu_is_omap3517()) { -		omap_chip.oc = CHIP_IS_OMAP3430 | CHIP_IS_OMAP3430ES3_1; -	} else if (cpu_is_omap343x()) { -		omap_chip.oc = CHIP_IS_OMAP3430; -		if (omap_rev() == OMAP3430_REV_ES1_0) -			omap_chip.oc |= CHIP_IS_OMAP3430ES1; -		else if (omap_rev() >= OMAP3430_REV_ES2_0 && -			 omap_rev() <= OMAP3430_REV_ES2_1) -			omap_chip.oc |= CHIP_IS_OMAP3430ES2; -		else if (omap_rev() == OMAP3430_REV_ES3_0) -			omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; -		else if (omap_rev() == OMAP3430_REV_ES3_1) -			omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; -		else if (omap_rev() == OMAP3630_REV_ES1_0) -			omap_chip.oc |= CHIP_IS_OMAP3630ES1; -	} else { -		pr_err("Uninitialized omap_chip, please fix!\n"); +		return;  	} + +	pr_err("Uninitialized omap_chip, please fix!\n");  }  /* diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index e9bc782fa41..26aeef560aa 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c @@ -194,7 +194,7 @@ void __init omap_init_irq(void)  	int i;  	for (i = 0; i < ARRAY_SIZE(irq_banks); i++) { -		unsigned long base; +		unsigned long base = 0;  		struct omap_irq_bank *bank = irq_banks + i;  		if (cpu_is_omap24xx()) @@ -202,6 +202,8 @@ void __init omap_init_irq(void)  		else if (cpu_is_omap34xx())  			base = OMAP34XX_IC_BASE; +		BUG_ON(!base); +  		/* Static mapping, never released */  		bank->base_reg = ioremap(base, SZ_4K);  		if (!bank->base_reg) { @@ -274,4 +276,22 @@ void omap_intc_restore_context(void)  	}  	/* MIRs are saved and restore with other PRCM registers */  } + +void omap3_intc_suspend(void) +{ +	/* A pending interrupt would prevent OMAP from entering suspend */ +	omap_ack_irq(0); +} + +void omap3_intc_prepare_idle(void) +{ +	/* Disable autoidle as it can stall interrupt controller */ +	intc_bank_write_reg(0, &irq_banks[0], INTC_SYSCONFIG); +} + +void omap3_intc_resume_idle(void) +{ +	/* Re-enable autoidle */ +	intc_bank_write_reg(1, &irq_banks[0], INTC_SYSCONFIG); +}  #endif /* CONFIG_ARCH_OMAP3 */ diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c index 0c3c72d934b..8afe9dd3f15 100644 --- a/arch/arm/mach-omap2/mmc-twl4030.c +++ b/arch/arm/mach-omap2/mmc-twl4030.c @@ -408,6 +408,7 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  {  	struct twl4030_hsmmc_info *c;  	int nr_hsmmc = ARRAY_SIZE(hsmmc_data); +	int i;  	if (cpu_is_omap2430()) {  		control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; @@ -434,7 +435,7 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  		mmc = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);  		if (!mmc) {  			pr_err("Cannot allocate memory for mmc device!\n"); -			return; +			goto done;  		}  		if (c->name) @@ -532,6 +533,10 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  			continue;  		c->dev = mmc->dev;  	} + +done: +	for (i = 0; i < nr_hsmmc; i++) +		kfree(hsmmc_data[i]);  }  #endif diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 459ef23ab8a..5fedc50c58e 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c @@ -51,7 +51,7 @@ struct omap_mux_entry {  static unsigned long mux_phys;  static void __iomem *mux_base; -static inline u16 omap_mux_read(u16 reg) +u16 omap_mux_read(u16 reg)  {  	if (cpu_is_omap24xx())  		return __raw_readb(mux_base + reg); @@ -59,7 +59,7 @@ static inline u16 omap_mux_read(u16 reg)  		return __raw_readw(mux_base + reg);  } -static inline void omap_mux_write(u16 val, u16 reg) +void omap_mux_write(u16 val, u16 reg)  {  	if (cpu_is_omap24xx())  		__raw_writeb(val, mux_base + reg); @@ -67,6 +67,14 @@ static inline void omap_mux_write(u16 val, u16 reg)  		__raw_writew(val, mux_base + reg);  } +void omap_mux_write_array(struct omap_board_mux *board_mux) +{ +	while (board_mux->reg_offset !=  OMAP_MUX_TERMINATOR) { +		omap_mux_write(board_mux->value, board_mux->reg_offset); +		board_mux++; +	} +} +  #if defined(CONFIG_ARCH_OMAP24XX) && defined(CONFIG_OMAP_MUX)  static struct omap_mux_cfg arch_mux_cfg; @@ -478,7 +486,7 @@ int __init omap_mux_init_signal(char *muxname, int val)  static inline void omap_mux_decode(struct seq_file *s, u16 val)  {  	char *flags[OMAP_MUX_MAX_NR_FLAGS]; -	char mode[14]; +	char mode[sizeof("OMAP_MUX_MODE") + 1];  	int i = -1;  	sprintf(mode, "OMAP_MUX_MODE%d", val & 0x7); @@ -545,6 +553,7 @@ static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)  		if (!m0_name)  			continue; +		/* REVISIT: Needs to be updated if mode0 names get longer */  		for (i = 0; i < OMAP_MUX_DEFNAME_LEN; i++) {  			if (m0_name[i] == '\0') {  				m0_def[i] = m0_name[i]; @@ -833,14 +842,6 @@ static void __init omap_mux_set_cmdline_signals(void)  	kfree(options);  } -static void __init omap_mux_set_board_signals(struct omap_board_mux *board_mux) -{ -	while (board_mux->reg_offset !=  OMAP_MUX_TERMINATOR) { -		omap_mux_write(board_mux->value, board_mux->reg_offset); -		board_mux++; -	} -} -  static int __init omap_mux_copy_names(struct omap_mux *src,  					struct omap_mux *dst)  { @@ -968,6 +969,13 @@ static void __init omap_mux_init_list(struct omap_mux *superset)  		}  #endif +#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) +		if (!superset->muxnames || !superset->muxnames[0]) { +			superset++; +			continue; +		} +#endif +  		entry = omap_mux_list_add(superset);  		if (!entry) {  			printk(KERN_ERR "mux: Could not add entry\n"); @@ -998,12 +1006,15 @@ int __init omap_mux_init(u32 mux_pbase, u32 mux_size,  		omap_mux_package_fixup(package_subset, superset);  	if (package_balls)  		omap_mux_package_init_balls(package_balls, superset); -	omap_mux_set_cmdline_signals(); -	omap_mux_set_board_signals(board_mux);  #endif  	omap_mux_init_list(superset); +#ifdef CONFIG_OMAP_MUX +	omap_mux_set_cmdline_signals(); +	omap_mux_write_array(board_mux); +#endif +  	return 0;  } diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h index d8b4d5ad227..f8c2e7a8f06 100644 --- a/arch/arm/mach-omap2/mux.h +++ b/arch/arm/mach-omap2/mux.h @@ -147,6 +147,30 @@ u16 omap_mux_get_gpio(int gpio);  void omap_mux_set_gpio(u16 val, int gpio);  /** + * omap_mux_read() - read mux register + * @mux_offset:		Offset of the mux register + * + */ +u16 omap_mux_read(u16 mux_offset); + +/** + * omap_mux_write() - write mux register + * @val:		New mux register value + * @mux_offset:		Offset of the mux register + * + * This should be only needed for dynamic remuxing of non-gpio signals. + */ +void omap_mux_write(u16 val, u16 mux_offset); + +/** + * omap_mux_write_array() - write an array of mux registers + * @board_mux:		Array of mux registers terminated by MAP_MUX_TERMINATOR + * + * This should be only needed for dynamic remuxing of non-gpio signals. + */ +void omap_mux_write_array(struct omap_board_mux *board_mux); + +/**   * omap3_mux_init() - initialize mux system with board specific set   * @board_mux:		Board specific mux table   * @flags:		OMAP package type used for the board diff --git a/arch/arm/mach-omap2/mux34xx.c b/arch/arm/mach-omap2/mux34xx.c index 68e0a595f9a..07aa7b3c95f 100644 --- a/arch/arm/mach-omap2/mux34xx.c +++ b/arch/arm/mach-omap2/mux34xx.c @@ -649,6 +649,53 @@ static struct omap_mux __initdata omap3_muxmodes[] = {  	_OMAP3_MUXENTRY(UART3_TX_IRTX, 166,  		"uart3_tx_irtx", NULL, NULL, NULL,  		"gpio_166", NULL, NULL, "safe_mode"), + +	/* Only on 3630, see omap36xx_cbp_subset for the signals */ +	_OMAP3_MUXENTRY(GPMC_A11, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MBUSFLAG, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MREAD, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MWRITE, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_SBUSFLAG, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_SREAD, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_SWRITE, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(GPMC_A11, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD28, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD29, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD32, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD33, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD34, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD35, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL), +	_OMAP3_MUXENTRY(SAD2D_MCAD36, 0, +		NULL, NULL, NULL, NULL, +		NULL, NULL, NULL, NULL),  	{ .reg_offset = OMAP_MUX_TERMINATOR },  }; diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index d8c8545875b..478ae585ca3 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -94,7 +94,8 @@ static int _update_sysc_cache(struct omap_hwmod *oh)  	oh->_sysc_cache = omap_hwmod_readl(oh, oh->sysconfig->sysc_offs); -	oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED; +	if (!(oh->sysconfig->sysc_flags & SYSC_NO_CACHE)) +		oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED;  	return 0;  } diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 860b755d222..a0866268aa4 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -54,8 +54,6 @@ int omap2_pm_debug;  	regs[reg_count++].val = \  			 __raw_readl(OMAP2_L4_IO_ADDRESS(0x480fe000 + (off))) -static int __init pm_dbg_init(void); -  void omap2_pm_dump(int mode, int resume, unsigned int us)  {  	struct reg { @@ -167,6 +165,8 @@ struct dentry *pm_dbg_dir;  static int pm_dbg_init_done; +static int __init pm_dbg_init(void); +  enum {  	DEBUG_FILE_COUNTERS = 0,  	DEBUG_FILE_TIMERS, @@ -488,9 +488,11 @@ int pm_dbg_regset_init(int reg_set)  static int pwrdm_suspend_get(void *data, u64 *val)  { -	*val = omap3_pm_get_suspend_state((struct powerdomain *)data); +	int ret; +	ret = omap3_pm_get_suspend_state((struct powerdomain *)data); +	*val = ret; -	if (*val >= 0) +	if (ret >= 0)  		return 0;  	return *val;  } @@ -604,6 +606,4 @@ static int __init pm_dbg_init(void)  }  arch_initcall(pm_dbg_init); -#else -void pm_dbg_update_time(struct powerdomain *pwrdm, int prev) {}  #endif diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 0bf345db714..7a9c2d00451 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -32,12 +32,16 @@ extern struct omap_dm_timer *gptimer_wakeup;  #ifdef CONFIG_PM_DEBUG  extern void omap2_pm_dump(int mode, int resume, unsigned int us);  extern int omap2_pm_debug; +#else +#define omap2_pm_dump(mode, resume, us)		do {} while (0); +#define omap2_pm_debug				0 +#endif + +#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)  extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev);  extern int pm_dbg_regset_save(int reg_set);  extern int pm_dbg_regset_init(int reg_set);  #else -#define omap2_pm_dump(mode, resume, us)		do {} while (0); -#define omap2_pm_debug				0  #define pm_dbg_update_time(pwrdm, prev) do {} while (0);  #define pm_dbg_regset_save(reg_set) do {} while (0);  #define pm_dbg_regset_init(reg_set) do {} while (0); diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index c6cc809afb7..910a7acf542 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -26,6 +26,7 @@  #include <linux/err.h>  #include <linux/gpio.h>  #include <linux/clk.h> +#include <linux/delay.h>  #include <plat/sram.h>  #include <plat/clockdomain.h> @@ -126,7 +127,15 @@ static void omap3_core_save_context(void)  	/* wait for the save to complete */  	while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)  			& PADCONF_SAVE_DONE)) -		; +		udelay(1); + +	/* +	 * Force write last pad into memory, as this can fail in some +	 * cases according to erratas 1.157, 1.185 +	 */ +	omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14), +		OMAP343X_CONTROL_MEM_WKUP + 0x2a0); +  	/* Save the Interrupt controller context */  	omap_intc_save_context();  	/* Save the GPMC context */ @@ -392,6 +401,7 @@ void omap_sram_idle(void)  		prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);  		omap3_enable_io_chain();  	} +	omap3_intc_prepare_idle();  	/*  	* On EMU/HS devices ROM code restores a SRDC value @@ -438,6 +448,7 @@ void omap_sram_idle(void)  					       OMAP3430_GR_MOD,  					       OMAP3_PRM_VOLTCTRL_OFFSET);  	} +	omap3_intc_resume_idle();  	/* PER */  	if (per_next_state < PWRDM_POWER_ON) { @@ -578,6 +589,8 @@ static int omap3_pm_suspend(void)  	}  	omap_uart_prepare_suspend(); +	omap3_intc_suspend(); +  	omap_sram_idle();  restore: @@ -835,6 +848,8 @@ static void __init prcm_setup_regs(void)  			CM_AUTOIDLE);  	} +	omap_ctrl_writel(OMAP3430_AUTOIDLE, OMAP2_CONTROL_SYSCONFIG); +  	/*  	 * Set all plls to autoidle. This is needed until autoidle is  	 * enabled by clockfw @@ -875,15 +890,23 @@ static void __init prcm_setup_regs(void)  	prm_write_mod_reg(OMAP3430_IO_EN | OMAP3430_WKUP_EN,  			  OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); +	/* Enable PM_WKEN to support DSS LPR */ +	prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS, +				OMAP3430_DSS_MOD, PM_WKEN); +  	/* Enable wakeups in PER */  	prm_write_mod_reg(OMAP3430_EN_GPIO2 | OMAP3430_EN_GPIO3 |  			  OMAP3430_EN_GPIO4 | OMAP3430_EN_GPIO5 | -			  OMAP3430_EN_GPIO6 | OMAP3430_EN_UART3, +			  OMAP3430_EN_GPIO6 | OMAP3430_EN_UART3 | +			  OMAP3430_EN_MCBSP2 | OMAP3430_EN_MCBSP3 | +			  OMAP3430_EN_MCBSP4,  			  OMAP3430_PER_MOD, PM_WKEN);  	/* and allow them to wake up MPU */  	prm_write_mod_reg(OMAP3430_GRPSEL_GPIO2 | OMAP3430_EN_GPIO3 |  			  OMAP3430_GRPSEL_GPIO4 | OMAP3430_EN_GPIO5 | -			  OMAP3430_GRPSEL_GPIO6 | OMAP3430_EN_UART3, +			  OMAP3430_GRPSEL_GPIO6 | OMAP3430_EN_UART3 | +			  OMAP3430_EN_MCBSP2 | OMAP3430_EN_MCBSP3 | +			  OMAP3430_EN_MCBSP4,  			  OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL);  	/* Don't attach IVA interrupts */ @@ -904,24 +927,6 @@ static void __init prcm_setup_regs(void)  	/* Clear any pending PRCM interrupts */  	prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); -	/* Don't attach IVA interrupts */ -	prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); -	prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); -	prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); -	prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); - -	/* Clear any pending 'reset' flags */ -	prm_write_mod_reg(0xffffffff, MPU_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, CORE_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, RM_RSTST); -	prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, RM_RSTST); - -	/* Clear any pending PRCM interrupts */ -	prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); -  	omap3_iva_idle();  	omap3_d2d_idle();  } diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c index 3ea8177ffb2..cf466ea1dff 100644 --- a/arch/arm/mach-omap2/prcm.c +++ b/arch/arm/mach-omap2/prcm.c @@ -44,7 +44,6 @@ struct omap3_prcm_regs {  	u32 iva2_cm_clksel2;  	u32 cm_sysconfig;  	u32 sgx_cm_clksel; -	u32 wkup_cm_clksel;  	u32 dss_cm_clksel;  	u32 cam_cm_clksel;  	u32 per_cm_clksel; @@ -53,7 +52,6 @@ struct omap3_prcm_regs {  	u32 pll_cm_autoidle2;  	u32 pll_cm_clksel4;  	u32 pll_cm_clksel5; -	u32 pll_cm_clken;  	u32 pll_cm_clken2;  	u32 cm_polctrl;  	u32 iva2_cm_fclken; @@ -77,7 +75,6 @@ struct omap3_prcm_regs {  	u32 usbhost_cm_iclken;  	u32 iva2_cm_autiidle2;  	u32 mpu_cm_autoidle2; -	u32 pll_cm_autoidle;  	u32 iva2_cm_clkstctrl;  	u32 mpu_cm_clkstctrl;  	u32 core_cm_clkstctrl; @@ -274,7 +271,6 @@ void omap3_prcm_save_context(void)  	prcm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);  	prcm_context.sgx_cm_clksel =  			 cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL); -	prcm_context.wkup_cm_clksel = cm_read_mod_reg(WKUP_MOD, CM_CLKSEL);  	prcm_context.dss_cm_clksel =  			 cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);  	prcm_context.cam_cm_clksel = @@ -291,8 +287,6 @@ void omap3_prcm_save_context(void)  			cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL4);  	prcm_context.pll_cm_clksel5 =  			 cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5); -	prcm_context.pll_cm_clken = -			cm_read_mod_reg(PLL_MOD, CM_CLKEN);  	prcm_context.pll_cm_clken2 =  			cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);  	prcm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL); @@ -338,8 +332,6 @@ void omap3_prcm_save_context(void)  			 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_AUTOIDLE2);  	prcm_context.mpu_cm_autoidle2 =  			 cm_read_mod_reg(MPU_MOD, CM_AUTOIDLE2); -	prcm_context.pll_cm_autoidle = -			 cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE);  	prcm_context.iva2_cm_clkstctrl =  			 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSTCTRL);  	prcm_context.mpu_cm_clkstctrl = @@ -431,7 +423,6 @@ void omap3_prcm_restore_context(void)  	__raw_writel(prcm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);  	cm_write_mod_reg(prcm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,  					 CM_CLKSEL); -	cm_write_mod_reg(prcm_context.wkup_cm_clksel, WKUP_MOD, CM_CLKSEL);  	cm_write_mod_reg(prcm_context.dss_cm_clksel, OMAP3430_DSS_MOD,  					 CM_CLKSEL);  	cm_write_mod_reg(prcm_context.cam_cm_clksel, OMAP3430_CAM_MOD, @@ -448,7 +439,6 @@ void omap3_prcm_restore_context(void)  					OMAP3430ES2_CM_CLKSEL4);  	cm_write_mod_reg(prcm_context.pll_cm_clksel5, PLL_MOD,  					 OMAP3430ES2_CM_CLKSEL5); -	cm_write_mod_reg(prcm_context.pll_cm_clken, PLL_MOD, CM_CLKEN);  	cm_write_mod_reg(prcm_context.pll_cm_clken2, PLL_MOD,  					OMAP3430ES2_CM_CLKEN2);  	__raw_writel(prcm_context.cm_polctrl, OMAP3430_CM_POLCTRL); @@ -487,7 +477,6 @@ void omap3_prcm_restore_context(void)  	cm_write_mod_reg(prcm_context.iva2_cm_autiidle2, OMAP3430_IVA2_MOD,  					CM_AUTOIDLE2);  	cm_write_mod_reg(prcm_context.mpu_cm_autoidle2, MPU_MOD, CM_AUTOIDLE2); -	cm_write_mod_reg(prcm_context.pll_cm_autoidle, PLL_MOD, CM_AUTOIDLE);  	cm_write_mod_reg(prcm_context.iva2_cm_clkstctrl, OMAP3430_IVA2_MOD,  					CM_CLKSTCTRL);  	cm_write_mod_reg(prcm_context.mpu_cm_clkstctrl, MPU_MOD, CM_CLKSTCTRL); diff --git a/arch/arm/mach-omap2/prm.h b/arch/arm/mach-omap2/prm.h index ea050ce188a..40f00628516 100644 --- a/arch/arm/mach-omap2/prm.h +++ b/arch/arm/mach-omap2/prm.h @@ -24,6 +24,8 @@  		OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE + (module) + (reg))  #define OMAP44XX_PRM_REGADDR(module, reg)				\  		OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE + (module) + (reg)) +#define OMAP44XX_CHIRONSS_REGADDR(module, reg)				\ +		OMAP2_L4_IO_ADDRESS(OMAP4430_CHIRONSS_BASE + (module) + (reg))  #include "prm44xx.h" diff --git a/arch/arm/mach-omap2/prm44xx.h b/arch/arm/mach-omap2/prm44xx.h index 89be97f0589..adb2558bb12 100644 --- a/arch/arm/mach-omap2/prm44xx.h +++ b/arch/arm/mach-omap2/prm44xx.h @@ -386,26 +386,26 @@  /* CHIRON_PRCM.CHIRONSS_OCP_SOCKET_PRCM register offsets */ -#define OMAP4430_REVISION_PRCM				OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_OCP_SOCKET_PRCM_MOD, 0x0000) +#define OMAP4430_REVISION_PRCM				OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_OCP_SOCKET_PRCM_MOD, 0x0000)  /* CHIRON_PRCM.CHIRONSS_DEVICE_PRM register offsets */ -#define OMAP4430_CHIRON_PRCM_PRM_RSTST			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_DEVICE_PRM_MOD, 0x0000) +#define OMAP4430_CHIRON_PRCM_PRM_RSTST			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_DEVICE_PRM_MOD, 0x0000)  /* CHIRON_PRCM.CHIRONSS_CPU0 register offsets */ -#define OMAP4430_PM_PDA_CPU0_PWRSTCTRL			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0000) -#define OMAP4430_PM_PDA_CPU0_PWRSTST			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0004) -#define OMAP4430_RM_PDA_CPU0_CPU0_CONTEXT		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0008) -#define OMAP4430_RM_PDA_CPU0_CPU0_RSTCTRL		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x000c) -#define OMAP4430_RM_PDA_CPU0_CPU0_RSTST			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0010) -#define OMAP4430_CM_PDA_CPU0_CPU0_CLKCTRL		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0014) -#define OMAP4430_CM_PDA_CPU0_CLKSTCTRL			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0018) +#define OMAP4430_PM_PDA_CPU0_PWRSTCTRL			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0000) +#define OMAP4430_PM_PDA_CPU0_PWRSTST			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0004) +#define OMAP4430_RM_PDA_CPU0_CPU0_CONTEXT		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0008) +#define OMAP4430_RM_PDA_CPU0_CPU0_RSTCTRL		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x000c) +#define OMAP4430_RM_PDA_CPU0_CPU0_RSTST			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0010) +#define OMAP4430_CM_PDA_CPU0_CPU0_CLKCTRL		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0014) +#define OMAP4430_CM_PDA_CPU0_CLKSTCTRL			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU0_MOD, 0x0018)  /* CHIRON_PRCM.CHIRONSS_CPU1 register offsets */ -#define OMAP4430_PM_PDA_CPU1_PWRSTCTRL			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0000) -#define OMAP4430_PM_PDA_CPU1_PWRSTST			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0004) -#define OMAP4430_RM_PDA_CPU1_CPU1_CONTEXT		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0008) -#define OMAP4430_RM_PDA_CPU1_CPU1_RSTCTRL		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x000c) -#define OMAP4430_RM_PDA_CPU1_CPU1_RSTST			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0010) -#define OMAP4430_CM_PDA_CPU1_CPU1_CLKCTRL		OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0014) -#define OMAP4430_CM_PDA_CPU1_CLKSTCTRL			OMAP44XX_PRM_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0018) +#define OMAP4430_PM_PDA_CPU1_PWRSTCTRL			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0000) +#define OMAP4430_PM_PDA_CPU1_PWRSTST			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0004) +#define OMAP4430_RM_PDA_CPU1_CPU1_CONTEXT		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0008) +#define OMAP4430_RM_PDA_CPU1_CPU1_RSTCTRL		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x000c) +#define OMAP4430_RM_PDA_CPU1_CPU1_RSTST			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0010) +#define OMAP4430_CM_PDA_CPU1_CPU1_CLKCTRL		OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0014) +#define OMAP4430_CM_PDA_CPU1_CLKSTCTRL			OMAP44XX_CHIRONSS_REGADDR(OMAP4430_CHIRONSS_CHIRONSS_CPU1_MOD, 0x0018)  #endif diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 8c964bec815..e10a02df6e1 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c @@ -36,7 +36,13 @@  #define UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV	0x52  #define UART_OMAP_WER		0x17	/* Wake-up enable register */ -#define DEFAULT_TIMEOUT (5 * HZ) +/* + * NOTE: By default the serial timeout is disabled as it causes lost characters + * over the serial ports. This means that the UART clocks will stay on until + * disabled via sysfs. This also causes that any deeper omap sleep states are + * blocked.  + */ +#define DEFAULT_TIMEOUT 0  struct omap_uart_state {  	int num; @@ -422,7 +428,8 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)  	uart->timeout = DEFAULT_TIMEOUT;  	setup_timer(&uart->timer, omap_uart_idle_timer,  		    (unsigned long) uart); -	mod_timer(&uart->timer, jiffies + uart->timeout); +	if (uart->timeout) +		mod_timer(&uart->timer, jiffies + uart->timeout);  	omap_uart_smart_idle_enable(uart, 0);  	if (cpu_is_omap34xx()) { diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S index 15268f8b61d..c3626ea4814 100644 --- a/arch/arm/mach-omap2/sleep34xx.S +++ b/arch/arm/mach-omap2/sleep34xx.S @@ -245,7 +245,8 @@ restore:  	mov	r1, #0		@ set task id for ROM code in r1  	mov	r2, #4		@ set some flags in r2, r6  	mov	r6, #0xff -	adr	r3, write_aux_control_params	@ r3 points to parameters +	ldr	r4, scratchpad_base +	ldr	r3, [r4, #0xBC]	@ r3 points to parameters  	mcr	p15, 0, r0, c7, c10, 4	@ data write barrier  	mcr	p15, 0, r0, c7, c10, 5	@ data memory barrier  	.word	0xE1600071		@ call SMI monitor (smi #1) @@ -253,14 +254,14 @@ restore:  	b	logic_l1_restore  l2_inv_api_params:  	.word   0x1, 0x00 -write_aux_control_params: -	.word   0x1, 0x72  l2_inv_gp:  	/* Execute smi to invalidate L2 cache */  	mov r12, #0x1                         @ set up to invalide L2  smi:    .word 0xE1600070		@ Call SMI monitor (smieq)  	/* Write to Aux control register to set some bits */ -	mov	r0, #0x72 +	ldr	r4, scratchpad_base +	ldr	r3, [r4,#0xBC] +	ldr	r0, [r3,#4]  	mov	r12, #0x3  	.word 0xE1600070	@ Call SMI monitor (smieq)  logic_l1_restore: @@ -271,6 +272,7 @@ logic_l1_restore:  	ldr	r4, scratchpad_base  	ldr	r3, [r4,#0xBC] +	adds	r3, r3, #8  	ldmia	r3!, {r4-r6}  	mov	sp, r4  	msr	spsr_cxsf, r5 @@ -387,6 +389,9 @@ usettbr0:  save_context_wfi:  	/*b	save_context_wfi*/	@ enable to debug save code  	mov	r8, r0 /* Store SDRAM address in r8 */ +	mrc	p15, 0, r5, c1, c0, 1	@ Read Auxiliary Control Register +	mov	r4, #0x1		@ Number of parameters for restore call +	stmia	r8!, {r4-r5}          /* Check what that target sleep state is:stored in r1*/          /* 1 - Only L1 and logic lost */          /* 2 - Only L2 lost */ diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c index b31ca4cef36..8f159db4d08 100644 --- a/arch/arm/mach-orion5x/dns323-setup.c +++ b/arch/arm/mach-orion5x/dns323-setup.c @@ -12,6 +12,7 @@  #include <linux/kernel.h>  #include <linux/init.h> +#include <linux/delay.h>  #include <linux/platform_device.h>  #include <linux/pci.h>  #include <linux/irq.h> @@ -32,6 +33,7 @@  #define DNS323_GPIO_LED_RIGHT_AMBER	1  #define DNS323_GPIO_LED_LEFT_AMBER	2 +#define DNS323_GPIO_SYSTEM_UP		3  #define DNS323_GPIO_LED_POWER		5  #define DNS323_GPIO_OVERTEMP		6  #define DNS323_GPIO_RTC			7 @@ -239,7 +241,7 @@ static struct gpio_led dns323_leds[] = {  	{  		.name = "power:blue",  		.gpio = DNS323_GPIO_LED_POWER, -		.active_low = 1, +		.default_state = LEDS_GPIO_DEFSTATE_ON,  	}, {  		.name = "right:amber",  		.gpio = DNS323_GPIO_LED_RIGHT_AMBER, @@ -334,7 +336,7 @@ static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = {  	{  0, MPP_UNUSED },  	{  1, MPP_GPIO },		/* right amber LED (sata ch0) */  	{  2, MPP_GPIO },		/* left amber LED (sata ch1) */ -	{  3, MPP_UNUSED }, +	{  3, MPP_GPIO },		/* system up flag */  	{  4, MPP_GPIO },		/* power button LED */  	{  5, MPP_GPIO },		/* power button LED */  	{  6, MPP_GPIO },		/* GMT G751-2f overtemp */ @@ -372,13 +374,23 @@ static struct i2c_board_info __initdata dns323_i2c_devices[] = {  	},  }; -/* DNS-323 specific power off method */ -static void dns323_power_off(void) +/* DNS-323 rev. A specific power off method */ +static void dns323a_power_off(void)  {  	pr_info("%s: triggering power-off...\n", __func__);  	gpio_set_value(DNS323_GPIO_POWER_OFF, 1);  } +/* DNS-323 rev B specific power off method */ +static void dns323b_power_off(void) +{ +	pr_info("%s: triggering power-off...\n", __func__); +	/* Pin has to be changed to 1 and back to 0 to do actual power off. */ +	gpio_set_value(DNS323_GPIO_POWER_OFF, 1); +	mdelay(100); +	gpio_set_value(DNS323_GPIO_POWER_OFF, 0); +} +  static void __init dns323_init(void)  {  	/* Setup basic Orion functions. Need to be called early. */ @@ -424,11 +436,20 @@ static void __init dns323_init(void)  	if (dns323_dev_id() == MV88F5182_DEV_ID)  		orion5x_sata_init(&dns323_sata_data); -	/* register dns323 specific power-off method */ +	/* The 5182 has flag to indicate the system is up. Without this flag +	 * set, power LED will flash and cannot be controlled via leds-gpio. +	 */ +	if (dns323_dev_id() == MV88F5182_DEV_ID) +		gpio_set_value(DNS323_GPIO_SYSTEM_UP, 1); + +	/* Register dns323 specific power-off method */  	if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||  	    gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)  		pr_err("DNS323: failed to setup power-off GPIO\n"); -	pm_power_off = dns323_power_off; +	if (dns323_dev_id() == MV88F5182_DEV_ID) +		pm_power_off = dns323b_power_off; +	else +		pm_power_off = dns323a_power_off;  }  /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ diff --git a/arch/arm/mach-orion5x/wrt350n-v2-setup.c b/arch/arm/mach-orion5x/wrt350n-v2-setup.c index 1b4ad9d5e2e..cb0feca193d 100644 --- a/arch/arm/mach-orion5x/wrt350n-v2-setup.c +++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c @@ -15,6 +15,9 @@  #include <linux/mtd/physmap.h>  #include <linux/mv643xx_eth.h>  #include <linux/ethtool.h> +#include <linux/leds.h> +#include <linux/gpio_keys.h> +#include <linux/input.h>  #include <net/dsa.h>  #include <asm/mach-types.h>  #include <asm/gpio.h> @@ -24,6 +27,80 @@  #include "common.h"  #include "mpp.h" +/* + * LEDs attached to GPIO + */ +static struct gpio_led wrt350n_v2_led_pins[] = { +	{ +		.name		= "wrt350nv2:green:power", +		.gpio		= 0, +		.active_low	= 1, +	}, { +		.name		= "wrt350nv2:green:security", +		.gpio		= 1, +		.active_low	= 1, +	}, { +		.name		= "wrt350nv2:orange:power", +		.gpio		= 5, +		.active_low	= 1, +	}, { +		.name		= "wrt350nv2:green:usb", +		.gpio		= 6, +		.active_low	= 1, +	}, { +		.name		= "wrt350nv2:green:wireless", +		.gpio		= 7, +		.active_low	= 1, +	}, +}; + +static struct gpio_led_platform_data wrt350n_v2_led_data = { +	.leds		= wrt350n_v2_led_pins, +	.num_leds	= ARRAY_SIZE(wrt350n_v2_led_pins), +}; + +static struct platform_device wrt350n_v2_leds = { +	.name	= "leds-gpio", +	.id	= -1, +	.dev	= { +		.platform_data	= &wrt350n_v2_led_data, +	}, +}; + +/* + * Buttons attached to GPIO + */ +static struct gpio_keys_button wrt350n_v2_buttons[] = { +	{ +		.code		= KEY_RESTART, +		.gpio		= 3, +		.desc		= "Reset Button", +		.active_low	= 1, +	}, { +		.code		= KEY_WLAN, +		.gpio		= 2, +		.desc		= "WPS Button", +		.active_low	= 1, +	}, +}; + +static struct gpio_keys_platform_data wrt350n_v2_button_data = { +	.buttons	= wrt350n_v2_buttons, +	.nbuttons	= ARRAY_SIZE(wrt350n_v2_buttons), +}; + +static struct platform_device wrt350n_v2_button_device = { +	.name		= "gpio-keys", +	.id		= -1, +	.num_resources	= 0, +	.dev		= { +		.platform_data	= &wrt350n_v2_button_data, +	}, +}; + +/* + * General setup + */  static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = {  	{  0, MPP_GPIO },		/* Power LED green (0=on) */  	{  1, MPP_GPIO },		/* Security LED (0=on) */ @@ -140,6 +217,8 @@ static void __init wrt350n_v2_init(void)  	orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE,  				   WRT350N_V2_NOR_BOOT_SIZE);  	platform_device_register(&wrt350n_v2_nor_flash); +	platform_device_register(&wrt350n_v2_leds); +	platform_device_register(&wrt350n_v2_button_device);  }  static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 74446cf8ae6..da3156d8690 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c @@ -457,6 +457,7 @@ static struct pxaficp_platform_data corgi_ficp_platform_data = {   * USB Device Controller   */  static struct pxa2xx_udc_mach_info udc_info __initdata = { +	.gpio_vbus		= -1,  	/* no connect GPIO; corgi can't tell connection status */  	.gpio_pullup		= CORGI_GPIO_USB_PULLUP,  }; diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa25x.h b/arch/arm/mach-pxa/include/mach/mfp-pxa25x.h index b13dc0269a6..9c787855cf2 100644 --- a/arch/arm/mach-pxa/include/mach/mfp-pxa25x.h +++ b/arch/arm/mach-pxa/include/mach/mfp-pxa25x.h @@ -169,7 +169,6 @@  #define GPIO86_nSDCS2		MFP_CFG_OUT(GPIO86, AF0, DRIVE_HIGH)  #define GPIO87_nSDCS3		MFP_CFG_OUT(GPIO87, AF0, DRIVE_HIGH)  #define GPIO88_RDnWR		MFP_CFG_OUT(GPIO88, AF0, DRIVE_HIGH) -#define GPIO89_nACRESET		MFP_CFG_OUT(GPIO89, AF0, DRIVE_HIGH)  /* USB */  #define GPIO9_USB_RCV		MFP_CFG_IN(GPIO9, AF1) @@ -186,6 +185,9 @@  #define GPIO30_ASSP_TXD		MFP_CFG_OUT(GPIO30, AF3, DRIVE_LOW)  #define GPIO31_ASSP_SFRM_IN	MFP_CFG_IN(GPIO31, AF1)  #define GPIO31_ASSP_SFRM_OUT	MFP_CFG_OUT(GPIO31, AF3, DRIVE_LOW) -#endif + +/* AC97 */ +#define GPIO89_AC97_nRESET	MFP_CFG_OUT(GPIO89, AF0, DRIVE_HIGH) +#endif	/* CONFIG_CPU_PXA26x */  #endif /* __ASM_ARCH_MFP_PXA25X_H */ diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index 6112af431fa..1beb40f692f 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -164,8 +164,11 @@ static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state)  		saved_icmr[i] = _ICMR(irq);  		_ICMR(irq) = 0;  	} -	for (i = 0; i < pxa_internal_irq_nr; i++) -		saved_ipr[i] = IPR(i); + +	if (cpu_is_pxa27x() || cpu_is_pxa3xx()) { +		for (i = 0; i < pxa_internal_irq_nr; i++) +			saved_ipr[i] = IPR(i); +	}  	return 0;  } @@ -174,12 +177,15 @@ static int pxa_irq_resume(struct sys_device *dev)  {  	int i, irq = PXA_IRQ(0); +	if (cpu_is_pxa27x() || cpu_is_pxa3xx()) { +		for (i = 0; i < pxa_internal_irq_nr; i++) +			IPR(i) = saved_ipr[i]; +	} +  	for (i = 0; irq < PXA_IRQ(pxa_internal_irq_nr); i++, irq += 32) {  		_ICMR(irq) = saved_icmr[i];  		_ICLR(irq) = 0;  	} -	for (i = 0; i < pxa_internal_irq_nr; i++) -		IPR(i) = saved_ipr[i];  	ICCR = 1;  	return 0; diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index a21a4b395f7..d94857eb069 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c @@ -334,8 +334,8 @@ static void realview_pbx_reset(char mode)  	 * in the system FPGA  	 */  	__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl); -	__raw_writel(0x0000, reset_ctrl); -	__raw_writel(0x0004, reset_ctrl); +	__raw_writel(0x00F0, reset_ctrl); +	__raw_writel(0x00F4, reset_ctrl);  }  static void __init realview_pbx_init(void) diff --git a/arch/arm/mach-s3c6410/mach-hmt.c b/arch/arm/mach-s3c6410/mach-hmt.c index cdd4b537855..7619456f2ae 100644 --- a/arch/arm/mach-s3c6410/mach-hmt.c +++ b/arch/arm/mach-s3c6410/mach-hmt.c @@ -82,7 +82,7 @@ static int hmt_bl_init(struct device *dev)  	return ret;  } -static int hmt_bl_notify(int brightness) +static int hmt_bl_notify(struct device *dev, int brightness)  {  	/*  	 * translate from CIELUV/CIELAB L*->brightness, E.G. from diff --git a/arch/arm/mm/proc-arm6_7.S b/arch/arm/mm/proc-arm6_7.S index 3f9cd3d8f6d..795dc615f43 100644 --- a/arch/arm/mm/proc-arm6_7.S +++ b/arch/arm/mm/proc-arm6_7.S @@ -41,7 +41,7 @@ ENTRY(cpu_arm7_dcache_clean_area)  ENTRY(cpu_arm7_data_abort)  	mrc	p15, 0, r1, c5, c0, 0		@ get FSR  	mrc	p15, 0, r0, c6, c0, 0		@ get FAR -	ldr	r8, [r0]			@ read arm instruction +	ldr	r8, [r2]			@ read arm instruction  	tst	r8, #1 << 20			@ L = 0 -> write?  	orreq	r1, r1, #1 << 11		@ yes.  	and	r7, r8, #15 << 24 diff --git a/arch/arm/plat-mxc/audmux-v2.c b/arch/arm/plat-mxc/audmux-v2.c index 6f21096086f..b06954a8443 100644 --- a/arch/arm/plat-mxc/audmux-v2.c +++ b/arch/arm/plat-mxc/audmux-v2.c @@ -23,6 +23,7 @@  #include <linux/err.h>  #include <linux/io.h>  #include <linux/clk.h> +#include <linux/debugfs.h>  #include <mach/audmux.h>  #include <mach/hardware.h> @@ -32,6 +33,140 @@ static void __iomem *audmux_base;  #define MXC_AUDMUX_V2_PTCR(x)		((x) * 8)  #define MXC_AUDMUX_V2_PDCR(x)		((x) * 8 + 4) +#ifdef CONFIG_DEBUG_FS +static struct dentry *audmux_debugfs_root; + +static int audmux_open_file(struct inode *inode, struct file *file) +{ +	file->private_data = inode->i_private; +	return 0; +} + +/* There is an annoying discontinuity in the SSI numbering with regard + * to the Linux number of the devices */ +static const char *audmux_port_string(int port) +{ +	switch (port) { +	case MX31_AUDMUX_PORT1_SSI0: +		return "imx-ssi.0"; +	case MX31_AUDMUX_PORT2_SSI1: +		return "imx-ssi.1"; +	case MX31_AUDMUX_PORT3_SSI_PINS_3: +		return "SSI3"; +	case MX31_AUDMUX_PORT4_SSI_PINS_4: +		return "SSI4"; +	case MX31_AUDMUX_PORT5_SSI_PINS_5: +		return "SSI5"; +	case MX31_AUDMUX_PORT6_SSI_PINS_6: +		return "SSI6"; +	default: +		return "UNKNOWN"; +	} +} + +static ssize_t audmux_read_file(struct file *file, char __user *user_buf, +				size_t count, loff_t *ppos) +{ +	ssize_t ret; +	char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); +	int port = (int)file->private_data; +	u32 pdcr, ptcr; + +	if (!buf) +		return -ENOMEM; + +	if (audmux_clk) +		clk_enable(audmux_clk); + +	ptcr = readl(audmux_base + MXC_AUDMUX_V2_PTCR(port)); +	pdcr = readl(audmux_base + MXC_AUDMUX_V2_PDCR(port)); + +	if (audmux_clk) +		clk_disable(audmux_clk); + +	ret = snprintf(buf, PAGE_SIZE, "PDCR: %08x\nPTCR: %08x\n", +		       pdcr, ptcr); + +	if (ptcr & MXC_AUDMUX_V2_PTCR_TFSDIR) +		ret += snprintf(buf + ret, PAGE_SIZE - ret, +				"TxFS output from %s, ", +				audmux_port_string((ptcr >> 27) & 0x7)); +	else +		ret += snprintf(buf + ret, PAGE_SIZE - ret, +				"TxFS input, "); + +	if (ptcr & MXC_AUDMUX_V2_PTCR_TCLKDIR) +		ret += snprintf(buf + ret, PAGE_SIZE - ret, +				"TxClk output from %s", +				audmux_port_string((ptcr >> 22) & 0x7)); +	else +		ret += snprintf(buf + ret, PAGE_SIZE - ret, +				"TxClk input"); + +	ret += snprintf(buf + ret, PAGE_SIZE - ret, "\n"); + +	if (ptcr & MXC_AUDMUX_V2_PTCR_SYN) { +		ret += snprintf(buf + ret, PAGE_SIZE - ret, +				"Port is symmetric"); +	} else { +		if (ptcr & MXC_AUDMUX_V2_PTCR_RFSDIR) +			ret += snprintf(buf + ret, PAGE_SIZE - ret, +					"RxFS output from %s, ", +					audmux_port_string((ptcr >> 17) & 0x7)); +		else +			ret += snprintf(buf + ret, PAGE_SIZE - ret, +					"RxFS input, "); + +		if (ptcr & MXC_AUDMUX_V2_PTCR_RCLKDIR) +			ret += snprintf(buf + ret, PAGE_SIZE - ret, +					"RxClk output from %s", +					audmux_port_string((ptcr >> 12) & 0x7)); +		else +			ret += snprintf(buf + ret, PAGE_SIZE - ret, +					"RxClk input"); +	} + +	ret += snprintf(buf + ret, PAGE_SIZE - ret, +			"\nData received from %s\n", +			audmux_port_string((pdcr >> 13) & 0x7)); + +	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); + +	kfree(buf); + +	return ret; +} + +static const struct file_operations audmux_debugfs_fops = { +	.open = audmux_open_file, +	.read = audmux_read_file, +}; + +static void audmux_debugfs_init(void) +{ +	int i; +	char buf[20]; + +	audmux_debugfs_root = debugfs_create_dir("audmux", NULL); +	if (!audmux_debugfs_root) { +		pr_warning("Failed to create AUDMUX debugfs root\n"); +		return; +	} + +	for (i = 1; i < 8; i++) { +		snprintf(buf, sizeof(buf), "ssi%d", i); +		if (!debugfs_create_file(buf, 0444, audmux_debugfs_root, +					 (void *)i, &audmux_debugfs_fops)) +			pr_warning("Failed to create AUDMUX port %d debugfs file\n", +				   i); +	} +} +#else +static inline void audmux_debugfs_init(void) +{ +} +#endif +  int mxc_audmux_v2_configure_port(unsigned int port, unsigned int ptcr,  		unsigned int pdcr)  { @@ -68,6 +203,8 @@ static int mxc_audmux_v2_init(void)  	if (cpu_is_mx31() || cpu_is_mx35())  		audmux_base = IO_ADDRESS(AUDMUX_BASE_ADDR); +	audmux_debugfs_init(); +  	return 0;  } diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lite.h b/arch/arm/plat-mxc/include/mach/board-mx31lite.h index 0184b638c26..2b2da036757 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31lite.h +++ b/arch/arm/plat-mxc/include/mach/board-mx31lite.h @@ -25,7 +25,7 @@  #ifndef __ASSEMBLY__ -enum mx31lilly_boards { +enum mx31lite_boards {  	MX31LITE_NOBOARD	= 0,  	MX31LITE_DB		= 1,  }; diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h index 286cb9b0a25..4bf1068ffad 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/plat-mxc/include/mach/common.h @@ -32,7 +32,7 @@ extern void mxc91231_init_irq(void);  extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int);  extern int mx1_clocks_init(unsigned long fref);  extern int mx21_clocks_init(unsigned long lref, unsigned long fref); -extern int mx25_clocks_init(unsigned long fref); +extern int mx25_clocks_init(void);  extern int mx27_clocks_init(unsigned long fref);  extern int mx31_clocks_init(unsigned long fref);  extern int mx35_clocks_init(void); diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx35.h b/arch/arm/plat-mxc/include/mach/iomux-mx35.h index 00b0ac1db22..c88d40795f7 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx35.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx35.h @@ -671,7 +671,7 @@  #define MX35_PAD_LD8__SDMA_SDMA_DEBUG_PC_8			IOMUX_PAD(0x634, 0x1d0, 6, 0x0,   0, NO_PAD_CTRL)  #define MX35_PAD_LD9__IPU_DISPB_DAT_9				IOMUX_PAD(0x638, 0x1d4, 0, 0x0,   0, NO_PAD_CTRL) -#define MX35_PAD_LD9__GPIO2_9					IOMUX_PAD(0x638, 0x1d4, 5, 0x8e4  0, NO_PAD_CTRL) +#define MX35_PAD_LD9__GPIO2_9					IOMUX_PAD(0x638, 0x1d4, 5, 0x8e4, 0, NO_PAD_CTRL)  #define MX35_PAD_LD9__SDMA_SDMA_DEBUG_PC_9			IOMUX_PAD(0x638, 0x1d4, 6, 0x0,   0, NO_PAD_CTRL)  #define MX35_PAD_LD10__IPU_DISPB_DAT_10				IOMUX_PAD(0x63c, 0x1d8, 0, 0x0,   0, NO_PAD_CTRL) diff --git a/arch/arm/plat-mxc/include/mach/irqs.h b/arch/arm/plat-mxc/include/mach/irqs.h index ead9d592168..0cb347645db 100644 --- a/arch/arm/plat-mxc/include/mach/irqs.h +++ b/arch/arm/plat-mxc/include/mach/irqs.h @@ -37,7 +37,12 @@   * within sensible limits.   */  #define MXC_BOARD_IRQ_START	(MXC_INTERNAL_IRQS + MXC_GPIO_IRQS) + +#ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 +#define MXC_BOARD_IRQS  80 +#else  #define MXC_BOARD_IRQS	16 +#endif  #define MXC_IPU_IRQ_START	(MXC_BOARD_IRQ_START + MXC_BOARD_IRQS) diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index d9f8c844c38..4becbdd1935 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c @@ -391,7 +391,7 @@ static struct dentry *clk_debugfs_root;  static int clk_debugfs_register_one(struct clk *c)  {  	int err; -	struct dentry *d, *child; +	struct dentry *d, *child, *child_tmp;  	struct clk *pa = c->parent;  	char s[255];  	char *p = s; @@ -423,7 +423,7 @@ static int clk_debugfs_register_one(struct clk *c)  err_out:  	d = c->dent; -	list_for_each_entry(child, &d->d_subdirs, d_u.d_child) +	list_for_each_entry_safe(child, child_tmp, &d->d_subdirs, d_u.d_child)  		debugfs_remove(child);  	debugfs_remove(c->dent);  	return err; diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index bf1eaf3a27d..dddc0273bc8 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c @@ -172,6 +172,32 @@ unsigned long long sched_clock(void)  				  clocksource_32k.mult, clocksource_32k.shift);  } +/** + * read_persistent_clock -  Return time from a persistent clock. + * + * Reads the time from a source which isn't disabled during PM, the + * 32k sync timer.  Convert the cycles elapsed since last read into + * nsecs and adds to a monotonically increasing timespec. + */ +static struct timespec persistent_ts; +static cycles_t cycles, last_cycles; +void read_persistent_clock(struct timespec *ts) +{ +	unsigned long long nsecs; +	cycles_t delta; +	struct timespec *tsp = &persistent_ts; + +	last_cycles = cycles; +	cycles = clocksource_32k.read(&clocksource_32k); +	delta = cycles - last_cycles; + +	nsecs = clocksource_cyc2ns(delta, +				   clocksource_32k.mult, clocksource_32k.shift); + +	timespec_add_ns(tsp, nsecs); +	*ts = *tsp; +} +  static int __init omap_init_clocksource_32k(void)  {  	static char err[] __initdata = KERN_ERR diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 09d82b3c66c..728c6420418 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -1183,7 +1183,7 @@ void omap_dma_unlink_lch(int lch_head, int lch_queue)  	}  	if ((dma_chan[lch_head].flags & OMAP_DMA_ACTIVE) || -	    (dma_chan[lch_head].flags & OMAP_DMA_ACTIVE)) { +	    (dma_chan[lch_queue].flags & OMAP_DMA_ACTIVE)) {  		printk(KERN_ERR "omap_dma: You need to stop the DMA channels "  		       "before unlinking\n");  		dump_stack(); diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 64f407ee0f4..08ccf892252 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c @@ -551,6 +551,19 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer)  	if (l & OMAP_TIMER_CTRL_ST) {  		l &= ~0x1;  		omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l); +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \ +			defined(CONFIG_ARCH_OMAP4) +		/* Readback to make sure write has completed */ +		omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG); +		 /* +		  * Wait for functional clock period x 3.5 to make sure that +		  * timer is stopped +		  */ +		udelay(3500000 / clk_get_rate(timer->fclk) + 1); +		/* Ack possibly pending interrupt */ +		omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG, +				OMAP_TIMER_INT_OVERFLOW); +#endif  	}  }  EXPORT_SYMBOL_GPL(omap_dm_timer_stop); diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index d17620c50c2..d2422c766cc 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -750,6 +750,7 @@ static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio,  }  #endif +#ifdef CONFIG_ARCH_OMAP1  /*   * This only applies to chips that can't do both rising and falling edge   * detection at once.  For all other chips, this function is a noop. @@ -760,11 +761,9 @@ static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)  	u32 l = 0;  	switch (bank->method) { -#ifdef CONFIG_ARCH_OMAP1  	case METHOD_MPUIO:  		reg += OMAP_MPUIO_GPIO_INT_EDGE;  		break; -#endif  #ifdef CONFIG_ARCH_OMAP15XX  	case METHOD_GPIO_1510:  		reg += OMAP1510_GPIO_INT_CONTROL; @@ -787,6 +786,7 @@ static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)  	__raw_writel(l, reg);  } +#endif  static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)  { diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 9a028bdebb0..a162f585b1e 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h @@ -434,6 +434,7 @@ IS_OMAP_TYPE(3517, 0x3517)  #define OMAP3430_REV_ES2_1	0x34302034  #define OMAP3430_REV_ES3_0	0x34303034  #define OMAP3430_REV_ES3_1	0x34304034 +#define OMAP3430_REV_ES3_1_2	0x34305034  #define OMAP3630_REV_ES1_0	0x36300034 diff --git a/arch/arm/plat-omap/include/plat/irqs.h b/arch/arm/plat-omap/include/plat/irqs.h index 97d6c50c3dc..c0ab7c80f72 100644 --- a/arch/arm/plat-omap/include/plat/irqs.h +++ b/arch/arm/plat-omap/include/plat/irqs.h @@ -499,6 +499,9 @@ extern void omap_init_irq(void);  extern int omap_irq_pending(void);  void omap_intc_save_context(void);  void omap_intc_restore_context(void); +void omap3_intc_suspend(void); +void omap3_intc_prepare_idle(void); +void omap3_intc_resume_idle(void);  #endif  #include <mach/hardware.h> diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 007935a921e..33933256a22 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h @@ -227,6 +227,7 @@ struct omap_hwmod_ocp_if {  #define SYSC_HAS_SIDLEMODE	(1 << 5)  #define SYSC_HAS_MIDLEMODE	(1 << 6)  #define SYSS_MISSING		(1 << 7) +#define SYSC_NO_CACHE		(1 << 8)  /* XXX SW flag, belongs elsewhere */  /* omap_hwmod_sysconfig.clockact flags */  #define CLOCKACT_TEST_BOTH	0x0 diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 1e5648d3e3d..2ed72013c2e 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -89,16 +89,6 @@  #define USE_WAKEUP_LAT			0  #define IGNORE_WAKEUP_LAT		1 -/* XXX this should be moved into a separate file */ -#if defined(CONFIG_ARCH_OMAP2420) -# define OMAP_32KSYNCT_BASE		0x48004000 -#elif defined(CONFIG_ARCH_OMAP2430) -# define OMAP_32KSYNCT_BASE		0x49020000 -#elif defined(CONFIG_ARCH_OMAP3430) -# define OMAP_32KSYNCT_BASE		0x48320000 -#else -# error Unknown OMAP device -#endif  /* Private functions */ diff --git a/arch/arm/plat-orion/pcie.c b/arch/arm/plat-orion/pcie.c index d41d41d78ad..54c84a492a0 100644 --- a/arch/arm/plat-orion/pcie.c +++ b/arch/arm/plat-orion/pcie.c @@ -133,6 +133,12 @@ static void __init orion_pcie_setup_wins(void __iomem *base,  	}  	/* +	 * Round up 'size' to the nearest power of two. +	 */ +	if ((size & (size - 1)) != 0) +		size = 1 << fls(size); + +	/*  	 * Setup BAR[1] to all DRAM banks.  	 */  	writel(dram->cs[0].base, base + PCIE_BAR_LO_OFF(1)); diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index c3a74ce24ef..5a79fc6ee81 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types @@ -12,7 +12,7 @@  #  #   http://www.arm.linux.org.uk/developer/machines/?action=new  # -# Last update: Wed Dec 16 20:06:34 2009 +# Last update: Thu Jan 28 22:15:54 2010  #  # machine_is_xxx	CONFIG_xxxx		MACH_TYPE_xxx		number  # @@ -2536,6 +2536,7 @@ davinci_dm6467tevm	MACH_DAVINCI_DM6467TEVM	DAVINCI_DM6467TEVM	2548  c3ax03			MACH_C3AX03		C3AX03			2549  mxt_td60		MACH_MXT_TD60		MXT_TD60		2550  esyx			MACH_ESYX		ESYX			2551 +dove_db2		MACH_DOVE_DB2		DOVE_DB2		2552  bulldog			MACH_BULLDOG		BULLDOG			2553  derell_me2000		MACH_DERELL_ME2000	DERELL_ME2000		2554  bcmring_base		MACH_BCMRING_BASE	BCMRING_BASE		2555 @@ -2555,6 +2556,7 @@ iseo			MACH_ISEO		ISEO			2568  cezanne			MACH_CEZANNE		CEZANNE			2569  lucca			MACH_LUCCA		LUCCA			2570  supersmart		MACH_SUPERSMART		SUPERSMART		2571 +arm11_board		MACH_CS_MISANO		CS_MISANO		2572  magnolia2		MACH_MAGNOLIA2		MAGNOLIA2		2573  emxx			MACH_EMXX		EMXX			2574  outlaw			MACH_OUTLAW		OUTLAW			2575 @@ -2578,3 +2580,59 @@ glacier			MACH_GLACIER		GLACIER			2592  phrazer_bulldog		MACH_PHRAZER_BULLDOG	PHRAZER_BULLDOG		2593  omap3_bulldog		MACH_OMAP3_BULLDOG	OMAP3_BULLDOG		2594  pca101			MACH_PCA101		PCA101			2595 +buzzc			MACH_BUZZC		BUZZC			2596 +sasie2			MACH_SASIE2		SASIE2			2597 +davinci_cio		MACH_DAVINCI_CIO	DAVINCI_CIO		2598 +smartmeter_dl		MACH_SMARTMETER_DL	SMARTMETER_DL		2599 +wzl6410			MACH_WZL6410		WZL6410			2600 +wzl6410m		MACH_WZL6410M		WZL6410M		2601 +wzl6410f		MACH_WZL6410F		WZL6410F		2602 +wzl6410i		MACH_WZL6410I		WZL6410I		2603 +spacecom1		MACH_SPACECOM1		SPACECOM1		2604 +pingu920		MACH_PINGU920		PINGU920		2605 +bravoc			MACH_BRAVOC		BRAVOC			2606 +cybo2440		MACH_CYBO2440		CYBO2440		2607 +vdssw			MACH_VDSSW		VDSSW			2608 +romulus			MACH_ROMULUS		ROMULUS			2609 +omap_magic		MACH_OMAP_MAGIC		OMAP_MAGIC		2610 +eltd100			MACH_ELTD100		ELTD100			2611 +capc7117		MACH_CAPC7117		CAPC7117		2612 +swan			MACH_SWAN		SWAN			2613 +veu			MACH_VEU		VEU			2614 +rm2			MACH_RM2		RM2			2615 +tt2100			MACH_TT2100		TT2100			2616 +venice			MACH_VENICE		VENICE			2617 +pc7323			MACH_PC7323		PC7323			2618 +masp			MACH_MASP		MASP			2619 +fujitsu_tvstbsoc0	MACH_FUJITSU_TVSTBSOC	FUJITSU_TVSTBSOC	2620 +fujitsu_tvstbsoc1	MACH_FUJITSU_TVSTBSOC1	FUJITSU_TVSTBSOC1	2621 +lexikon			MACH_LEXIKON		LEXIKON			2622 +mini2440v2		MACH_MINI2440V2		MINI2440V2		2623 +icontrol		MACH_ICONTROL		ICONTROL		2624 +sheevad			MACH_SHEEVAD		SHEEVAD			2625 +qsd8x50a_st1_1		MACH_QSD8X50A_ST1_1	QSD8X50A_ST1_1		2626 +qsd8x50a_st1_5		MACH_QSD8X50A_ST1_5	QSD8X50A_ST1_5		2627 +bee			MACH_BEE		BEE			2628 +mx23evk			MACH_MX23EVK		MX23EVK			2629 +ap4evb			MACH_AP4EVB		AP4EVB			2630 +stockholm		MACH_STOCKHOLM		STOCKHOLM		2631 +lpc_h3131		MACH_LPC_H3131		LPC_H3131		2632 +stingray		MACH_STINGRAY		STINGRAY		2633 +kraken			MACH_KRAKEN		KRAKEN			2634 +gw2388			MACH_GW2388		GW2388			2635 +jadecpu			MACH_JADECPU		JADECPU			2636 +carlisle		MACH_CARLISLE		CARLISLE		2637 +lux_sf9			MACH_LUX_SFT9		LUX_SFT9		2638 +nemid_tb		MACH_NEMID_TB		NEMID_TB		2639 +terrier			MACH_TERRIER		TERRIER			2640 +turbot			MACH_TURBOT		TURBOT			2641 +sanddab			MACH_SANDDAB		SANDDAB			2642 +mx35_cicada		MACH_MX35_CICADA	MX35_CICADA		2643 +ghi2703d		MACH_GHI2703D		GHI2703D		2644 +lux_sfx9		MACH_LUX_SFX9		LUX_SFX9		2645 +lux_sf9g		MACH_LUX_SF9G		LUX_SF9G		2646 +lux_edk9		MACH_LUX_EDK9		LUX_EDK9		2647 +hw90240			MACH_HW90240		HW90240			2648 +dm365_leopard		MACH_DM365_LEOPARD	DM365_LEOPARD		2649 +mityomapl138		MACH_MITYOMAPL138	MITYOMAPL138		2650 +scat110			MACH_SCAT110		SCAT110			2651 diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index f60a5400a25..a63c4be99b3 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -197,10 +197,13 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_  	}  	/* -	 * Update the FPSCR with the additional exception flags. +	 * If any of the status flags are set, update the FPSCR.  	 * Comparison instructions always return at least one of  	 * these flags set.  	 */ +	if (exceptions & (FPSCR_N|FPSCR_Z|FPSCR_C|FPSCR_V)) +		fpscr &= ~(FPSCR_N|FPSCR_Z|FPSCR_C|FPSCR_V); +  	fpscr |= exceptions;  	fmxr(FPSCR, fpscr); diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 1aa1ea5e921..b13d1879e51 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c @@ -1325,7 +1325,7 @@ struct platform_device *__init  at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  {  	struct platform_device		*pdev; -	struct mci_dma_slave		*slave; +	struct mci_dma_data	        *slave;  	u32				pioa_mask;  	u32				piob_mask; @@ -1344,7 +1344,9 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  				ARRAY_SIZE(atmel_mci0_resource)))  		goto fail; -	slave = kzalloc(sizeof(struct mci_dma_slave), GFP_KERNEL); +	slave = kzalloc(sizeof(struct mci_dma_data), GFP_KERNEL); +	if (!slave) +		goto fail;  	slave->sdata.dma_dev = &dw_dmac0_device.dev;  	slave->sdata.reg_width = DW_DMA_SLAVE_WIDTH_32BIT; @@ -1357,7 +1359,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  	if (platform_device_add_data(pdev, data,  				sizeof(struct mci_platform_data))) -		goto fail; +		goto fail_free;  	/* CLK line is common to both slots */  	pioa_mask = 1 << 10; @@ -1381,7 +1383,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  		/* Slot is unused */  		break;  	default: -		goto fail; +		goto fail_free;  	}  	select_peripheral(PIOA, pioa_mask, PERIPH_A, 0); @@ -1408,7 +1410,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  		break;  	default:  		if (!data->slot[0].bus_width) -			goto fail; +			goto fail_free;  		data->slot[1].bus_width = 0;  		break; @@ -1419,9 +1421,10 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)  	platform_device_add(pdev);  	return pdev; +fail_free: +	kfree(slave);  fail:  	data->dma_slave = NULL; -	kfree(slave);  	platform_device_put(pdev);  	return NULL;  } diff --git a/arch/ia64/include/asm/elf.h b/arch/ia64/include/asm/elf.h index e14108b19c0..4c41656ede8 100644 --- a/arch/ia64/include/asm/elf.h +++ b/arch/ia64/include/asm/elf.h @@ -201,7 +201,9 @@ extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst);     relevant until we have real hardware to play with... */  #define ELF_PLATFORM	NULL -#define SET_PERSONALITY(ex)	set_personality(PER_LINUX) +#define SET_PERSONALITY(ex)	\ +	set_personality((current->personality & ~PER_MASK) | PER_LINUX) +  #define elf_read_implies_exec(ex, executable_stack)					\  	((executable_stack!=EXSTACK_DISABLE_X) && ((ex).e_flags & EF_IA_64_LINUX_EXECUTABLE_STACK) != 0) diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig index bb7c374713a..6fced1fe3bf 100644 --- a/arch/microblaze/configs/mmu_defconfig +++ b/arch/microblaze/configs/mmu_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31 -# Thu Sep 24 10:28:50 2009 +# Linux kernel version: 2.6.33-rc6 +# Wed Feb  3 10:02:59 2010  #  CONFIG_MICROBLAZE=y  # CONFIG_SWAP is not set @@ -19,8 +19,12 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_CSUM=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y  # CONFIG_PCI is not set  CONFIG_NO_DMA=y +CONFIG_DTC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -44,6 +48,7 @@ CONFIG_SYSVIPC_SYSCTL=y  #  CONFIG_TREE_RCU=y  # CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set  # CONFIG_RCU_TRACE is not set  CONFIG_RCU_FANOUT=32  # CONFIG_RCU_FANOUT_EXACT is not set @@ -64,10 +69,12 @@ CONFIG_INITRAMFS_ROOT_GID=0  CONFIG_RD_GZIP=y  # CONFIG_RD_BZIP2 is not set  # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set  # CONFIG_INITRAMFS_COMPRESSION_NONE is not set  CONFIG_INITRAMFS_COMPRESSION_GZIP=y  # CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set  # CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +# CONFIG_INITRAMFS_COMPRESSION_LZO is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y  CONFIG_ANON_INODES=y @@ -90,21 +97,20 @@ CONFIG_EVENTFD=y  CONFIG_AIO=y  # -# Performance Counters +# Kernel Performance Events And Counters  #  CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set +CONFIG_HAVE_OPROFILE=y  #  # GCOV-based kernel profiling  # -# CONFIG_SLOW_WORK is not set +CONFIG_SLOW_WORK=y  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_BASE_SMALL=1 @@ -123,14 +129,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set  # CONFIG_DEFAULT_DEADLINE is not set  CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set  CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # @@ -139,11 +172,6 @@ CONFIG_DEFAULT_IOSCHED="cfq"  CONFIG_PLATFORM_GENERIC=y  CONFIG_OPT_LIB_FUNCTION=y  CONFIG_OPT_LIB_ASM=y -CONFIG_ALLOW_EDIT_AUTO=y - -# -# Automatic platform settings from Kconfig.auto -#  #  # Definitions for MICROBLAZE0 @@ -203,12 +231,11 @@ CONFIG_FLATMEM_MANUAL=y  CONFIG_FLATMEM=y  CONFIG_FLAT_NODE_MEM_MAP=y  CONFIG_PAGEFLAGS_EXTENDED=y -CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SPLIT_PTLOCK_CPUS=999999  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0  CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  # @@ -289,7 +316,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -313,6 +346,10 @@ CONFIG_OF_DEVICE=y  CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +#  # CONFIG_BLK_DEV_NBD is not set  CONFIG_BLK_DEV_RAM=y  CONFIG_BLK_DEV_RAM_COUNT=16 @@ -349,7 +386,6 @@ CONFIG_NETDEVICES=y  # CONFIG_PHYLIB is not set  CONFIG_NET_ETHERNET=y  # CONFIG_MII is not set -# CONFIG_ETHOC is not set  # CONFIG_DNET is not set  # CONFIG_IBM_NEW_EMAC_ZMII is not set  # CONFIG_IBM_NEW_EMAC_RGMII is not set @@ -359,12 +395,12 @@ CONFIG_NET_ETHERNET=y  # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  CONFIG_XILINX_EMACLITE=y  CONFIG_NETDEV_1000=y  CONFIG_NETDEV_10000=y  CONFIG_WLAN=y -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -408,6 +444,7 @@ CONFIG_SERIAL_UARTLITE=y  CONFIG_SERIAL_UARTLITE_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -433,7 +470,6 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  # @@ -526,8 +562,6 @@ CONFIG_PROC_FS=y  CONFIG_PROC_SYSCTL=y  CONFIG_PROC_PAGE_MONITOR=y  CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set  # CONFIG_HUGETLB_PAGE is not set  # CONFIG_CONFIGFS_FS is not set  CONFIG_MISC_FILESYSTEMS=y @@ -638,11 +672,13 @@ CONFIG_NLS_DEFAULT="iso8859-1"  #  # Kernel hacking  # +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  # CONFIG_PRINTK_TIME is not set  CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set @@ -662,6 +698,9 @@ CONFIG_DEBUG_SLAB=y  # CONFIG_DEBUG_SLAB_LEAK is not set  CONFIG_DEBUG_SPINLOCK=y  # CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -680,10 +719,29 @@ CONFIG_DEBUG_INFO=y  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set  # CONFIG_SYSCTL_SYSCALL_CHECK is not set  # CONFIG_PAGE_POISONING is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set +# CONFIG_BOOT_TRACER is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_SAMPLES is not set -# CONFIG_KMEMCHECK is not set  CONFIG_EARLY_PRINTK=y  # CONFIG_HEART_BEAT is not set  CONFIG_DEBUG_BOOTMEM=y @@ -694,7 +752,11 @@ CONFIG_DEBUG_BOOTMEM=y  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  # diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig index adb839bab70..ce2da535246 100644 --- a/arch/microblaze/configs/nommu_defconfig +++ b/arch/microblaze/configs/nommu_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31 -# Thu Sep 24 10:29:43 2009 +# Linux kernel version: 2.6.33-rc6 +# Wed Feb  3 10:03:21 2010  #  CONFIG_MICROBLAZE=y  # CONFIG_SWAP is not set @@ -19,8 +19,12 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_GENERIC_GPIO=y  CONFIG_GENERIC_CSUM=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y  # CONFIG_PCI is not set  CONFIG_NO_DMA=y +CONFIG_DTC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  CONFIG_CONSTRUCTORS=y @@ -46,6 +50,7 @@ CONFIG_BSD_PROCESS_ACCT_V3=y  #  CONFIG_TREE_RCU=y  # CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set  # CONFIG_RCU_TRACE is not set  CONFIG_RCU_FANOUT=32  # CONFIG_RCU_FANOUT_EXACT is not set @@ -81,16 +86,16 @@ CONFIG_EVENTFD=y  CONFIG_AIO=y  # -# Performance Counters +# Kernel Performance Events And Counters  #  CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set +# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set +CONFIG_HAVE_OPROFILE=y  #  # GCOV-based kernel profiling @@ -116,14 +121,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set  # CONFIG_DEFAULT_DEADLINE is not set  CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set  CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # @@ -132,7 +164,10 @@ CONFIG_DEFAULT_IOSCHED="cfq"  CONFIG_PLATFORM_GENERIC=y  # CONFIG_SELFMOD is not set  # CONFIG_OPT_LIB_FUNCTION is not set -# CONFIG_ALLOW_EDIT_AUTO is not set + +# +# Definitions for MICROBLAZE0 +#  CONFIG_KERNEL_BASE_ADDR=0x90000000  CONFIG_XILINX_MICROBLAZE0_FAMILY="virtex5"  CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1 @@ -190,7 +225,6 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=0  CONFIG_VIRT_TO_BUS=y -CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1  # @@ -274,9 +308,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_AF_RXRPC is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_CFG80211_DEFAULT_PS_VALUE=0 -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set  # @@ -301,9 +332,9 @@ CONFIG_STANDALONE=y  # CONFIG_CONNECTOR is not set  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  CONFIG_MTD_CONCAT=y  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  # CONFIG_MTD_OF_PARTS is not set @@ -387,6 +418,10 @@ CONFIG_OF_DEVICE=y  CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +#  CONFIG_BLK_DEV_NBD=y  CONFIG_BLK_DEV_RAM=y  CONFIG_BLK_DEV_RAM_COUNT=16 @@ -423,7 +458,6 @@ CONFIG_NETDEVICES=y  # CONFIG_PHYLIB is not set  CONFIG_NET_ETHERNET=y  # CONFIG_MII is not set -# CONFIG_ETHOC is not set  # CONFIG_DNET is not set  # CONFIG_IBM_NEW_EMAC_ZMII is not set  # CONFIG_IBM_NEW_EMAC_RGMII is not set @@ -433,12 +467,12 @@ CONFIG_NET_ETHERNET=y  # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  CONFIG_NETDEV_10000=y  CONFIG_WLAN=y -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -482,6 +516,7 @@ CONFIG_SERIAL_UARTLITE=y  CONFIG_SERIAL_UARTLITE_CONSOLE=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -508,7 +543,6 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  # @@ -616,7 +650,6 @@ CONFIG_INOTIFY_USER=y  CONFIG_PROC_FS=y  CONFIG_PROC_SYSCTL=y  CONFIG_SYSFS=y -# CONFIG_TMPFS is not set  # CONFIG_HUGETLB_PAGE is not set  # CONFIG_CONFIGFS_FS is not set  CONFIG_MISC_FILESYSTEMS=y @@ -672,11 +705,13 @@ CONFIG_MSDOS_PARTITION=y  #  # Kernel hacking  # +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  # CONFIG_PRINTK_TIME is not set  CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_UNUSED_SYMBOLS=y  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -695,12 +730,16 @@ CONFIG_DEBUG_OBJECTS=y  CONFIG_DEBUG_OBJECTS_SELFTEST=y  CONFIG_DEBUG_OBJECTS_FREE=y  CONFIG_DEBUG_OBJECTS_TIMERS=y +# CONFIG_DEBUG_OBJECTS_WORK is not set  CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1  # CONFIG_DEBUG_SLAB 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -720,8 +759,28 @@ CONFIG_DEBUG_SG=y  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set  # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y  # CONFIG_PAGE_POISONING is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set +# CONFIG_BOOT_TRACER is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_EARLY_PRINTK=y @@ -734,7 +793,11 @@ CONFIG_EARLY_PRINTK=y  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  # diff --git a/arch/microblaze/kernel/entry-nommu.S b/arch/microblaze/kernel/entry-nommu.S index 95b0855802d..391d6197fc3 100644 --- a/arch/microblaze/kernel/entry-nommu.S +++ b/arch/microblaze/kernel/entry-nommu.S @@ -122,7 +122,7 @@ ENTRY(_interrupt)  ret_from_intr:  	lwi	r11, r1, PT_MODE -	bneid	r11, 3f +	bneid	r11, no_intr_resched  	lwi	r6, r31, TS_THREAD_INFO	/* get thread info */  	lwi	r19, r6, TI_FLAGS	/* get flags in thread info */ @@ -133,16 +133,18 @@ ret_from_intr:  	bralid	r15, schedule  	nop  1:	andi	r11, r19, _TIF_SIGPENDING -	beqid	r11, no_intr_reshed +	beqid	r11, no_intr_resched  	addk	r5, r1, r0  	addk	r7, r0, r0  	bralid	r15, do_signal  	addk	r6, r0, r0 -no_intr_reshed: +no_intr_resched: +	/* Disable interrupts, we are now committed to the state restore */ +	disable_irq +  	/* save mode indicator */  	lwi	r11, r1, PT_MODE -3:  	swi	r11, r0, PER_CPU(KM)  	/* save r31 */ diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index 5372b24ad04..bb8c4b9ccb8 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c @@ -54,6 +54,7 @@ void __init setup_arch(char **cmdline_p)  	microblaze_cache_init(); +	invalidate_dcache();  	enable_dcache();  	invalidate_icache(); diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 9541171f122..8b5d174685f 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1311,6 +1311,7 @@ config SYS_SUPPORTS_ZBOOT  	select HAVE_KERNEL_GZIP  	select HAVE_KERNEL_BZIP2  	select HAVE_KERNEL_LZMA +	select HAVE_KERNEL_LZO  config SYS_SUPPORTS_ZBOOT_UART16550  	bool diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/dbdma.c index 5c68569344c..f9201ca2295 100644 --- a/arch/mips/alchemy/common/dbdma.c +++ b/arch/mips/alchemy/common/dbdma.c @@ -412,8 +412,11 @@ u32 au1xxx_dbdma_ring_alloc(u32 chanid, int entries)  		if (desc_base == 0)  			return 0; +		ctp->cdb_membase = desc_base;  		desc_base = ALIGN_ADDR(desc_base, sizeof(au1x_ddma_desc_t)); -	} +	} else +		ctp->cdb_membase = desc_base; +  	dp = (au1x_ddma_desc_t *)desc_base;  	/* Keep track of the base descriptor. */ @@ -831,7 +834,7 @@ void au1xxx_dbdma_chan_free(u32 chanid)  	au1xxx_dbdma_stop(chanid); -	kfree((void *)ctp->chan_desc_base); +	kfree((void *)ctp->cdb_membase);  	stp->dev_flags &= ~DEV_FLAGS_INUSE;  	dtp->dev_flags &= ~DEV_FLAGS_INUSE; diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c index 85169c08d8d..f70a10a8cc9 100644 --- a/arch/mips/ar7/platform.c +++ b/arch/mips/ar7/platform.c @@ -202,7 +202,7 @@ static struct resource usb_res[] = {  		.name = "mem",  		.flags = IORESOURCE_MEM,  		.start = 0x03400000, -		.end = 0x034001fff, +		.end = 0x03401fff,  	},  }; diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile index 671d3448fad..9df903d714d 100644 --- a/arch/mips/boot/compressed/Makefile +++ b/arch/mips/boot/compressed/Makefile @@ -14,8 +14,11 @@  # compressed kernel load addr: VMLINUZ_LOAD_ADDRESS > VMLINUX_LOAD_ADDRESS + VMLINUX_SIZE  VMLINUX_SIZE := $(shell wc -c $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | cut -d' ' -f1) -VMLINUX_SIZE := $(shell [ -n "$(VMLINUX_SIZE)" ] && echo $$(($(VMLINUX_SIZE) + (65536 - $(VMLINUX_SIZE) % 65536)))) -VMLINUZ_LOAD_ADDRESS := 0x$(shell [ -n "$(VMLINUX_SIZE)" ] && printf %x $$(($(VMLINUX_LOAD_ADDRESS) + $(VMLINUX_SIZE)))) +VMLINUX_SIZE := $(shell [ -n "$(VMLINUX_SIZE)" ] && echo -n $$(($(VMLINUX_SIZE) + (65536 - $(VMLINUX_SIZE) % 65536)))) +# VMLINUZ_LOAD_ADDRESS = concat "high32 of VMLINUX_LOAD_ADDRESS" and "(low32 of VMLINUX_LOAD_ADDRESS) + VMLINUX_SIZE" +HIGH32 := $(shell A=$(VMLINUX_LOAD_ADDRESS); [ $${\#A} -gt 10 ] && expr substr "$(VMLINUX_LOAD_ADDRESS)" 3 $$(($${\#A} - 10))) +LOW32 := $(shell [ -n "$(HIGH32)" ] && A=11 || A=3; expr substr "$(VMLINUX_LOAD_ADDRESS)" $${A} 8) +VMLINUZ_LOAD_ADDRESS := 0x$(shell [ -n "$(VMLINUX_SIZE)" -a -n "$(LOW32)" ] && printf "$(HIGH32)%08x" $$(($(VMLINUX_SIZE) + 0x$(LOW32))))  # set the default size of the mallocing area for decompressing  BOOT_HEAP_SIZE := 0x400000 @@ -41,9 +44,11 @@ $(obj)/vmlinux.bin: $(KBUILD_IMAGE)  suffix_$(CONFIG_KERNEL_GZIP)  = gz  suffix_$(CONFIG_KERNEL_BZIP2) = bz2  suffix_$(CONFIG_KERNEL_LZMA)  = lzma +suffix_$(CONFIG_KERNEL_LZO)   = lzo  tool_$(CONFIG_KERNEL_GZIP)    = gzip  tool_$(CONFIG_KERNEL_BZIP2)   = bzip2  tool_$(CONFIG_KERNEL_LZMA)    = lzma +tool_$(CONFIG_KERNEL_LZO)     = lzo  $(obj)/vmlinux.$(suffix_y): $(obj)/vmlinux.bin  	$(call if_changed,$(tool_y)) diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c index e48fd72898a..55d02b3a671 100644 --- a/arch/mips/boot/compressed/decompress.c +++ b/arch/mips/boot/compressed/decompress.c @@ -77,6 +77,10 @@ void *memset(void *s, int c, size_t n)  #include "../../../../lib/decompress_unlzma.c"  #endif +#ifdef CONFIG_KERNEL_LZO +#include "../../../../lib/decompress_unlzo.c" +#endif +  void decompress_kernel(unsigned long boot_heap_start)  {  	int zimage_size; diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig index ed84b4cb3c8..84b6503f10b 100644 --- a/arch/mips/configs/ip27_defconfig +++ b/arch/mips/configs/ip27_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.23-rc2 -# Tue Aug  7 13:04:24 2007 +# Linux kernel version: 2.6.33-rc6 +# Wed Feb  3 18:12:31 2010  #  CONFIG_MIPS=y @@ -9,20 +9,28 @@ CONFIG_MIPS=y  # Machine selection  #  # CONFIG_MACH_ALCHEMY is not set +# CONFIG_AR7 is not set +# CONFIG_BCM47XX is not set +# CONFIG_BCM63XX is not set  # CONFIG_MIPS_COBALT is not set  # CONFIG_MACH_DECSTATION is not set  # CONFIG_MACH_JAZZ is not set -# CONFIG_LEMOTE_FULONG is not set +# CONFIG_LASAT is not set +# CONFIG_MACH_LOONGSON is not set  # CONFIG_MIPS_MALTA is not set  # CONFIG_MIPS_SIM is not set -# CONFIG_MARKEINS is not set +# CONFIG_NEC_MARKEINS is not set  # CONFIG_MACH_VR41XX is not set +# CONFIG_NXP_STB220 is not set +# CONFIG_NXP_STB225 is not set  # CONFIG_PNX8550_JBS is not set  # CONFIG_PNX8550_STB810 is not set  # CONFIG_PMC_MSP is not set  # CONFIG_PMC_YOSEMITE is not set +# CONFIG_POWERTV is not set  # CONFIG_SGI_IP22 is not set  CONFIG_SGI_IP27=y +# CONFIG_SGI_IP28 is not set  # CONFIG_SGI_IP32 is not set  # CONFIG_SIBYTE_CRHINE is not set  # CONFIG_SIBYTE_CARMEL is not set @@ -33,32 +41,39 @@ CONFIG_SGI_IP27=y  # CONFIG_SIBYTE_SENTOSA is not set  # CONFIG_SIBYTE_BIGSUR is not set  # CONFIG_SNI_RM is not set -# CONFIG_TOSHIBA_JMR3927 is not set -# CONFIG_TOSHIBA_RBTX4927 is not set -# CONFIG_TOSHIBA_RBTX4938 is not set +# CONFIG_MACH_TX39XX is not set +# CONFIG_MACH_TX49XX is not set +# CONFIG_MIKROTIK_RB532 is not set  # CONFIG_WR_PPMC is not set +# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set +# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set +# CONFIG_ALCHEMY_GPIO_INDIRECT is not set  CONFIG_SGI_SN_M_MODE=y  # CONFIG_SGI_SN_N_MODE is not set  # CONFIG_MAPPED_KERNEL is not set  # CONFIG_REPLICATE_KTEXT is not set  # CONFIG_REPLICATE_EXHANDLERS is not set +CONFIG_LOONGSON_UART_BASE=y  CONFIG_RWSEM_GENERIC_SPINLOCK=y  # CONFIG_ARCH_HAS_ILOG2_U32 is not set  # CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_SUPPORTS_OPROFILE=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_TIME=y -CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_ARC=y  CONFIG_DMA_COHERENT=y -CONFIG_EARLY_PRINTK=y  CONFIG_SYS_HAS_EARLY_PRINTK=y  # CONFIG_NO_IOPORT is not set  CONFIG_CPU_BIG_ENDIAN=y  # CONFIG_CPU_LITTLE_ENDIAN is not set  CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y +CONFIG_DEFAULT_SGI_PARTITION=y  CONFIG_MIPS_L1_CACHE_SHIFT=7  CONFIG_ARC64=y  CONFIG_BOOT_ELF64=y @@ -66,7 +81,8 @@ CONFIG_BOOT_ELF64=y  #  # CPU selection  # -# CONFIG_CPU_LOONGSON2 is not set +# CONFIG_CPU_LOONGSON2E is not set +# CONFIG_CPU_LOONGSON2F is not set  # CONFIG_CPU_MIPS32_R1 is not set  # CONFIG_CPU_MIPS32_R2 is not set  # CONFIG_CPU_MIPS64_R1 is not set @@ -79,6 +95,7 @@ CONFIG_BOOT_ELF64=y  # CONFIG_CPU_TX49XX is not set  # CONFIG_CPU_R5000 is not set  # CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R5500 is not set  # CONFIG_CPU_R6000 is not set  # CONFIG_CPU_NEVADA is not set  # CONFIG_CPU_R8000 is not set @@ -86,6 +103,7 @@ CONFIG_CPU_R10000=y  # CONFIG_CPU_RM7000 is not set  # CONFIG_CPU_RM9000 is not set  # CONFIG_CPU_SB1 is not set +# CONFIG_CPU_CAVIUM_OCTEON is not set  CONFIG_SYS_HAS_CPU_R10000=y  CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y  CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y @@ -99,6 +117,7 @@ CONFIG_64BIT=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_32KB is not set  # CONFIG_PAGE_SIZE_64KB is not set  CONFIG_CPU_HAS_PREFETCH=y  CONFIG_MIPS_MT_DISABLED=y @@ -110,6 +129,7 @@ CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y  CONFIG_CPU_SUPPORTS_HIGHMEM=y  CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_NUMA=y  CONFIG_SYS_SUPPORTS_NUMA=y  CONFIG_NODES_SHIFT=6 @@ -120,16 +140,22 @@ CONFIG_DISCONTIGMEM_MANUAL=y  CONFIG_DISCONTIGMEM=y  CONFIG_FLAT_NODE_MEM_MAP=y  CONFIG_NEED_MULTIPLE_NODES=y -# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y -CONFIG_RESOURCES_64BIT=y +CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=0  CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536  CONFIG_SMP=y  CONFIG_SYS_SUPPORTS_SMP=y  CONFIG_NR_CPUS_DEFAULT_64=y  CONFIG_NR_CPUS=64 +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y  # CONFIG_HZ_48 is not set  # CONFIG_HZ_100 is not set  # CONFIG_HZ_128 is not set @@ -142,13 +168,13 @@ CONFIG_HZ=1000  CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set -CONFIG_PREEMPT_BKL=y  # CONFIG_MIPS_INSANE_LARGE is not set  # CONFIG_KEXEC is not set  CONFIG_SECCOMP=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -162,20 +188,41 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=64 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_GROUP_SCHED is not set  CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +# CONFIG_CGROUP_NS is not set +# CONFIG_CGROUP_FREEZER is not set +# CONFIG_CGROUP_DEVICE is not set  CONFIG_CPUSETS=y -CONFIG_SYSFS_DEPRECATED=y +CONFIG_PROC_PID_CPUSET=y +# CONFIG_CGROUP_CPUACCT is not set +# CONFIG_RESOURCE_COUNTERS is not set +# CONFIG_SYSFS_DEPRECATED_V2 is not set  CONFIG_RELAY=y +# CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -184,44 +231,92 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y +# CONFIG_PCSPKR_PLATFORM is not set  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y +CONFIG_AIO=y + +# +# Kernel Performance Events And Counters +#  CONFIG_VM_EVENT_COUNTERS=y +CONFIG_PCI_QUIRKS=y +CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_SYSCALL_WRAPPERS=y +CONFIG_USE_GENERIC_SMP_HELPERS=y + +# +# GCOV-based kernel profiling +# +CONFIG_SLOW_WORK=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set  CONFIG_BASE_SMALL=0  CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set  CONFIG_MODULE_UNLOAD=y  # CONFIG_MODULE_FORCE_UNLOAD is not set  # CONFIG_MODVERSIONS is not set  CONFIG_MODULE_SRCVERSION_ALL=y -CONFIG_KMOD=y  CONFIG_STOP_MACHINE=y  CONFIG_BLOCK=y -# CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set +# CONFIG_BLK_CGROUP is not set +CONFIG_BLOCK_COMPAT=y  #  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y +# CONFIG_CFQ_GROUP_IOSCHED is not set  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_MUTEX_SPIN_ON_OWNER=y +# CONFIG_FREEZER is not set  #  # Bus options (PCI, PCMCIA, EISA, ISA, TC) @@ -230,11 +325,10 @@ CONFIG_HW_HAS_PCI=y  CONFIG_PCI=y  CONFIG_PCI_DOMAINS=y  # CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCI_LEGACY is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  CONFIG_MMU=y - -# -# PCCARD (PCMCIA/CardBus) support -#  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set @@ -242,8 +336,9 @@ CONFIG_MMU=y  # Executable file formats  #  CONFIG_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +# CONFIG_HAVE_AOUT is not set  # CONFIG_BINFMT_MISC is not set -# CONFIG_BUILD_ELF64 is not set  CONFIG_MIPS32_COMPAT=y  CONFIG_COMPAT=y  CONFIG_SYSVIPC_COMPAT=y @@ -255,13 +350,10 @@ CONFIG_BINFMT_ELF32=y  # Power management options  #  CONFIG_PM=y -# CONFIG_PM_LEGACY is not set  # CONFIG_PM_DEBUG is not set - -# -# Networking -# +# CONFIG_PM_RUNTIME is not set  CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y  #  # Networking options @@ -273,6 +365,8 @@ CONFIG_XFRM=y  CONFIG_XFRM_USER=m  # CONFIG_XFRM_SUB_POLICY is not set  CONFIG_XFRM_MIGRATE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_IPCOMP=m  CONFIG_NET_KEY=y  CONFIG_NET_KEY_MIGRATE=y  CONFIG_INET=y @@ -292,19 +386,40 @@ CONFIG_IP_PNP=y  # CONFIG_INET_ESP is not set  # CONFIG_INET_IPCOMP is not set  # CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set +CONFIG_INET_TUNNEL=m  CONFIG_INET_XFRM_MODE_TRANSPORT=m  CONFIG_INET_XFRM_MODE_TUNNEL=m  CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=y  CONFIG_INET_DIAG=y  CONFIG_INET_TCP_DIAG=y  # CONFIG_TCP_CONG_ADVANCED is not set  CONFIG_TCP_CONG_CUBIC=y  CONFIG_DEFAULT_TCP_CONG="cubic"  CONFIG_TCP_MD5SIG=y -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_PIMSM_V2=y  CONFIG_NETWORK_SECMARK=y  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set @@ -314,9 +429,11 @@ CONFIG_IP_SCTP=m  # CONFIG_SCTP_HMAC_NONE is not set  # CONFIG_SCTP_HMAC_SHA1 is not set  CONFIG_SCTP_HMAC_MD5=y +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set  # CONFIG_VLAN_8021Q is not set  # CONFIG_DECNET is not set  # CONFIG_LLC2 is not set @@ -326,12 +443,9 @@ CONFIG_SCTP_HMAC_MD5=y  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=y  #  # Queueing/Scheduling @@ -340,7 +454,7 @@ CONFIG_NET_SCH_CBQ=m  CONFIG_NET_SCH_HTB=m  CONFIG_NET_SCH_HFSC=m  CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_MULTIQ=y  CONFIG_NET_SCH_RED=m  CONFIG_NET_SCH_SFQ=m  CONFIG_NET_SCH_TEQL=m @@ -348,6 +462,7 @@ CONFIG_NET_SCH_TBF=m  CONFIG_NET_SCH_GRED=m  CONFIG_NET_SCH_DSMARK=m  CONFIG_NET_SCH_NETEM=m +# CONFIG_NET_SCH_DRR is not set  CONFIG_NET_SCH_INGRESS=m  # @@ -364,41 +479,63 @@ CONFIG_NET_CLS_U32=m  CONFIG_CLS_U32_MARK=y  CONFIG_NET_CLS_RSVP=m  CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=y  # CONFIG_NET_EMATCH is not set  CONFIG_NET_CLS_ACT=y  CONFIG_NET_ACT_POLICE=y  CONFIG_NET_ACT_GACT=m  CONFIG_GACT_PROB=y  CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m  CONFIG_NET_ACT_PEDIT=m  # CONFIG_NET_ACT_SIMP is not set -CONFIG_NET_CLS_POLICE=y +CONFIG_NET_ACT_SKBEDIT=m  # CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set  #  # Network testing  #  # CONFIG_NET_PKTGEN is not set  # CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set - -# -# Wireless -# -CONFIG_CFG80211=m +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y  CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_WIRELESS_OLD_REGULATORY is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set  CONFIG_MAC80211=m -# CONFIG_MAC80211_DEBUG is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set  CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y  # CONFIG_NET_9P is not set  # @@ -408,9 +545,13 @@ CONFIG_RFKILL=m  #  # Generic Driver Options  # +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE=""  # CONFIG_SYS_HYPERVISOR is not set  CONFIG_CONNECTOR=m  # CONFIG_MTD is not set @@ -423,14 +564,19 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=y  CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_OSD=m  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_RAM is not set  CONFIG_CDROM_PKTCDVD=m  CONFIG_CDROM_PKTCDVD_BUFFERS=8  # CONFIG_CDROM_PKTCDVD_WCACHE is not set  CONFIG_ATA_OVER_ETH=m +# CONFIG_BLK_DEV_HD is not set  # CONFIG_MISC_DEVICES is not set +CONFIG_EEPROM_93CX6=m +CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set  # @@ -453,10 +599,6 @@ CONFIG_BLK_DEV_SR=m  CONFIG_BLK_DEV_SR_VENDOR=y  CONFIG_CHR_DEV_SG=m  CONFIG_CHR_DEV_SCH=m - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  CONFIG_SCSI_CONSTANTS=y  CONFIG_SCSI_LOGGING=y @@ -471,11 +613,18 @@ CONFIG_SCSI_FC_ATTRS=y  CONFIG_SCSI_ISCSI_ATTRS=m  CONFIG_SCSI_SAS_ATTRS=m  CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_HOST_SMP=y  # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set +# CONFIG_SCSI_SRP_ATTRS is not set  CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_BE2ISCSI=m  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +CONFIG_SCSI_HPSA=m  # CONFIG_SCSI_3W_9XXX is not set +CONFIG_SCSI_3W_SAS=m  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set @@ -483,11 +632,21 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_AIC79XX is not set  CONFIG_SCSI_AIC94XX=m  # CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +CONFIG_SCSI_DPT_I2O=m +# CONFIG_SCSI_ADVANSYS is not set  # CONFIG_SCSI_ARCMSR is not set  # CONFIG_MEGARAID_NEWGEN is not set  # CONFIG_MEGARAID_LEGACY is not set  # CONFIG_MEGARAID_SAS is not set +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +# CONFIG_SCSI_MPT2SAS_LOGGING is not set  # CONFIG_SCSI_HPTIOP is not set +CONFIG_LIBFC=m +# CONFIG_LIBFCOE is not set +# CONFIG_FCOE is not set  # CONFIG_SCSI_DMX3191D is not set  # CONFIG_SCSI_FUTURE_DOMAIN is not set  # CONFIG_SCSI_IPS is not set @@ -502,16 +661,31 @@ CONFIG_SCSI_QLOGIC_1280=y  # CONFIG_SCSI_DC395x is not set  # CONFIG_SCSI_DC390T is not set  # CONFIG_SCSI_DEBUG is not set +CONFIG_SCSI_PMCRAID=m +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_DH=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +# CONFIG_SCSI_OSD_DEBUG is not set  # CONFIG_ATA is not set  CONFIG_MD=y  CONFIG_BLK_DEV_MD=y +CONFIG_MD_AUTODETECT=y  CONFIG_MD_LINEAR=m  CONFIG_MD_RAID0=y  CONFIG_MD_RAID1=y  CONFIG_MD_RAID10=m  CONFIG_MD_RAID456=y -CONFIG_MD_RAID5_RESHAPE=y +# CONFIG_MULTICORE_RAID456 is not set +CONFIG_MD_RAID6_PQ=y +# CONFIG_ASYNC_RAID6_TEST is not set  CONFIG_MD_MULTIPATH=m  CONFIG_MD_FAULTY=m  CONFIG_BLK_DEV_DM=m @@ -519,36 +693,39 @@ CONFIG_BLK_DEV_DM=m  CONFIG_DM_CRYPT=m  CONFIG_DM_SNAPSHOT=m  CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m  CONFIG_DM_ZERO=m  CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_EMC=m -CONFIG_DM_MULTIPATH_RDAC=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m  # CONFIG_DM_DELAY is not set +CONFIG_DM_UEVENT=y +# CONFIG_FUSION is not set  # -# Fusion MPT device support +# IEEE 1394 (FireWire) support  # -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set  # -# IEEE 1394 (FireWire) support +# You can enable one or both FireWire driver stacks. +# + +# +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set  # CONFIG_I2O is not set  CONFIG_NETDEVICES=y -CONFIG_NETDEVICES_MULTIQUEUE=y  CONFIG_IFB=m  # CONFIG_DUMMY is not set  # CONFIG_BONDING is not set  CONFIG_MACVLAN=m  # CONFIG_EQUALIZER is not set  # CONFIG_TUN is not set +CONFIG_VETH=m  # CONFIG_ARCNET is not set -CONFIG_PHYLIB=m +CONFIG_PHYLIB=y  #  # MII PHY device drivers @@ -562,23 +739,51 @@ CONFIG_VITESSE_PHY=m  CONFIG_SMSC_PHY=m  # CONFIG_BROADCOM_PHY is not set  CONFIG_ICPLUS_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_NATIONAL_PHY=m +CONFIG_STE10XP=m +CONFIG_LSI_ET1011C_PHY=m  # CONFIG_FIXED_PHY is not set +CONFIG_MDIO_BITBANG=m  CONFIG_NET_ETHERNET=y  CONFIG_MII=y  CONFIG_AX88796=m +CONFIG_AX88796_93CX6=y  CONFIG_SGI_IOC3_ETH=y  # CONFIG_HAPPYMEAL is not set  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +CONFIG_SMC91X=m  # CONFIG_DM9000 is not set +CONFIG_ETHOC=m +CONFIG_SMSC911X=m +CONFIG_DNET=m  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_KS8842=m +CONFIG_KS8851_MLL=m +CONFIG_ATL2=m  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set  # CONFIG_E1000 is not set +CONFIG_E1000E=m +CONFIG_IP1000=m +CONFIG_IGB=m +CONFIG_IGBVF=m  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -588,24 +793,75 @@ CONFIG_NETDEV_1000=y  # CONFIG_SKY2 is not set  CONFIG_VIA_VELOCITY=m  # CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set +CONFIG_BNX2=m +CONFIG_CNIC=m  CONFIG_QLA3XXX=m  # CONFIG_ATL1 is not set +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_JME=m  CONFIG_NETDEV_10000=y +CONFIG_MDIO=m  # CONFIG_CHELSIO_T1 is not set +CONFIG_CHELSIO_T3_DEPENDS=y  CONFIG_CHELSIO_T3=m +CONFIG_ENIC=m +CONFIG_IXGBE=m  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set  # CONFIG_MYRI10GE is not set  CONFIG_NETXEN_NIC=m -# CONFIG_MLX4_CORE is not set +CONFIG_NIU=m +CONFIG_MLX4_EN=m +CONFIG_MLX4_CORE=m +# CONFIG_MLX4_DEBUG is not set +CONFIG_TEHUTI=m +CONFIG_BNX2X=m +CONFIG_QLGE=m +CONFIG_SFC=m +CONFIG_BE2NET=m  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -CONFIG_WLAN_80211=y +CONFIG_WLAN=y +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PRISM54=m +CONFIG_RTL8180=m +CONFIG_ADM8211=m +# CONFIG_MAC80211_HWSIM is not set +CONFIG_MWL8K=m +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K=m +CONFIG_B43=m +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m  CONFIG_IPW2100=m  CONFIG_IPW2100_MONITOR=y  CONFIG_IPW2100_DEBUG=y @@ -615,38 +871,57 @@ CONFIG_IPW2200_RADIOTAP=y  CONFIG_IPW2200_PROMISCUOUS=y  CONFIG_IPW2200_QOS=y  CONFIG_IPW2200_DEBUG=y +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_IWLWIFI=m +CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLAGN=m +CONFIG_IWL4965=y +CONFIG_IWL5000=y +CONFIG_IWL3945=m +CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y  CONFIG_LIBERTAS=m  # CONFIG_LIBERTAS_DEBUG is not set  CONFIG_HERMES=m +# CONFIG_HERMES_CACHE_FW_ON_INIT is not set  CONFIG_PLX_HERMES=m  CONFIG_TMD_HERMES=m  CONFIG_NORTEL_HERMES=m  CONFIG_PCI_HERMES=m -CONFIG_ATMEL=m -CONFIG_PCI_ATMEL=m -CONFIG_PRISM54=m -CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -CONFIG_HOSTAP_FIRMWARE_NVRAM=y -CONFIG_HOSTAP_PLX=m -CONFIG_HOSTAP_PCI=m -CONFIG_BCM43XX=m -CONFIG_BCM43XX_DEBUG=y -CONFIG_BCM43XX_DMA=y -CONFIG_BCM43XX_PIO=y -CONFIG_BCM43XX_DMA_AND_PIO_MODE=y -# CONFIG_BCM43XX_DMA_MODE is not set -# CONFIG_BCM43XX_PIO_MODE is not set +CONFIG_P54_COMMON=m +CONFIG_P54_PCI=m +CONFIG_P54_LEDS=y +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI_PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800_LIB=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_HT=y +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WL12XX=m +CONFIG_WL1251=m + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +#  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set  # CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -664,13 +939,16 @@ CONFIG_SERIO_SERPORT=y  # CONFIG_SERIO_PCIPS2 is not set  CONFIG_SERIO_LIBPS2=m  CONFIG_SERIO_RAW=m +CONFIG_SERIO_ALTERA_PS2=m  # CONFIG_GAMEPORT is not set  #  # Character devices  #  # CONFIG_VT is not set +CONFIG_DEVKMEM=y  # CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_NOZOMI=m  #  # Serial drivers @@ -693,95 +971,258 @@ CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y  CONFIG_LEGACY_PTYS=y  CONFIG_LEGACY_PTY_COUNT=256  # CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set  CONFIG_HW_RANDOM=m -# CONFIG_RTC is not set +CONFIG_HW_RANDOM_TIMERIOMEM=m  # CONFIG_R3964 is not set  # CONFIG_APPLICOM is not set -# CONFIG_DRM is not set  # CONFIG_RAW_DRIVER is not set  # CONFIG_TCG_TPM is not set  CONFIG_DEVPORT=y -# CONFIG_I2C is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +CONFIG_I2C_OCORES=m +CONFIG_I2C_SIMTEC=m + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_TAOS_EVM=m + +# +# Other I2C/SMBus bus drivers +# +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_STUB=m  # -# SPI support +# Miscellaneous I2C Chip support  # +CONFIG_SENSORS_TSL2550=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set -# CONFIG_SPI_MASTER is not set + +# +# PPS support +# +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set +CONFIG_THERMAL=m +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y  # -# Multifunction device drivers +# Sonics Silicon Backplane  # -# CONFIG_MFD_SM501 is not set +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_SSB_DRIVER_MIPS is not set  # -# Multimedia devices +# Multifunction device drivers  # -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set +# CONFIG_MFD_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_WM8400 is not set +CONFIG_MFD_WM8350=m +CONFIG_MFD_WM8350_I2C=m +CONFIG_MFD_PCF50633=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_AB3100_CORE=m +CONFIG_AB3100_OTP=m +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  # -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGA_ARB is not set +# CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set  # CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set  # -# Sound +# Display device support  # +# CONFIG_DISPLAY_SUPPORT is not set  # CONFIG_SOUND is not set  CONFIG_USB_SUPPORT=y  CONFIG_USB_ARCH_HAS_HCD=y  CONFIG_USB_ARCH_HAS_OHCI=y  CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_USB is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set  # -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# Enable Host or Gadget support to see Inventra options  #  # -# USB Gadget Support +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_UWB is not set  # CONFIG_MMC is not set -# CONFIG_NEW_LEDS is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_BD2802=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_ACCESSIBILITY is not set  # CONFIG_INFINIBAND is not set -# CONFIG_RTC_CLASS is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set  # -# DMA Engine support +# I2C RTC drivers  # -# CONFIG_DMA_ENGINE is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set  # -# DMA Clients +# SPI RTC drivers  #  # -# DMA Devices +# Platform RTC drivers  # +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_M48T35=y +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_WM8350 is not set +# CONFIG_RTC_DRV_PCF50633 is not set +CONFIG_RTC_DRV_AB3100=m  # -# Userspace I/O +# on-CPU RTC drivers  # +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  CONFIG_UIO=y  # CONFIG_UIO_CIF is not set +# CONFIG_UIO_PDRV is not set +# CONFIG_UIO_PDRV_GENIRQ is not set +CONFIG_UIO_SMX=m +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m + +# +# TI VLYNQ +# +# CONFIG_STAGING is not set  #  # File systems @@ -792,36 +1233,58 @@ CONFIG_EXT2_FS_POSIX_ACL=y  CONFIG_EXT2_FS_SECURITY=y  # CONFIG_EXT2_FS_XIP is not set  CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set  CONFIG_EXT3_FS_XATTR=y  CONFIG_EXT3_FS_POSIX_ACL=y  CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set  CONFIG_JBD=y -CONFIG_JBD_DEBUG=y +CONFIG_JBD2=y  CONFIG_FS_MBCACHE=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  CONFIG_FS_POSIX_ACL=y  CONFIG_XFS_FS=m  CONFIG_XFS_QUOTA=y -CONFIG_XFS_SECURITY=y  CONFIG_XFS_POSIX_ACL=y  # CONFIG_XFS_RT is not set +# CONFIG_XFS_DEBUG is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y  # CONFIG_QUOTA is not set +CONFIG_QUOTA_NETLINK_INTERFACE=y  CONFIG_QUOTACTL=y -CONFIG_DNOTIFY=y  CONFIG_AUTOFS_FS=m  # CONFIG_AUTOFS4_FS is not set  CONFIG_FUSE_FS=m +CONFIG_CUSE=m  CONFIG_GENERIC_ACL=y  # +# Caches +# +CONFIG_FSCACHE=m +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -840,16 +1303,13 @@ CONFIG_GENERIC_ACL=y  CONFIG_PROC_FS=y  CONFIG_PROC_KCORE=y  CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y  CONFIG_SYSFS=y  CONFIG_TMPFS=y  CONFIG_TMPFS_POSIX_ACL=y  # CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y  CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# +CONFIG_MISC_FILESYSTEMS=y  # CONFIG_ADFS_FS is not set  # CONFIG_AFFS_FS is not set  # CONFIG_ECRYPT_FS is not set @@ -859,28 +1319,32 @@ CONFIG_CONFIGFS_FS=m  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3  # CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_OMFS_FS=m  # CONFIG_HPFS_FS is not set  # CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set - -# -# Network File Systems -# +CONFIG_EXOFS_FS=m +# CONFIG_EXOFS_DEBUG is not set +CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y  # CONFIG_NFS_V3_ACL is not set  # CONFIG_NFS_V4 is not set -# CONFIG_NFS_DIRECTIO is not set -# CONFIG_NFSD is not set  # CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set  CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y  CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -910,35 +1374,37 @@ CONFIG_SGI_PARTITION=y  # CONFIG_KARMA_PARTITION is not set  # CONFIG_EFI_PARTITION is not set  # CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -#  # CONFIG_NLS is not set - -# -# Distributed Lock Manager -#  CONFIG_DLM=m  # CONFIG_DLM_DEBUG is not set  # -# Profiling support -# -# CONFIG_PROFILING is not set - -#  # Kernel hacking  #  CONFIG_TRACE_IRQFLAGS_SUPPORT=y  # CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=2048  # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_CROSSCOMPILE=y +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_EARLY_PRINTK=y  # CONFIG_CMDLINE_BOOL is not set  # @@ -947,65 +1413,140 @@ CONFIG_CROSSCOMPILE=y  CONFIG_KEYS=y  CONFIG_KEYS_DEBUG_PROC_KEYS=y  # CONFIG_SECURITY is not set -CONFIG_XOR_BLOCKS=m -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m +CONFIG_SECURITYFS=y +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_XOR_BLOCKS=y +CONFIG_ASYNC_CORE=y +CONFIG_ASYNC_MEMCPY=y +CONFIG_ASYNC_XOR=y +CONFIG_ASYNC_PQ=y +CONFIG_ASYNC_RAID6_RECOV=y  CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_FIPS=y  CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y  CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=m +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=m + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=m + +# +# Hash modes +#  CONFIG_CRYPTO_HMAC=y  CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_VMAC=m + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_GHASH=m  CONFIG_CRYPTO_MD4=m  CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m  CONFIG_CRYPTO_SHA1=m  CONFIG_CRYPTO_SHA256=m  CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m  CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +#  CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m  CONFIG_CRYPTO_CAST5=m  CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m  CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m + +# +# Compression +#  CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m  CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_HIFN_795X=m +# CONFIG_CRYPTO_DEV_HIFN_795X_RNG is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines  #  CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y  CONFIG_CRC_CCITT=m -# CONFIG_CRC16 is not set -# CONFIG_CRC_ITU_T is not set +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=m +CONFIG_CRC_ITU_T=m  CONFIG_CRC32=y -# CONFIG_CRC7 is not set +CONFIG_CRC7=m  CONFIG_LIBCRC32C=m  CONFIG_ZLIB_INFLATE=m  CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y +CONFIG_NLATTR=y diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h index 1f4df647c38..272c5ef35bb 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h @@ -191,6 +191,9 @@  # ifndef cpu_has_64bit_addresses  # define cpu_has_64bit_addresses	0  # endif +# ifndef cpu_vmbits +# define cpu_vmbits 31 +# endif  #endif  #ifdef CONFIG_64BIT @@ -209,6 +212,10 @@  # ifndef cpu_has_64bit_addresses  # define cpu_has_64bit_addresses	1  # endif +# ifndef cpu_vmbits +# define cpu_vmbits cpu_data[0].vmbits +# define __NEED_VMBITS_PROBE +# endif  #endif  #if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint) diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h index 126044308de..b39def3f6e0 100644 --- a/arch/mips/include/asm/cpu-info.h +++ b/arch/mips/include/asm/cpu-info.h @@ -58,6 +58,9 @@ struct cpuinfo_mips {  	struct cache_desc	tcache;	/* Tertiary/split secondary cache */  	int			srsets;	/* Shadow register sets */  	int			core;	/* physical core number */ +#ifdef CONFIG_64BIT +	int			vmbits;	/* Virtual memory size in bits */ +#endif  #if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_MIPS_MT_SMTC)  	/*  	 * In the MIPS MT "SMTC" model, each TC is considered diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h index 06960364c96..dea4aed6478 100644 --- a/arch/mips/include/asm/irq.h +++ b/arch/mips/include/asm/irq.h @@ -135,6 +135,7 @@ extern void free_irqno(unsigned int irq);  #define CP0_LEGACY_COMPARE_IRQ 7  extern int cp0_compare_irq; +extern int cp0_compare_irq_shift;  extern int cp0_perfcount_irq;  #endif /* _ASM_IRQ_H */ diff --git a/arch/mips/include/asm/mach-au1x00/au1xxx_dbdma.h b/arch/mips/include/asm/mach-au1x00/au1xxx_dbdma.h index 06f68f43800..d206000fbfe 100644 --- a/arch/mips/include/asm/mach-au1x00/au1xxx_dbdma.h +++ b/arch/mips/include/asm/mach-au1x00/au1xxx_dbdma.h @@ -305,6 +305,7 @@ typedef struct dbdma_chan_config {  	dbdev_tab_t		*chan_dest;  	au1x_dma_chan_t		*chan_ptr;  	au1x_ddma_desc_t	*chan_desc_base; +	u32			cdb_membase; /* kmalloc base of above */  	au1x_ddma_desc_t	*get_ptr, *put_ptr, *cur_ptr;  	void			*chan_callparam;  	void			(*chan_callback)(int, void *); diff --git a/arch/mips/include/asm/mach-powertv/asic_reg_map.h b/arch/mips/include/asm/mach-powertv/asic_reg_map.h new file mode 100644 index 00000000000..6f26cb09828 --- /dev/null +++ b/arch/mips/include/asm/mach-powertv/asic_reg_map.h @@ -0,0 +1,90 @@ +/* + *				asic_reg_map.h + * + * A macro-enclosed list of the elements for the register_map structure for + * use in defining and manipulating the structure. + * + * Copyright (C) 2009  Cisco Systems, 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + */ + +REGISTER_MAP_ELEMENT(eic_slow0_strt_add) +REGISTER_MAP_ELEMENT(eic_cfg_bits) +REGISTER_MAP_ELEMENT(eic_ready_status) +REGISTER_MAP_ELEMENT(chipver3) +REGISTER_MAP_ELEMENT(chipver2) +REGISTER_MAP_ELEMENT(chipver1) +REGISTER_MAP_ELEMENT(chipver0) +REGISTER_MAP_ELEMENT(uart1_intstat) +REGISTER_MAP_ELEMENT(uart1_inten) +REGISTER_MAP_ELEMENT(uart1_config1) +REGISTER_MAP_ELEMENT(uart1_config2) +REGISTER_MAP_ELEMENT(uart1_divisorhi) +REGISTER_MAP_ELEMENT(uart1_divisorlo) +REGISTER_MAP_ELEMENT(uart1_data) +REGISTER_MAP_ELEMENT(uart1_status) +REGISTER_MAP_ELEMENT(int_stat_3) +REGISTER_MAP_ELEMENT(int_stat_2) +REGISTER_MAP_ELEMENT(int_stat_1) +REGISTER_MAP_ELEMENT(int_stat_0) +REGISTER_MAP_ELEMENT(int_config) +REGISTER_MAP_ELEMENT(int_int_scan) +REGISTER_MAP_ELEMENT(ien_int_3) +REGISTER_MAP_ELEMENT(ien_int_2) +REGISTER_MAP_ELEMENT(ien_int_1) +REGISTER_MAP_ELEMENT(ien_int_0) +REGISTER_MAP_ELEMENT(int_level_3_3) +REGISTER_MAP_ELEMENT(int_level_3_2) +REGISTER_MAP_ELEMENT(int_level_3_1) +REGISTER_MAP_ELEMENT(int_level_3_0) +REGISTER_MAP_ELEMENT(int_level_2_3) +REGISTER_MAP_ELEMENT(int_level_2_2) +REGISTER_MAP_ELEMENT(int_level_2_1) +REGISTER_MAP_ELEMENT(int_level_2_0) +REGISTER_MAP_ELEMENT(int_level_1_3) +REGISTER_MAP_ELEMENT(int_level_1_2) +REGISTER_MAP_ELEMENT(int_level_1_1) +REGISTER_MAP_ELEMENT(int_level_1_0) +REGISTER_MAP_ELEMENT(int_level_0_3) +REGISTER_MAP_ELEMENT(int_level_0_2) +REGISTER_MAP_ELEMENT(int_level_0_1) +REGISTER_MAP_ELEMENT(int_level_0_0) +REGISTER_MAP_ELEMENT(int_docsis_en) +REGISTER_MAP_ELEMENT(mips_pll_setup) +REGISTER_MAP_ELEMENT(usb_fs) +REGISTER_MAP_ELEMENT(test_bus) +REGISTER_MAP_ELEMENT(crt_spare) +REGISTER_MAP_ELEMENT(usb2_ohci_int_mask) +REGISTER_MAP_ELEMENT(usb2_strap) +REGISTER_MAP_ELEMENT(ehci_hcapbase) +REGISTER_MAP_ELEMENT(ohci_hc_revision) +REGISTER_MAP_ELEMENT(bcm1_bs_lmi_steer) +REGISTER_MAP_ELEMENT(usb2_control) +REGISTER_MAP_ELEMENT(usb2_stbus_obc) +REGISTER_MAP_ELEMENT(usb2_stbus_mess_size) +REGISTER_MAP_ELEMENT(usb2_stbus_chunk_size) +REGISTER_MAP_ELEMENT(pcie_regs) +REGISTER_MAP_ELEMENT(tim_ch) +REGISTER_MAP_ELEMENT(tim_cl) +REGISTER_MAP_ELEMENT(gpio_dout) +REGISTER_MAP_ELEMENT(gpio_din) +REGISTER_MAP_ELEMENT(gpio_dir) +REGISTER_MAP_ELEMENT(watchdog) +REGISTER_MAP_ELEMENT(front_panel) +REGISTER_MAP_ELEMENT(misc_clk_ctl1) +REGISTER_MAP_ELEMENT(misc_clk_ctl2) +REGISTER_MAP_ELEMENT(crt_ext_ctl) +REGISTER_MAP_ELEMENT(register_maps) diff --git a/arch/mips/include/asm/mach-powertv/asic_regs.h b/arch/mips/include/asm/mach-powertv/asic_regs.h index 9a65c93782f..1e11236c6db 100644 --- a/arch/mips/include/asm/mach-powertv/asic_regs.h +++ b/arch/mips/include/asm/mach-powertv/asic_regs.h @@ -35,11 +35,12 @@ enum asic_type {  #define CRONUS_11	0x0B4C1C21  #define CRONUSLITE_10	0x0B4C1C40 -#define NAND_FLASH_BASE	0x03000000 -#define ZEUS_IO_BASE	0x09000000 +#define NAND_FLASH_BASE		0x03000000  #define CALLIOPE_IO_BASE	0x08000000 -#define CRONUS_IO_BASE	0x09000000 -#define ASIC_IO_SIZE	0x01000000 +#define CRONUS_IO_BASE		0x09000000 +#define ZEUS_IO_BASE		0x09000000 + +#define ASIC_IO_SIZE		0x01000000  /* Definitions for backward compatibility */  #define UART1_INTSTAT	uart1_intstat @@ -52,96 +53,62 @@ enum asic_type {  #define UART1_STATUS	uart1_status  /* ASIC register enumeration */ -struct register_map { -	u32 eic_slow0_strt_add; -	u32 eic_cfg_bits; -	u32 eic_ready_status; - -	u32 chipver3; -	u32 chipver2; -	u32 chipver1; -	u32 chipver0; +union register_map_entry { +	unsigned long phys; +	u32 *virt; +}; -	u32 uart1_intstat; -	u32 uart1_inten; -	u32 uart1_config1; -	u32 uart1_config2; -	u32 uart1_divisorhi; -	u32 uart1_divisorlo; -	u32 uart1_data; -	u32 uart1_status; +#define REGISTER_MAP_ELEMENT(x) union register_map_entry x; +struct register_map { +#include <asm/mach-powertv/asic_reg_map.h> +}; +#undef REGISTER_MAP_ELEMENT -	u32 int_stat_3; -	u32 int_stat_2; -	u32 int_stat_1; -	u32 int_stat_0; -	u32 int_config; -	u32 int_int_scan; -	u32 ien_int_3; -	u32 ien_int_2; -	u32 ien_int_1; -	u32 ien_int_0; -	u32 int_level_3_3; -	u32 int_level_3_2; -	u32 int_level_3_1; -	u32 int_level_3_0; -	u32 int_level_2_3; -	u32 int_level_2_2; -	u32 int_level_2_1; -	u32 int_level_2_0; -	u32 int_level_1_3; -	u32 int_level_1_2; -	u32 int_level_1_1; -	u32 int_level_1_0; -	u32 int_level_0_3; -	u32 int_level_0_2; -	u32 int_level_0_1; -	u32 int_level_0_0; -	u32 int_docsis_en; +/** + * register_map_offset_phys - add an offset to the physical address + * @map:	Pointer to the &struct register_map + * @offset:	Value to add + * + * Only adds the base to non-zero physical addresses + */ +static inline void register_map_offset_phys(struct register_map *map, +	unsigned long offset) +{ +#define REGISTER_MAP_ELEMENT(x)		do {				\ +		if (map->x.phys != 0)					\ +			map->x.phys += offset;				\ +	} while (false); -	u32 mips_pll_setup; -	u32 usb_fs; -	u32 test_bus; -	u32 crt_spare; -	u32 usb2_ohci_int_mask; -	u32 usb2_strap; -	u32 ehci_hcapbase; -	u32 ohci_hc_revision; -	u32 bcm1_bs_lmi_steer; -	u32 usb2_control; -	u32 usb2_stbus_obc; -	u32 usb2_stbus_mess_size; -	u32 usb2_stbus_chunk_size; +#include <asm/mach-powertv/asic_reg_map.h> +#undef REGISTER_MAP_ELEMENT +} -	u32 pcie_regs; -	u32 tim_ch; -	u32 tim_cl; -	u32 gpio_dout; -	u32 gpio_din; -	u32 gpio_dir; -	u32 watchdog; -	u32 front_panel; +/** + * register_map_virtualize - Convert ®ister_map to virtual addresses + * @map:	Pointer to ®ister_map to virtualize + */ +static inline void register_map_virtualize(struct register_map *map) +{ +#define REGISTER_MAP_ELEMENT(x)		do {				\ +		map->x.virt = (!map->x.phys) ? NULL :			\ +			UNCAC_ADDR(phys_to_virt(map->x.phys));		\ +	} while (false); -	u32 register_maps; -}; +#include <asm/mach-powertv/asic_reg_map.h> +#undef REGISTER_MAP_ELEMENT +} -extern enum asic_type asic; -extern const struct register_map *register_map; -extern unsigned long asic_phy_base;	/* Physical address of ASIC */ -extern unsigned long asic_base;		/* Virtual address of ASIC */ +extern struct register_map _asic_register_map;  /*   * Macros to interface to registers through their ioremapped address - * asic_reg_offset	Returns the offset of a given register from the start - *			of the ASIC address space   * asic_reg_phys_addr	Returns the physical address of the given register   * asic_reg_addr	Returns the iomapped virtual address of the given   *			register.   */ -#define asic_reg_offset(x)	(register_map->x) -#define asic_reg_phys_addr(x)	(asic_phy_base + asic_reg_offset(x)) -#define asic_reg_addr(x) \ -	((unsigned int *) (asic_base + asic_reg_offset(x))) +#define asic_reg_addr(x)	(_asic_register_map.x.virt) +#define asic_reg_phys_addr(x)	(virt_to_phys((void *) CAC_ADDR(	\ +					(unsigned long) asic_reg_addr(x))))  /*   * The asic_reg macro is gone. It should be replaced by either asic_read or diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index a581d60cbcc..f4ab3139d73 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h @@ -406,6 +406,16 @@  #define ST0_XX			0x80000000	/* MIPS IV naming */  /* + * Bitfields and bit numbers in the coprocessor 0 IntCtl register. (MIPSR2) + * + * Refer to your MIPS R4xx0 manual, chapter 5 for explanation. + */ +#define INTCTLB_IPPCI		26 +#define INTCTLF_IPPCI		(_ULCAST_(7) << INTCTLB_IPPCI) +#define INTCTLB_IPTI		29 +#define INTCTLF_IPTI		(_ULCAST_(7) << INTCTLB_IPTI) + +/*   * Bitfields and bit numbers in the coprocessor 0 cause register.   *   * Refer to your MIPS R4xx0 manual, chapter 5 for explanation. @@ -434,6 +444,8 @@  #define  CAUSEF_IV		(_ULCAST_(1)   << 23)  #define  CAUSEB_CE		28  #define  CAUSEF_CE		(_ULCAST_(3)   << 28) +#define  CAUSEB_TI		30 +#define  CAUSEF_TI		(_ULCAST_(1)   << 30)  #define  CAUSEB_BD		31  #define  CAUSEF_BD		(_ULCAST_(1)   << 31) diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h index 9cd50899395..8eda30b467d 100644 --- a/arch/mips/include/asm/pgtable-64.h +++ b/arch/mips/include/asm/pgtable-64.h @@ -110,7 +110,9 @@  #define VMALLOC_START		MAP_BASE  #define VMALLOC_END	\  	(VMALLOC_START + \ -	 PTRS_PER_PGD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE - (1UL << 32)) +	 min(PTRS_PER_PGD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE, \ +	     (1UL << cpu_vmbits)) - (1UL << 32)) +  #if defined(CONFIG_MODULES) && defined(KBUILD_64BIT_SYM32) && \  	VMALLOC_START != CKSSEG  /* Load modules into 32bit-compatible segment. */ diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index b469ad05d52..0b2450ceb13 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c @@ -97,7 +97,7 @@ void mips_event_handler(struct clock_event_device *dev)   */  static int c0_compare_int_pending(void)  { -	return (read_c0_cause() >> cp0_compare_irq) & 0x100; +	return (read_c0_cause() >> cp0_compare_irq_shift) & (1ul << CAUSEB_IP);  }  /* diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 80e202eca05..758ad426c57 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -284,6 +284,15 @@ static inline int __cpu_has_fpu(void)  	return ((cpu_get_fpu_id() & 0xff00) != FPIR_IMP_NONE);  } +static inline void cpu_probe_vmbits(struct cpuinfo_mips *c) +{ +#ifdef __NEED_VMBITS_PROBE +	write_c0_entryhi(0x3fffffffffffe000ULL); +	back_to_back_c0_hazard(); +	c->vmbits = fls64(read_c0_entryhi() & 0x3fffffffffffe000ULL); +#endif +} +  #define R4K_OPTS (MIPS_CPU_TLB | MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE \  		| MIPS_CPU_COUNTER) @@ -969,6 +978,8 @@ __cpuinit void cpu_probe(void)  		c->srsets = ((read_c0_srsctl() >> 26) & 0x0f) + 1;  	else  		c->srsets = 1; + +	cpu_probe_vmbits(c);  }  __cpuinit void cpu_report(void) diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 308e4346086..31b204b26ba 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -1403,6 +1403,7 @@ extern void flush_tlb_handlers(void);   * Timer interrupt   */  int cp0_compare_irq; +int cp0_compare_irq_shift;  /*   * Performance counter IRQ or -1 if shared with timer @@ -1493,12 +1494,14 @@ void __cpuinit per_cpu_trap_init(void)  	 *  o read IntCtl.IPPCI to determine the performance counter interrupt  	 */  	if (cpu_has_mips_r2) { -		cp0_compare_irq = (read_c0_intctl() >> 29) & 7; -		cp0_perfcount_irq = (read_c0_intctl() >> 26) & 7; +		cp0_compare_irq_shift = CAUSEB_TI - CAUSEB_IP; +		cp0_compare_irq = (read_c0_intctl() >> INTCTLB_IPTI) & 7; +		cp0_perfcount_irq = (read_c0_intctl() >> INTCTLB_IPPCI) & 7;  		if (cp0_perfcount_irq == cp0_compare_irq)  			cp0_perfcount_irq = -1;  	} else {  		cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ; +		cp0_compare_irq_shift = cp0_compare_irq;  		cp0_perfcount_irq = -1;  	} diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c index 94e05e5733c..e06f1af760a 100644 --- a/arch/mips/mm/c-octeon.c +++ b/arch/mips/mm/c-octeon.c @@ -174,7 +174,7 @@ static void octeon_flush_cache_page(struct vm_area_struct *vma,   * Probe Octeon's caches   *   */ -static void __devinit probe_octeon(void) +static void __cpuinit probe_octeon(void)  {  	unsigned long icache_size;  	unsigned long dcache_size; @@ -235,7 +235,7 @@ static void __devinit probe_octeon(void)   * Setup the Octeon cache flush routines   *   */ -void __devinit octeon_cache_init(void) +void __cpuinit octeon_cache_init(void)  {  	extern unsigned long ebase;  	extern char except_vec2_octeon; diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 102b2dfa542..e716cafc346 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c @@ -155,7 +155,7 @@ static inline void setup_protection_map(void)  	protection_map[15] = PAGE_SHARED;  } -void __devinit cpu_cache_init(void) +void __cpuinit cpu_cache_init(void)  {  	if (cpu_has_3k_cache) {  		extern void __weak r3k_cache_init(void); diff --git a/arch/mips/powertv/asic/asic-calliope.c b/arch/mips/powertv/asic/asic-calliope.c index 03d3884c627..1ae6623444b 100644 --- a/arch/mips/powertv/asic/asic-calliope.c +++ b/arch/mips/powertv/asic/asic-calliope.c @@ -23,76 +23,79 @@   * Description:  Defines the platform resources for the SA settop.   */ +#include <linux/init.h>  #include <asm/mach-powertv/asic.h> -const struct register_map calliope_register_map = { -	.eic_slow0_strt_add = 0x800000, -	.eic_cfg_bits = 0x800038, -	.eic_ready_status = 0x80004c, +#define CALLIOPE_ADDR(x)	(CALLIOPE_IO_BASE + (x)) -	.chipver3 = 0xA00800, -	.chipver2 = 0xA00804, -	.chipver1 = 0xA00808, -	.chipver0 = 0xA0080c, +const struct register_map calliope_register_map __initdata = { +	.eic_slow0_strt_add = {.phys = CALLIOPE_ADDR(0x800000)}, +	.eic_cfg_bits = {.phys = CALLIOPE_ADDR(0x800038)}, +	.eic_ready_status = {.phys = CALLIOPE_ADDR(0x80004c)}, + +	.chipver3 = {.phys = CALLIOPE_ADDR(0xA00800)}, +	.chipver2 = {.phys = CALLIOPE_ADDR(0xA00804)}, +	.chipver1 = {.phys = CALLIOPE_ADDR(0xA00808)}, +	.chipver0 = {.phys = CALLIOPE_ADDR(0xA0080c)},  	/* The registers of IRBlaster */ -	.uart1_intstat = 0xA01800, -	.uart1_inten = 0xA01804, -	.uart1_config1 = 0xA01808, -	.uart1_config2 = 0xA0180C, -	.uart1_divisorhi = 0xA01810, -	.uart1_divisorlo = 0xA01814, -	.uart1_data = 0xA01818, -	.uart1_status = 0xA0181C, +	.uart1_intstat = {.phys = CALLIOPE_ADDR(0xA01800)}, +	.uart1_inten = {.phys = CALLIOPE_ADDR(0xA01804)}, +	.uart1_config1 = {.phys = CALLIOPE_ADDR(0xA01808)}, +	.uart1_config2 = {.phys = CALLIOPE_ADDR(0xA0180C)}, +	.uart1_divisorhi = {.phys = CALLIOPE_ADDR(0xA01810)}, +	.uart1_divisorlo = {.phys = CALLIOPE_ADDR(0xA01814)}, +	.uart1_data = {.phys = CALLIOPE_ADDR(0xA01818)}, +	.uart1_status = {.phys = CALLIOPE_ADDR(0xA0181C)}, -	.int_stat_3 = 0xA02800, -	.int_stat_2 = 0xA02804, -	.int_stat_1 = 0xA02808, -	.int_stat_0 = 0xA0280c, -	.int_config = 0xA02810, -	.int_int_scan = 0xA02818, -	.ien_int_3 = 0xA02830, -	.ien_int_2 = 0xA02834, -	.ien_int_1 = 0xA02838, -	.ien_int_0 = 0xA0283c, -	.int_level_3_3 = 0xA02880, -	.int_level_3_2 = 0xA02884, -	.int_level_3_1 = 0xA02888, -	.int_level_3_0 = 0xA0288c, -	.int_level_2_3 = 0xA02890, -	.int_level_2_2 = 0xA02894, -	.int_level_2_1 = 0xA02898, -	.int_level_2_0 = 0xA0289c, -	.int_level_1_3 = 0xA028a0, -	.int_level_1_2 = 0xA028a4, -	.int_level_1_1 = 0xA028a8, -	.int_level_1_0 = 0xA028ac, -	.int_level_0_3 = 0xA028b0, -	.int_level_0_2 = 0xA028b4, -	.int_level_0_1 = 0xA028b8, -	.int_level_0_0 = 0xA028bc, -	.int_docsis_en = 0xA028F4, +	.int_stat_3 = {.phys = CALLIOPE_ADDR(0xA02800)}, +	.int_stat_2 = {.phys = CALLIOPE_ADDR(0xA02804)}, +	.int_stat_1 = {.phys = CALLIOPE_ADDR(0xA02808)}, +	.int_stat_0 = {.phys = CALLIOPE_ADDR(0xA0280c)}, +	.int_config = {.phys = CALLIOPE_ADDR(0xA02810)}, +	.int_int_scan = {.phys = CALLIOPE_ADDR(0xA02818)}, +	.ien_int_3 = {.phys = CALLIOPE_ADDR(0xA02830)}, +	.ien_int_2 = {.phys = CALLIOPE_ADDR(0xA02834)}, +	.ien_int_1 = {.phys = CALLIOPE_ADDR(0xA02838)}, +	.ien_int_0 = {.phys = CALLIOPE_ADDR(0xA0283c)}, +	.int_level_3_3 = {.phys = CALLIOPE_ADDR(0xA02880)}, +	.int_level_3_2 = {.phys = CALLIOPE_ADDR(0xA02884)}, +	.int_level_3_1 = {.phys = CALLIOPE_ADDR(0xA02888)}, +	.int_level_3_0 = {.phys = CALLIOPE_ADDR(0xA0288c)}, +	.int_level_2_3 = {.phys = CALLIOPE_ADDR(0xA02890)}, +	.int_level_2_2 = {.phys = CALLIOPE_ADDR(0xA02894)}, +	.int_level_2_1 = {.phys = CALLIOPE_ADDR(0xA02898)}, +	.int_level_2_0 = {.phys = CALLIOPE_ADDR(0xA0289c)}, +	.int_level_1_3 = {.phys = CALLIOPE_ADDR(0xA028a0)}, +	.int_level_1_2 = {.phys = CALLIOPE_ADDR(0xA028a4)}, +	.int_level_1_1 = {.phys = CALLIOPE_ADDR(0xA028a8)}, +	.int_level_1_0 = {.phys = CALLIOPE_ADDR(0xA028ac)}, +	.int_level_0_3 = {.phys = CALLIOPE_ADDR(0xA028b0)}, +	.int_level_0_2 = {.phys = CALLIOPE_ADDR(0xA028b4)}, +	.int_level_0_1 = {.phys = CALLIOPE_ADDR(0xA028b8)}, +	.int_level_0_0 = {.phys = CALLIOPE_ADDR(0xA028bc)}, +	.int_docsis_en = {.phys = CALLIOPE_ADDR(0xA028F4)}, -	.mips_pll_setup = 0x980000, -	.usb_fs = 0x980030,     	/* -default 72800028- */ -	.test_bus = 0x9800CC, -	.crt_spare = 0x9800d4, -	.usb2_ohci_int_mask = 0x9A000c, -	.usb2_strap = 0x9A0014, -	.ehci_hcapbase = 0x9BFE00, -	.ohci_hc_revision = 0x9BFC00, -	.bcm1_bs_lmi_steer = 0x9E0004, -	.usb2_control = 0x9E0054, -	.usb2_stbus_obc = 0x9BFF00, -	.usb2_stbus_mess_size = 0x9BFF04, -	.usb2_stbus_chunk_size = 0x9BFF08, +	.mips_pll_setup = {.phys = CALLIOPE_ADDR(0x980000)}, +	.usb_fs = {.phys = CALLIOPE_ADDR(0x980030)}, +	.test_bus = {.phys = CALLIOPE_ADDR(0x9800CC)}, +	.crt_spare = {.phys = CALLIOPE_ADDR(0x9800d4)}, +	.usb2_ohci_int_mask = {.phys = CALLIOPE_ADDR(0x9A000c)}, +	.usb2_strap = {.phys = CALLIOPE_ADDR(0x9A0014)}, +	.ehci_hcapbase = {.phys = CALLIOPE_ADDR(0x9BFE00)}, +	.ohci_hc_revision = {.phys = CALLIOPE_ADDR(0x9BFC00)}, +	.bcm1_bs_lmi_steer = {.phys = CALLIOPE_ADDR(0x9E0004)}, +	.usb2_control = {.phys = CALLIOPE_ADDR(0x9E0054)}, +	.usb2_stbus_obc = {.phys = CALLIOPE_ADDR(0x9BFF00)}, +	.usb2_stbus_mess_size = {.phys = CALLIOPE_ADDR(0x9BFF04)}, +	.usb2_stbus_chunk_size = {.phys = CALLIOPE_ADDR(0x9BFF08)}, -	.pcie_regs = 0x000000,      	/* -doesn't exist- */ -	.tim_ch = 0xA02C10, -	.tim_cl = 0xA02C14, -	.gpio_dout = 0xA02c20, -	.gpio_din = 0xA02c24, -	.gpio_dir = 0xA02c2C, -	.watchdog = 0xA02c30, -	.front_panel = 0x000000,    	/* -not used- */ +	.pcie_regs = {.phys = 0x000000},      	/* -doesn't exist- */ +	.tim_ch = {.phys = CALLIOPE_ADDR(0xA02C10)}, +	.tim_cl = {.phys = CALLIOPE_ADDR(0xA02C14)}, +	.gpio_dout = {.phys = CALLIOPE_ADDR(0xA02c20)}, +	.gpio_din = {.phys = CALLIOPE_ADDR(0xA02c24)}, +	.gpio_dir = {.phys = CALLIOPE_ADDR(0xA02c2C)}, +	.watchdog = {.phys = CALLIOPE_ADDR(0xA02c30)}, +	.front_panel = {.phys = 0x000000},    	/* -not used- */  }; diff --git a/arch/mips/powertv/asic/asic-cronus.c b/arch/mips/powertv/asic/asic-cronus.c index 5f4589c9f83..5bb64bfb508 100644 --- a/arch/mips/powertv/asic/asic-cronus.c +++ b/arch/mips/powertv/asic/asic-cronus.c @@ -23,76 +23,79 @@   * Description:  Defines the platform resources for the SA settop.   */ +#include <linux/init.h>  #include <asm/mach-powertv/asic.h> -const struct register_map cronus_register_map = { -	.eic_slow0_strt_add = 0x000000, -	.eic_cfg_bits = 0x000038, -	.eic_ready_status = 0x00004C, +#define CRONUS_ADDR(x)	(CRONUS_IO_BASE + (x)) -	.chipver3 = 0x2A0800, -	.chipver2 = 0x2A0804, -	.chipver1 = 0x2A0808, -	.chipver0 = 0x2A080C, +const struct register_map cronus_register_map __initdata = { +	.eic_slow0_strt_add = {.phys = CRONUS_ADDR(0x000000)}, +	.eic_cfg_bits = {.phys = CRONUS_ADDR(0x000038)}, +	.eic_ready_status = {.phys = CRONUS_ADDR(0x00004C)}, + +	.chipver3 = {.phys = CRONUS_ADDR(0x2A0800)}, +	.chipver2 = {.phys = CRONUS_ADDR(0x2A0804)}, +	.chipver1 = {.phys = CRONUS_ADDR(0x2A0808)}, +	.chipver0 = {.phys = CRONUS_ADDR(0x2A080C)},  	/* The registers of IRBlaster */ -	.uart1_intstat = 0x2A1800, -	.uart1_inten = 0x2A1804, -	.uart1_config1 = 0x2A1808, -	.uart1_config2 = 0x2A180C, -	.uart1_divisorhi = 0x2A1810, -	.uart1_divisorlo = 0x2A1814, -	.uart1_data = 0x2A1818, -	.uart1_status = 0x2A181C, +	.uart1_intstat = {.phys = CRONUS_ADDR(0x2A1800)}, +	.uart1_inten = {.phys = CRONUS_ADDR(0x2A1804)}, +	.uart1_config1 = {.phys = CRONUS_ADDR(0x2A1808)}, +	.uart1_config2 = {.phys = CRONUS_ADDR(0x2A180C)}, +	.uart1_divisorhi = {.phys = CRONUS_ADDR(0x2A1810)}, +	.uart1_divisorlo = {.phys = CRONUS_ADDR(0x2A1814)}, +	.uart1_data = {.phys = CRONUS_ADDR(0x2A1818)}, +	.uart1_status = {.phys = CRONUS_ADDR(0x2A181C)}, -	.int_stat_3 = 0x2A2800, -	.int_stat_2 = 0x2A2804, -	.int_stat_1 = 0x2A2808, -	.int_stat_0 = 0x2A280C, -	.int_config = 0x2A2810, -	.int_int_scan = 0x2A2818, -	.ien_int_3 = 0x2A2830, -	.ien_int_2 = 0x2A2834, -	.ien_int_1 = 0x2A2838, -	.ien_int_0 = 0x2A283C, -	.int_level_3_3 = 0x2A2880, -	.int_level_3_2 = 0x2A2884, -	.int_level_3_1 = 0x2A2888, -	.int_level_3_0 = 0x2A288C, -	.int_level_2_3 = 0x2A2890, -	.int_level_2_2 = 0x2A2894, -	.int_level_2_1 = 0x2A2898, -	.int_level_2_0 = 0x2A289C, -	.int_level_1_3 = 0x2A28A0, -	.int_level_1_2 = 0x2A28A4, -	.int_level_1_1 = 0x2A28A8, -	.int_level_1_0 = 0x2A28AC, -	.int_level_0_3 = 0x2A28B0, -	.int_level_0_2 = 0x2A28B4, -	.int_level_0_1 = 0x2A28B8, -	.int_level_0_0 = 0x2A28BC, -	.int_docsis_en = 0x2A28F4, +	.int_stat_3 = {.phys = CRONUS_ADDR(0x2A2800)}, +	.int_stat_2 = {.phys = CRONUS_ADDR(0x2A2804)}, +	.int_stat_1 = {.phys = CRONUS_ADDR(0x2A2808)}, +	.int_stat_0 = {.phys = CRONUS_ADDR(0x2A280C)}, +	.int_config = {.phys = CRONUS_ADDR(0x2A2810)}, +	.int_int_scan = {.phys = CRONUS_ADDR(0x2A2818)}, +	.ien_int_3 = {.phys = CRONUS_ADDR(0x2A2830)}, +	.ien_int_2 = {.phys = CRONUS_ADDR(0x2A2834)}, +	.ien_int_1 = {.phys = CRONUS_ADDR(0x2A2838)}, +	.ien_int_0 = {.phys = CRONUS_ADDR(0x2A283C)}, +	.int_level_3_3 = {.phys = CRONUS_ADDR(0x2A2880)}, +	.int_level_3_2 = {.phys = CRONUS_ADDR(0x2A2884)}, +	.int_level_3_1 = {.phys = CRONUS_ADDR(0x2A2888)}, +	.int_level_3_0 = {.phys = CRONUS_ADDR(0x2A288C)}, +	.int_level_2_3 = {.phys = CRONUS_ADDR(0x2A2890)}, +	.int_level_2_2 = {.phys = CRONUS_ADDR(0x2A2894)}, +	.int_level_2_1 = {.phys = CRONUS_ADDR(0x2A2898)}, +	.int_level_2_0 = {.phys = CRONUS_ADDR(0x2A289C)}, +	.int_level_1_3 = {.phys = CRONUS_ADDR(0x2A28A0)}, +	.int_level_1_2 = {.phys = CRONUS_ADDR(0x2A28A4)}, +	.int_level_1_1 = {.phys = CRONUS_ADDR(0x2A28A8)}, +	.int_level_1_0 = {.phys = CRONUS_ADDR(0x2A28AC)}, +	.int_level_0_3 = {.phys = CRONUS_ADDR(0x2A28B0)}, +	.int_level_0_2 = {.phys = CRONUS_ADDR(0x2A28B4)}, +	.int_level_0_1 = {.phys = CRONUS_ADDR(0x2A28B8)}, +	.int_level_0_0 = {.phys = CRONUS_ADDR(0x2A28BC)}, +	.int_docsis_en = {.phys = CRONUS_ADDR(0x2A28F4)}, -	.mips_pll_setup = 0x1C0000, -	.usb_fs = 0x1C0018, -	.test_bus = 0x1C00CC, -	.crt_spare = 0x1c00d4, -	.usb2_ohci_int_mask = 0x20000C, -	.usb2_strap = 0x200014, -	.ehci_hcapbase = 0x21FE00, -	.ohci_hc_revision = 0x1E0000, -	.bcm1_bs_lmi_steer = 0x2E0008, -	.usb2_control = 0x2E004C, -	.usb2_stbus_obc = 0x21FF00, -	.usb2_stbus_mess_size = 0x21FF04, -	.usb2_stbus_chunk_size = 0x21FF08, +	.mips_pll_setup = {.phys = CRONUS_ADDR(0x1C0000)}, +	.usb_fs = {.phys = CRONUS_ADDR(0x1C0018)}, +	.test_bus = {.phys = CRONUS_ADDR(0x1C00CC)}, +	.crt_spare = {.phys = CRONUS_ADDR(0x1c00d4)}, +	.usb2_ohci_int_mask = {.phys = CRONUS_ADDR(0x20000C)}, +	.usb2_strap = {.phys = CRONUS_ADDR(0x200014)}, +	.ehci_hcapbase = {.phys = CRONUS_ADDR(0x21FE00)}, +	.ohci_hc_revision = {.phys = CRONUS_ADDR(0x1E0000)}, +	.bcm1_bs_lmi_steer = {.phys = CRONUS_ADDR(0x2E0008)}, +	.usb2_control = {.phys = CRONUS_ADDR(0x2E004C)}, +	.usb2_stbus_obc = {.phys = CRONUS_ADDR(0x21FF00)}, +	.usb2_stbus_mess_size = {.phys = CRONUS_ADDR(0x21FF04)}, +	.usb2_stbus_chunk_size = {.phys = CRONUS_ADDR(0x21FF08)}, -	.pcie_regs = 0x220000, -	.tim_ch = 0x2A2C10, -	.tim_cl = 0x2A2C14, -	.gpio_dout = 0x2A2C20, -	.gpio_din = 0x2A2C24, -	.gpio_dir = 0x2A2C2C, -	.watchdog = 0x2A2C30, -	.front_panel = 0x2A3800, +	.pcie_regs = {.phys = CRONUS_ADDR(0x220000)}, +	.tim_ch = {.phys = CRONUS_ADDR(0x2A2C10)}, +	.tim_cl = {.phys = CRONUS_ADDR(0x2A2C14)}, +	.gpio_dout = {.phys = CRONUS_ADDR(0x2A2C20)}, +	.gpio_din = {.phys = CRONUS_ADDR(0x2A2C24)}, +	.gpio_dir = {.phys = CRONUS_ADDR(0x2A2C2C)}, +	.watchdog = {.phys = CRONUS_ADDR(0x2A2C30)}, +	.front_panel = {.phys = CRONUS_ADDR(0x2A3800)},  }; diff --git a/arch/mips/powertv/asic/asic-zeus.c b/arch/mips/powertv/asic/asic-zeus.c index 1469daab920..095cbe10ebb 100644 --- a/arch/mips/powertv/asic/asic-zeus.c +++ b/arch/mips/powertv/asic/asic-zeus.c @@ -23,76 +23,79 @@   * Description:  Defines the platform resources for the SA settop.   */ +#include <linux/init.h>  #include <asm/mach-powertv/asic.h> -const struct register_map zeus_register_map = { -	.eic_slow0_strt_add = 0x000000, -	.eic_cfg_bits = 0x000038, -	.eic_ready_status = 0x00004c, +#define ZEUS_ADDR(x)	(ZEUS_IO_BASE + (x)) -	.chipver3 = 0x280800, -	.chipver2 = 0x280804, -	.chipver1 = 0x280808, -	.chipver0 = 0x28080c, +const struct register_map zeus_register_map __initdata = { +	.eic_slow0_strt_add = {.phys = ZEUS_ADDR(0x000000)}, +	.eic_cfg_bits = {.phys = ZEUS_ADDR(0x000038)}, +	.eic_ready_status = {.phys = ZEUS_ADDR(0x00004c)}, + +	.chipver3 = {.phys = ZEUS_ADDR(0x280800)}, +	.chipver2 = {.phys = ZEUS_ADDR(0x280804)}, +	.chipver1 = {.phys = ZEUS_ADDR(0x280808)}, +	.chipver0 = {.phys = ZEUS_ADDR(0x28080c)},  	/* The registers of IRBlaster */ -	.uart1_intstat = 0x281800, -	.uart1_inten = 0x281804, -	.uart1_config1 = 0x281808, -	.uart1_config2 = 0x28180C, -	.uart1_divisorhi = 0x281810, -	.uart1_divisorlo = 0x281814, -	.uart1_data = 0x281818, -	.uart1_status = 0x28181C, +	.uart1_intstat = {.phys = ZEUS_ADDR(0x281800)}, +	.uart1_inten = {.phys = ZEUS_ADDR(0x281804)}, +	.uart1_config1 = {.phys = ZEUS_ADDR(0x281808)}, +	.uart1_config2 = {.phys = ZEUS_ADDR(0x28180C)}, +	.uart1_divisorhi = {.phys = ZEUS_ADDR(0x281810)}, +	.uart1_divisorlo = {.phys = ZEUS_ADDR(0x281814)}, +	.uart1_data = {.phys = ZEUS_ADDR(0x281818)}, +	.uart1_status = {.phys = ZEUS_ADDR(0x28181C)}, -	.int_stat_3 = 0x282800, -	.int_stat_2 = 0x282804, -	.int_stat_1 = 0x282808, -	.int_stat_0 = 0x28280c, -	.int_config = 0x282810, -	.int_int_scan = 0x282818, -	.ien_int_3 = 0x282830, -	.ien_int_2 = 0x282834, -	.ien_int_1 = 0x282838, -	.ien_int_0 = 0x28283c, -	.int_level_3_3 = 0x282880, -	.int_level_3_2 = 0x282884, -	.int_level_3_1 = 0x282888, -	.int_level_3_0 = 0x28288c, -	.int_level_2_3 = 0x282890, -	.int_level_2_2 = 0x282894, -	.int_level_2_1 = 0x282898, -	.int_level_2_0 = 0x28289c, -	.int_level_1_3 = 0x2828a0, -	.int_level_1_2 = 0x2828a4, -	.int_level_1_1 = 0x2828a8, -	.int_level_1_0 = 0x2828ac, -	.int_level_0_3 = 0x2828b0, -	.int_level_0_2 = 0x2828b4, -	.int_level_0_1 = 0x2828b8, -	.int_level_0_0 = 0x2828bc, -	.int_docsis_en = 0x2828F4, +	.int_stat_3 = {.phys = ZEUS_ADDR(0x282800)}, +	.int_stat_2 = {.phys = ZEUS_ADDR(0x282804)}, +	.int_stat_1 = {.phys = ZEUS_ADDR(0x282808)}, +	.int_stat_0 = {.phys = ZEUS_ADDR(0x28280c)}, +	.int_config = {.phys = ZEUS_ADDR(0x282810)}, +	.int_int_scan = {.phys = ZEUS_ADDR(0x282818)}, +	.ien_int_3 = {.phys = ZEUS_ADDR(0x282830)}, +	.ien_int_2 = {.phys = ZEUS_ADDR(0x282834)}, +	.ien_int_1 = {.phys = ZEUS_ADDR(0x282838)}, +	.ien_int_0 = {.phys = ZEUS_ADDR(0x28283c)}, +	.int_level_3_3 = {.phys = ZEUS_ADDR(0x282880)}, +	.int_level_3_2 = {.phys = ZEUS_ADDR(0x282884)}, +	.int_level_3_1 = {.phys = ZEUS_ADDR(0x282888)}, +	.int_level_3_0 = {.phys = ZEUS_ADDR(0x28288c)}, +	.int_level_2_3 = {.phys = ZEUS_ADDR(0x282890)}, +	.int_level_2_2 = {.phys = ZEUS_ADDR(0x282894)}, +	.int_level_2_1 = {.phys = ZEUS_ADDR(0x282898)}, +	.int_level_2_0 = {.phys = ZEUS_ADDR(0x28289c)}, +	.int_level_1_3 = {.phys = ZEUS_ADDR(0x2828a0)}, +	.int_level_1_2 = {.phys = ZEUS_ADDR(0x2828a4)}, +	.int_level_1_1 = {.phys = ZEUS_ADDR(0x2828a8)}, +	.int_level_1_0 = {.phys = ZEUS_ADDR(0x2828ac)}, +	.int_level_0_3 = {.phys = ZEUS_ADDR(0x2828b0)}, +	.int_level_0_2 = {.phys = ZEUS_ADDR(0x2828b4)}, +	.int_level_0_1 = {.phys = ZEUS_ADDR(0x2828b8)}, +	.int_level_0_0 = {.phys = ZEUS_ADDR(0x2828bc)}, +	.int_docsis_en = {.phys = ZEUS_ADDR(0x2828F4)}, -	.mips_pll_setup = 0x1a0000, -	.usb_fs = 0x1a0018, -	.test_bus = 0x1a0238, -	.crt_spare = 0x1a0090, -	.usb2_ohci_int_mask = 0x1e000c, -	.usb2_strap = 0x1e0014, -	.ehci_hcapbase = 0x1FFE00, -	.ohci_hc_revision = 0x1FFC00, -	.bcm1_bs_lmi_steer = 0x2C0008, -	.usb2_control = 0x2c01a0, -	.usb2_stbus_obc = 0x1FFF00, -	.usb2_stbus_mess_size = 0x1FFF04, -	.usb2_stbus_chunk_size = 0x1FFF08, +	.mips_pll_setup = {.phys = ZEUS_ADDR(0x1a0000)}, +	.usb_fs = {.phys = ZEUS_ADDR(0x1a0018)}, +	.test_bus = {.phys = ZEUS_ADDR(0x1a0238)}, +	.crt_spare = {.phys = ZEUS_ADDR(0x1a0090)}, +	.usb2_ohci_int_mask = {.phys = ZEUS_ADDR(0x1e000c)}, +	.usb2_strap = {.phys = ZEUS_ADDR(0x1e0014)}, +	.ehci_hcapbase = {.phys = ZEUS_ADDR(0x1FFE00)}, +	.ohci_hc_revision = {.phys = ZEUS_ADDR(0x1FFC00)}, +	.bcm1_bs_lmi_steer = {.phys = ZEUS_ADDR(0x2C0008)}, +	.usb2_control = {.phys = ZEUS_ADDR(0x2c01a0)}, +	.usb2_stbus_obc = {.phys = ZEUS_ADDR(0x1FFF00)}, +	.usb2_stbus_mess_size = {.phys = ZEUS_ADDR(0x1FFF04)}, +	.usb2_stbus_chunk_size = {.phys = ZEUS_ADDR(0x1FFF08)}, -	.pcie_regs = 0x200000, -	.tim_ch = 0x282C10, -	.tim_cl = 0x282C14, -	.gpio_dout = 0x282c20, -	.gpio_din = 0x282c24, -	.gpio_dir = 0x282c2C, -	.watchdog = 0x282c30, -	.front_panel = 0x283800, +	.pcie_regs = {.phys = ZEUS_ADDR(0x200000)}, +	.tim_ch = {.phys = ZEUS_ADDR(0x282C10)}, +	.tim_cl = {.phys = ZEUS_ADDR(0x282C14)}, +	.gpio_dout = {.phys = ZEUS_ADDR(0x282c20)}, +	.gpio_din = {.phys = ZEUS_ADDR(0x282c24)}, +	.gpio_dir = {.phys = ZEUS_ADDR(0x282c2C)}, +	.watchdog = {.phys = ZEUS_ADDR(0x282c30)}, +	.front_panel = {.phys = ZEUS_ADDR(0x283800)},  }; diff --git a/arch/mips/powertv/asic/asic_devices.c b/arch/mips/powertv/asic/asic_devices.c index bae82880b6b..6a882194e06 100644 --- a/arch/mips/powertv/asic/asic_devices.c +++ b/arch/mips/powertv/asic/asic_devices.c @@ -67,8 +67,8 @@ enum asic_type asic;  unsigned int platform_features;  unsigned int platform_family; -const struct register_map  *register_map; -EXPORT_SYMBOL(register_map);			/* Exported for testing */ +struct register_map _asic_register_map; +EXPORT_SYMBOL(_asic_register_map);		/* Exported for testing */  unsigned long asic_phy_base;  unsigned long asic_base;  EXPORT_SYMBOL(asic_base);			/* Exported for testing */ @@ -418,6 +418,15 @@ void platform_unconfigure_usb_ohci()  {  } +static void __init set_register_map(unsigned long phys_base, +	const struct register_map *map) +{ +	asic_phy_base = phys_base; +	_asic_register_map = *map; +	register_map_virtualize(&_asic_register_map); +	asic_base = (unsigned long)ioremap_nocache(phys_base, ASIC_IO_SIZE); +} +  /**   * configure_platform - configuration based on platform type.   */ @@ -431,10 +440,7 @@ void __init configure_platform(void)  	case FAMILY_1500VZF:  		platform_features = FFS_CAPABLE;  		asic = ASIC_CALLIOPE; -		asic_phy_base = CALLIOPE_IO_BASE; -		register_map = &calliope_register_map; -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); +		set_register_map(CALLIOPE_IO_BASE, &calliope_register_map);  		if (platform_family == FAMILY_1500VZE) {  			gp_resources = non_dvr_vze_calliope_resources; @@ -455,10 +461,7 @@ void __init configure_platform(void)  		platform_features = FFS_CAPABLE | PCIE_CAPABLE |  			DISPLAY_CAPABLE;  		asic = ASIC_ZEUS; -		asic_phy_base = ZEUS_IO_BASE; -		register_map = &zeus_register_map; -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); +		set_register_map(ZEUS_IO_BASE, &zeus_register_map);  		gp_resources = non_dvr_zeus_resources;  		pr_info("Platform: 4500 - ZEUS, NON_DVR_CAPABLE\n"); @@ -471,11 +474,6 @@ void __init configure_platform(void)  		/* The settop has PCIE but it isn't used, so don't advertise  		 * it*/  		platform_features = FFS_CAPABLE | DISPLAY_CAPABLE; -		asic_phy_base = CRONUS_IO_BASE;   /* same as Cronus */ -		register_map = &cronus_register_map;   /* same as Cronus */ -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); -		gp_resources = non_dvr_cronuslite_resources;  		/* ASIC version will determine if this is a real CronusLite or  		 * Castrati(Cronus) */ @@ -489,6 +487,9 @@ void __init configure_platform(void)  		else  			asic = ASIC_CRONUSLITE; +		/* Cronus and Cronus Lite have the same register map */ +		set_register_map(CRONUS_IO_BASE, &cronus_register_map); +		gp_resources = non_dvr_cronuslite_resources;  		pr_info("Platform: 4600 - %s, NON_DVR_CAPABLE, "  			"chipversion=0x%08X\n",  			(asic == ASIC_CRONUS) ? "CRONUS" : "CRONUS LITE", @@ -498,10 +499,7 @@ void __init configure_platform(void)  	case FAMILY_4600VZA:  		platform_features = FFS_CAPABLE | DISPLAY_CAPABLE;  		asic = ASIC_CRONUS; -		asic_phy_base = CRONUS_IO_BASE; -		register_map = &cronus_register_map; -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); +		set_register_map(CRONUS_IO_BASE, &cronus_register_map);  		gp_resources = non_dvr_cronus_resources;  		pr_info("Platform: Vz Class A - CRONUS, NON_DVR_CAPABLE\n"); @@ -512,10 +510,7 @@ void __init configure_platform(void)  		platform_features = DVR_CAPABLE | PCIE_CAPABLE |  			DISPLAY_CAPABLE;  		asic = ASIC_ZEUS; -		asic_phy_base = ZEUS_IO_BASE; -		register_map = &zeus_register_map; -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); +		set_register_map(ZEUS_IO_BASE, &zeus_register_map);  		gp_resources = dvr_zeus_resources;  		pr_info("Platform: 8500/RNG200 - ZEUS, DVR_CAPABLE\n"); @@ -526,10 +521,7 @@ void __init configure_platform(void)  		platform_features = DVR_CAPABLE | PCIE_CAPABLE |  			DISPLAY_CAPABLE;  		asic = ASIC_CRONUS; -		asic_phy_base = CRONUS_IO_BASE; -		register_map = &cronus_register_map; -		asic_base = (unsigned long)ioremap_nocache(asic_phy_base, -			ASIC_IO_SIZE); +		set_register_map(CRONUS_IO_BASE, &cronus_register_map);  		gp_resources = dvr_cronus_resources;  		pr_info("Platform: 8600/Vz Class B - CRONUS, " diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c index 46f00691f44..31e2583ec62 100644 --- a/arch/mips/sni/rm200.c +++ b/arch/mips/sni/rm200.c @@ -404,7 +404,7 @@ void __init sni_rm200_i8259_irqs(void)  	if (!rm200_pic_master)  		return;  	rm200_pic_slave = ioremap_nocache(0x160000a0, 4); -	if (!rm200_pic_master) { +	if (!rm200_pic_slave) {  		iounmap(rm200_pic_master);  		return;  	} diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index fb37ac52e46..35c827e94e3 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -468,7 +468,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	recalc_sigpending();  	spin_unlock_irq(¤t->sighand->siglock); -	tracehook_signal_handler(sig, info, ka, regs, 0); +	tracehook_signal_handler(sig, info, ka, regs,  +		test_thread_flag(TIF_SINGLESTEP) || +		test_thread_flag(TIF_BLOCKSTEP));  	return 1;  } diff --git a/arch/powerpc/configs/40x/acadia_defconfig b/arch/powerpc/configs/40x/acadia_defconfig index 173a5bb77ca..8e95f8d227b 100644 --- a/arch/powerpc/configs/40x/acadia_defconfig +++ b/arch/powerpc/configs/40x/acadia_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:17:46 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:33:07 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -27,15 +28,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -49,11 +53,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -67,9 +75,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -84,31 +104,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -120,6 +149,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -131,8 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -140,19 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -166,6 +224,7 @@ CONFIG_CLASSIC_RCU=y  CONFIG_ACADIA=y  # CONFIG_EP405 is not set  # CONFIG_HCU4 is not set +# CONFIG_HOTFOOT is not set  # CONFIG_KILAUEA is not set  # CONFIG_MAKALU is not set  # CONFIG_WALNUT is not set @@ -208,10 +267,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -227,10 +288,12 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -255,6 +318,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -272,14 +336,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -316,6 +378,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -329,6 +392,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -341,8 +406,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -355,6 +425,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -367,9 +438,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -445,7 +516,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -461,6 +531,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -491,7 +562,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -512,6 +587,8 @@ CONFIG_MII=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -530,17 +607,18 @@ CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT=y  CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -553,6 +631,7 @@ CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -598,6 +677,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -614,6 +694,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -636,27 +721,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -678,7 +749,12 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -689,14 +765,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -706,6 +785,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -760,7 +844,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -776,6 +859,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -790,11 +874,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -804,6 +890,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -812,16 +899,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -833,35 +927,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -877,13 +981,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -892,10 +999,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -923,11 +1032,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -964,6 +1075,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -972,5 +1084,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/40x/ep405_defconfig b/arch/powerpc/configs/40x/ep405_defconfig index e9b8495cde0..918f23fd2b1 100644 --- a/arch/powerpc/configs/40x/ep405_defconfig +++ b/arch/powerpc/configs/40x/ep405_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:17:48 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:37:34 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -27,15 +28,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -49,11 +53,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -67,9 +75,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -84,31 +104,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -120,6 +149,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -131,8 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -140,19 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -166,6 +224,7 @@ CONFIG_CLASSIC_RCU=y  # CONFIG_ACADIA is not set  CONFIG_EP405=y  # CONFIG_HCU4 is not set +# CONFIG_HOTFOOT is not set  # CONFIG_KILAUEA is not set  # CONFIG_MAKALU is not set  # CONFIG_WALNUT is not set @@ -210,10 +269,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -229,10 +290,12 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -257,6 +320,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -274,14 +338,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -318,6 +380,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -331,6 +394,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -343,8 +408,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -357,6 +427,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -369,9 +440,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -447,7 +518,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -463,6 +533,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_UB is not set @@ -476,12 +547,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -501,7 +577,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -522,6 +602,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -540,7 +622,10 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -548,6 +633,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -558,9 +644,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -570,6 +660,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -579,14 +670,14 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -608,6 +699,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -653,6 +745,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -669,6 +762,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -691,27 +789,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -748,14 +832,16 @@ CONFIG_USB_MON=y  # USB Host Controller Drivers  #  # CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set  # CONFIG_USB_EHCI_HCD is not set  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PPC_OF_BE=y  CONFIG_USB_OHCI_HCD_PPC_OF_LE=y +CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PCI=y  CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y  CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y @@ -775,11 +861,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  # CONFIG_USB_TMC is not set  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # -# see USB_STORAGE Help for more information +# also be needed; see USB_STORAGE Help for more info  #  # CONFIG_USB_LIBUSUAL is not set @@ -807,7 +893,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set  # CONFIG_USB_IDMOUSE is not set  # CONFIG_USB_FTDI_ELAN is not set  # CONFIG_USB_APPLEDISPLAY is not set @@ -822,6 +907,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  #  # OTG and related infrastructure  # +# CONFIG_NOP_USB_XCEIV is not set  # CONFIG_UWB is not set  # CONFIG_MMC is not set  # CONFIG_MEMSTICK is not set @@ -831,7 +917,12 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -842,14 +933,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -859,6 +953,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -913,7 +1012,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -927,8 +1025,48 @@ CONFIG_SUNRPC=y  #  # CONFIG_PARTITION_ADVANCED is not set  CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -943,11 +1081,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -957,6 +1097,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -965,16 +1106,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -986,35 +1134,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1030,13 +1188,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -1045,10 +1206,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -1076,11 +1239,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1117,6 +1282,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1125,5 +1291,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/40x/hcu4_defconfig b/arch/powerpc/configs/40x/hcu4_defconfig index 8c019d79bf2..f87ef038228 100644 --- a/arch/powerpc/configs/40x/hcu4_defconfig +++ b/arch/powerpc/configs/40x/hcu4_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:17:50 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:45:11 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -27,15 +28,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -49,11 +53,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -67,9 +75,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -84,31 +104,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -120,6 +149,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -131,8 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -140,19 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -166,6 +224,7 @@ CONFIG_CLASSIC_RCU=y  # CONFIG_ACADIA is not set  # CONFIG_EP405 is not set  CONFIG_HCU4=y +# CONFIG_HOTFOOT is not set  # CONFIG_KILAUEA is not set  # CONFIG_MAKALU is not set  # CONFIG_WALNUT is not set @@ -208,10 +267,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -227,10 +288,12 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -255,6 +318,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -272,14 +336,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -316,6 +378,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -329,6 +392,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -341,8 +406,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -355,6 +425,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -367,9 +438,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -445,7 +516,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -461,6 +531,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -473,12 +544,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -498,7 +574,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -519,6 +599,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -537,7 +619,10 @@ CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -545,6 +630,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -555,9 +641,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -567,6 +657,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -576,14 +667,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -596,6 +686,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -641,6 +732,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -657,13 +749,17 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -680,27 +776,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -722,7 +804,12 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -733,14 +820,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -750,6 +840,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -804,7 +899,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -820,6 +914,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -834,11 +929,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -848,6 +945,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -856,16 +954,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -877,35 +982,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -921,13 +1036,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -936,10 +1054,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -967,11 +1087,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1008,6 +1130,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1016,5 +1139,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/40x/kilauea_defconfig b/arch/powerpc/configs/40x/kilauea_defconfig index 9a05ec0ec31..19fbcb07537 100644 --- a/arch/powerpc/configs/40x/kilauea_defconfig +++ b/arch/powerpc/configs/40x/kilauea_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31-rc4 -# Wed Jul 29 13:28:37 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:51:23 2010  #  # CONFIG_PPC64 is not set @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -29,7 +30,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y  CONFIG_TRACE_IRQFLAGS_SUPPORT=y @@ -52,6 +55,7 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y @@ -79,11 +83,13 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -121,22 +127,21 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y  # -# Performance Counters +# Kernel Performance Events And Counters  # +# CONFIG_PERF_EVENTS is not set  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -144,6 +149,8 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y  #  # GCOV-based kernel profiling @@ -169,14 +176,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -190,6 +224,7 @@ CONFIG_PPC4xx_PCI_EXPRESS=y  # CONFIG_ACADIA is not set  # CONFIG_EP405 is not set  # CONFIG_HCU4 is not set +# CONFIG_HOTFOOT is not set  CONFIG_KILAUEA=y  # CONFIG_MAKALU is not set  # CONFIG_WALNUT is not set @@ -233,10 +268,11 @@ CONFIG_BINFMT_ELF=y  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set  # CONFIG_SWIOTLB is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -252,8 +288,7 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set @@ -343,6 +378,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -370,7 +406,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -383,6 +425,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -395,9 +438,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -498,6 +541,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -574,16 +618,17 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -596,6 +641,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -641,6 +687,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -656,6 +703,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_HELPER_AUTO=y @@ -696,11 +744,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TAOS_EVM is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -709,10 +752,6 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set @@ -730,6 +769,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  # CONFIG_SENSORS_AD7414 is not set  # CONFIG_SENSORS_AD7418 is not set  # CONFIG_SENSORS_ADM1021 is not set @@ -753,6 +797,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_GL520SM is not set  # CONFIG_SENSORS_IT87 is not set  # CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set  CONFIG_SENSORS_LM75=y  # CONFIG_SENSORS_LM77 is not set  # CONFIG_SENSORS_LM78 is not set @@ -779,6 +824,7 @@ CONFIG_SENSORS_LM75=y  # CONFIG_SENSORS_ADS7828 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set  # CONFIG_SENSORS_VIA686A is not set  # CONFIG_SENSORS_VT1211 is not set  # CONFIG_SENSORS_VT8231 is not set @@ -790,7 +836,6 @@ CONFIG_SENSORS_LM75=y  # CONFIG_SENSORS_W83L786NG is not set  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set  CONFIG_THERMAL=y  # CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set @@ -810,10 +855,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -821,6 +869,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -868,6 +917,7 @@ CONFIG_RTC_DRV_DS1307=y  # CONFIG_RTC_DRV_PCF8563 is not set  # CONFIG_RTC_DRV_PCF8583 is not set  # CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set  # CONFIG_RTC_DRV_S35390A is not set  # CONFIG_RTC_DRV_FM3130 is not set  # CONFIG_RTC_DRV_RX8581 is not set @@ -889,7 +939,9 @@ CONFIG_RTC_DRV_DS1307=y  # CONFIG_RTC_DRV_M48T86 is not set  # CONFIG_RTC_DRV_M48T35 is not set  # CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set  # CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set  # CONFIG_RTC_DRV_V3020 is not set  # @@ -913,6 +965,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -920,6 +973,7 @@ CONFIG_EXT2_FS=y  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set  CONFIG_FILE_LOCKING=y  CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y @@ -979,7 +1033,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -1037,6 +1090,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1054,6 +1108,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1072,10 +1127,12 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1099,10 +1156,10 @@ CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set -# CONFIG_KMEMCHECK is not set  # CONFIG_PPC_DISABLE_WERROR is not set  CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64 @@ -1124,13 +1181,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -1172,11 +1232,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set diff --git a/arch/powerpc/configs/40x/makalu_defconfig b/arch/powerpc/configs/40x/makalu_defconfig index 14674754787..eb41cd69597 100644 --- a/arch/powerpc/configs/40x/makalu_defconfig +++ b/arch/powerpc/configs/40x/makalu_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.30-rc7 -# Wed Jun  3 09:11:02 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:55:12 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -29,14 +30,16 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -52,11 +55,13 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y  CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -78,11 +83,13 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -108,7 +115,6 @@ CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y  CONFIG_KALLSYMS_EXTRA_PASS=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y @@ -121,6 +127,13 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y @@ -129,7 +142,6 @@ CONFIG_COMPAT_BRK=y  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -137,6 +149,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set  # CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y @@ -149,7 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -157,14 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -178,6 +224,7 @@ CONFIG_PPC4xx_PCI_EXPRESS=y  # CONFIG_ACADIA is not set  # CONFIG_EP405 is not set  # CONFIG_HCU4 is not set +# CONFIG_HOTFOOT is not set  # CONFIG_KILAUEA is not set  CONFIG_MAKALU=y  # CONFIG_WALNUT is not set @@ -220,10 +267,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -239,9 +288,8 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set @@ -330,6 +378,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -344,6 +393,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set  # CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -356,7 +406,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -369,6 +425,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -381,9 +438,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -474,6 +531,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -504,14 +562,17 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set  # CONFIG_I2O is not set  # CONFIG_MACINTOSH_DRIVERS is not set  CONFIG_NETDEVICES=y -CONFIG_COMPAT_NET_DEV_OPS=y  # CONFIG_DUMMY is not set  # CONFIG_BONDING is not set  # CONFIG_MACVLAN is not set @@ -546,16 +607,18 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -568,6 +631,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -613,6 +677,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -629,6 +694,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -651,27 +721,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -695,6 +751,10 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_DMADEVICES is not set  # CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -705,14 +765,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -770,7 +833,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -818,6 +880,7 @@ CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y  CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -827,6 +890,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -844,10 +908,14 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -859,11 +927,12 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -873,24 +942,26 @@ CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_TRACING_SUPPORT=y - -# -# Tracers -# +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set -# CONFIG_EVENT_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set @@ -910,13 +981,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -958,11 +1032,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set diff --git a/arch/powerpc/configs/40x/walnut_defconfig b/arch/powerpc/configs/40x/walnut_defconfig index 5ab29dddd21..bfff0eae39d 100644 --- a/arch/powerpc/configs/40x/walnut_defconfig +++ b/arch/powerpc/configs/40x/walnut_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:17:57 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:56:30 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -27,15 +28,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -49,11 +53,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -67,9 +75,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -84,31 +104,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -120,6 +149,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -131,8 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -140,19 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -166,6 +224,7 @@ CONFIG_CLASSIC_RCU=y  # CONFIG_ACADIA is not set  # CONFIG_EP405 is not set  # CONFIG_HCU4 is not set +# CONFIG_HOTFOOT is not set  # CONFIG_KILAUEA is not set  # CONFIG_MAKALU is not set  CONFIG_WALNUT=y @@ -211,10 +270,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -230,10 +291,12 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -258,6 +321,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -275,14 +339,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -319,6 +381,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -332,6 +395,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -344,8 +409,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -358,6 +428,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -370,9 +441,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -448,7 +519,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -464,6 +534,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -476,12 +547,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -501,7 +577,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -522,6 +602,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -540,7 +622,10 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -548,6 +633,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -558,9 +644,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -570,6 +660,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -579,14 +670,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -599,6 +689,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -644,6 +735,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -660,6 +752,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -682,27 +779,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -727,7 +810,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -743,7 +826,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -754,14 +842,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -771,6 +862,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -825,7 +921,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -841,6 +936,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -855,11 +951,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -869,6 +967,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -877,16 +976,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -898,35 +1004,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -942,13 +1058,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -957,10 +1076,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -988,11 +1109,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1029,6 +1152,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1037,5 +1161,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/arches_defconfig b/arch/powerpc/configs/44x/arches_defconfig index 6f976b51cdd..1f6d0490e28 100644 --- a/arch/powerpc/configs/44x/arches_defconfig +++ b/arch/powerpc/configs/44x/arches_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31-rc5 -# Thu Aug 13 14:14:07 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:02:35 2010  #  # CONFIG_PPC64 is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -33,7 +34,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y  CONFIG_TRACE_IRQFLAGS_SUPPORT=y @@ -56,6 +59,7 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y @@ -83,11 +87,13 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_GROUP_SCHED is not set @@ -121,22 +127,21 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y  # -# Performance Counters +# Kernel Performance Events And Counters  # +# CONFIG_PERF_EVENTS is not set  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -144,6 +149,8 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y  #  # GCOV-based kernel profiling @@ -169,14 +176,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -198,6 +232,7 @@ CONFIG_ARCHES=y  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set  # CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -241,10 +276,11 @@ CONFIG_BINFMT_ELF=y  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set  # CONFIG_SWIOTLB is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -260,8 +296,7 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y @@ -352,6 +387,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -379,7 +415,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -392,6 +434,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -404,9 +447,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -497,6 +540,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -573,16 +617,17 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -595,6 +640,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -640,6 +686,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -656,6 +703,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_HELPER_AUTO=y @@ -696,11 +744,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TAOS_EVM is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -709,10 +752,6 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set @@ -730,6 +769,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_AD7418 is not set  # CONFIG_SENSORS_ADM1021 is not set @@ -753,6 +797,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_GL520SM is not set  # CONFIG_SENSORS_IT87 is not set  # CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set  # CONFIG_SENSORS_LM75 is not set  # CONFIG_SENSORS_LM77 is not set  # CONFIG_SENSORS_LM78 is not set @@ -779,6 +824,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_ADS7828 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set  # CONFIG_SENSORS_VIA686A is not set  # CONFIG_SENSORS_VT1211 is not set  # CONFIG_SENSORS_VT8231 is not set @@ -790,9 +836,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_W83L786NG is not set  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -810,10 +854,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -821,6 +868,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -858,6 +906,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -865,6 +914,7 @@ CONFIG_EXT2_FS=y  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set  CONFIG_FILE_LOCKING=y  CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y @@ -934,7 +984,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -993,6 +1042,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1010,6 +1060,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1028,10 +1079,12 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1055,10 +1108,10 @@ CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set -# CONFIG_KMEMCHECK is not set  # CONFIG_PPC_DISABLE_WERROR is not set  CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64 @@ -1080,7 +1133,11 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/bamboo_defconfig b/arch/powerpc/configs/44x/bamboo_defconfig index e57f1e4c179..788faac6c27 100644 --- a/arch/powerpc/configs/44x/bamboo_defconfig +++ b/arch/powerpc/configs/44x/bamboo_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:33 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:09:03 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -53,11 +57,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -71,9 +79,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -88,8 +108,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -99,19 +123,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -123,6 +153,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -134,8 +172,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -143,19 +180,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -176,6 +235,8 @@ CONFIG_BAMBOO=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -218,10 +279,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -237,10 +300,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -265,6 +331,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -282,14 +349,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -326,6 +391,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -339,6 +405,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -351,8 +419,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -365,6 +438,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -386,6 +460,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -398,12 +473,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -423,7 +503,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -444,6 +528,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -462,7 +548,10 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -470,6 +559,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -480,9 +570,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -492,6 +586,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -501,14 +596,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -521,6 +615,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -566,6 +661,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -582,6 +678,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -604,27 +705,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -649,7 +736,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -665,7 +752,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -676,14 +768,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -693,6 +788,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -746,7 +846,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -762,6 +861,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -776,11 +876,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -790,6 +892,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -798,16 +901,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -819,35 +929,45 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -863,13 +983,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -878,10 +1001,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -909,11 +1034,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -950,6 +1077,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -958,5 +1086,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/canyonlands_defconfig b/arch/powerpc/configs/44x/canyonlands_defconfig index b312b166be6..4ef8bcab61f 100644 --- a/arch/powerpc/configs/44x/canyonlands_defconfig +++ b/arch/powerpc/configs/44x/canyonlands_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31-rc4 -# Wed Jul 29 17:27:20 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:12:20 2010  #  # CONFIG_PPC64 is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -33,7 +34,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y  CONFIG_TRACE_IRQFLAGS_SUPPORT=y @@ -56,6 +59,7 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y @@ -83,11 +87,13 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_GROUP_SCHED is not set @@ -121,22 +127,21 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y  # -# Performance Counters +# Kernel Performance Events And Counters  # +# CONFIG_PERF_EVENTS is not set  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -144,6 +149,8 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y  #  # GCOV-based kernel profiling @@ -169,14 +176,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -198,6 +232,7 @@ CONFIG_PPC4xx_PCI_EXPRESS=y  CONFIG_CANYONLANDS=y  # CONFIG_GLACIER is not set  # CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -241,10 +276,11 @@ CONFIG_BINFMT_ELF=y  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set  # CONFIG_SWIOTLB is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -260,8 +296,7 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y @@ -352,6 +387,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -379,7 +415,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -392,6 +434,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -404,9 +447,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -508,6 +551,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_UB is not set @@ -585,16 +629,18 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -616,6 +662,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -661,6 +708,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -676,6 +724,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_HELPER_AUTO=y @@ -717,11 +766,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TINY_USB is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -730,10 +774,6 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set @@ -751,6 +791,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_AD7418 is not set  # CONFIG_SENSORS_ADM1021 is not set @@ -774,6 +819,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_GL520SM is not set  # CONFIG_SENSORS_IT87 is not set  # CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set  # CONFIG_SENSORS_LM75 is not set  # CONFIG_SENSORS_LM77 is not set  # CONFIG_SENSORS_LM78 is not set @@ -800,6 +846,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_ADS7828 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set  # CONFIG_SENSORS_VIA686A is not set  # CONFIG_SENSORS_VT1211 is not set  # CONFIG_SENSORS_VT8231 is not set @@ -811,9 +858,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_W83L786NG is not set  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -831,10 +876,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -842,6 +890,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -882,10 +931,12 @@ CONFIG_USB_MON=y  CONFIG_USB_EHCI_HCD=m  # CONFIG_USB_EHCI_ROOT_HUB_TT is not set  # CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_XPS_USB_HCD_XILINX is not set  CONFIG_USB_EHCI_HCD_PPC_OF=y  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=y  CONFIG_USB_OHCI_HCD_PPC_OF_BE=y  CONFIG_USB_OHCI_HCD_PPC_OF_LE=y @@ -993,6 +1044,7 @@ CONFIG_RTC_INTF_DEV=y  # CONFIG_RTC_DRV_PCF8583 is not set  CONFIG_RTC_DRV_M41T80=y  # CONFIG_RTC_DRV_M41T80_WDT is not set +# CONFIG_RTC_DRV_BQ32K is not set  # CONFIG_RTC_DRV_S35390A is not set  # CONFIG_RTC_DRV_FM3130 is not set  # CONFIG_RTC_DRV_RX8581 is not set @@ -1014,7 +1066,9 @@ CONFIG_RTC_DRV_M41T80=y  # CONFIG_RTC_DRV_M48T86 is not set  # CONFIG_RTC_DRV_M48T35 is not set  # CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set  # CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set  # CONFIG_RTC_DRV_V3020 is not set  # @@ -1038,6 +1092,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -1045,6 +1100,7 @@ CONFIG_EXT2_FS=y  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set  CONFIG_FILE_LOCKING=y  CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y @@ -1104,7 +1160,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -1201,6 +1256,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1218,6 +1274,7 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set  # CONFIG_DEBUG_RT_MUTEXES is not set  # CONFIG_RT_MUTEX_TESTER is not set  # CONFIG_DEBUG_SPINLOCK is not set @@ -1236,10 +1293,12 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1263,10 +1322,10 @@ CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set -# CONFIG_KMEMCHECK is not set  # CONFIG_PPC_DISABLE_WERROR is not set  CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64 @@ -1288,7 +1347,11 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/ebony_defconfig b/arch/powerpc/configs/44x/ebony_defconfig index b652f7dcab5..ca17b1496e3 100644 --- a/arch/powerpc/configs/44x/ebony_defconfig +++ b/arch/powerpc/configs/44x/ebony_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:36 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:20:46 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -19,6 +19,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -30,15 +31,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -52,11 +56,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -70,9 +78,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -87,31 +107,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -123,6 +152,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -134,8 +171,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -143,19 +179,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -176,6 +234,8 @@ CONFIG_EBONY=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  # CONFIG_PPC44x_SIMPLE is not set @@ -218,10 +278,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  CONFIG_MATH_EMULATION=y  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -237,10 +299,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -264,6 +329,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -281,14 +347,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -325,6 +389,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -338,6 +403,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -350,8 +417,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -364,6 +436,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -376,9 +449,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  # CONFIG_MTD_CMDLINE_PARTS is not set  CONFIG_MTD_OF_PARTS=y @@ -453,7 +526,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -469,6 +541,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -481,12 +554,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -506,7 +584,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -527,6 +609,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -545,7 +629,10 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -553,6 +640,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -563,9 +651,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -575,6 +667,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -584,14 +677,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -604,6 +696,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -649,6 +742,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -665,6 +759,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -687,27 +786,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -732,7 +817,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -748,7 +833,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -759,14 +849,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -776,6 +869,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -840,7 +938,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -856,6 +953,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -871,11 +969,13 @@ CONFIG_CRC32=y  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y  CONFIG_ZLIB_DEFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -885,6 +985,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -893,16 +994,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -914,35 +1022,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -958,13 +1076,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -973,10 +1094,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -1004,11 +1127,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1045,6 +1170,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # diff --git a/arch/powerpc/configs/44x/eiger_defconfig b/arch/powerpc/configs/44x/eiger_defconfig index 007f3bd939e..e3149bade0b 100644 --- a/arch/powerpc/configs/44x/eiger_defconfig +++ b/arch/powerpc/configs/44x/eiger_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31-rc6 -# Wed Aug 19 13:06:50 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:33:04 2010  #  # CONFIG_PPC64 is not set @@ -34,7 +34,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y  CONFIG_TRACE_IRQFLAGS_SUPPORT=y @@ -57,6 +59,7 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y @@ -84,11 +87,13 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_GROUP_SCHED is not set @@ -122,22 +127,21 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y  # -# Performance Counters +# Kernel Performance Events And Counters  # +# CONFIG_PERF_EVENTS is not set  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -145,6 +149,8 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y  #  # GCOV-based kernel profiling @@ -170,14 +176,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -243,10 +276,11 @@ CONFIG_BINFMT_ELF=y  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set  # CONFIG_SWIOTLB is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -262,8 +296,7 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y @@ -358,6 +391,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -387,14 +421,11 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_AF_RXRPC is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set  #  # CFG80211 needs to be enabled for MAC80211  # -CONFIG_MAC80211_DEFAULT_PS_VALUE=0  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -407,6 +438,7 @@ CONFIG_MAC80211_DEFAULT_PS_VALUE=0  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -419,9 +451,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  CONFIG_MTD_CONCAT=y  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -522,6 +554,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -573,8 +606,11 @@ CONFIG_SCSI_SAS_ATTRS=y  CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set  # CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_BE2ISCSI is not set  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set  # CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set @@ -611,7 +647,10 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_DC390T is not set  # CONFIG_SCSI_NSP32 is not set  # CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_BFA_FC is not set  # CONFIG_SCSI_DH is not set  # CONFIG_SCSI_OSD_INITIATOR is not set  # CONFIG_ATA is not set @@ -682,7 +721,9 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -711,12 +752,11 @@ CONFIG_E1000E=y  # CONFIG_JME is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -730,6 +770,7 @@ CONFIG_E1000E=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -775,6 +816,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -791,6 +833,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_HELPER_AUTO=y @@ -831,11 +874,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TAOS_EVM is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -844,10 +882,6 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set  # CONFIG_SENSORS_TSL2550 is not set  CONFIG_I2C_DEBUG_CORE=y  CONFIG_I2C_DEBUG_ALGO=y @@ -865,7 +899,6 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -883,10 +916,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set @@ -894,6 +930,7 @@ CONFIG_SSB_POSSIBLE=y  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -935,6 +972,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set @@ -942,6 +980,7 @@ CONFIG_EXT2_FS=y  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set  CONFIG_FILE_LOCKING=y  CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y @@ -1001,7 +1040,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -1059,6 +1097,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1095,10 +1134,12 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1122,10 +1163,10 @@ CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set -# CONFIG_KMEMCHECK is not set  # CONFIG_PPC_DISABLE_WERROR is not set  CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64 @@ -1147,13 +1188,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD=y @@ -1197,11 +1241,13 @@ CONFIG_CRYPTO_XTS=y  #  CONFIG_CRYPTO_HMAC=y  CONFIG_CRYPTO_XCBC=y +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_GHASH=y  CONFIG_CRYPTO_MD4=y  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set diff --git a/arch/powerpc/configs/44x/katmai_defconfig b/arch/powerpc/configs/44x/katmai_defconfig index c23a4ef13e4..dec901f9cc8 100644 --- a/arch/powerpc/configs/44x/katmai_defconfig +++ b/arch/powerpc/configs/44x/katmai_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:38 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:55:34 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -19,6 +19,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -30,15 +31,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -52,11 +56,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -70,9 +78,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_GROUP_SCHED is not set @@ -83,8 +103,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -94,19 +118,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -118,6 +148,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -129,8 +166,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -138,19 +174,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -171,6 +229,8 @@ CONFIG_KATMAI=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -212,10 +272,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -231,10 +293,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -259,6 +324,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -276,14 +342,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -320,6 +384,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -333,6 +398,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -345,8 +412,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -359,6 +431,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -380,6 +453,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -392,12 +466,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -417,7 +496,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -440,6 +523,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -458,7 +543,10 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -466,6 +554,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -476,9 +565,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -488,6 +581,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -497,14 +591,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -517,6 +610,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -562,6 +656,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -578,13 +673,17 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -601,27 +700,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -646,7 +731,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -662,7 +747,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -673,14 +763,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -690,6 +783,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -743,7 +841,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -759,6 +856,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -773,11 +871,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -787,6 +887,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set @@ -795,16 +896,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -816,35 +924,43 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -859,13 +975,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -874,10 +993,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -905,11 +1026,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -946,6 +1069,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -954,5 +1078,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/rainier_defconfig b/arch/powerpc/configs/44x/rainier_defconfig index b25fad1343d..8fed3b26af2 100644 --- a/arch/powerpc/configs/44x/rainier_defconfig +++ b/arch/powerpc/configs/44x/rainier_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:41 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 14:59:12 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -19,6 +19,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -30,15 +31,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -52,11 +56,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -70,9 +78,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -87,8 +107,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -98,19 +122,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -122,6 +152,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -133,8 +171,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -142,19 +179,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -175,6 +234,8 @@ CONFIG_RAINIER=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -216,10 +277,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  CONFIG_MATH_EMULATION=y  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -235,10 +298,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -263,6 +329,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -280,14 +347,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -324,6 +389,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -337,6 +403,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -349,8 +417,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -363,6 +436,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -375,9 +449,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -453,7 +527,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -469,6 +542,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -481,12 +555,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -506,7 +585,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -533,6 +616,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -543,9 +627,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -555,6 +643,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -564,14 +653,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -584,6 +672,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -629,6 +718,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -645,6 +735,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -667,27 +762,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -712,7 +793,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -728,7 +809,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -739,14 +825,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -756,6 +845,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -820,7 +914,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -836,6 +929,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -851,11 +945,13 @@ CONFIG_CRC32=y  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y  CONFIG_ZLIB_DEFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -865,6 +961,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -873,16 +970,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -894,35 +998,45 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -942,6 +1056,7 @@ CONFIG_PPC_EARLY_DEBUG=y  CONFIG_PPC_EARLY_DEBUG_44x=y  # CONFIG_PPC_EARLY_DEBUG_40x is not set  # CONFIG_PPC_EARLY_DEBUG_CPM is not set +# CONFIG_PPC_EARLY_DEBUG_USBGECKO is not set  CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300  CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1 @@ -951,13 +1066,16 @@ CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -966,10 +1084,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -997,11 +1117,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1038,6 +1160,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1046,5 +1169,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/redwood_defconfig b/arch/powerpc/configs/44x/redwood_defconfig index ed31d4f17b5..a67ec91a28c 100644 --- a/arch/powerpc/configs/44x/redwood_defconfig +++ b/arch/powerpc/configs/44x/redwood_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc3 -# Wed Feb  4 14:31:09 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:05:05 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -53,11 +57,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -71,6 +79,7 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set @@ -78,11 +87,13 @@ CONFIG_POSIX_MQUEUE=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_GROUP_SCHED is not set @@ -93,8 +104,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -104,19 +119,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -128,6 +149,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -139,8 +168,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -148,14 +176,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -177,6 +232,7 @@ CONFIG_PPC4xx_PCI_EXPRESS=y  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set  CONFIG_REDWOOD=y +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -219,10 +275,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -238,10 +296,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -262,12 +323,15 @@ CONFIG_PCI_DOMAINS=y  CONFIG_PCI_SYSCALL=y  CONFIG_PCIEPORTBUS=y  CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set +# CONFIG_PCIEAER_INJECT is not set  # CONFIG_PCIEASPM is not set  CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_MSI is not set  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -285,14 +349,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -329,6 +391,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -342,6 +405,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -354,13 +419,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set -# CONFIG_MAC80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -373,6 +438,7 @@ CONFIG_WIRELESS_OLD_REGULATORY=y  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -385,9 +451,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  CONFIG_MTD_CONCAT=y  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -462,7 +528,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -479,6 +544,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -512,10 +578,6 @@ CONFIG_BLK_DEV_SD=y  # CONFIG_BLK_DEV_SR is not set  CONFIG_CHR_DEV_SG=y  # CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  # CONFIG_SCSI_CONSTANTS is not set  # CONFIG_SCSI_LOGGING is not set @@ -533,23 +595,30 @@ CONFIG_SCSI_SAS_ATTRS=y  # CONFIG_SCSI_SRP_ATTRS is not set  CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_BE2ISCSI is not set  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set  # CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set  # CONFIG_SCSI_AIC7XXX_OLD is not set  # CONFIG_SCSI_AIC79XX is not set  # CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_MVSAS is not set  # CONFIG_SCSI_DPT_I2O is not set  # CONFIG_SCSI_ADVANSYS is not set  # CONFIG_SCSI_ARCMSR is not set  # CONFIG_MEGARAID_NEWGEN is not set  # CONFIG_MEGARAID_LEGACY is not set  # CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_MPT2SAS is not set  # CONFIG_SCSI_HPTIOP is not set  # CONFIG_SCSI_BUSLOGIC is not set  # CONFIG_LIBFC is not set +# CONFIG_LIBFCOE is not set  # CONFIG_FCOE is not set  # CONFIG_SCSI_DMX3191D is not set  # CONFIG_SCSI_EATA is not set @@ -558,7 +627,6 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_IPS is not set  # CONFIG_SCSI_INITIO is not set  # CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_MVSAS is not set  # CONFIG_SCSI_STEX is not set  # CONFIG_SCSI_SYM53C8XX_2 is not set  # CONFIG_SCSI_QLOGIC_1280 is not set @@ -569,8 +637,12 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_DC390T is not set  # CONFIG_SCSI_NSP32 is not set  # CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_BFA_FC is not set  # CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set  # CONFIG_ATA is not set  # CONFIG_MD is not set  CONFIG_FUSION=y @@ -586,7 +658,11 @@ CONFIG_FUSION_MAX_SGE=128  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -614,6 +690,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -632,7 +710,10 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -640,6 +721,7 @@ CONFIG_NETDEV_1000=y  CONFIG_E1000E=y  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -650,19 +732,21 @@ CONFIG_E1000E=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -676,6 +760,7 @@ CONFIG_E1000E=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -721,6 +806,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -737,6 +823,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_HELPER_AUTO=y @@ -777,11 +864,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TAOS_EVM is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -790,25 +872,23 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set  # CONFIG_SENSORS_TSL2550 is not set  CONFIG_I2C_DEBUG_CORE=y  CONFIG_I2C_DEBUG_ALGO=y  CONFIG_I2C_DEBUG_BUS=y  CONFIG_I2C_DEBUG_CHIP=y  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -826,31 +906,21 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set +# CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -876,7 +946,12 @@ CONFIG_DMADEVICES=y  #  # DMA Devices  # +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -887,14 +962,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -904,6 +982,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -958,7 +1041,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -974,6 +1056,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -988,11 +1071,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -1002,6 +1087,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1010,16 +1096,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -1031,35 +1124,45 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1075,13 +1178,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD=y @@ -1092,10 +1198,12 @@ CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  CONFIG_CRYPTO_GF128MUL=y  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  CONFIG_CRYPTO_CRYPTD=y  CONFIG_CRYPTO_AUTHENC=y  # CONFIG_CRYPTO_TEST is not set @@ -1123,11 +1231,13 @@ CONFIG_CRYPTO_XTS=y  #  CONFIG_CRYPTO_HMAC=y  CONFIG_CRYPTO_XCBC=y +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_GHASH=y  CONFIG_CRYPTO_MD4=y  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1164,6 +1274,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1172,5 +1283,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/sam440ep_defconfig b/arch/powerpc/configs/44x/sam440ep_defconfig index e14e89a5e06..886cb6aa643 100644 --- a/arch/powerpc/configs/44x/sam440ep_defconfig +++ b/arch/powerpc/configs/44x/sam440ep_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:42 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:11:24 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -53,11 +57,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -71,9 +79,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  CONFIG_IKCONFIG=y  # CONFIG_IKCONFIG_PROC is not set  CONFIG_LOG_BUF_SHIFT=14 @@ -89,8 +109,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -99,19 +123,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -123,6 +153,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -134,8 +171,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -143,19 +179,41 @@ CONFIG_BLOCK=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  # CONFIG_IOSCHED_DEADLINE is not set  # CONFIG_IOSCHED_CFQ is not set -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set  # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -176,6 +234,8 @@ CONFIG_SAM440EP=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  # CONFIG_PPC44x_SIMPLE is not set @@ -218,10 +278,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -237,10 +299,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -264,6 +329,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_MSI is not set  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -281,14 +347,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -325,6 +389,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -338,6 +403,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -350,8 +417,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -364,6 +436,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -385,6 +458,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=y  # CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_UB is not set @@ -420,10 +494,6 @@ CONFIG_BLK_DEV_SR=y  # CONFIG_BLK_DEV_SR_VENDOR is not set  CONFIG_CHR_DEV_SG=y  # CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  # CONFIG_SCSI_CONSTANTS is not set  # CONFIG_SCSI_LOGGING is not set @@ -440,8 +510,10 @@ CONFIG_SCSI_WAIT_SCAN=m  # CONFIG_SCSI_SRP_ATTRS is not set  # CONFIG_SCSI_LOWLEVEL is not set  # CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set  CONFIG_ATA=y  # CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y  # CONFIG_SATA_PMP is not set  # CONFIG_SATA_AHCI is not set  # CONFIG_SATA_SIL24 is not set @@ -463,6 +535,7 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_ALI is not set  # CONFIG_PATA_AMD is not set  # CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATP867X is not set  # CONFIG_PATA_ATIIXP is not set  # CONFIG_PATA_CMD640_PCI is not set  # CONFIG_PATA_CMD64X is not set @@ -488,14 +561,16 @@ CONFIG_SATA_SIL=y  # CONFIG_PATA_NS87415 is not set  # CONFIG_PATA_OPTI is not set  # CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set  # CONFIG_PATA_PDC_OLD is not set  # CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set  # CONFIG_PATA_RZ1000 is not set  # CONFIG_PATA_SC1200 is not set  # CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set  # CONFIG_PATA_SIL680 is not set  # CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set  # CONFIG_PATA_VIA is not set  # CONFIG_PATA_WINBOND is not set  # CONFIG_PATA_PLATFORM is not set @@ -508,7 +583,11 @@ CONFIG_SATA_SIL=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -529,6 +608,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -547,17 +628,19 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -580,6 +663,7 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -589,6 +673,7 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  CONFIG_INPUT=y  CONFIG_INPUT_FF_MEMLESS=m  # CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set  #  # Userland interfaces @@ -605,25 +690,30 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768  # Input Device Drivers  #  CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set  CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_QT2160 is not set  # CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_MAX7359 is not set  # CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set  # CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set  CONFIG_INPUT_MOUSE=y  CONFIG_MOUSE_PS2=y  CONFIG_MOUSE_PS2_ALPS=y  CONFIG_MOUSE_PS2_LOGIPS2PP=y  CONFIG_MOUSE_PS2_SYNAPTICS=y -CONFIG_MOUSE_PS2_LIFEBOOK=y  CONFIG_MOUSE_PS2_TRACKPOINT=y  # CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set  # CONFIG_MOUSE_PS2_TOUCHKIT is not set  # CONFIG_MOUSE_SERIAL is not set  # CONFIG_MOUSE_APPLETOUCH is not set  # CONFIG_MOUSE_BCM5974 is not set  # CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set  # CONFIG_INPUT_JOYSTICK is not set  # CONFIG_INPUT_TABLET is not set  # CONFIG_INPUT_TOUCHSCREEN is not set @@ -639,6 +729,7 @@ CONFIG_SERIO_SERPORT=y  CONFIG_SERIO_LIBPS2=y  # CONFIG_SERIO_RAW is not set  # CONFIG_SERIO_XILINX_XPS_PS2 is not set +# CONFIG_SERIO_ALTERA_PS2 is not set  # CONFIG_GAMEPORT is not set  # @@ -676,6 +767,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -691,6 +783,7 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  # CONFIG_I2C_CHARDEV is not set  CONFIG_I2C_HELPER_AUTO=y  CONFIG_I2C_ALGOBIT=y @@ -733,11 +826,6 @@ CONFIG_I2C_IBM_IIC=y  # CONFIG_I2C_TINY_USB is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -746,27 +834,23 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set  # CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -784,31 +868,21 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set +# CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=y @@ -870,6 +944,7 @@ CONFIG_FB_RADEON_BACKLIGHT=y  # CONFIG_FB_VIRTUAL is not set  # CONFIG_FB_METRONOME is not set  # CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set  CONFIG_BACKLIGHT_LCD_SUPPORT=y  CONFIG_LCD_CLASS_DEVICE=y  # CONFIG_LCD_ILI9320 is not set @@ -899,7 +974,6 @@ CONFIG_LOGO_LINUX_CLUT224=y  # CONFIG_SOUND is not set  CONFIG_HID_SUPPORT=y  CONFIG_HID=y -# CONFIG_HID_DEBUG is not set  # CONFIG_HIDRAW is not set  # @@ -912,15 +986,18 @@ CONFIG_USB_HID=y  #  # Special HID drivers  # -CONFIG_HID_COMPAT=y  CONFIG_HID_A4TECH=y  CONFIG_HID_APPLE=y  CONFIG_HID_BELKIN=y  CONFIG_HID_CHERRY=y  CONFIG_HID_CHICONY=y  CONFIG_HID_CYPRESS=y +# CONFIG_HID_DRAGONRISE is not set  CONFIG_HID_EZKEY=y +# CONFIG_HID_KYE is not set  CONFIG_HID_GYRATION=y +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set  CONFIG_HID_LOGITECH=y  # CONFIG_LOGITECH_FF is not set  # CONFIG_LOGIRUMBLEPAD2_FF is not set @@ -933,10 +1010,11 @@ CONFIG_HID_PETALYNX=y  CONFIG_HID_SAMSUNG=y  CONFIG_HID_SONY=y  CONFIG_HID_SUNPLUS=y -# CONFIG_GREENASIA_FF is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set  # CONFIG_HID_TOPSEED is not set -CONFIG_THRUSTMASTER_FF=m -CONFIG_ZEROPLUS_FF=m +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set  CONFIG_USB_SUPPORT=y  CONFIG_USB_ARCH_HAS_HCD=y  CONFIG_USB_ARCH_HAS_OHCI=y @@ -962,17 +1040,20 @@ CONFIG_USB_DEVICEFS=y  # USB Host Controller Drivers  #  # CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set  CONFIG_USB_EHCI_HCD=m  # CONFIG_USB_EHCI_ROOT_HUB_TT is not set  # CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_XPS_USB_HCD_XILINX is not set  CONFIG_USB_EHCI_HCD_PPC_OF=y  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PPC_OF_BE=y  CONFIG_USB_OHCI_HCD_PPC_OF_LE=y +CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PCI=y  CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y  CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y @@ -992,11 +1073,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  # CONFIG_USB_TMC is not set  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # -# see USB_STORAGE Help for more information +# also be needed; see USB_STORAGE Help for more info  #  CONFIG_USB_STORAGE=m  # CONFIG_USB_STORAGE_DEBUG is not set @@ -1038,7 +1119,6 @@ CONFIG_USB_STORAGE=m  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set  # CONFIG_USB_IDMOUSE is not set  # CONFIG_USB_FTDI_ELAN is not set  # CONFIG_USB_APPLEDISPLAY is not set @@ -1054,6 +1134,7 @@ CONFIG_USB_STORAGE=m  #  # OTG and related infrastructure  # +# CONFIG_NOP_USB_XCEIV is not set  # CONFIG_UWB is not set  # CONFIG_MMC is not set  # CONFIG_MEMSTICK is not set @@ -1090,9 +1171,11 @@ CONFIG_RTC_INTF_DEV=y  # CONFIG_RTC_DRV_PCF8583 is not set  CONFIG_RTC_DRV_M41T80=y  CONFIG_RTC_DRV_M41T80_WDT=y +# CONFIG_RTC_DRV_BQ32K is not set  # CONFIG_RTC_DRV_S35390A is not set  # CONFIG_RTC_DRV_FM3130 is not set  # CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set  #  # SPI RTC drivers @@ -1110,15 +1193,22 @@ CONFIG_RTC_DRV_M41T80_WDT=y  # CONFIG_RTC_DRV_M48T86 is not set  # CONFIG_RTC_DRV_M48T35 is not set  # CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set  # CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set  # CONFIG_RTC_DRV_V3020 is not set  #  # on-CPU RTC drivers  # -# CONFIG_RTC_DRV_PPC is not set +# CONFIG_RTC_DRV_GENERIC is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -1130,6 +1220,7 @@ CONFIG_EXT2_FS_POSIX_ACL=y  # CONFIG_EXT2_FS_SECURITY is not set  # CONFIG_EXT2_FS_XIP is not set  CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set  CONFIG_EXT3_FS_XATTR=y  CONFIG_EXT3_FS_POSIX_ACL=y  # CONFIG_EXT3_FS_SECURITY is not set @@ -1142,10 +1233,13 @@ CONFIG_REISERFS_FS=y  # CONFIG_REISERFS_FS_XATTR is not set  # CONFIG_JFS_FS is not set  CONFIG_FS_POSIX_ACL=y -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -1155,6 +1249,11 @@ CONFIG_AUTOFS4_FS=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  CONFIG_ISO9660_FS=y @@ -1267,6 +1366,7 @@ CONFIG_NLS_ISO8859_1=y  # CONFIG_NLS_KOI8_U is not set  # CONFIG_NLS_UTF8 is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -1281,11 +1381,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -1295,27 +1397,29 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set -# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_MEMORY_INIT is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_IRQSTACKS is not set  # CONFIG_PPC_EARLY_DEBUG is not set @@ -1326,7 +1430,11 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  # CONFIG_CRYPTO is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/sequoia_defconfig b/arch/powerpc/configs/44x/sequoia_defconfig index 6400aae04dd..1b2f41dbcaf 100644 --- a/arch/powerpc/configs/44x/sequoia_defconfig +++ b/arch/powerpc/configs/44x/sequoia_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29 -# Tue Apr  7 17:04:52 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:15:51 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -53,12 +57,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y  CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -72,6 +79,7 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set @@ -79,11 +87,13 @@ CONFIG_POSIX_MQUEUE=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -121,6 +131,13 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y @@ -129,7 +146,6 @@ CONFIG_COMPAT_BRK=y  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -137,6 +153,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set  # CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y @@ -149,7 +172,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -157,14 +180,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -186,6 +236,7 @@ CONFIG_SEQUOIA=y  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set  # CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -228,10 +279,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -247,9 +300,8 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set @@ -293,11 +345,11 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # Default settings for advanced configuration options are used  #  CONFIG_LOWMEM_SIZE=0x30000000 -CONFIG_LOWMEM_CAM_NUM=3  CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 +CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  # @@ -339,6 +391,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -353,6 +406,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set  # CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -365,7 +419,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -378,6 +438,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -390,9 +451,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -493,6 +554,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -515,6 +577,7 @@ CONFIG_MISC_DEVICES=y  # EEPROM support  #  # CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -534,14 +597,17 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set  # CONFIG_I2O is not set  # CONFIG_MACINTOSH_DRIVERS is not set  CONFIG_NETDEVICES=y -CONFIG_COMPAT_NET_DEV_OPS=y  # CONFIG_DUMMY is not set  # CONFIG_BONDING is not set  # CONFIG_MACVLAN is not set @@ -576,7 +642,10 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -584,6 +653,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -594,6 +664,9 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set @@ -619,12 +692,11 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_SFC is not set  # CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -637,6 +709,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -682,6 +755,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -698,6 +772,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -720,27 +799,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -783,6 +848,10 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_DMADEVICES is not set  # CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -793,14 +862,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -916,6 +988,7 @@ CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y  CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -925,6 +998,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -933,16 +1007,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -954,11 +1035,12 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -968,27 +1050,30 @@ CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_TRACING_SUPPORT=y - -# -# Tracers -# +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set -# CONFIG_EVENT_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1004,13 +1089,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -1052,11 +1140,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set diff --git a/arch/powerpc/configs/44x/taishan_defconfig b/arch/powerpc/configs/44x/taishan_defconfig index ef32cc4f82e..12041d355b8 100644 --- a/arch/powerpc/configs/44x/taishan_defconfig +++ b/arch/powerpc/configs/44x/taishan_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Tue Jan 20 08:22:47 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:21:04 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -19,6 +19,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -30,15 +31,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set  CONFIG_PPC=y @@ -52,11 +56,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y +CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -70,9 +78,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -87,8 +107,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -98,19 +122,25 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -122,6 +152,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -133,8 +171,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -142,19 +179,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # CONFIG_PPC4xx_PCI_EXPRESS is not set @@ -175,6 +234,8 @@ CONFIG_TAISHAN=y  # CONFIG_ARCHES is not set  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set +# CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  CONFIG_PPC44x_SIMPLE=y @@ -216,10 +277,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -235,10 +298,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  CONFIG_CMDLINE_BOOL=y @@ -263,6 +329,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -280,14 +347,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -324,6 +389,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -337,6 +403,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -349,8 +417,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -363,6 +436,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -375,9 +449,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  # CONFIG_MTD_OF_PARTS is not set @@ -453,7 +527,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -469,6 +542,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -481,12 +555,17 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -506,7 +585,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -529,6 +612,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -547,7 +632,10 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -555,6 +643,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -565,9 +654,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -577,6 +670,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -586,14 +680,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -606,6 +699,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -651,6 +745,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -667,6 +762,11 @@ CONFIG_LEGACY_PTY_COUNT=256  CONFIG_DEVPORT=y  # CONFIG_I2C is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_GPIOLIB is not set  # CONFIG_W1 is not set @@ -689,27 +789,13 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_HTC_PASIC3 is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -734,7 +820,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -750,7 +836,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -761,14 +852,17 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XIP is not set  # CONFIG_EXT3_FS is not set  # CONFIG_EXT4_FS is not set +CONFIG_EXT4_USE_FOR_EXT23=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -778,6 +872,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -832,7 +931,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -848,6 +946,7 @@ CONFIG_SUNRPC=y  CONFIG_MSDOS_PARTITION=y  # CONFIG_NLS is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -862,11 +961,13 @@ CONFIG_CRC32=y  # CONFIG_CRC7 is not set  # CONFIG_LIBCRC32C is not set  CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -876,6 +977,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -884,16 +986,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -905,35 +1014,45 @@ CONFIG_SCHED_DEBUG=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -949,13 +1068,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -964,10 +1086,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -995,11 +1119,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1036,6 +1162,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYPTO_LZO is not set  # @@ -1044,5 +1171,6 @@ CONFIG_CRYPTO_DES=y  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/44x/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig index 787635f23d8..99eff4dd936 100644 --- a/arch/powerpc/configs/44x/warp_defconfig +++ b/arch/powerpc/configs/44x/warp_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.30 -# Tue Jun  9 23:35:36 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 15:27:46 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_GPIO=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set @@ -56,11 +60,13 @@ CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y  CONFIG_DTC=y  # CONFIG_DEFAULT_UIMAGE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y  CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -81,11 +87,13 @@ CONFIG_SYSVIPC_SYSCTL=y  #  # RCU Subsystem  # -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set  # CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 @@ -111,7 +119,6 @@ CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  # CONFIG_KALLSYMS_ALL is not set  # CONFIG_KALLSYMS_EXTRA_PASS is not set -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y @@ -124,6 +131,13 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_SLUB_DEBUG=y  CONFIG_COMPAT_BRK=y @@ -131,7 +145,6 @@ CONFIG_COMPAT_BRK=y  CONFIG_SLUB=y  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  # CONFIG_KPROBES is not set  CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -139,6 +152,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set  # CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y @@ -151,7 +171,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -# CONFIG_LBD is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -159,14 +179,41 @@ CONFIG_BLOCK=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # @@ -187,6 +234,7 @@ CONFIG_WARP=y  # CONFIG_CANYONLANDS is not set  # CONFIG_GLACIER is not set  # CONFIG_REDWOOD is not set +# CONFIG_EIGER is not set  # CONFIG_YOSEMITE is not set  # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set  # CONFIG_PPC44x_SIMPLE is not set @@ -229,10 +277,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -248,9 +298,8 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set @@ -356,6 +405,7 @@ CONFIG_NETFILTER_ADVANCED=y  # CONFIG_IP_NF_ARPTABLES is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -371,6 +421,7 @@ CONFIG_VLAN_8021Q=y  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set  # CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -383,7 +434,13 @@ CONFIG_VLAN_8021Q=y  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -396,6 +453,7 @@ CONFIG_VLAN_8021Q=y  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  # CONFIG_STANDALONE is not set  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -407,9 +465,9 @@ CONFIG_EXTRA_FIRMWARE=""  # CONFIG_CONNECTOR is not set  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -513,6 +571,10 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_FD is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +#  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_UB is not set  CONFIG_BLK_DEV_RAM=y @@ -524,9 +586,11 @@ CONFIG_BLK_DEV_RAM_SIZE=4096  # CONFIG_XILINX_SYSACE is not set  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_ISL29003 is not set +# CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set  # @@ -534,7 +598,9 @@ CONFIG_MISC_DEVICES=y  #  CONFIG_EEPROM_AT24=y  # CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set  # CONFIG_EEPROM_93CX6 is not set +# CONFIG_IWMC3200TOP is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -557,15 +623,11 @@ CONFIG_BLK_DEV_SD=y  # CONFIG_BLK_DEV_SR is not set  # CONFIG_CHR_DEV_SG is not set  # CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  # CONFIG_SCSI_CONSTANTS is not set  # CONFIG_SCSI_LOGGING is not set  # CONFIG_SCSI_SCAN_ASYNC is not set -# CONFIG_SCSI_WAIT_SCAN is not set +CONFIG_SCSI_WAIT_SCAN=m  #  # SCSI Transports @@ -582,7 +644,6 @@ CONFIG_SCSI_SPI_ATTRS=y  # CONFIG_MD is not set  # CONFIG_MACINTOSH_DRIVERS is not set  CONFIG_NETDEVICES=y -CONFIG_COMPAT_NET_DEV_OPS=y  # CONFIG_DUMMY is not set  # CONFIG_BONDING is not set  # CONFIG_MACVLAN is not set @@ -609,14 +670,14 @@ CONFIG_IBM_NEW_EMAC_ZMII=y  # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_XILINX_EMACLITE is not set  # CONFIG_NETDEV_1000 is not set  # CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN=y +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -678,6 +739,7 @@ CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_OF_PLATFORM is not set  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -693,6 +755,7 @@ CONFIG_HW_RANDOM=y  # CONFIG_TCG_TPM is not set  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  # CONFIG_I2C_CHARDEV is not set  CONFIG_I2C_HELPER_AUTO=y @@ -725,17 +788,17 @@ CONFIG_I2C_IBM_IIC=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_MAX6875 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set  # CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  CONFIG_ARCH_REQUIRE_GPIOLIB=y  CONFIG_GPIOLIB=y @@ -761,10 +824,19 @@ CONFIG_GPIO_SYSFS=y  #  # SPI GPIO expanders:  # + +# +# AC97 GPIO expanders: +#  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_AD7418 is not set  # CONFIG_SENSORS_ADM1021 is not set @@ -787,6 +859,7 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_GL520SM is not set  # CONFIG_SENSORS_IT87 is not set  # CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set  # CONFIG_SENSORS_LM75 is not set  # CONFIG_SENSORS_LM77 is not set  # CONFIG_SENSORS_LM78 is not set @@ -812,6 +885,8 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_SMSC47B397 is not set  # CONFIG_SENSORS_ADS7828 is not set  # CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set  # CONFIG_SENSORS_VT1211 is not set  # CONFIG_SENSORS_W83781D is not set  # CONFIG_SENSORS_W83791D is not set @@ -821,7 +896,6 @@ CONFIG_SENSORS_AD7414=y  # CONFIG_SENSORS_W83L786NG is not set  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set  CONFIG_THERMAL=y  CONFIG_THERMAL_HWMON=y  CONFIG_WATCHDOG=y @@ -855,26 +929,15 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set +# CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support @@ -917,10 +980,11 @@ CONFIG_USB_MON=y  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PPC_OF_BE=y  # CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y  CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y  CONFIG_USB_OHCI_LITTLE_ENDIAN=y @@ -988,6 +1052,7 @@ CONFIG_USB_STORAGE=y  # CONFIG_USB_LD is not set  # CONFIG_USB_TRANCEVIBRATOR is not set  # CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set  # CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set @@ -1014,7 +1079,8 @@ CONFIG_MMC_BLOCK_BOUNCE=y  #  # CONFIG_MMC_SDHCI is not set  # CONFIG_MMC_WBSD is not set -CONFIG_MMC_PIKASD=y +# CONFIG_MMC_AT91 is not set +# CONFIG_MMC_ATMELMCI is not set  # CONFIG_MEMSTICK is not set  CONFIG_NEW_LEDS=y  CONFIG_LEDS_CLASS=y @@ -1025,9 +1091,10 @@ CONFIG_LEDS_CLASS=y  CONFIG_LEDS_GPIO=y  # CONFIG_LEDS_GPIO_PLATFORM is not set  CONFIG_LEDS_GPIO_OF=y -# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP3944 is not set  # CONFIG_LEDS_PCA955X is not set  # CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set  #  # LED Triggers @@ -1048,6 +1115,10 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=y  # CONFIG_DMADEVICES is not set  # CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -1065,10 +1136,13 @@ CONFIG_JBD=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -1145,7 +1219,6 @@ CONFIG_CRAMFS=y  # CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set -# CONFIG_NILFS2_FS is not set  CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y @@ -1235,6 +1308,7 @@ CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y  CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -1244,6 +1318,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1261,10 +1336,14 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -1276,11 +1355,12 @@ CONFIG_DEBUG_INFO=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y @@ -1290,27 +1370,30 @@ CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y  CONFIG_TRACING_SUPPORT=y - -# -# Tracers -# +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set -# CONFIG_EVENT_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set  # CONFIG_KMEMTRACE is not set  # CONFIG_WORKQUEUE_TRACER is not set  # CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1326,13 +1409,16 @@ CONFIG_IRQSTACKS=y  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  # CONFIG_CRYPTO_MANAGER is not set @@ -1366,11 +1452,13 @@ CONFIG_CRYPTO_ALGAPI2=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  # CONFIG_CRYPTO_MD5 is not set  # CONFIG_CRYPTO_MICHAEL_MIC is not set diff --git a/arch/powerpc/configs/ppc40x_defconfig b/arch/powerpc/configs/ppc40x_defconfig index 326205cabf7..35b60683cde 100644 --- a/arch/powerpc/configs/ppc40x_defconfig +++ b/arch/powerpc/configs/ppc40x_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Fri Jan 23 08:44:03 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 13:54:06 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  CONFIG_40x=y @@ -16,6 +16,7 @@ CONFIG_40x=y  # CONFIG_E200 is not set  CONFIG_4xx=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -27,15 +28,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_GPIO=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set @@ -50,11 +54,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y -# CONFIG_DEFAULT_UIMAGE is not set +CONFIG_DTC=y +CONFIG_DEFAULT_UIMAGE=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -68,9 +76,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -85,31 +105,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -121,6 +150,14 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -132,8 +169,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -141,19 +177,41 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -168,12 +226,14 @@ CONFIG_XILINX_VIRTEX=y  CONFIG_ACADIA=y  CONFIG_EP405=y  CONFIG_HCU4=y +CONFIG_HOTFOOT=y  CONFIG_KILAUEA=y  CONFIG_MAKALU=y  CONFIG_WALNUT=y  CONFIG_XILINX_VIRTEX_GENERIC_BOARD=y  CONFIG_PPC40x_SIMPLE=y  CONFIG_405GP=y +CONFIG_405EP=y  CONFIG_405EX=y  CONFIG_405EZ=y  CONFIG_405GPR=y @@ -195,6 +255,7 @@ CONFIG_IBM405_ERR51=y  # CONFIG_FSL_ULI1575 is not set  CONFIG_OF_RTC=y  # CONFIG_SIMPLE_GPIO is not set +# CONFIG_XILINX_PCI is not set  #  # Kernel options @@ -218,10 +279,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  # CONFIG_MATH_EMULATION is not set  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -237,10 +300,12 @@ CONFIG_MIGRATION=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -265,6 +330,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -282,14 +348,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -341,6 +405,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m  CONFIG_INET6_XFRM_MODE_BEET=m  # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set  CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set  CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_IPV6_TUNNEL is not set  # CONFIG_IPV6_MULTIPLE_TABLES is not set @@ -349,6 +414,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set @@ -362,6 +428,8 @@ CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -374,13 +442,13 @@ CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set -# CONFIG_MAC80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -393,6 +461,7 @@ CONFIG_WIRELESS_OLD_REGULATORY=y  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -405,9 +474,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_OF_PARTS=y @@ -483,7 +552,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -491,7 +559,7 @@ CONFIG_MTD_PHYSMAP_OF=y  CONFIG_MTD_UBI=m  CONFIG_MTD_UBI_WL_THRESHOLD=4096  CONFIG_MTD_UBI_BEB_RESERVE=1 -CONFIG_MTD_UBI_GLUEBI=y +CONFIG_MTD_UBI_GLUEBI=m  #  # UBI debugging options @@ -509,6 +577,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -520,14 +589,25 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  CONFIG_XILINX_SYSACE=m  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set +# CONFIG_ISL29003 is not set +# CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -547,7 +627,11 @@ CONFIG_HAVE_IDE=y  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -568,6 +652,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -586,7 +672,10 @@ CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT=y  CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR=y  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -594,6 +683,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -604,9 +694,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -616,6 +710,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -625,14 +720,13 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -645,6 +739,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -663,6 +758,7 @@ CONFIG_SERIO=m  # CONFIG_SERIO_LIBPS2 is not set  # CONFIG_SERIO_RAW is not set  CONFIG_SERIO_XILINX_XPS_PS2=m +# CONFIG_SERIO_ALTERA_PS2 is not set  # CONFIG_GAMEPORT is not set  # @@ -697,6 +793,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -714,6 +811,7 @@ CONFIG_XILINX_HWICAP=m  CONFIG_DEVPORT=y  CONFIG_I2C=m  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=m  CONFIG_I2C_HELPER_AUTO=y  CONFIG_I2C_ALGOBIT=m @@ -756,11 +854,6 @@ CONFIG_I2C_IBM_IIC=m  # CONFIG_I2C_TAOS_EVM is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -769,20 +862,17 @@ CONFIG_I2C_IBM_IIC=m  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set  # CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  CONFIG_ARCH_REQUIRE_GPIOLIB=y  CONFIG_GPIOLIB=y @@ -804,11 +894,17 @@ CONFIG_GPIO_XILINX=y  #  # PCI GPIO expanders:  # +# CONFIG_GPIO_CS5535 is not set  # CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_LANGWELL is not set  #  # SPI GPIO expanders:  # + +# +# AC97 GPIO expanders: +#  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set @@ -832,28 +928,15 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set +# CONFIG_AB3100_CORE is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -909,6 +992,7 @@ CONFIG_FB_XILINX=m  # CONFIG_FB_VIRTUAL is not set  # CONFIG_FB_METRONOME is not set  # CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set  # CONFIG_BACKLIGHT_LCD_SUPPORT is not set  # @@ -930,7 +1014,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y  #  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set @@ -946,7 +1030,12 @@ CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -956,6 +1045,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XATTR is not set  # CONFIG_EXT2_FS_XIP is not set  CONFIG_EXT3_FS=m +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set  CONFIG_EXT3_FS_XATTR=y  # CONFIG_EXT3_FS_POSIX_ACL is not set  # CONFIG_EXT3_FS_SECURITY is not set @@ -966,11 +1056,13 @@ CONFIG_FS_MBCACHE=m  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -980,6 +1072,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -1053,7 +1150,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -1108,6 +1204,7 @@ CONFIG_NLS_ISO8859_1=m  # CONFIG_NLS_KOI8_U is not set  # CONFIG_NLS_UTF8 is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -1125,11 +1222,13 @@ CONFIG_ZLIB_INFLATE=y  CONFIG_ZLIB_DEFLATE=m  CONFIG_LZO_COMPRESS=m  CONFIG_LZO_DECOMPRESS=m -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -1139,6 +1238,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1147,16 +1247,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -1168,35 +1275,45 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PPC_EMULATED_STATS is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1212,13 +1329,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -1227,10 +1347,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -1258,11 +1380,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1299,6 +1423,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_ZLIB is not set  CONFIG_CRYPTO_LZO=m  # @@ -1307,5 +1432,6 @@ CONFIG_CRYPTO_LZO=m  # CONFIG_CRYPTO_ANSI_CPRNG is not set  CONFIG_CRYPTO_HW=y  # CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_CRYPTO_DEV_PPC4XX is not set  # CONFIG_PPC_CLOCK is not set  # CONFIG_VIRTUALIZATION is not set diff --git a/arch/powerpc/configs/ppc44x_defconfig b/arch/powerpc/configs/ppc44x_defconfig index 5e6d55f006b..46f5c47e9f8 100644 --- a/arch/powerpc/configs/ppc44x_defconfig +++ b/arch/powerpc/configs/ppc44x_defconfig @@ -1,14 +1,14 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.29-rc2 -# Fri Jan 23 08:43:46 2009 +# Linux kernel version: 2.6.33-rc1 +# Mon Jan  4 13:42:17 2010  #  # CONFIG_PPC64 is not set  #  # Processor support  # -# CONFIG_6xx is not set +# CONFIG_PPC_BOOK3S_32 is not set  # CONFIG_PPC_85xx is not set  # CONFIG_PPC_8xx is not set  # CONFIG_40x is not set @@ -20,6 +20,7 @@ CONFIG_BOOKE=y  CONFIG_PTE_64BIT=y  CONFIG_PHYS_64BIT=y  CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_MMU_NOHASH_32=y  # CONFIG_PPC_MM_SLICES is not set  CONFIG_NOT_COHERENT_CACHE=y  CONFIG_PPC32=y @@ -31,15 +32,18 @@ CONFIG_GENERIC_TIME=y  CONFIG_GENERIC_TIME_VSYSCALL=y  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set  CONFIG_IRQ_PER_CPU=y +CONFIG_NR_IRQS=512  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_RWSEM_XCHGADD_ALGORITHM=y  CONFIG_ARCH_HAS_ILOG2_U32=y  CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_GPIO=y  # CONFIG_ARCH_NO_VIRT_TO_BUS is not set @@ -54,11 +58,15 @@ CONFIG_PPC_UDBG_16550=y  # CONFIG_GENERIC_TBSYNC is not set  CONFIG_AUDIT_ARCH=y  CONFIG_GENERIC_BUG=y -# CONFIG_DEFAULT_UIMAGE is not set +CONFIG_DTC=y +CONFIG_DEFAULT_UIMAGE=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y  CONFIG_PPC_DCR_NATIVE=y  # CONFIG_PPC_DCR_MMIO is not set  CONFIG_PPC_DCR=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -72,9 +80,21 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  # CONFIG_IKCONFIG is not set  CONFIG_LOG_BUF_SHIFT=14  CONFIG_GROUP_SCHED=y @@ -89,31 +109,40 @@ CONFIG_SYSFS_DEPRECATED_V2=y  # CONFIG_NAMESPACES is not set  CONFIG_BLK_DEV_INITRD=y  CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y  CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_STRIP_GENERATED=y  CONFIG_KALLSYMS_EXTRA_PASS=y  CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y -CONFIG_COMPAT_BRK=y  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set @@ -125,6 +154,13 @@ CONFIG_HAVE_IOREMAP_PROT=y  CONFIG_HAVE_KPROBES=y  CONFIG_HAVE_KRETPROBES=y  CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_API_DEBUG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_SLOW_WORK is not set  # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y @@ -136,8 +172,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_MODVERSIONS is not set  # CONFIG_MODULE_SRCVERSION_ALL is not set  CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBDAF=y  # CONFIG_BLK_DEV_BSG is not set  # CONFIG_BLK_DEV_INTEGRITY is not set @@ -145,20 +180,42 @@ CONFIG_LBD=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq"  CONFIG_PREEMPT_NOTIFIERS=y -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  CONFIG_PPC4xx_PCI_EXPRESS=y @@ -179,8 +236,11 @@ CONFIG_WARP=y  CONFIG_ARCHES=y  CONFIG_CANYONLANDS=y  CONFIG_GLACIER=y +CONFIG_REDWOOD=y +CONFIG_EIGER=y  CONFIG_YOSEMITE=y  CONFIG_XILINX_VIRTEX440_GENERIC_BOARD=y +# CONFIG_XILINX_ML510 is not set  CONFIG_PPC44x_SIMPLE=y  CONFIG_PPC4xx_GPIO=y  CONFIG_440EP=y @@ -190,6 +250,7 @@ CONFIG_440GP=y  CONFIG_440GX=y  CONFIG_440SPe=y  CONFIG_460EX=y +CONFIG_460SX=y  CONFIG_IBM440EP_ERR42=y  CONFIG_XILINX_VIRTEX=y  CONFIG_XILINX_VIRTEX_5_FXT=y @@ -207,6 +268,7 @@ CONFIG_XILINX_VIRTEX_5_FXT=y  # CONFIG_FSL_ULI1575 is not set  CONFIG_OF_RTC=y  # CONFIG_SIMPLE_GPIO is not set +# CONFIG_XILINX_PCI is not set  #  # Kernel options @@ -230,10 +292,12 @@ CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set  CONFIG_MATH_EMULATION=y  # CONFIG_IOMMU_HELPER is not set -CONFIG_PPC_NEED_DMA_SYNC_OPS=y +# CONFIG_SWIOTLB is not set  CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y  CONFIG_ARCH_HAS_WALK_MEMORY=y  CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_SPARSE_IRQ=y +CONFIG_MAX_ACTIVE_REGIONS=32  CONFIG_ARCH_FLATMEM_ENABLE=y  CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_SELECT_MEMORY_MODEL=y @@ -249,10 +313,13 @@ CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y  CONFIG_VIRT_TO_BUS=y -CONFIG_UNEVICTABLE_LRU=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_STDBINUTILS=y  CONFIG_PPC_4K_PAGES=y  # CONFIG_PPC_16K_PAGES is not set  # CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set  CONFIG_FORCE_MAX_ZONEORDER=11  CONFIG_PROC_DEVICETREE=y  # CONFIG_CMDLINE_BOOL is not set @@ -276,6 +343,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y  # CONFIG_PCI_LEGACY is not set  # CONFIG_PCI_DEBUG is not set  # CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set  # CONFIG_HAS_RAPIDIO is not set @@ -293,14 +361,12 @@ CONFIG_PAGE_OFFSET=0xc0000000  CONFIG_KERNEL_START=0xc0000000  CONFIG_PHYSICAL_START=0x00000000  CONFIG_TASK_SIZE=0xc0000000 -CONFIG_CONSISTENT_START=0xff100000  CONFIG_CONSISTENT_SIZE=0x00200000  CONFIG_NET=y  #  # Networking options  # -CONFIG_COMPAT_NET_DEV_OPS=y  CONFIG_PACKET=y  # CONFIG_PACKET_MMAP is not set  CONFIG_UNIX=y @@ -352,6 +418,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m  CONFIG_INET6_XFRM_MODE_BEET=m  # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set  CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set  CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_IPV6_TUNNEL is not set  # CONFIG_IPV6_MULTIPLE_TABLES is not set @@ -360,6 +427,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set  # CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  CONFIG_STP=m @@ -375,6 +443,8 @@ CONFIG_LLC=m  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  # CONFIG_NET_SCHED is not set  # CONFIG_DCB is not set @@ -387,8 +457,13 @@ CONFIG_LLC=m  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +#  # CONFIG_WIMAX is not set  # CONFIG_RFKILL is not set  # CONFIG_NET_9P is not set @@ -401,6 +476,7 @@ CONFIG_LLC=m  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y @@ -413,9 +489,9 @@ CONFIG_CONNECTOR=y  CONFIG_PROC_EVENTS=y  CONFIG_MTD=y  # CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_CONCAT is not set  CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set  # CONFIG_MTD_REDBOOT_PARTS is not set  # CONFIG_MTD_CMDLINE_PARTS is not set  CONFIG_MTD_OF_PARTS=y @@ -490,7 +566,6 @@ CONFIG_MTD_PHYSMAP_OF=y  # LPDDR flash memory drivers  #  # CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_QINFO_PROBE is not set  #  # UBI - Unsorted block images @@ -498,7 +573,7 @@ CONFIG_MTD_PHYSMAP_OF=y  CONFIG_MTD_UBI=m  CONFIG_MTD_UBI_WL_THRESHOLD=4096  CONFIG_MTD_UBI_BEB_RESERVE=1 -CONFIG_MTD_UBI_GLUEBI=y +CONFIG_MTD_UBI_GLUEBI=m  #  # UBI debugging options @@ -516,6 +591,7 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_UMEM is not set  # CONFIG_BLK_DEV_COW_COMMON is not set  # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_UB is not set @@ -528,14 +604,25 @@ CONFIG_BLK_DEV_RAM_SIZE=35000  CONFIG_XILINX_SYSACE=m  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set  # CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set  # CONFIG_ICS932S401 is not set  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set +# CONFIG_ISL29003 is not set +# CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set  CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set @@ -558,10 +645,6 @@ CONFIG_BLK_DEV_SD=m  # CONFIG_BLK_DEV_SR is not set  # CONFIG_CHR_DEV_SG is not set  # CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  # CONFIG_SCSI_CONSTANTS is not set  # CONFIG_SCSI_LOGGING is not set @@ -578,6 +661,7 @@ CONFIG_SCSI_WAIT_SCAN=m  # CONFIG_SCSI_SRP_ATTRS is not set  # CONFIG_SCSI_LOWLEVEL is not set  # CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set  # CONFIG_ATA is not set  # CONFIG_MD is not set  # CONFIG_FUSION is not set @@ -587,7 +671,11 @@ CONFIG_SCSI_WAIT_SCAN=m  #  # -# Enable only one of the two stacks, unless you know what you are doing +# You can enable one or both FireWire driver stacks. +# + +# +# See the help texts for more information.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -608,6 +696,8 @@ CONFIG_NET_ETHERNET=y  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set  CONFIG_IBM_NEW_EMAC=y @@ -626,7 +716,10 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y  # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set +# CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set +# CONFIG_XILINX_EMACLITE is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set @@ -634,6 +727,7 @@ CONFIG_NETDEV_1000=y  # CONFIG_E1000E is not set  # CONFIG_IP1000 is not set  # CONFIG_IGB is not set +# CONFIG_IGBVF is not set  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -644,9 +738,13 @@ CONFIG_NETDEV_1000=y  # CONFIG_VIA_VELOCITY is not set  # CONFIG_TIGON3 is not set  # CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_MV643XX_ETH is not set +# CONFIG_XILINX_LL_TEMAC is not set  # CONFIG_QLA3XXX is not set  # CONFIG_ATL1 is not set  # CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set  # CONFIG_JME is not set  CONFIG_NETDEV_10000=y  # CONFIG_CHELSIO_T1 is not set @@ -656,6 +754,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_IXGBE is not set  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +# CONFIG_VXGE is not set  # CONFIG_MYRI10GE is not set  # CONFIG_NETXEN_NIC is not set  # CONFIG_NIU is not set @@ -665,14 +764,14 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_BNX2X is not set  # CONFIG_QLGE is not set  # CONFIG_SFC is not set +# CONFIG_BE2NET is not set  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set +CONFIG_WLAN=y +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set  #  # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -695,6 +794,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -713,6 +813,7 @@ CONFIG_SERIO=m  # CONFIG_SERIO_LIBPS2 is not set  # CONFIG_SERIO_RAW is not set  CONFIG_SERIO_XILINX_XPS_PS2=m +# CONFIG_SERIO_ALTERA_PS2 is not set  # CONFIG_GAMEPORT is not set  # @@ -747,6 +848,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -764,6 +866,7 @@ CONFIG_XILINX_HWICAP=m  CONFIG_DEVPORT=y  CONFIG_I2C=m  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  CONFIG_I2C_CHARDEV=m  CONFIG_I2C_HELPER_AUTO=y  CONFIG_I2C_ALGOBIT=m @@ -807,11 +910,6 @@ CONFIG_I2C_IBM_IIC=m  # CONFIG_I2C_TINY_USB is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -820,20 +918,17 @@ CONFIG_I2C_IBM_IIC=m  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set  # CONFIG_I2C_DEBUG_BUS is not set  # CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set  CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  CONFIG_ARCH_REQUIRE_GPIOLIB=y  CONFIG_GPIOLIB=y @@ -855,16 +950,21 @@ CONFIG_GPIO_XILINX=y  #  # PCI GPIO expanders:  # +# CONFIG_GPIO_CS5535 is not set  # CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_LANGWELL is not set  #  # SPI GPIO expanders:  # + +# +# AC97 GPIO expanders: +#  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -884,28 +984,15 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_MFD_WM8400 is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set +# CONFIG_AB3100_CORE is not set  # CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -# CONFIG_DAB is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  #  # CONFIG_AGP is not set +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -961,6 +1048,7 @@ CONFIG_FB_XILINX=m  # CONFIG_FB_VIRTUAL is not set  # CONFIG_FB_METRONOME is not set  # CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set  # CONFIG_BACKLIGHT_LCD_SUPPORT is not set  # @@ -994,19 +1082,22 @@ CONFIG_USB_DEVICE_CLASS=y  # USB Host Controller Drivers  #  # CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set  CONFIG_USB_EHCI_HCD=m  # CONFIG_USB_EHCI_ROOT_HUB_TT is not set  # CONFIG_USB_EHCI_TT_NEWSCHED is not set  CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y  CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y +# CONFIG_XPS_USB_HCD_XILINX is not set  CONFIG_USB_EHCI_HCD_PPC_OF=y  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=m -CONFIG_USB_OHCI_HCD_PPC_OF=y  CONFIG_USB_OHCI_HCD_PPC_OF_BE=y  # CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_HCD_PPC_OF=y  # CONFIG_USB_OHCI_HCD_PCI is not set  CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y  CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y @@ -1030,11 +1121,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y  # CONFIG_USB_TMC is not set  # -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # -# see USB_STORAGE Help for more information +# also be needed; see USB_STORAGE Help for more info  #  CONFIG_USB_STORAGE=m  # CONFIG_USB_STORAGE_DEBUG is not set @@ -1075,7 +1166,6 @@ CONFIG_USB_STORAGE=m  # CONFIG_USB_LED is not set  # CONFIG_USB_CYPRESS_CY7C63 is not set  # CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set  # CONFIG_USB_IDMOUSE is not set  # CONFIG_USB_FTDI_ELAN is not set  # CONFIG_USB_APPLEDISPLAY is not set @@ -1083,6 +1173,7 @@ CONFIG_USB_STORAGE=m  # CONFIG_USB_LD is not set  # CONFIG_USB_TRANCEVIBRATOR is not set  # CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set  # CONFIG_USB_ISIGHTFW is not set  # CONFIG_USB_VST is not set  # CONFIG_USB_GADGET is not set @@ -1091,6 +1182,7 @@ CONFIG_USB_STORAGE=m  # OTG and related infrastructure  #  # CONFIG_USB_GPIO_VBUS is not set +# CONFIG_NOP_USB_XCEIV is not set  # CONFIG_UWB is not set  # CONFIG_MMC is not set  # CONFIG_MEMSTICK is not set @@ -1100,7 +1192,12 @@ CONFIG_USB_STORAGE=m  # CONFIG_EDAC is not set  # CONFIG_RTC_CLASS is not set  # CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  # CONFIG_UIO is not set + +# +# TI VLYNQ +#  # CONFIG_STAGING is not set  # @@ -1110,6 +1207,7 @@ CONFIG_EXT2_FS=y  # CONFIG_EXT2_FS_XATTR is not set  # CONFIG_EXT2_FS_XIP is not set  CONFIG_EXT3_FS=m +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set  CONFIG_EXT3_FS_XATTR=y  # CONFIG_EXT3_FS_POSIX_ACL is not set  # CONFIG_EXT3_FS_SECURITY is not set @@ -1119,11 +1217,13 @@ CONFIG_FS_MBCACHE=m  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  # CONFIG_FS_POSIX_ACL is not set -CONFIG_FILE_LOCKING=y  # CONFIG_XFS_FS is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set  # CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y  CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y @@ -1133,6 +1233,11 @@ CONFIG_INOTIFY_USER=y  # CONFIG_FUSE_FS is not set  # +# Caches +# +# CONFIG_FSCACHE is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -1206,7 +1311,6 @@ CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set  # CONFIG_RPCSEC_GSS_KRB5 is not set  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -1261,6 +1365,7 @@ CONFIG_NLS_ISO8859_1=m  # CONFIG_NLS_KOI8_U is not set  # CONFIG_NLS_UTF8 is not set  # CONFIG_DLM is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines @@ -1278,11 +1383,13 @@ CONFIG_ZLIB_INFLATE=y  CONFIG_ZLIB_DEFLATE=y  CONFIG_LZO_COMPRESS=m  CONFIG_LZO_DECOMPRESS=m -CONFIG_PLIST=y +CONFIG_DECOMPRESS_GZIP=y  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y  CONFIG_HAVE_LMB=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y  #  # Kernel hacking @@ -1292,6 +1399,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set @@ -1300,16 +1408,23 @@ CONFIG_DEBUG_KERNEL=y  CONFIG_DETECT_SOFTLOCKUP=y  # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set  CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0  CONFIG_SCHED_DEBUG=y  # CONFIG_SCHEDSTATS is not set  # CONFIG_TIMER_STATS is not set  # CONFIG_DEBUG_OBJECTS is not set  # CONFIG_SLUB_DEBUG_ON is not set  # CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK 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_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set  # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set  # CONFIG_DEBUG_KOBJECT is not set @@ -1321,35 +1436,43 @@ CONFIG_DEBUG_BUGVERBOSE=y  # CONFIG_DEBUG_LIST is not set  # CONFIG_DEBUG_SG is not set  # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DEBUG_CREDENTIALS is not set  # CONFIG_RCU_TORTURE_TEST is not set  # CONFIG_RCU_CPU_STALL_DETECTOR is not set  # CONFIG_BACKTRACE_SELF_TEST is not set  # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set  # CONFIG_FAULT_INJECTION is not set  # CONFIG_LATENCYTOP is not set  CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set  CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y - -# -# Tracers -# +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set  # CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set  # CONFIG_STACK_TRACER is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set +# CONFIG_KMEMTRACE is not set +# CONFIG_WORKQUEUE_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_DMA_API_DEBUG is not set  # CONFIG_SAMPLES is not set  CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_KGDB is not set +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_WERROR=y  CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_DEBUG_STACKOVERFLOW is not set  # CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_PAGEALLOC is not set  # CONFIG_CODE_PATCHING_SELFTEST is not set  # CONFIG_FTR_FIXUP_SELFTEST is not set  # CONFIG_MSI_BITMAP_SELFTEST is not set @@ -1363,13 +1486,16 @@ CONFIG_PRINT_STACK_DEPTH=64  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  #  # Crypto core or helper  # -# CONFIG_CRYPTO_FIPS is not set  CONFIG_CRYPTO_ALGAPI=y  CONFIG_CRYPTO_ALGAPI2=y  CONFIG_CRYPTO_AEAD2=y @@ -1378,10 +1504,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y  CONFIG_CRYPTO_HASH2=y  CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y  CONFIG_CRYPTO_MANAGER2=y  # CONFIG_CRYPTO_GF128MUL is not set  # CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y  # CONFIG_CRYPTO_CRYPTD is not set  # CONFIG_CRYPTO_AUTHENC is not set  # CONFIG_CRYPTO_TEST is not set @@ -1409,11 +1537,13 @@ CONFIG_CRYPTO_PCBC=y  #  # CONFIG_CRYPTO_HMAC is not set  # CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set  #  # Digest  #  # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_GHASH is not set  # CONFIG_CRYPTO_MD4 is not set  CONFIG_CRYPTO_MD5=y  # CONFIG_CRYPTO_MICHAEL_MIC is not set @@ -1450,6 +1580,7 @@ CONFIG_CRYPTO_DES=y  # Compression  #  CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_ZLIB is not set  CONFIG_CRYPTO_LZO=m  # diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index 17828ad411e..c376eda1531 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h @@ -235,14 +235,10 @@ typedef elf_vrregset_t elf_fpxregset_t;  #ifdef __powerpc64__  # define SET_PERSONALITY(ex)					\  do {								\ -	unsigned long new_flags = 0;				\  	if ((ex).e_ident[EI_CLASS] == ELFCLASS32)		\ -		new_flags = _TIF_32BIT;				\ -	if ((current_thread_info()->flags & _TIF_32BIT)		\ -	    != new_flags)					\ -		set_thread_flag(TIF_ABI_PENDING);		\ +		set_thread_flag(TIF_32BIT);			\  	else							\ -		clear_thread_flag(TIF_ABI_PENDING);		\ +		clear_thread_flag(TIF_32BIT);			\  	if (personality(current->personality) != PER_LINUX32)	\  		set_personality(PER_LINUX |			\  			(current->personality & (~PER_MASK)));	\ diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index c8b32925567..aa9d383a1c0 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -111,7 +111,6 @@ static inline struct thread_info *current_thread_info(void)  #define TIF_NOTIFY_RESUME	13	/* callback before returning to user */  #define TIF_FREEZE		14	/* Freezing for suspend */  #define TIF_RUNLATCH		15	/* Is the runlatch enabled? */ -#define TIF_ABI_PENDING		16	/* 32/64 bit switch needed */  /* as above, but as bit values */  #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE) @@ -129,7 +128,6 @@ static inline struct thread_info *current_thread_info(void)  #define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)  #define _TIF_FREEZE		(1<<TIF_FREEZE)  #define _TIF_RUNLATCH		(1<<TIF_RUNLATCH) -#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)  #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)  #define _TIF_USER_WORK_MASK	(_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c index 7311fdfb9bf..4aa17401657 100644 --- a/arch/powerpc/kernel/pci_of_scan.c +++ b/arch/powerpc/kernel/pci_of_scan.c @@ -123,6 +123,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,  {  	struct pci_dev *dev;  	const char *type; +	struct pci_slot *slot;  	dev = alloc_pci_dev();  	if (!dev) @@ -140,6 +141,11 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,  	dev->devfn = devfn;  	dev->multifunction = 0;		/* maybe a lie? */  	dev->needs_freset = 0;		/* pcie fundamental reset required */ +	set_pcie_port_type(dev); + +	list_for_each_entry(slot, &dev->bus->slots, list) +		if (PCI_SLOT(dev->devfn) == slot->number) +			dev->slot = slot;  	dev->vendor = get_int_prop(node, "vendor-id", 0xffff);  	dev->device = get_int_prop(node, "device-id", 0xffff); @@ -160,10 +166,14 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,  	dev->error_state = pci_channel_io_normal;  	dev->dma_mask = 0xffffffff; +	/* Early fixups, before probing the BARs */ +	pci_fixup_device(pci_fixup_early, dev); +  	if (!strcmp(type, "pci") || !strcmp(type, "pciex")) {  		/* a PCI-PCI bridge */  		dev->hdr_type = PCI_HEADER_TYPE_BRIDGE;  		dev->rom_base_reg = PCI_ROM_ADDRESS1; +		set_pcie_hotplug_bridge(dev);  	} else if (!strcmp(type, "cardbus")) {  		dev->hdr_type = PCI_HEADER_TYPE_CARDBUS;  	} else { diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index c930ac38e59..7b816daf3eb 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -554,18 +554,6 @@ void exit_thread(void)  void flush_thread(void)  { -#ifdef CONFIG_PPC64 -	struct thread_info *t = current_thread_info(); - -	if (test_ti_thread_flag(t, TIF_ABI_PENDING)) { -		clear_ti_thread_flag(t, TIF_ABI_PENDING); -		if (test_ti_thread_flag(t, TIF_32BIT)) -			clear_ti_thread_flag(t, TIF_32BIT); -		else -			set_ti_thread_flag(t, TIF_32BIT); -	} -#endif -  	discard_lazy_cpu_state();  	if (current->thread.dabr) { diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig index e28841fbfb8..fe037fdaf1b 100644 --- a/arch/powerpc/kvm/Kconfig +++ b/arch/powerpc/kvm/Kconfig @@ -53,7 +53,7 @@ config KVM_440  config KVM_EXIT_TIMING  	bool "Detailed exit timing" -	depends on KVM +	depends on KVM_440 || KVM_E500  	---help---  	  Calculate elapsed time for every exit/enter cycle. A per-vcpu  	  report is available in debugfs kvm/vm#_vcpu#_timing. diff --git a/arch/powerpc/mm/tlb_hash64.c b/arch/powerpc/mm/tlb_hash64.c index 282d9306361..1ec06576f61 100644 --- a/arch/powerpc/mm/tlb_hash64.c +++ b/arch/powerpc/mm/tlb_hash64.c @@ -63,15 +63,21 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr,  	if (huge) {  #ifdef CONFIG_HUGETLB_PAGE  		psize = get_slice_psize(mm, addr); +		/* Mask the address for the correct page size */ +		addr &= ~((1UL << mmu_psize_defs[psize].shift) - 1);  #else  		BUG();  		psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */  #endif -	} else +	} else {  		psize = pte_pagesize_index(mm, addr, pte); +		/* Mask the address for the standard page size.  If we +		 * have a 64k page kernel, but the hardware does not +		 * support 64k pages, this might be different from the +		 * hardware page size encoded in the slice table. */ +		addr &= PAGE_MASK; +	} -	/* Mask the address for the correct page size */ -	addr &= ~((1UL << mmu_psize_defs[psize].shift) - 1);  	/* Build full vaddr */  	if (!is_kernel_addr(addr)) { diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index d80f193cd87..f5f79196721 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c @@ -191,11 +191,7 @@ static int get_irq_server(unsigned int virq, cpumask_t cpumask,  	return default_server;  }  #else -static int get_irq_server(unsigned int virq, cpumask_t cpumask, -			  unsigned int strict_check) -{ -	return default_server; -} +#define get_irq_server(virq, cpumask, strict_check) (default_server)  #endif  static void xics_unmask_irq(unsigned int virq) @@ -788,9 +784,13 @@ static void xics_set_cpu_priority(unsigned char cppr)  {  	struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); -	BUG_ON(os_cppr->index != 0); +	/* +	 * we only really want to set the priority when there's +	 * just one cppr value on the stack +	 */ +	WARN_ON(os_cppr->index != 0); -	os_cppr->stack[os_cppr->index] = cppr; +	os_cppr->stack[0] = cppr;  	if (firmware_has_feature(FW_FEATURE_LPAR))  		lpar_cppr_info(cppr); @@ -825,8 +825,14 @@ void xics_setup_cpu(void)  void xics_teardown_cpu(void)  { +	struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr);  	int cpu = smp_processor_id(); +	/* +	 * we have to reset the cppr index to 0 because we're +	 * not going to return from the IPI +	 */ +	os_cppr->index = 0;  	xics_set_cpu_priority(0);  	/* Clear any pending IPI request */ diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index 6ff9d71b4c0..8aa33021e50 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c @@ -569,7 +569,8 @@ static void __init ppc4xx_probe_pcix_bridge(struct device_node *np)  	hose->last_busno = bus_range ? bus_range[1] : 0xff;  	/* Setup config space */ -	setup_indirect_pci(hose, rsrc_cfg.start, rsrc_cfg.start + 0x4, 0); +	setup_indirect_pci(hose, rsrc_cfg.start, rsrc_cfg.start + 0x4, +					PPC_INDIRECT_TYPE_SET_CFG_TYPE);  	/* Disable all windows */  	writel(0, reg + PCIX0_POM0SA); diff --git a/arch/s390/include/asm/irqflags.h b/arch/s390/include/asm/irqflags.h index 3f26131120b..c2fb432f576 100644 --- a/arch/s390/include/asm/irqflags.h +++ b/arch/s390/include/asm/irqflags.h @@ -1,14 +1,12 @@  /* - *  include/asm-s390/irqflags.h - * - *    Copyright (C) IBM Corp. 2006 - *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> + *    Copyright IBM Corp. 2006,2010 + *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>   */  #ifndef __ASM_IRQFLAGS_H  #define __ASM_IRQFLAGS_H -#ifdef __KERNEL__ +#include <linux/types.h>  #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) @@ -102,5 +100,4 @@ static inline int raw_irqs_disabled_flags(unsigned long flags)  /* For spinlocks etc */  #define raw_local_irq_save(x)	((x) = raw_local_irq_disable()) -#endif /* __KERNEL__ */  #endif /* __ASM_IRQFLAGS_H */ diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index f2ef4b619ce..c25dfac7dd7 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h @@ -293,12 +293,12 @@ struct _lowcore  	__u64	clock_comparator;		/* 0x02d0 */  	__u32	machine_flags;			/* 0x02d8 */  	__u32	ftrace_func;			/* 0x02dc */ -	__u8	pad_0x02f0[0x0300-0x02f0];	/* 0x02f0 */ +	__u8	pad_0x02e0[0x0300-0x02e0];	/* 0x02e0 */  	/* Interrupt response block */  	__u8	irb[64];			/* 0x0300 */ -	__u8	pad_0x0400[0x0e00-0x0400];	/* 0x0400 */ +	__u8	pad_0x0340[0x0e00-0x0340];	/* 0x0340 */  	/*  	 * 0xe00 contains the address of the IPL Parameter Information diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 48215d15762..e8ef21c51bb 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -571,6 +571,7 @@ pgm_svcper:  	mvc	__THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID  	oi	__TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP  	TRACE_IRQS_ON +	lm	%r2,%r6,SP_R2(%r15)	# load svc arguments  	stosm	__SF_EMPTY(%r15),0x03	# reenable interrupts  	b	BASED(sysc_do_svc) diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 9aff1d449b6..f33658f09dd 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -549,6 +549,7 @@ pgm_svcper:  	mvc	__THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID  	oi	__TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP  	TRACE_IRQS_ON +	lmg	%r2,%r6,SP_R2(%r15)	# load svc arguments  	stosm	__SF_EMPTY(%r15),0x03	# reenable interrupts  	j	sysc_do_svc diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 1675c48b914..6289945562b 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c @@ -64,7 +64,7 @@ SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask)  	recalc_sigpending();  	spin_unlock_irq(¤t->sighand->siglock); -	current->state = TASK_INTERRUPTIBLE; +	set_current_state(TASK_INTERRUPTIBLE);  	schedule();  	set_thread_flag(TIF_RESTORE_SIGMASK); diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c index ba9d8a7bc1a..b40096494e4 100644 --- a/arch/s390/kvm/intercept.c +++ b/arch/s390/kvm/intercept.c @@ -213,7 +213,7 @@ static int handle_instruction_and_prog(struct kvm_vcpu *vcpu)  	return rc2;  } -static const intercept_handler_t intercept_funcs[0x48 >> 2] = { +static const intercept_handler_t intercept_funcs[] = {  	[0x00 >> 2] = handle_noop,  	[0x04 >> 2] = handle_instruction,  	[0x08 >> 2] = handle_prog, @@ -230,7 +230,7 @@ int kvm_handle_sie_intercept(struct kvm_vcpu *vcpu)  	intercept_handler_t func;  	u8 code = vcpu->arch.sie_block->icptcode; -	if (code & 3 || code > 0x48) +	if (code & 3 || (code >> 2) >= ARRAY_SIZE(intercept_funcs))  		return -ENOTSUPP;  	func = intercept_funcs[code >> 2];  	if (func) diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index f3a46be2ae8..83da5debeed 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c @@ -598,7 +598,7 @@ static struct dentry *clk_debugfs_root;  static int clk_debugfs_register_one(struct clk *c)  {  	int err; -	struct dentry *d, *child; +	struct dentry *d, *child, *child_tmp;  	struct clk *pa = c->parent;  	char s[255];  	char *p = s; @@ -630,7 +630,7 @@ static int clk_debugfs_register_one(struct clk *c)  err_out:  	d = c->dentry; -	list_for_each_entry(child, &d->d_subdirs, d_u.d_child) +	list_for_each_entry_safe(child, child_tmp, &d->d_subdirs, d_u.d_child)  		debugfs_remove(child);  	debugfs_remove(c->dentry);  	return err; diff --git a/arch/sh/kernel/cpu/sh3/entry.S b/arch/sh/kernel/cpu/sh3/entry.S index 3f7e2a22c7c..f6a389c996c 100644 --- a/arch/sh/kernel/cpu/sh3/entry.S +++ b/arch/sh/kernel/cpu/sh3/entry.S @@ -132,7 +132,6 @@ ENTRY(tlb_protection_violation_store)  	 mov	#1, r5  call_handle_tlbmiss: -	setup_frame_reg  	mov.l	1f, r0  	mov	r5, r8  	mov.l	@r0, r6 @@ -365,6 +364,8 @@ handle_exception:  	 mov.l	@k2, k2		! read out vector and keep in k2  handle_exception_special: +	setup_frame_reg +  	! Setup return address and jump to exception handler  	mov.l	7f, r9		! fetch return address  	stc	r2_bank, r0	! k2 (vector) diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 3576b709f05..e51168064e5 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c @@ -540,6 +540,8 @@ void dwarf_free_frame(struct dwarf_frame *frame)  	mempool_free(frame, dwarf_frame_pool);  } +extern void ret_from_irq(void); +  /**   *	dwarf_unwind_stack - unwind the stack   * @@ -678,6 +680,24 @@ struct dwarf_frame * dwarf_unwind_stack(unsigned long pc,  	addr = frame->cfa + reg->addr;  	frame->return_addr = __raw_readl(addr); +	/* +	 * Ah, the joys of unwinding through interrupts. +	 * +	 * Interrupts are tricky - the DWARF info needs to be _really_ +	 * accurate and unfortunately I'm seeing a lot of bogus DWARF +	 * info. For example, I've seen interrupts occur in epilogues +	 * just after the frame pointer (r14) had been restored. The +	 * problem was that the DWARF info claimed that the CFA could be +	 * reached by using the value of the frame pointer before it was +	 * restored. +	 * +	 * So until the compiler can be trusted to produce reliable +	 * DWARF info when it really matters, let's stop unwinding once +	 * we've calculated the function that was interrupted. +	 */ +	if (prev && prev->pc == (unsigned long)ret_from_irq) +		frame->return_addr = 0; +  	return frame;  bail: @@ -892,18 +912,18 @@ static struct unwinder dwarf_unwinder = {  static void dwarf_unwinder_cleanup(void)  { -	struct dwarf_cie *cie; -	struct dwarf_fde *fde; +	struct dwarf_cie *cie, *cie_tmp; +	struct dwarf_fde *fde, *fde_tmp;  	/*  	 * Deallocate all the memory allocated for the DWARF unwinder.  	 * Traverse all the FDE/CIE lists and remove and free all the  	 * memory associated with those data structures.  	 */ -	list_for_each_entry(cie, &dwarf_cie_list, link) +	list_for_each_entry_safe(cie, cie_tmp, &dwarf_cie_list, link)  		kfree(cie); -	list_for_each_entry(fde, &dwarf_fde_list, link) +	list_for_each_entry_safe(fde, fde_tmp, &dwarf_fde_list, link)  		kfree(fde);  	kmem_cache_destroy(dwarf_reg_cachep); diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index f0abd58c3a6..2b15ae60c3a 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S @@ -70,8 +70,14 @@ ret_from_exception:  	CFI_STARTPROC simple  	CFI_DEF_CFA r14, 0  	CFI_REL_OFFSET 17, 64 -	CFI_REL_OFFSET 15, 0 +	CFI_REL_OFFSET 15, 60  	CFI_REL_OFFSET 14, 56 +	CFI_REL_OFFSET 13, 52 +	CFI_REL_OFFSET 12, 48 +	CFI_REL_OFFSET 11, 44 +	CFI_REL_OFFSET 10, 40 +	CFI_REL_OFFSET 9, 36 +	CFI_REL_OFFSET 8, 32  	preempt_stop()  ENTRY(ret_from_irq)  	! diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index 31f80c61b03..ec79faf6f02 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c @@ -368,7 +368,7 @@ void exit_thread(void)  void flush_thread(void)  { -	/* Called by fs/exec.c (flush_old_exec) to remove traces of a +	/* Called by fs/exec.c (setup_new_exec) to remove traces of a  	 * previously running executable. */  #ifdef CONFIG_SH_FPU  	if (last_task_used_math == current) { diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index 873ebdc4f98..b063eb8b18e 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c @@ -133,6 +133,8 @@ void user_enable_single_step(struct task_struct *child)  	struct pt_regs *regs = child->thread.uregs;  	regs->sr |= SR_SSTEP;	/* auto-resetting upon exception */ + +	set_tsk_thread_flag(child, TIF_SINGLESTEP);  }  void user_disable_single_step(struct task_struct *child) @@ -140,6 +142,8 @@ void user_disable_single_step(struct task_struct *child)  	struct pt_regs *regs = child->thread.uregs;  	regs->sr &= ~SR_SSTEP; + +	clear_tsk_thread_flag(child, TIF_SINGLESTEP);  }  static int genregs_get(struct task_struct *target, @@ -454,6 +458,8 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs)  asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  { +	int step; +  	if (unlikely(current->audit_context))  		audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]),  				   regs->regs[9]); @@ -461,8 +467,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)  	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))  		trace_sys_exit(regs, regs->regs[9]); -	if (test_thread_flag(TIF_SYSCALL_TRACE)) -		tracehook_report_syscall_exit(regs, 0); +	step = test_thread_flag(TIF_SINGLESTEP); +	if (step || test_thread_flag(TIF_SYSCALL_TRACE)) +		tracehook_report_syscall_exit(regs, step);  }  /* Called with interrupts disabled */ diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index ce76dbdef29..580e97d46ca 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c @@ -118,7 +118,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset)  			 * clear the TS_RESTORE_SIGMASK flag.  			 */  			current_thread_info()->status &= ~TS_RESTORE_SIGMASK; -			tracehook_signal_handler(signr, &info, &ka, regs, 0); + +			tracehook_signal_handler(signr, &info, &ka, regs, +					test_thread_flag(TIF_SINGLESTEP));  			return 1;  		}  	} diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 108197ac0d5..4097f6a1086 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -64,8 +64,11 @@ config BITS  	default 64 if SPARC64  config GENERIC_TIME +	def_bool y + +config ARCH_USES_GETTIMEOFFSET  	bool -	default y if SPARC64 +	default y if SPARC32  config GENERIC_CMOS_UPDATE  	bool diff --git a/arch/sparc/configs/sparc32_defconfig b/arch/sparc/configs/sparc32_defconfig index 983d59824a2..99a1f191497 100644 --- a/arch/sparc/configs/sparc32_defconfig +++ b/arch/sparc/configs/sparc32_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31 -# Wed Sep 16 00:03:43 2009 +# Linux kernel version: 2.6.33-rc2 +# Mon Jan 11 23:20:31 2010  #  # CONFIG_64BIT is not set  CONFIG_SPARC=y @@ -41,6 +41,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  CONFIG_TREE_RCU=y  # CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set  # CONFIG_RCU_TRACE is not set  CONFIG_RCU_FANOUT=32  # CONFIG_RCU_FANOUT_EXACT is not set @@ -88,21 +89,21 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y  # -# Performance Counters +# Kernel Performance Events And Counters  # +# CONFIG_PERF_EVENTS is not set  # CONFIG_PERF_COUNTERS is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y -# CONFIG_STRIP_ASM_SYMS is not set  CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set  # CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set  CONFIG_HAVE_OPROFILE=y  CONFIG_HAVE_ARCH_TRACEHOOK=y  CONFIG_HAVE_DMA_ATTRS=y @@ -131,14 +132,41 @@ CONFIG_LBDAF=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set  # CONFIG_DEFAULT_DEADLINE is not set  CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set  CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set  # CONFIG_FREEZER is not set  # @@ -168,8 +196,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4  # CONFIG_PHYS_ADDR_T_64BIT is not set  CONFIG_ZONE_DMA_FLAG=1  CONFIG_BOUNCE=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=4096  CONFIG_SUN_PM=y  # CONFIG_SPARC_LED is not set @@ -257,6 +284,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m  CONFIG_INET6_XFRM_MODE_BEET=m  # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set  CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set  CONFIG_IPV6_NDISC_NODETYPE=y  CONFIG_IPV6_TUNNEL=m  # CONFIG_IPV6_MULTIPLE_TABLES is not set @@ -295,9 +323,6 @@ CONFIG_NET_PKTGEN=m  # CONFIG_AF_RXRPC is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_CFG80211_DEFAULT_PS_VALUE=0 -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set  # @@ -335,6 +360,10 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=m  CONFIG_BLK_DEV_CRYPTOLOOP=m + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +#  # CONFIG_BLK_DEV_NBD is not set  # CONFIG_BLK_DEV_SX8 is not set  CONFIG_BLK_DEV_RAM=y @@ -398,8 +427,11 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set  # CONFIG_SCSI_CXGB3_ISCSI is not set  # CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_BE2ISCSI is not set  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set  # CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set @@ -434,7 +466,9 @@ CONFIG_SCSI_QLOGICPTI=m  # CONFIG_SCSI_DEBUG is not set  CONFIG_SCSI_SUNESP=y  # CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_BFA_FC is not set  # CONFIG_SCSI_DH is not set  # CONFIG_SCSI_OSD_INITIATOR is not set  # CONFIG_ATA is not set @@ -450,7 +484,7 @@ CONFIG_SCSI_SUNESP=y  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -487,6 +521,7 @@ CONFIG_SUNQE=m  # CONFIG_NET_PCI is not set  # CONFIG_B44 is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_ATL2 is not set  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set @@ -546,6 +581,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -555,6 +591,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y  CONFIG_INPUT=y  # CONFIG_INPUT_FF_MEMLESS is not set  # CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set  #  # Userland interfaces @@ -574,6 +611,7 @@ CONFIG_INPUT_KEYBOARD=y  CONFIG_KEYBOARD_ATKBD=m  # CONFIG_KEYBOARD_LKKBD is not set  # CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set  # CONFIG_KEYBOARD_STOWAWAY is not set  CONFIG_KEYBOARD_SUNKBD=m  # CONFIG_KEYBOARD_XTKBD is not set @@ -604,6 +642,7 @@ CONFIG_SERIO_SERPORT=m  # CONFIG_SERIO_PCIPS2 is not set  CONFIG_SERIO_LIBPS2=m  # CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set  # CONFIG_GAMEPORT is not set  # @@ -636,6 +675,7 @@ CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  CONFIG_CONSOLE_POLL=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  CONFIG_LEGACY_PTYS=y @@ -661,6 +701,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  # CONFIG_SENSORS_I5K_AMB is not set  # CONFIG_SENSORS_F71805F is not set  # CONFIG_SENSORS_F71882FG is not set @@ -675,9 +720,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_VT8231 is not set  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -699,6 +742,7 @@ CONFIG_SSB_POSSIBLE=y  #  # Graphics support  # +CONFIG_VGA_ARB=y  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set  # CONFIG_FB is not set @@ -776,7 +820,9 @@ CONFIG_RTC_INTF_DEV=y  # CONFIG_RTC_DRV_M48T86 is not set  # CONFIG_RTC_DRV_M48T35 is not set  CONFIG_RTC_DRV_M48T59=y +# CONFIG_RTC_DRV_MSM6242 is not set  # CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set  # CONFIG_RTC_DRV_V3020 is not set  # @@ -955,6 +1001,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=1024  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set @@ -1003,9 +1050,9 @@ CONFIG_KGDB=y  CONFIG_KGDB_SERIAL_CONSOLE=y  CONFIG_KGDB_TESTS=y  # CONFIG_KGDB_TESTS_ON_BOOT is not set -# CONFIG_KMEMCHECK is not set  # CONFIG_DEBUG_STACK_USAGE is not set  # CONFIG_STACK_DEBUG is not set +# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set  #  # Security options @@ -1013,7 +1060,11 @@ CONFIG_KGDB_TESTS=y  # CONFIG_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_CRYPTO=y  # diff --git a/arch/sparc/configs/sparc64_defconfig b/arch/sparc/configs/sparc64_defconfig index f80b881dfea..41c5a56aa6f 100644 --- a/arch/sparc/configs/sparc64_defconfig +++ b/arch/sparc/configs/sparc64_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.31 -# Tue Sep 15 17:06:03 2009 +# Linux kernel version: 2.6.33-rc2 +# Wed Jan 20 16:31:47 2010  #  CONFIG_64BIT=y  CONFIG_SPARC=y @@ -20,6 +20,7 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y  CONFIG_AUDIT_ARCH=y  CONFIG_HAVE_SETUP_PER_CPU_AREA=y  CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_MMU=y  CONFIG_ARCH_NO_VIRT_TO_BUS=y @@ -50,6 +51,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y  #  CONFIG_TREE_RCU=y  # CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set  # CONFIG_RCU_TRACE is not set  CONFIG_RCU_FANOUT=64  # CONFIG_RCU_FANOUT_EXACT is not set @@ -62,8 +64,7 @@ CONFIG_RT_GROUP_SCHED=y  CONFIG_USER_SCHED=y  # CONFIG_CGROUP_SCHED is not set  # CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set  CONFIG_RELAY=y  CONFIG_NAMESPACES=y  # CONFIG_UTS_NS is not set @@ -97,24 +98,25 @@ CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y  CONFIG_AIO=y -CONFIG_HAVE_PERF_COUNTERS=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y  # -# Performance Counters +# Kernel Performance Events And Counters  # -CONFIG_PERF_COUNTERS=y +CONFIG_PERF_EVENTS=y  CONFIG_EVENT_PROFILE=y +CONFIG_PERF_COUNTERS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set  CONFIG_VM_EVENT_COUNTERS=y  CONFIG_PCI_QUIRKS=y  CONFIG_SLUB_DEBUG=y -# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_COMPAT_BRK is not set  # CONFIG_SLAB is not set  CONFIG_SLUB=y  # CONFIG_SLOB is not set  CONFIG_PROFILING=y  CONFIG_TRACEPOINTS=y -CONFIG_MARKERS=y  CONFIG_OPROFILE=m  CONFIG_HAVE_OPROFILE=y  CONFIG_KPROBES=y @@ -152,14 +154,41 @@ CONFIG_BLOCK_COMPAT=y  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_MUTEX_SPIN_ON_OWNER=y  # CONFIG_FREEZER is not set  # @@ -179,6 +208,7 @@ CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_ARCH_MAY_HAVE_PC_FDC=y  CONFIG_SPARC64_SMP=y +CONFIG_EARLYFB=y  CONFIG_SPARC64_PAGE_SIZE_8KB=y  # CONFIG_SPARC64_PAGE_SIZE_64KB is not set  CONFIG_SECCOMP=y @@ -216,8 +246,7 @@ CONFIG_MIGRATION=y  CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=0  CONFIG_NR_QUICK=1 -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_KSM is not set  CONFIG_DEFAULT_MMAP_MIN_ADDR=8192  CONFIG_SCHED_SMT=y  CONFIG_SCHED_MC=y @@ -315,6 +344,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m  CONFIG_INET6_XFRM_MODE_BEET=m  # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set  CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set  CONFIG_IPV6_NDISC_NODETYPE=y  CONFIG_IPV6_TUNNEL=m  # CONFIG_IPV6_MULTIPLE_TABLES is not set @@ -356,9 +386,6 @@ CONFIG_NET_TCPPROBE=m  # CONFIG_AF_RXRPC is not set  CONFIG_WIRELESS=y  # CONFIG_CFG80211 is not set -CONFIG_CFG80211_DEFAULT_PS_VALUE=0 -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set  # CONFIG_LIB80211 is not set  # @@ -376,6 +403,7 @@ CONFIG_WIRELESS_OLD_REGULATORY=y  # Generic Driver Options  #  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  # CONFIG_PREVENT_FIRMWARE_BUILD is not set  CONFIG_FW_LOADER=y @@ -397,6 +425,11 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=m  CONFIG_BLK_DEV_CRYPTOLOOP=m + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_DRBD is not set  CONFIG_BLK_DEV_NBD=m  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_UB is not set @@ -408,6 +441,7 @@ CONFIG_ATA_OVER_ETH=m  CONFIG_SUNVDC=m  # CONFIG_BLK_DEV_HD is not set  CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set  # CONFIG_PHANTOM is not set  # CONFIG_SGI_IOC4 is not set  # CONFIG_TIFM_CORE is not set @@ -415,6 +449,7 @@ CONFIG_MISC_DEVICES=y  # CONFIG_ENCLOSURE_SERVICES is not set  # CONFIG_HP_ILO is not set  # CONFIG_ISL29003 is not set +# CONFIG_DS1682 is not set  # CONFIG_C2PORT is not set  # @@ -522,8 +557,11 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set  # CONFIG_SCSI_CXGB3_ISCSI is not set  # CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_BE2ISCSI is not set  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set  # CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set @@ -557,7 +595,9 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_DEBUG is not set  # CONFIG_SCSI_SUNESP is not set  # CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_BFA_FC is not set  # CONFIG_SCSI_DH is not set  # CONFIG_SCSI_OSD_INITIATOR is not set  # CONFIG_ATA is not set @@ -568,7 +608,9 @@ CONFIG_MD_RAID0=m  CONFIG_MD_RAID1=m  CONFIG_MD_RAID10=m  CONFIG_MD_RAID456=m +# CONFIG_MULTICORE_RAID456 is not set  CONFIG_MD_RAID6_PQ=m +# CONFIG_ASYNC_RAID6_TEST is not set  CONFIG_MD_MULTIPATH=m  # CONFIG_MD_FAULTY is not set  CONFIG_BLK_DEV_DM=m @@ -592,7 +634,7 @@ CONFIG_DM_ZERO=m  #  # -# See the help texts for more information. +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set @@ -664,6 +706,7 @@ CONFIG_NET_PCI=y  # CONFIG_SUNDANCE is not set  # CONFIG_TLAN is not set  # CONFIG_KS8842 is not set +# CONFIG_KS8851_MLL is not set  # CONFIG_VIA_RHINE is not set  # CONFIG_SC92031 is not set  # CONFIG_ATL2 is not set @@ -745,6 +788,7 @@ CONFIG_SLHC=m  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -754,6 +798,7 @@ CONFIG_SLHC=m  CONFIG_INPUT=y  # CONFIG_INPUT_FF_MEMLESS is not set  # CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set  #  # Userland interfaces @@ -770,9 +815,13 @@ CONFIG_INPUT_EVDEV=y  # Input Device Drivers  #  CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set  CONFIG_KEYBOARD_ATKBD=y +# CONFIG_QT2160 is not set  CONFIG_KEYBOARD_LKKBD=m +# CONFIG_KEYBOARD_MAX7359 is not set  # CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set  # CONFIG_KEYBOARD_STOWAWAY is not set  CONFIG_KEYBOARD_SUNKBD=y  # CONFIG_KEYBOARD_XTKBD is not set @@ -812,6 +861,7 @@ CONFIG_SERIO_I8042=y  CONFIG_SERIO_PCIPS2=m  CONFIG_SERIO_LIBPS2=y  CONFIG_SERIO_RAW=m +# CONFIG_SERIO_ALTERA_PS2 is not set  # CONFIG_GAMEPORT is not set  # @@ -844,6 +894,7 @@ CONFIG_SERIAL_SUNHV=y  CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set  CONFIG_UNIX98_PTYS=y  # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set  # CONFIG_LEGACY_PTYS is not set @@ -858,6 +909,7 @@ CONFIG_HW_RANDOM_N2RNG=m  CONFIG_DEVPORT=y  CONFIG_I2C=y  CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y  # CONFIG_I2C_CHARDEV is not set  CONFIG_I2C_HELPER_AUTO=y  CONFIG_I2C_ALGOBIT=y @@ -898,11 +950,6 @@ CONFIG_I2C_ALGOBIT=y  # CONFIG_I2C_TINY_USB is not set  # -# Graphics adapter I2C/DDC channel drivers -# -# CONFIG_I2C_VOODOO3 is not set - -#  # Other I2C/SMBus bus drivers  #  # CONFIG_I2C_PCA_PLATFORM is not set @@ -911,10 +958,6 @@ CONFIG_I2C_ALGOBIT=y  #  # Miscellaneous I2C Chip support  # -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_PCF8575 is not set -# CONFIG_SENSORS_PCA9539 is not set  # CONFIG_SENSORS_TSL2550 is not set  # CONFIG_I2C_DEBUG_CORE is not set  # CONFIG_I2C_DEBUG_ALGO is not set @@ -932,6 +975,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y  # CONFIG_POWER_SUPPLY is not set  CONFIG_HWMON=y  # CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +#  # CONFIG_SENSORS_AD7414 is not set  # CONFIG_SENSORS_AD7418 is not set  # CONFIG_SENSORS_ADM1021 is not set @@ -955,6 +1003,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_GL520SM is not set  # CONFIG_SENSORS_IT87 is not set  # CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set  # CONFIG_SENSORS_LM75 is not set  # CONFIG_SENSORS_LM77 is not set  # CONFIG_SENSORS_LM78 is not set @@ -981,6 +1030,7 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_ADS7828 is not set  # CONFIG_SENSORS_THMC50 is not set  # CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set  # CONFIG_SENSORS_VIA686A is not set  # CONFIG_SENSORS_VT1211 is not set  # CONFIG_SENSORS_VT8231 is not set @@ -993,9 +1043,8 @@ CONFIG_HWMON=y  # CONFIG_SENSORS_W83627HF is not set  # CONFIG_SENSORS_W83627EHF is not set  # CONFIG_SENSORS_ULTRA45 is not set -# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_LIS3_I2C is not set  # CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set  # CONFIG_WATCHDOG is not set  CONFIG_SSB_POSSIBLE=y @@ -1013,16 +1062,20 @@ CONFIG_SSB_POSSIBLE=y  # CONFIG_TWL4030_CORE is not set  # CONFIG_MFD_TMIO is not set  # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set  # CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X is not set  # CONFIG_MFD_WM8350_I2C is not set  # CONFIG_MFD_PCF50633 is not set  # CONFIG_AB3100_CORE is not set +# CONFIG_MFD_88PM8607 is not set  # CONFIG_REGULATOR is not set  # CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  # +CONFIG_VGA_ARB=y  # CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set @@ -1176,6 +1229,7 @@ CONFIG_SND_ALI5451=m  # CONFIG_SND_OXYGEN is not set  # CONFIG_SND_CS4281 is not set  # CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5535AUDIO is not set  # CONFIG_SND_CTXFI is not set  # CONFIG_SND_DARLA20 is not set  # CONFIG_SND_GINA20 is not set @@ -1311,6 +1365,7 @@ CONFIG_USB_EHCI_HCD=m  # CONFIG_USB_OXU210HP_HCD is not set  # CONFIG_USB_ISP116X_HCD is not set  # CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set  CONFIG_USB_OHCI_HCD=y  # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set  # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set @@ -1426,6 +1481,7 @@ CONFIG_RTC_INTF_DEV=y  # CONFIG_RTC_DRV_PCF8563 is not set  # CONFIG_RTC_DRV_PCF8583 is not set  # CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set  # CONFIG_RTC_DRV_S35390A is not set  # CONFIG_RTC_DRV_FM3130 is not set  # CONFIG_RTC_DRV_RX8581 is not set @@ -1447,7 +1503,9 @@ CONFIG_RTC_DRV_CMOS=y  # CONFIG_RTC_DRV_M48T86 is not set  # CONFIG_RTC_DRV_M48T35 is not set  CONFIG_RTC_DRV_M48T59=y +# CONFIG_RTC_DRV_MSM6242 is not set  CONFIG_RTC_DRV_BQ4802=y +# CONFIG_RTC_DRV_RP5C01 is not set  # CONFIG_RTC_DRV_V3020 is not set  # @@ -1625,6 +1683,7 @@ CONFIG_PRINTK_TIME=y  CONFIG_ENABLE_MUST_CHECK=y  CONFIG_FRAME_WARN=2048  CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  CONFIG_DEBUG_FS=y  # CONFIG_HEADERS_CHECK is not set @@ -1678,9 +1737,11 @@ CONFIG_NOP_TRACER=y  CONFIG_HAVE_FUNCTION_TRACER=y  CONFIG_HAVE_DYNAMIC_FTRACE=y  CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y  CONFIG_RING_BUFFER=y  CONFIG_EVENT_TRACING=y  CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y  CONFIG_TRACING=y  CONFIG_GENERIC_TRACER=y  CONFIG_TRACING_SUPPORT=y @@ -1688,6 +1749,7 @@ CONFIG_FTRACE=y  # CONFIG_FUNCTION_TRACER is not set  # CONFIG_IRQSOFF_TRACER is not set  # CONFIG_SCHED_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set  # CONFIG_BOOT_TRACER is not set  CONFIG_BRANCH_PROFILE_NONE=y  # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set @@ -1706,6 +1768,7 @@ CONFIG_HAVE_ARCH_KGDB=y  # CONFIG_DEBUG_STACK_USAGE is not set  # CONFIG_DEBUG_DCFLUSH is not set  # CONFIG_STACK_DEBUG is not set +# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set  #  # Security options @@ -1714,11 +1777,17 @@ CONFIG_KEYS=y  # CONFIG_KEYS_DEBUG_PROC_KEYS is not set  # CONFIG_SECURITY is not set  # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY=""  CONFIG_XOR_BLOCKS=m  CONFIG_ASYNC_CORE=m  CONFIG_ASYNC_MEMCPY=m  CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m  CONFIG_CRYPTO=y  # diff --git a/arch/sparc/include/asm/elf_64.h b/arch/sparc/include/asm/elf_64.h index ff66bb88537..e67880381b8 100644 --- a/arch/sparc/include/asm/elf_64.h +++ b/arch/sparc/include/asm/elf_64.h @@ -195,17 +195,10 @@ static inline unsigned int sparc64_elf_hwcap(void)  #define ELF_PLATFORM	(NULL)  #define SET_PERSONALITY(ex)				\ -do {	unsigned long new_flags = current_thread_info()->flags; \ -	new_flags &= _TIF_32BIT;			\ -	if ((ex).e_ident[EI_CLASS] == ELFCLASS32)	\ -		new_flags |= _TIF_32BIT;		\ +do {	if ((ex).e_ident[EI_CLASS] == ELFCLASS32)	\ +		set_thread_flag(TIF_32BIT);		\  	else						\ -		new_flags &= ~_TIF_32BIT;		\ -	if ((current_thread_info()->flags & _TIF_32BIT) \ -	    != new_flags)				\ -		set_thread_flag(TIF_ABI_PENDING);	\ -	else						\ -		clear_thread_flag(TIF_ABI_PENDING);	\ +		clear_thread_flag(TIF_32BIT);		\  	/* flush_thread will update pgd cache */	\  	if (personality(current->personality) != PER_LINUX32)	\  		set_personality(PER_LINUX |		\ diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h index 93fe21e02c8..679c7504625 100644 --- a/arch/sparc/include/asm/io_32.h +++ b/arch/sparc/include/asm/io_32.h @@ -8,7 +8,7 @@  #include <asm/page.h>      /* IO address mapping routines need this */  #include <asm/system.h> -#define page_to_phys(page)	(((page) - mem_map) << PAGE_SHIFT) +#define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)  static inline u32 flip_dword (u32 l)  { diff --git a/arch/sparc/include/asm/page_32.h b/arch/sparc/include/asm/page_32.h index f72080bdda9..156707b0f18 100644 --- a/arch/sparc/include/asm/page_32.h +++ b/arch/sparc/include/asm/page_32.h @@ -143,7 +143,7 @@ extern unsigned long pfn_base;  #define phys_to_virt		__va  #define ARCH_PFN_OFFSET		(pfn_base) -#define virt_to_page(kaddr)	(mem_map + ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT))) +#define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)  #define pfn_valid(pfn)		(((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr))  #define virt_addr_valid(kaddr)	((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) diff --git a/arch/sparc/include/asm/param.h b/arch/sparc/include/asm/param.h index 9836d9a3cb9..0bc356bf8c5 100644 --- a/arch/sparc/include/asm/param.h +++ b/arch/sparc/include/asm/param.h @@ -1,22 +1,7 @@  #ifndef _ASMSPARC_PARAM_H  #define _ASMSPARC_PARAM_H -#ifdef __KERNEL__ -# define HZ		CONFIG_HZ	/* Internal kernel timer frequency */ -# define USER_HZ	100	/* .. some user interfaces are in "ticks" */ -# define CLOCKS_PER_SEC (USER_HZ) -#endif - -#ifndef HZ -#define HZ 100 -#endif -  #define EXEC_PAGESIZE	8192    /* Thanks for sun4's we carry baggage... */ +#include <asm-generic/param.h> -#ifndef NOGROUP -#define NOGROUP		(-1) -#endif - -#define MAXHOSTNAMELEN	64	/* max length of hostname */ - -#endif +#endif /* _ASMSPARC_PARAM_H */ diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 7257ebb8f39..39be9f256e5 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h @@ -228,12 +228,11 @@ register struct thread_info *current_thread_info_reg asm("g6");  #define TIF_SECCOMP		9	/* secure computing */  #define TIF_SYSCALL_AUDIT	10	/* syscall auditing active */  #define TIF_SYSCALL_TRACEPOINT	11	/* syscall tracepoint instrumentation */ -/* flag bit 11 is available */  /* NOTE: Thread flags >= 12 should be ones we have no interest   *       in using in assembly, else we can't use the mask as   *       an immediate value in instructions such as andcc.   */ -#define TIF_ABI_PENDING		12 +/* flag bit 12 is available */  #define TIF_MEMDIE		13  #define TIF_POLLING_NRFLAG	14  #define TIF_FREEZE		15	/* is freezing for suspend */ @@ -248,7 +247,6 @@ register struct thread_info *current_thread_info_reg asm("g6");  #define _TIF_SECCOMP		(1<<TIF_SECCOMP)  #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)  #define _TIF_SYSCALL_TRACEPOINT	(1<<TIF_SYSCALL_TRACEPOINT) -#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)  #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)  #define _TIF_FREEZE		(1<<TIF_FREEZE) diff --git a/arch/sparc/include/asm/timex_32.h b/arch/sparc/include/asm/timex_32.h index b6ccdb0d6f7..a254750e4c0 100644 --- a/arch/sparc/include/asm/timex_32.h +++ b/arch/sparc/include/asm/timex_32.h @@ -12,4 +12,5 @@  typedef unsigned long cycles_t;  #define get_cycles()	(0) +extern u32 (*do_arch_gettimeoffset)(void);  #endif diff --git a/arch/sparc/include/asm/topology_64.h b/arch/sparc/include/asm/topology_64.h index 600a79035fa..1c79f32734a 100644 --- a/arch/sparc/include/asm/topology_64.h +++ b/arch/sparc/include/asm/topology_64.h @@ -12,7 +12,9 @@ static inline int cpu_to_node(int cpu)  #define parent_node(node)	(node) -#define cpumask_of_node(node) (&numa_cpumask_lookup_table[node]) +#define cpumask_of_node(node) ((node) == -1 ?				\ +			       cpu_all_mask :				\ +			       &numa_cpumask_lookup_table[node])  struct pci_bus;  #ifdef CONFIG_PCI diff --git a/arch/sparc/include/asm/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h index 489d2ba92bc..25f1d10155e 100644 --- a/arch/sparc/include/asm/uaccess_32.h +++ b/arch/sparc/include/asm/uaccess_32.h @@ -274,7 +274,7 @@ static inline unsigned long copy_from_user(void *to, const void __user *from, un  	if (unlikely(sz != -1 && sz < n)) {  		copy_from_user_overflow(); -		return -EFAULT; +		return n;  	}  	if (n && __access_ok((unsigned long) from, n)) diff --git a/arch/sparc/include/asm/uaccess_64.h b/arch/sparc/include/asm/uaccess_64.h index dbc14166099..2406788bfe5 100644 --- a/arch/sparc/include/asm/uaccess_64.h +++ b/arch/sparc/include/asm/uaccess_64.h @@ -221,8 +221,8 @@ extern unsigned long copy_from_user_fixup(void *to, const void __user *from,  static inline unsigned long __must_check  copy_from_user(void *to, const void __user *from, unsigned long size)  { -	unsigned long ret = (unsigned long) -EFAULT;  	int sz = __compiletime_object_size(to); +	unsigned long ret = size;  	if (likely(sz == -1 || sz >= size)) {  		ret = ___copy_from_user(to, from, size); diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c index f3b5466c389..4589ca33220 100644 --- a/arch/sparc/kernel/central.c +++ b/arch/sparc/kernel/central.c @@ -99,7 +99,7 @@ static int __devinit clock_board_probe(struct of_device *op,  	p->leds_resource.start = (unsigned long)  		(p->clock_regs + CLOCK_CTRL); -	p->leds_resource.end = p->leds_resource.end; +	p->leds_resource.end = p->leds_resource.start;  	p->leds_resource.name = "leds";  	p->leds_pdev.name = "sunfire-clockboard-leds"; @@ -194,7 +194,7 @@ static int __devinit fhc_probe(struct of_device *op,  	if (!p->central) {  		p->leds_resource.start = (unsigned long)  			(p->pregs + FHC_PREGS_CTRL); -		p->leds_resource.end = p->leds_resource.end; +		p->leds_resource.end = p->leds_resource.start;  		p->leds_resource.name = "leds";  		p->leds_pdev.name = "sunfire-fhc-leds"; diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c index 8d6882bb480..e1cbdb94d97 100644 --- a/arch/sparc/kernel/irq_64.c +++ b/arch/sparc/kernel/irq_64.c @@ -250,12 +250,12 @@ struct irq_handler_data {  };  #ifdef CONFIG_SMP -static int irq_choose_cpu(unsigned int virt_irq) +static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)  {  	cpumask_t mask;  	int cpuid; -	cpumask_copy(&mask, irq_desc[virt_irq].affinity); +	cpumask_copy(&mask, affinity);  	if (cpus_equal(mask, cpu_online_map)) {  		cpuid = map_to_cpu(virt_irq);  	} else { @@ -268,10 +268,8 @@ static int irq_choose_cpu(unsigned int virt_irq)  	return cpuid;  }  #else -static int irq_choose_cpu(unsigned int virt_irq) -{ -	return real_hard_smp_processor_id(); -} +#define irq_choose_cpu(virt_irq, affinity)	\ +	real_hard_smp_processor_id()  #endif  static void sun4u_irq_enable(unsigned int virt_irq) @@ -282,7 +280,8 @@ static void sun4u_irq_enable(unsigned int virt_irq)  		unsigned long cpuid, imap, val;  		unsigned int tid; -		cpuid = irq_choose_cpu(virt_irq); +		cpuid = irq_choose_cpu(virt_irq, +				       irq_desc[virt_irq].affinity);  		imap = data->imap;  		tid = sun4u_compute_tid(imap, cpuid); @@ -299,7 +298,24 @@ static void sun4u_irq_enable(unsigned int virt_irq)  static int sun4u_set_affinity(unsigned int virt_irq,  			       const struct cpumask *mask)  { -	sun4u_irq_enable(virt_irq); +	struct irq_handler_data *data = get_irq_chip_data(virt_irq); + +	if (likely(data)) { +		unsigned long cpuid, imap, val; +		unsigned int tid; + +		cpuid = irq_choose_cpu(virt_irq, mask); +		imap = data->imap; + +		tid = sun4u_compute_tid(imap, cpuid); + +		val = upa_readq(imap); +		val &= ~(IMAP_TID_UPA | IMAP_TID_JBUS | +			 IMAP_AID_SAFARI | IMAP_NID_SAFARI); +		val |= tid | IMAP_VALID; +		upa_writeq(val, imap); +		upa_writeq(ICLR_IDLE, data->iclr); +	}  	return 0;  } @@ -340,7 +356,8 @@ static void sun4u_irq_eoi(unsigned int virt_irq)  static void sun4v_irq_enable(unsigned int virt_irq)  {  	unsigned int ino = virt_irq_table[virt_irq].dev_ino; -	unsigned long cpuid = irq_choose_cpu(virt_irq); +	unsigned long cpuid = irq_choose_cpu(virt_irq, +					     irq_desc[virt_irq].affinity);  	int err;  	err = sun4v_intr_settarget(ino, cpuid); @@ -361,7 +378,7 @@ static int sun4v_set_affinity(unsigned int virt_irq,  			       const struct cpumask *mask)  {  	unsigned int ino = virt_irq_table[virt_irq].dev_ino; -	unsigned long cpuid = irq_choose_cpu(virt_irq); +	unsigned long cpuid = irq_choose_cpu(virt_irq, mask);  	int err;  	err = sun4v_intr_settarget(ino, cpuid); @@ -403,7 +420,7 @@ static void sun4v_virq_enable(unsigned int virt_irq)  	unsigned long cpuid, dev_handle, dev_ino;  	int err; -	cpuid = irq_choose_cpu(virt_irq); +	cpuid = irq_choose_cpu(virt_irq, irq_desc[virt_irq].affinity);  	dev_handle = virt_irq_table[virt_irq].dev_handle;  	dev_ino = virt_irq_table[virt_irq].dev_ino; @@ -433,7 +450,7 @@ static int sun4v_virt_set_affinity(unsigned int virt_irq,  	unsigned long cpuid, dev_handle, dev_ino;  	int err; -	cpuid = irq_choose_cpu(virt_irq); +	cpuid = irq_choose_cpu(virt_irq, mask);  	dev_handle = virt_irq_table[virt_irq].dev_handle;  	dev_ino = virt_irq_table[virt_irq].dev_ino; diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index 85e7037429b..4e2724ec2bb 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c @@ -30,6 +30,7 @@  #include <asm/oplib.h>  #include <asm/prom.h>  #include <asm/pcic.h> +#include <asm/timex.h>  #include <asm/timer.h>  #include <asm/uaccess.h>  #include <asm/irq_regs.h> @@ -163,8 +164,6 @@ void __iomem *pcic_regs;  volatile int pcic_speculative;  volatile int pcic_trapped; -static void pci_do_gettimeofday(struct timeval *tv); -static int pci_do_settimeofday(struct timespec *tv);  #define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3)) @@ -716,19 +715,27 @@ static irqreturn_t pcic_timer_handler (int irq, void *h)  #define USECS_PER_JIFFY  10000  /* We have 100HZ "standard" timer for sparc */  #define TICK_TIMER_LIMIT ((100*1000000/4)/100) +u32 pci_gettimeoffset(void) +{ +	/* +	 * We divide all by 100 +	 * to have microsecond resolution and to avoid overflow +	 */ +	unsigned long count = +	    readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW; +	count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100); +	return count * 1000; +} + +  void __init pci_time_init(void)  {  	struct linux_pcic *pcic = &pcic0;  	unsigned long v;  	int timer_irq, irq; -	/* A hack until do_gettimeofday prototype is moved to arch specific headers -	   and btfixupped. Patch do_gettimeofday with ba pci_do_gettimeofday; nop */ -	((unsigned int *)do_gettimeofday)[0] =  -	    0x10800000 | ((((unsigned long)pci_do_gettimeofday - -	     (unsigned long)do_gettimeofday) >> 2) & 0x003fffff); -	((unsigned int *)do_gettimeofday)[1] = 0x01000000; -	BTFIXUPSET_CALL(bus_do_settimeofday, pci_do_settimeofday, BTFIXUPCALL_NORM); +	do_arch_gettimeoffset = pci_gettimeoffset; +  	btfixup();  	writel (TICK_TIMER_LIMIT, pcic->pcic_regs+PCI_SYS_LIMIT); @@ -746,84 +753,6 @@ void __init pci_time_init(void)  	local_irq_enable();  } -static inline unsigned long do_gettimeoffset(void) -{ -	/* -	 * We divide all by 100 -	 * to have microsecond resolution and to avoid overflow -	 */ -	unsigned long count = -	    readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW; -	count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100); -	return count; -} - -static void pci_do_gettimeofday(struct timeval *tv) -{ -	unsigned long flags; -	unsigned long seq; -	unsigned long usec, sec; -	unsigned long max_ntp_tick = tick_usec - tickadj; - -	do { -		seq = read_seqbegin_irqsave(&xtime_lock, flags); -		usec = do_gettimeoffset(); - -		/* -		 * If time_adjust is negative then NTP is slowing the clock -		 * so make sure not to go into next possible interval. -		 * Better to lose some accuracy than have time go backwards.. -		 */ -		if (unlikely(time_adjust < 0)) -			usec = min(usec, max_ntp_tick); - -		sec = xtime.tv_sec; -		usec += (xtime.tv_nsec / 1000); -	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); - -	while (usec >= 1000000) { -		usec -= 1000000; -		sec++; -	} - -	tv->tv_sec = sec; -	tv->tv_usec = usec; -} - -static int pci_do_settimeofday(struct timespec *tv) -{ -	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) -		return -EINVAL; - -	/* -	 * This is revolting. We need to set "xtime" correctly. However, the -	 * value in this location is the value at the most recent update of -	 * wall time.  Discover what correction gettimeofday() would have -	 * made, and then undo it! -	 */ -	tv->tv_nsec -= 1000 * do_gettimeoffset(); -	while (tv->tv_nsec < 0) { -		tv->tv_nsec += NSEC_PER_SEC; -		tv->tv_sec--; -	} - -	wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec; -	wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_nsec; - -	if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) { -		wall_to_monotonic.tv_nsec -= NSEC_PER_SEC; -		wall_to_monotonic.tv_sec++; -	} -	if (wall_to_monotonic.tv_nsec < 0) { -		wall_to_monotonic.tv_nsec += NSEC_PER_SEC; -		wall_to_monotonic.tv_sec--; -	} - -	xtime.tv_sec = tv->tv_sec; -	xtime.tv_nsec = tv->tv_nsec; -	ntp_clear(); -	return 0; -}  #if 0  static void watchdog_reset() { diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 198fb4e79ba..e856456ec02 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c @@ -1,6 +1,6 @@  /* Performance event support for sparc64.   * - * Copyright (C) 2009 David S. Miller <davem@davemloft.net> + * Copyright (C) 2009, 2010 David S. Miller <davem@davemloft.net>   *   * This code is based almost entirely upon the x86 perf event   * code, which is: @@ -18,11 +18,15 @@  #include <linux/kdebug.h>  #include <linux/mutex.h> +#include <asm/stacktrace.h>  #include <asm/cpudata.h> +#include <asm/uaccess.h>  #include <asm/atomic.h>  #include <asm/nmi.h>  #include <asm/pcr.h> +#include "kstack.h" +  /* Sparc64 chips have two performance counters, 32-bits each, with   * overflow interrupts generated on transition from 0xffffffff to 0.   * The counters are accessed in one go using a 64-bit register. @@ -51,16 +55,49 @@  #define PIC_UPPER_INDEX			0  #define PIC_LOWER_INDEX			1 +#define PIC_NO_INDEX			-1  struct cpu_hw_events { -	struct perf_event	*events[MAX_HWEVENTS]; -	unsigned long		used_mask[BITS_TO_LONGS(MAX_HWEVENTS)]; -	unsigned long		active_mask[BITS_TO_LONGS(MAX_HWEVENTS)]; +	/* Number of events currently scheduled onto this cpu. +	 * This tells how many entries in the arrays below +	 * are valid. +	 */ +	int			n_events; + +	/* Number of new events added since the last hw_perf_disable(). +	 * This works because the perf event layer always adds new +	 * events inside of a perf_{disable,enable}() sequence. +	 */ +	int			n_added; + +	/* Array of events current scheduled on this cpu.  */ +	struct perf_event	*event[MAX_HWEVENTS]; + +	/* Array of encoded longs, specifying the %pcr register +	 * encoding and the mask of PIC counters this even can +	 * be scheduled on.  See perf_event_encode() et al. +	 */ +	unsigned long		events[MAX_HWEVENTS]; + +	/* The current counter index assigned to an event.  When the +	 * event hasn't been programmed into the cpu yet, this will +	 * hold PIC_NO_INDEX.  The event->hw.idx value tells us where +	 * we ought to schedule the event. +	 */ +	int			current_idx[MAX_HWEVENTS]; + +	/* Software copy of %pcr register on this cpu.  */  	u64			pcr; + +	/* Enabled/disable state.  */  	int			enabled;  };  DEFINE_PER_CPU(struct cpu_hw_events, cpu_hw_events) = { .enabled = 1, }; +/* An event map describes the characteristics of a performance + * counter event.  In particular it gives the encoding as well as + * a mask telling which counters the event can be measured on. + */  struct perf_event_map {  	u16	encoding;  	u8	pic_mask; @@ -69,15 +106,20 @@ struct perf_event_map {  #define PIC_LOWER	0x02  }; +/* Encode a perf_event_map entry into a long.  */  static unsigned long perf_event_encode(const struct perf_event_map *pmap)  {  	return ((unsigned long) pmap->encoding << 16) | pmap->pic_mask;  } -static void perf_event_decode(unsigned long val, u16 *enc, u8 *msk) +static u8 perf_event_get_msk(unsigned long val)  { -	*msk = val & 0xff; -	*enc = val >> 16; +	return val & 0xff; +} + +static u64 perf_event_get_enc(unsigned long val) +{ +	return val >> 16;  }  #define C(x) PERF_COUNT_HW_CACHE_##x @@ -491,53 +533,6 @@ static inline void sparc_pmu_disable_event(struct cpu_hw_events *cpuc, struct hw  	pcr_ops->write(cpuc->pcr);  } -void hw_perf_enable(void) -{ -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); -	u64 val; -	int i; - -	if (cpuc->enabled) -		return; - -	cpuc->enabled = 1; -	barrier(); - -	val = cpuc->pcr; - -	for (i = 0; i < MAX_HWEVENTS; i++) { -		struct perf_event *cp = cpuc->events[i]; -		struct hw_perf_event *hwc; - -		if (!cp) -			continue; -		hwc = &cp->hw; -		val |= hwc->config_base; -	} - -	cpuc->pcr = val; - -	pcr_ops->write(cpuc->pcr); -} - -void hw_perf_disable(void) -{ -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); -	u64 val; - -	if (!cpuc->enabled) -		return; - -	cpuc->enabled = 0; - -	val = cpuc->pcr; -	val &= ~(PCR_UTRACE | PCR_STRACE | -		 sparc_pmu->hv_bit | sparc_pmu->irq_bit); -	cpuc->pcr = val; - -	pcr_ops->write(cpuc->pcr); -} -  static u32 read_pmc(int idx)  {  	u64 val; @@ -566,6 +561,30 @@ static void write_pmc(int idx, u64 val)  	write_pic(pic);  } +static u64 sparc_perf_event_update(struct perf_event *event, +				   struct hw_perf_event *hwc, int idx) +{ +	int shift = 64 - 32; +	u64 prev_raw_count, new_raw_count; +	s64 delta; + +again: +	prev_raw_count = atomic64_read(&hwc->prev_count); +	new_raw_count = read_pmc(idx); + +	if (atomic64_cmpxchg(&hwc->prev_count, prev_raw_count, +			     new_raw_count) != prev_raw_count) +		goto again; + +	delta = (new_raw_count << shift) - (prev_raw_count << shift); +	delta >>= shift; + +	atomic64_add(delta, &event->count); +	atomic64_sub(delta, &hwc->period_left); + +	return new_raw_count; +} +  static int sparc_perf_event_set_period(struct perf_event *event,  				       struct hw_perf_event *hwc, int idx)  { @@ -598,81 +617,166 @@ static int sparc_perf_event_set_period(struct perf_event *event,  	return ret;  } -static int sparc_pmu_enable(struct perf_event *event) +/* If performance event entries have been added, move existing + * events around (if necessary) and then assign new entries to + * counters. + */ +static u64 maybe_change_configuration(struct cpu_hw_events *cpuc, u64 pcr)  { -	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); -	struct hw_perf_event *hwc = &event->hw; -	int idx = hwc->idx; +	int i; -	if (test_and_set_bit(idx, cpuc->used_mask)) -		return -EAGAIN; +	if (!cpuc->n_added) +		goto out; -	sparc_pmu_disable_event(cpuc, hwc, idx); +	/* Read in the counters which are moving.  */ +	for (i = 0; i < cpuc->n_events; i++) { +		struct perf_event *cp = cpuc->event[i]; -	cpuc->events[idx] = event; -	set_bit(idx, cpuc->active_mask); +		if (cpuc->current_idx[i] != PIC_NO_INDEX && +		    cpuc->current_idx[i] != cp->hw.idx) { +			sparc_perf_event_update(cp, &cp->hw, +						cpuc->current_idx[i]); +			cpuc->current_idx[i] = PIC_NO_INDEX; +		} +	} -	sparc_perf_event_set_period(event, hwc, idx); -	sparc_pmu_enable_event(cpuc, hwc, idx); -	perf_event_update_userpage(event); -	return 0; +	/* Assign to counters all unassigned events.  */ +	for (i = 0; i < cpuc->n_events; i++) { +		struct perf_event *cp = cpuc->event[i]; +		struct hw_perf_event *hwc = &cp->hw; +		int idx = hwc->idx; +		u64 enc; + +		if (cpuc->current_idx[i] != PIC_NO_INDEX) +			continue; + +		sparc_perf_event_set_period(cp, hwc, idx); +		cpuc->current_idx[i] = idx; + +		enc = perf_event_get_enc(cpuc->events[i]); +		pcr |= event_encoding(enc, idx); +	} +out: +	return pcr;  } -static u64 sparc_perf_event_update(struct perf_event *event, -				   struct hw_perf_event *hwc, int idx) +void hw_perf_enable(void)  { -	int shift = 64 - 32; -	u64 prev_raw_count, new_raw_count; -	s64 delta; +	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	u64 pcr; -again: -	prev_raw_count = atomic64_read(&hwc->prev_count); -	new_raw_count = read_pmc(idx); +	if (cpuc->enabled) +		return; -	if (atomic64_cmpxchg(&hwc->prev_count, prev_raw_count, -			     new_raw_count) != prev_raw_count) -		goto again; +	cpuc->enabled = 1; +	barrier(); -	delta = (new_raw_count << shift) - (prev_raw_count << shift); -	delta >>= shift; +	pcr = cpuc->pcr; +	if (!cpuc->n_events) { +		pcr = 0; +	} else { +		pcr = maybe_change_configuration(cpuc, pcr); -	atomic64_add(delta, &event->count); -	atomic64_sub(delta, &hwc->period_left); +		/* We require that all of the events have the same +		 * configuration, so just fetch the settings from the +		 * first entry. +		 */ +		cpuc->pcr = pcr | cpuc->event[0]->hw.config_base; +	} -	return new_raw_count; +	pcr_ops->write(cpuc->pcr); +} + +void hw_perf_disable(void) +{ +	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	u64 val; + +	if (!cpuc->enabled) +		return; + +	cpuc->enabled = 0; +	cpuc->n_added = 0; + +	val = cpuc->pcr; +	val &= ~(PCR_UTRACE | PCR_STRACE | +		 sparc_pmu->hv_bit | sparc_pmu->irq_bit); +	cpuc->pcr = val; + +	pcr_ops->write(cpuc->pcr);  }  static void sparc_pmu_disable(struct perf_event *event)  {  	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);  	struct hw_perf_event *hwc = &event->hw; -	int idx = hwc->idx; +	unsigned long flags; +	int i; -	clear_bit(idx, cpuc->active_mask); -	sparc_pmu_disable_event(cpuc, hwc, idx); +	local_irq_save(flags); +	perf_disable(); -	barrier(); +	for (i = 0; i < cpuc->n_events; i++) { +		if (event == cpuc->event[i]) { +			int idx = cpuc->current_idx[i]; -	sparc_perf_event_update(event, hwc, idx); -	cpuc->events[idx] = NULL; -	clear_bit(idx, cpuc->used_mask); +			/* Shift remaining entries down into +			 * the existing slot. +			 */ +			while (++i < cpuc->n_events) { +				cpuc->event[i - 1] = cpuc->event[i]; +				cpuc->events[i - 1] = cpuc->events[i]; +				cpuc->current_idx[i - 1] = +					cpuc->current_idx[i]; +			} -	perf_event_update_userpage(event); +			/* Absorb the final count and turn off the +			 * event. +			 */ +			sparc_pmu_disable_event(cpuc, hwc, idx); +			barrier(); +			sparc_perf_event_update(event, hwc, idx); + +			perf_event_update_userpage(event); + +			cpuc->n_events--; +			break; +		} +	} + +	perf_enable(); +	local_irq_restore(flags); +} + +static int active_event_index(struct cpu_hw_events *cpuc, +			      struct perf_event *event) +{ +	int i; + +	for (i = 0; i < cpuc->n_events; i++) { +		if (cpuc->event[i] == event) +			break; +	} +	BUG_ON(i == cpuc->n_events); +	return cpuc->current_idx[i];  }  static void sparc_pmu_read(struct perf_event *event)  { +	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	int idx = active_event_index(cpuc, event);  	struct hw_perf_event *hwc = &event->hw; -	sparc_perf_event_update(event, hwc, hwc->idx); +	sparc_perf_event_update(event, hwc, idx);  }  static void sparc_pmu_unthrottle(struct perf_event *event)  {  	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	int idx = active_event_index(cpuc, event);  	struct hw_perf_event *hwc = &event->hw; -	sparc_pmu_enable_event(cpuc, hwc, hwc->idx); +	sparc_pmu_enable_event(cpuc, hwc, idx);  }  static atomic_t active_events = ATOMIC_INIT(0); @@ -750,43 +854,75 @@ static void hw_perf_event_destroy(struct perf_event *event)  /* Make sure all events can be scheduled into the hardware at   * the same time.  This is simplified by the fact that we only   * need to support 2 simultaneous HW events. + * + * As a side effect, the evts[]->hw.idx values will be assigned + * on success.  These are pending indexes.  When the events are + * actually programmed into the chip, these values will propagate + * to the per-cpu cpuc->current_idx[] slots, see the code in + * maybe_change_configuration() for details.   */ -static int sparc_check_constraints(unsigned long *events, int n_ev) +static int sparc_check_constraints(struct perf_event **evts, +				   unsigned long *events, int n_ev)  { -	if (n_ev <= perf_max_events) { -		u8 msk1, msk2; -		u16 dummy; +	u8 msk0 = 0, msk1 = 0; +	int idx0 = 0; + +	/* This case is possible when we are invoked from +	 * hw_perf_group_sched_in(). +	 */ +	if (!n_ev) +		return 0; + +	if (n_ev > perf_max_events) +		return -1; -		if (n_ev == 1) -			return 0; -		BUG_ON(n_ev != 2); -		perf_event_decode(events[0], &dummy, &msk1); -		perf_event_decode(events[1], &dummy, &msk2); +	msk0 = perf_event_get_msk(events[0]); +	if (n_ev == 1) { +		if (msk0 & PIC_LOWER) +			idx0 = 1; +		goto success; +	} +	BUG_ON(n_ev != 2); +	msk1 = perf_event_get_msk(events[1]); -		/* If both events can go on any counter, OK.  */ -		if (msk1 == (PIC_UPPER | PIC_LOWER) && -		    msk2 == (PIC_UPPER | PIC_LOWER)) -			return 0; +	/* If both events can go on any counter, OK.  */ +	if (msk0 == (PIC_UPPER | PIC_LOWER) && +	    msk1 == (PIC_UPPER | PIC_LOWER)) +		goto success; -		/* If one event is limited to a specific counter, -		 * and the other can go on both, OK. -		 */ -		if ((msk1 == PIC_UPPER || msk1 == PIC_LOWER) && -		    msk2 == (PIC_UPPER | PIC_LOWER)) -			return 0; -		if ((msk2 == PIC_UPPER || msk2 == PIC_LOWER) && -		    msk1 == (PIC_UPPER | PIC_LOWER)) -			return 0; +	/* If one event is limited to a specific counter, +	 * and the other can go on both, OK. +	 */ +	if ((msk0 == PIC_UPPER || msk0 == PIC_LOWER) && +	    msk1 == (PIC_UPPER | PIC_LOWER)) { +		if (msk0 & PIC_LOWER) +			idx0 = 1; +		goto success; +	} -		/* If the events are fixed to different counters, OK.  */ -		if ((msk1 == PIC_UPPER && msk2 == PIC_LOWER) || -		    (msk1 == PIC_LOWER && msk2 == PIC_UPPER)) -			return 0; +	if ((msk1 == PIC_UPPER || msk1 == PIC_LOWER) && +	    msk0 == (PIC_UPPER | PIC_LOWER)) { +		if (msk1 & PIC_UPPER) +			idx0 = 1; +		goto success; +	} -		/* Otherwise, there is a conflict.  */ +	/* If the events are fixed to different counters, OK.  */ +	if ((msk0 == PIC_UPPER && msk1 == PIC_LOWER) || +	    (msk0 == PIC_LOWER && msk1 == PIC_UPPER)) { +		if (msk0 & PIC_LOWER) +			idx0 = 1; +		goto success;  	} +	/* Otherwise, there is a conflict.  */  	return -1; + +success: +	evts[0]->hw.idx = idx0; +	if (n_ev == 2) +		evts[1]->hw.idx = idx0 ^ 1; +	return 0;  }  static int check_excludes(struct perf_event **evts, int n_prev, int n_new) @@ -818,7 +954,8 @@ static int check_excludes(struct perf_event **evts, int n_prev, int n_new)  }  static int collect_events(struct perf_event *group, int max_count, -			  struct perf_event *evts[], unsigned long *events) +			  struct perf_event *evts[], unsigned long *events, +			  int *current_idx)  {  	struct perf_event *event;  	int n = 0; @@ -827,7 +964,8 @@ static int collect_events(struct perf_event *group, int max_count,  		if (n >= max_count)  			return -1;  		evts[n] = group; -		events[n++] = group->hw.event_base; +		events[n] = group->hw.event_base; +		current_idx[n++] = PIC_NO_INDEX;  	}  	list_for_each_entry(event, &group->sibling_list, group_entry) {  		if (!is_software_event(event) && @@ -835,20 +973,100 @@ static int collect_events(struct perf_event *group, int max_count,  			if (n >= max_count)  				return -1;  			evts[n] = event; -			events[n++] = event->hw.event_base; +			events[n] = event->hw.event_base; +			current_idx[n++] = PIC_NO_INDEX;  		}  	}  	return n;  } +static void event_sched_in(struct perf_event *event, int cpu) +{ +	event->state = PERF_EVENT_STATE_ACTIVE; +	event->oncpu = cpu; +	event->tstamp_running += event->ctx->time - event->tstamp_stopped; +	if (is_software_event(event)) +		event->pmu->enable(event); +} + +int hw_perf_group_sched_in(struct perf_event *group_leader, +			   struct perf_cpu_context *cpuctx, +			   struct perf_event_context *ctx, int cpu) +{ +	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	struct perf_event *sub; +	int n0, n; + +	if (!sparc_pmu) +		return 0; + +	n0 = cpuc->n_events; +	n = collect_events(group_leader, perf_max_events - n0, +			   &cpuc->event[n0], &cpuc->events[n0], +			   &cpuc->current_idx[n0]); +	if (n < 0) +		return -EAGAIN; +	if (check_excludes(cpuc->event, n0, n)) +		return -EINVAL; +	if (sparc_check_constraints(cpuc->event, cpuc->events, n + n0)) +		return -EAGAIN; +	cpuc->n_events = n0 + n; +	cpuc->n_added += n; + +	cpuctx->active_oncpu += n; +	n = 1; +	event_sched_in(group_leader, cpu); +	list_for_each_entry(sub, &group_leader->sibling_list, group_entry) { +		if (sub->state != PERF_EVENT_STATE_OFF) { +			event_sched_in(sub, cpu); +			n++; +		} +	} +	ctx->nr_active += n; + +	return 1; +} + +static int sparc_pmu_enable(struct perf_event *event) +{ +	struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); +	int n0, ret = -EAGAIN; +	unsigned long flags; + +	local_irq_save(flags); +	perf_disable(); + +	n0 = cpuc->n_events; +	if (n0 >= perf_max_events) +		goto out; + +	cpuc->event[n0] = event; +	cpuc->events[n0] = event->hw.event_base; +	cpuc->current_idx[n0] = PIC_NO_INDEX; + +	if (check_excludes(cpuc->event, n0, 1)) +		goto out; +	if (sparc_check_constraints(cpuc->event, cpuc->events, n0 + 1)) +		goto out; + +	cpuc->n_events++; +	cpuc->n_added++; + +	ret = 0; +out: +	perf_enable(); +	local_irq_restore(flags); +	return ret; +} +  static int __hw_perf_event_init(struct perf_event *event)  {  	struct perf_event_attr *attr = &event->attr;  	struct perf_event *evts[MAX_HWEVENTS];  	struct hw_perf_event *hwc = &event->hw;  	unsigned long events[MAX_HWEVENTS]; +	int current_idx_dmy[MAX_HWEVENTS];  	const struct perf_event_map *pmap; -	u64 enc;  	int n;  	if (atomic_read(&nmi_active) < 0) @@ -865,10 +1083,7 @@ static int __hw_perf_event_init(struct perf_event *event)  	} else  		return -EOPNOTSUPP; -	/* We save the enable bits in the config_base.  So to -	 * turn off sampling just write 'config', and to enable -	 * things write 'config | config_base'. -	 */ +	/* We save the enable bits in the config_base.  */  	hwc->config_base = sparc_pmu->irq_bit;  	if (!attr->exclude_user)  		hwc->config_base |= PCR_UTRACE; @@ -879,13 +1094,11 @@ static int __hw_perf_event_init(struct perf_event *event)  	hwc->event_base = perf_event_encode(pmap); -	enc = pmap->encoding; -  	n = 0;  	if (event->group_leader != event) {  		n = collect_events(event->group_leader,  				   perf_max_events - 1, -				   evts, events); +				   evts, events, current_idx_dmy);  		if (n < 0)  			return -EINVAL;  	} @@ -895,9 +1108,11 @@ static int __hw_perf_event_init(struct perf_event *event)  	if (check_excludes(evts, n, 1))  		return -EINVAL; -	if (sparc_check_constraints(events, n + 1)) +	if (sparc_check_constraints(evts, events, n + 1))  		return -EINVAL; +	hwc->idx = PIC_NO_INDEX; +  	/* Try to do all error checking before this point, as unwinding  	 * state after grabbing the PMC is difficult.  	 */ @@ -910,15 +1125,6 @@ static int __hw_perf_event_init(struct perf_event *event)  		atomic64_set(&hwc->period_left, hwc->sample_period);  	} -	if (pmap->pic_mask & PIC_UPPER) { -		hwc->idx = PIC_UPPER_INDEX; -		enc <<= sparc_pmu->upper_shift; -	} else { -		hwc->idx = PIC_LOWER_INDEX; -		enc <<= sparc_pmu->lower_shift; -	} - -	hwc->config |= enc;  	return 0;  } @@ -968,7 +1174,7 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self,  	struct perf_sample_data data;  	struct cpu_hw_events *cpuc;  	struct pt_regs *regs; -	int idx; +	int i;  	if (!atomic_read(&active_events))  		return NOTIFY_DONE; @@ -997,13 +1203,12 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self,  	if (sparc_pmu->irq_bit)  		pcr_ops->write(cpuc->pcr); -	for (idx = 0; idx < MAX_HWEVENTS; idx++) { -		struct perf_event *event = cpuc->events[idx]; +	for (i = 0; i < cpuc->n_events; i++) { +		struct perf_event *event = cpuc->event[i]; +		int idx = cpuc->current_idx[i];  		struct hw_perf_event *hwc;  		u64 val; -		if (!test_bit(idx, cpuc->active_mask)) -			continue;  		hwc = &event->hw;  		val = sparc_perf_event_update(event, hwc, idx);  		if (val & (1ULL << 31)) @@ -1055,10 +1260,122 @@ void __init init_hw_perf_events(void)  	pr_cont("Supported PMU type is '%s'\n", sparc_pmu_type); -	/* All sparc64 PMUs currently have 2 events.  But this simple -	 * driver only supports one active event at a time. -	 */ -	perf_max_events = 1; +	/* All sparc64 PMUs currently have 2 events.  */ +	perf_max_events = 2;  	register_die_notifier(&perf_event_nmi_notifier);  } + +static inline void callchain_store(struct perf_callchain_entry *entry, u64 ip) +{ +	if (entry->nr < PERF_MAX_STACK_DEPTH) +		entry->ip[entry->nr++] = ip; +} + +static void perf_callchain_kernel(struct pt_regs *regs, +				  struct perf_callchain_entry *entry) +{ +	unsigned long ksp, fp; + +	callchain_store(entry, PERF_CONTEXT_KERNEL); +	callchain_store(entry, regs->tpc); + +	ksp = regs->u_regs[UREG_I6]; +	fp = ksp + STACK_BIAS; +	do { +		struct sparc_stackf *sf; +		struct pt_regs *regs; +		unsigned long pc; + +		if (!kstack_valid(current_thread_info(), fp)) +			break; + +		sf = (struct sparc_stackf *) fp; +		regs = (struct pt_regs *) (sf + 1); + +		if (kstack_is_trap_frame(current_thread_info(), regs)) { +			if (user_mode(regs)) +				break; +			pc = regs->tpc; +			fp = regs->u_regs[UREG_I6] + STACK_BIAS; +		} else { +			pc = sf->callers_pc; +			fp = (unsigned long)sf->fp + STACK_BIAS; +		} +		callchain_store(entry, pc); +	} while (entry->nr < PERF_MAX_STACK_DEPTH); +} + +static void perf_callchain_user_64(struct pt_regs *regs, +				   struct perf_callchain_entry *entry) +{ +	unsigned long ufp; + +	callchain_store(entry, PERF_CONTEXT_USER); +	callchain_store(entry, regs->tpc); + +	ufp = regs->u_regs[UREG_I6] + STACK_BIAS; +	do { +		struct sparc_stackf *usf, sf; +		unsigned long pc; + +		usf = (struct sparc_stackf *) ufp; +		if (__copy_from_user_inatomic(&sf, usf, sizeof(sf))) +			break; + +		pc = sf.callers_pc; +		ufp = (unsigned long)sf.fp + STACK_BIAS; +		callchain_store(entry, pc); +	} while (entry->nr < PERF_MAX_STACK_DEPTH); +} + +static void perf_callchain_user_32(struct pt_regs *regs, +				   struct perf_callchain_entry *entry) +{ +	unsigned long ufp; + +	callchain_store(entry, PERF_CONTEXT_USER); +	callchain_store(entry, regs->tpc); + +	ufp = regs->u_regs[UREG_I6]; +	do { +		struct sparc_stackf32 *usf, sf; +		unsigned long pc; + +		usf = (struct sparc_stackf32 *) ufp; +		if (__copy_from_user_inatomic(&sf, usf, sizeof(sf))) +			break; + +		pc = sf.callers_pc; +		ufp = (unsigned long)sf.fp; +		callchain_store(entry, pc); +	} while (entry->nr < PERF_MAX_STACK_DEPTH); +} + +/* Like powerpc we can't get PMU interrupts within the PMU handler, + * so no need for seperate NMI and IRQ chains as on x86. + */ +static DEFINE_PER_CPU(struct perf_callchain_entry, callchain); + +struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) +{ +	struct perf_callchain_entry *entry = &__get_cpu_var(callchain); + +	entry->nr = 0; +	if (!user_mode(regs)) { +		stack_trace_flush(); +		perf_callchain_kernel(regs, entry); +		if (current->mm) +			regs = task_pt_regs(current); +		else +			regs = NULL; +	} +	if (regs) { +		flushw_user(); +		if (test_thread_flag(TIF_32BIT)) +			perf_callchain_user_32(regs, entry); +		else +			perf_callchain_user_64(regs, entry); +	} +	return entry; +} diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c index 2830b415e21..c49865b3071 100644 --- a/arch/sparc/kernel/process_32.c +++ b/arch/sparc/kernel/process_32.c @@ -526,7 +526,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,  			 * Set some valid stack frames to give to the child.  			 */  			childstack = (struct sparc_stackf __user *) -				(sp & ~0x7UL); +				(sp & ~0xfUL);  			parentstack = (struct sparc_stackf __user *)  				regs->u_regs[UREG_FP]; diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c index 18d67854a1b..cb70476bd8f 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c @@ -365,14 +365,6 @@ void flush_thread(void)  	struct thread_info *t = current_thread_info();  	struct mm_struct *mm; -	if (test_ti_thread_flag(t, TIF_ABI_PENDING)) { -		clear_ti_thread_flag(t, TIF_ABI_PENDING); -		if (test_ti_thread_flag(t, TIF_32BIT)) -			clear_ti_thread_flag(t, TIF_32BIT); -		else -			set_ti_thread_flag(t, TIF_32BIT); -	} -  	mm = t->task->mm;  	if (mm)  		tsb_context_switch(mm); @@ -406,11 +398,11 @@ static unsigned long clone_stackframe(unsigned long csp, unsigned long psp)  	} else  		__get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6])); -	/* Now 8-byte align the stack as this is mandatory in the -	 * Sparc ABI due to how register windows work.  This hides -	 * the restriction from thread libraries etc.  -DaveM +	/* Now align the stack as this is mandatory in the Sparc ABI +	 * due to how register windows work.  This hides the +	 * restriction from thread libraries etc.  	 */ -	csp &= ~7UL; +	csp &= ~15UL;  	distance = fp - psp;  	rval = (csp - distance); diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c index ba5b09ad666..ea22cd373c6 100644 --- a/arch/sparc/kernel/signal32.c +++ b/arch/sparc/kernel/signal32.c @@ -120,8 +120,8 @@ struct rt_signal_frame32 {  };  /* Align macros */ -#define SF_ALIGNEDSZ  (((sizeof(struct signal_frame32) + 7) & (~7))) -#define RT_ALIGNEDSZ  (((sizeof(struct rt_signal_frame32) + 7) & (~7))) +#define SF_ALIGNEDSZ  (((sizeof(struct signal_frame32) + 15) & (~15))) +#define RT_ALIGNEDSZ  (((sizeof(struct rt_signal_frame32) + 15) & (~15)))  int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)  { @@ -420,15 +420,17 @@ static void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, uns  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c index 7ce1a1005b1..9882df92ba0 100644 --- a/arch/sparc/kernel/signal_32.c +++ b/arch/sparc/kernel/signal_32.c @@ -267,15 +267,17 @@ static inline void __user *get_sigframe(struct sigaction *sa, struct pt_regs *re  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static inline int diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c index 647afbda7ae..9fa48c30037 100644 --- a/arch/sparc/kernel/signal_64.c +++ b/arch/sparc/kernel/signal_64.c @@ -353,7 +353,7 @@ segv:  /* Checks if the fp is valid */  static int invalid_frame_pointer(void __user *fp, int fplen)  { -	if (((unsigned long) fp) & 7) +	if (((unsigned long) fp) & 15)  		return 1;  	return 0;  } @@ -396,15 +396,17 @@ static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static inline void diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index cfa0e19abe3..d77f5431694 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -365,6 +365,7 @@ EXPORT_SYMBOL(get_fb_unmapped_area);  void arch_pick_mmap_layout(struct mm_struct *mm)  {  	unsigned long random_factor = 0UL; +	unsigned long gap;  	if (current->flags & PF_RANDOMIZE) {  		random_factor = get_random_int(); @@ -379,9 +380,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)  	 * Fall back to the standard layout if the personality  	 * bit is set, or if the expected stack growth is unlimited:  	 */ +	gap = rlimit(RLIMIT_STACK);  	if (!test_thread_flag(TIF_32BIT) ||  	    (current->personality & ADDR_COMPAT_LAYOUT) || -	    current->signal->rlim[RLIMIT_STACK].rlim_cur == RLIM_INFINITY || +	    gap == RLIM_INFINITY ||  	    sysctl_legacy_va_layout) {  		mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;  		mm->get_unmapped_area = arch_get_unmapped_area; @@ -389,9 +391,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)  	} else {  		/* We know it's 32-bit */  		unsigned long task_size = STACK_TOP32; -		unsigned long gap; -		gap = current->signal->rlim[RLIMIT_STACK].rlim_cur;  		if (gap < 128 * 1024 * 1024)  			gap = 128 * 1024 * 1024;  		if (gap > (task_size / 6 * 5)) diff --git a/arch/sparc/kernel/time_32.c b/arch/sparc/kernel/time_32.c index 5b2f595fe65..0d4c09b15ef 100644 --- a/arch/sparc/kernel/time_32.c +++ b/arch/sparc/kernel/time_32.c @@ -35,6 +35,7 @@  #include <linux/platform_device.h>  #include <asm/oplib.h> +#include <asm/timex.h>  #include <asm/timer.h>  #include <asm/system.h>  #include <asm/irq.h> @@ -51,7 +52,6 @@ DEFINE_SPINLOCK(rtc_lock);  EXPORT_SYMBOL(rtc_lock);  static int set_rtc_mmss(unsigned long); -static int sbus_do_settimeofday(struct timespec *tv);  unsigned long profile_pc(struct pt_regs *regs)  { @@ -76,6 +76,8 @@ EXPORT_SYMBOL(profile_pc);  __volatile__ unsigned int *master_l10_counter; +u32 (*do_arch_gettimeoffset)(void); +  /*   * timer_interrupt() needs to keep up the real-time clock,   * as well as call the "do_timer()" routine every clocktick @@ -196,35 +198,14 @@ static int __init clock_init(void)  {  	return of_register_driver(&clock_driver, &of_platform_bus_type);  } -  /* Must be after subsys_initcall() so that busses are probed.  Must   * be before device_initcall() because things like the RTC driver   * need to see the clock registers.   */  fs_initcall(clock_init); -static void __init sbus_time_init(void) -{ - -	BTFIXUPSET_CALL(bus_do_settimeofday, sbus_do_settimeofday, BTFIXUPCALL_NORM); -	btfixup(); - -	sparc_init_timers(timer_interrupt); -} - -void __init time_init(void) -{ -#ifdef CONFIG_PCI -	extern void pci_time_init(void); -	if (pcic_present()) { -		pci_time_init(); -		return; -	} -#endif -	sbus_time_init(); -} -static inline unsigned long do_gettimeoffset(void) +u32 sbus_do_gettimeoffset(void)  {  	unsigned long val = *master_l10_counter;  	unsigned long usec = (val >> 10) & 0x1fffff; @@ -233,86 +214,39 @@ static inline unsigned long do_gettimeoffset(void)  	if (val & 0x80000000)  		usec += 1000000 / HZ; -	return usec; +	return usec * 1000;  } -/* Ok, my cute asm atomicity trick doesn't work anymore. - * There are just too many variables that need to be protected - * now (both members of xtime, et al.) - */ -void do_gettimeofday(struct timeval *tv) -{ -	unsigned long flags; -	unsigned long seq; -	unsigned long usec, sec; -	unsigned long max_ntp_tick = tick_usec - tickadj; - -	do { -		seq = read_seqbegin_irqsave(&xtime_lock, flags); -		usec = do_gettimeoffset(); - -		/* -		 * If time_adjust is negative then NTP is slowing the clock -		 * so make sure not to go into next possible interval. -		 * Better to lose some accuracy than have time go backwards.. -		 */ -		if (unlikely(time_adjust < 0)) -			usec = min(usec, max_ntp_tick); - -		sec = xtime.tv_sec; -		usec += (xtime.tv_nsec / 1000); -	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); -	while (usec >= 1000000) { -		usec -= 1000000; -		sec++; -	} - -	tv->tv_sec = sec; -	tv->tv_usec = usec; -} - -EXPORT_SYMBOL(do_gettimeofday); - -int do_settimeofday(struct timespec *tv) +u32 arch_gettimeoffset(void)  { -	int ret; - -	write_seqlock_irq(&xtime_lock); -	ret = bus_do_settimeofday(tv); -	write_sequnlock_irq(&xtime_lock); -	clock_was_set(); -	return ret; +	if (unlikely(!do_arch_gettimeoffset)) +		return 0; +	return do_arch_gettimeoffset();  } -EXPORT_SYMBOL(do_settimeofday); - -static int sbus_do_settimeofday(struct timespec *tv) +static void __init sbus_time_init(void)  { -	time_t wtm_sec, sec = tv->tv_sec; -	long wtm_nsec, nsec = tv->tv_nsec; - -	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) -		return -EINVAL; - -	/* -	 * This is revolting. We need to set "xtime" correctly. However, the -	 * value in this location is the value at the most recent update of -	 * wall time.  Discover what correction gettimeofday() would have -	 * made, and then undo it! -	 */ -	nsec -= 1000 * do_gettimeoffset(); +	do_arch_gettimeoffset = sbus_do_gettimeoffset; -	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); -	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); +	btfixup(); -	set_normalized_timespec(&xtime, sec, nsec); -	set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); +	sparc_init_timers(timer_interrupt); +} -	ntp_clear(); -	return 0; +void __init time_init(void) +{ +#ifdef CONFIG_PCI +	extern void pci_time_init(void); +	if (pcic_present()) { +		pci_time_init(); +		return; +	} +#endif +	sbus_time_init();  } +  static int set_rtc_mmss(unsigned long secs)  {  	struct rtc_device *rtc = rtc_class_open("rtc0"); diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c index b99f81c4906..a3413acb8f1 100644 --- a/arch/sparc/mm/fault_32.c +++ b/arch/sparc/mm/fault_32.c @@ -18,6 +18,7 @@  #include <linux/signal.h>  #include <linux/mm.h>  #include <linux/smp.h> +#include <linux/perf_event.h>  #include <linux/interrupt.h>  #include <linux/module.h>  #include <linux/kdebug.h> @@ -203,6 +204,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,          if (in_atomic() || !mm)                  goto no_context; +	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); +  	down_read(&mm->mmap_sem);  	/* @@ -249,10 +252,15 @@ good_area:  			goto do_sigbus;  		BUG();  	} -	if (fault & VM_FAULT_MAJOR) +	if (fault & VM_FAULT_MAJOR) {  		current->maj_flt++; -	else +		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, +			      regs, address); +	} else {  		current->min_flt++; +		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, +			      regs, address); +	}  	up_read(&mm->mmap_sem);  	return; diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c index 6081936bf03..b9d4ff02b8f 100644 --- a/arch/sparc/mm/fault_64.c +++ b/arch/sparc/mm/fault_64.c @@ -16,6 +16,7 @@  #include <linux/mm.h>  #include <linux/module.h>  #include <linux/init.h> +#include <linux/perf_event.h>  #include <linux/interrupt.h>  #include <linux/kprobes.h>  #include <linux/kdebug.h> @@ -296,6 +297,8 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)  	if (in_atomic() || !mm)  		goto intr_or_no_mm; +	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); +  	if (!down_read_trylock(&mm->mmap_sem)) {  		if ((regs->tstate & TSTATE_PRIV) &&  		    !search_exception_tables(regs->tpc)) { @@ -400,11 +403,15 @@ good_area:  			goto do_sigbus;  		BUG();  	} -	if (fault & VM_FAULT_MAJOR) +	if (fault & VM_FAULT_MAJOR) {  		current->maj_flt++; -	else +		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, +			      regs, address); +	} else {  		current->min_flt++; - +		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, +			      regs, address); +	}  	up_read(&mm->mmap_sem);  	mm_rss = get_mm_rss(mm); diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index cbcbfdee3ee..eb4092568f9 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -989,12 +989,6 @@ config X86_CPUID  	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to  	  /dev/cpu/31/cpuid. -config X86_CPU_DEBUG -	tristate "/sys/kernel/debug/x86/cpu/* - CPU Debug support" -	---help--- -	  If you select this option, this will provide various x86 CPUs -	  information through debugfs. -  choice  	prompt "High Memory Support"  	default HIGHMEM4G if !X86_NUMAQ diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index 2a4d073d2cf..f9f47246275 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -308,14 +308,15 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)  	if (retval)  		return retval; -	regs->cs = __USER32_CS; -	regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 = -		regs->r13 = regs->r14 = regs->r15 = 0; -  	/* OK, This is the point of no return */  	set_personality(PER_LINUX);  	set_thread_flag(TIF_IA32); -	clear_thread_flag(TIF_ABI_PENDING); + +	setup_new_exec(bprm); + +	regs->cs = __USER32_CS; +	regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 = +		regs->r13 = regs->r14 = regs->r15 = 0;  	current->mm->end_code = ex.a_text +  		(current->mm->start_code = N_TXTADDR(ex)); diff --git a/arch/x86/include/asm/amd_iommu_proto.h b/arch/x86/include/asm/amd_iommu_proto.h index 4d817f9e6e7..d2544f1d705 100644 --- a/arch/x86/include/asm/amd_iommu_proto.h +++ b/arch/x86/include/asm/amd_iommu_proto.h @@ -31,6 +31,7 @@ extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);  extern int amd_iommu_init_devices(void);  extern void amd_iommu_uninit_devices(void);  extern void amd_iommu_init_notifier(void); +extern void amd_iommu_init_api(void);  #ifndef CONFIG_AMD_IOMMU_STATS  static inline void amd_iommu_stats_init(void) { } diff --git a/arch/x86/include/asm/cpu_debug.h b/arch/x86/include/asm/cpu_debug.h deleted file mode 100644 index d96c1ee3a95..00000000000 --- a/arch/x86/include/asm/cpu_debug.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef _ASM_X86_CPU_DEBUG_H -#define _ASM_X86_CPU_DEBUG_H - -/* - * CPU x86 architecture debug - * - * Copyright(C) 2009 Jaswinder Singh Rajput - */ - -/* Register flags */ -enum cpu_debug_bit { -/* Model Specific Registers (MSRs)					*/ -	CPU_MC_BIT,				/* Machine Check	*/ -	CPU_MONITOR_BIT,			/* Monitor		*/ -	CPU_TIME_BIT,				/* Time			*/ -	CPU_PMC_BIT,				/* Performance Monitor	*/ -	CPU_PLATFORM_BIT,			/* Platform		*/ -	CPU_APIC_BIT,				/* APIC			*/ -	CPU_POWERON_BIT,			/* Power-on		*/ -	CPU_CONTROL_BIT,			/* Control		*/ -	CPU_FEATURES_BIT,			/* Features control	*/ -	CPU_LBRANCH_BIT,			/* Last Branch		*/ -	CPU_BIOS_BIT,				/* BIOS			*/ -	CPU_FREQ_BIT,				/* Frequency		*/ -	CPU_MTTR_BIT,				/* MTRR			*/ -	CPU_PERF_BIT,				/* Performance		*/ -	CPU_CACHE_BIT,				/* Cache		*/ -	CPU_SYSENTER_BIT,			/* Sysenter		*/ -	CPU_THERM_BIT,				/* Thermal		*/ -	CPU_MISC_BIT,				/* Miscellaneous	*/ -	CPU_DEBUG_BIT,				/* Debug		*/ -	CPU_PAT_BIT,				/* PAT			*/ -	CPU_VMX_BIT,				/* VMX			*/ -	CPU_CALL_BIT,				/* System Call		*/ -	CPU_BASE_BIT,				/* BASE Address		*/ -	CPU_VER_BIT,				/* Version ID		*/ -	CPU_CONF_BIT,				/* Configuration	*/ -	CPU_SMM_BIT,				/* System mgmt mode	*/ -	CPU_SVM_BIT,				/*Secure Virtual Machine*/ -	CPU_OSVM_BIT,				/* OS-Visible Workaround*/ -/* Standard Registers							*/ -	CPU_TSS_BIT,				/* Task Stack Segment	*/ -	CPU_CR_BIT,				/* Control Registers	*/ -	CPU_DT_BIT,				/* Descriptor Table	*/ -/* End of Registers flags						*/ -	CPU_REG_ALL_BIT,			/* Select all Registers	*/ -}; - -#define	CPU_REG_ALL		(~0)		/* Select all Registers	*/ - -#define	CPU_MC			(1 << CPU_MC_BIT) -#define	CPU_MONITOR		(1 << CPU_MONITOR_BIT) -#define	CPU_TIME		(1 << CPU_TIME_BIT) -#define	CPU_PMC			(1 << CPU_PMC_BIT) -#define	CPU_PLATFORM		(1 << CPU_PLATFORM_BIT) -#define	CPU_APIC		(1 << CPU_APIC_BIT) -#define	CPU_POWERON		(1 << CPU_POWERON_BIT) -#define	CPU_CONTROL		(1 << CPU_CONTROL_BIT) -#define	CPU_FEATURES		(1 << CPU_FEATURES_BIT) -#define	CPU_LBRANCH		(1 << CPU_LBRANCH_BIT) -#define	CPU_BIOS		(1 << CPU_BIOS_BIT) -#define	CPU_FREQ		(1 << CPU_FREQ_BIT) -#define	CPU_MTRR		(1 << CPU_MTTR_BIT) -#define	CPU_PERF		(1 << CPU_PERF_BIT) -#define	CPU_CACHE		(1 << CPU_CACHE_BIT) -#define	CPU_SYSENTER		(1 << CPU_SYSENTER_BIT) -#define	CPU_THERM		(1 << CPU_THERM_BIT) -#define	CPU_MISC		(1 << CPU_MISC_BIT) -#define	CPU_DEBUG		(1 << CPU_DEBUG_BIT) -#define	CPU_PAT			(1 << CPU_PAT_BIT) -#define	CPU_VMX			(1 << CPU_VMX_BIT) -#define	CPU_CALL		(1 << CPU_CALL_BIT) -#define	CPU_BASE		(1 << CPU_BASE_BIT) -#define	CPU_VER			(1 << CPU_VER_BIT) -#define	CPU_CONF		(1 << CPU_CONF_BIT) -#define	CPU_SMM			(1 << CPU_SMM_BIT) -#define	CPU_SVM			(1 << CPU_SVM_BIT) -#define	CPU_OSVM		(1 << CPU_OSVM_BIT) -#define	CPU_TSS			(1 << CPU_TSS_BIT) -#define	CPU_CR			(1 << CPU_CR_BIT) -#define	CPU_DT			(1 << CPU_DT_BIT) - -/* Register file flags */ -enum cpu_file_bit { -	CPU_INDEX_BIT,				/* index		*/ -	CPU_VALUE_BIT,				/* value		*/ -}; - -#define	CPU_FILE_VALUE		(1 << CPU_VALUE_BIT) - -#define MAX_CPU_FILES		512 - -struct cpu_private { -	unsigned		cpu; -	unsigned		type; -	unsigned		reg; -	unsigned		file; -}; - -struct cpu_debug_base { -	char			*name;		/* Register name	*/ -	unsigned		flag;		/* Register flag	*/ -	unsigned		write;		/* Register write flag	*/ -}; - -/* - * Currently it looks similar to cpu_debug_base but once we add more files - * cpu_file_base will go in different direction - */ -struct cpu_file_base { -	char			*name;		/* Register file name	*/ -	unsigned		flag;		/* Register file flag	*/ -	unsigned		write;		/* Register write flag	*/ -}; - -struct cpu_cpuX_base { -	struct dentry		*dentry;	/* Register dentry	*/ -	int			init;		/* Register index file	*/ -}; - -struct cpu_debug_range { -	unsigned		min;		/* Register range min	*/ -	unsigned		max;		/* Register range max	*/ -	unsigned		flag;		/* Supported flags	*/ -}; - -#endif /* _ASM_X86_CPU_DEBUG_H */ diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h index b4501ee223a..f2ad2163109 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -170,10 +170,7 @@ static inline void elf_common_init(struct thread_struct *t,  }  #define ELF_PLAT_INIT(_r, load_addr)			\ -do {							\ -	elf_common_init(¤t->thread, _r, 0);	\ -	clear_thread_flag(TIF_IA32);			\ -} while (0) +	elf_common_init(¤t->thread, _r, 0)  #define	COMPAT_ELF_PLAT_INIT(regs, load_addr)		\  	elf_common_init(¤t->thread, regs, __USER_DS) @@ -181,14 +178,8 @@ do {							\  void start_thread_ia32(struct pt_regs *regs, u32 new_ip, u32 new_sp);  #define compat_start_thread start_thread_ia32 -#define COMPAT_SET_PERSONALITY(ex)			\ -do {							\ -	if (test_thread_flag(TIF_IA32))			\ -		clear_thread_flag(TIF_ABI_PENDING);	\ -	else						\ -		set_thread_flag(TIF_ABI_PENDING);	\ -	current->personality |= force_personality32;	\ -} while (0) +void set_personality_ia32(void); +#define COMPAT_SET_PERSONALITY(ex) set_personality_ia32()  #define COMPAT_ELF_PLATFORM			("i686") diff --git a/arch/x86/include/asm/hpet.h b/arch/x86/include/asm/hpet.h index 5d89fd2a369..1d5c08a1bdf 100644 --- a/arch/x86/include/asm/hpet.h +++ b/arch/x86/include/asm/hpet.h @@ -67,6 +67,7 @@ extern unsigned long hpet_address;  extern unsigned long force_hpet_address;  extern u8 hpet_blockid;  extern int hpet_force_user; +extern u8 hpet_msi_disable;  extern int is_hpet_enabled(void);  extern int hpet_enable(void);  extern void hpet_disable(void); diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h index c24ca9a5645..ef51b501e22 100644 --- a/arch/x86/include/asm/microcode.h +++ b/arch/x86/include/asm/microcode.h @@ -12,8 +12,6 @@ struct device;  enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };  struct microcode_ops { -	void (*init)(struct device *device); -	void (*fini)(void);  	enum ucode_state (*request_microcode_user) (int cpu,  				const void __user *buf, size_t size); diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h index ecb544e6538..e04740f7a0b 100644 --- a/arch/x86/include/asm/system.h +++ b/arch/x86/include/asm/system.h @@ -11,9 +11,9 @@  #include <linux/irqflags.h>  /* entries in ARCH_DLINFO: */ -#ifdef CONFIG_IA32_EMULATION +#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)  # define AT_VECTOR_SIZE_ARCH 2 -#else +#else /* else it's non-compat x86-64 */  # define AT_VECTOR_SIZE_ARCH 1  #endif diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index 375c917c37d..e0d28901e96 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -87,7 +87,6 @@ struct thread_info {  #define TIF_NOTSC		16	/* TSC is not accessible in userland */  #define TIF_IA32		17	/* 32bit process */  #define TIF_FORK		18	/* ret_from_fork */ -#define TIF_ABI_PENDING		19  #define TIF_MEMDIE		20  #define TIF_DEBUG		21	/* uses debug registers */  #define TIF_IO_BITMAP		22	/* uses I/O bitmap */ @@ -112,7 +111,6 @@ struct thread_info {  #define _TIF_NOTSC		(1 << TIF_NOTSC)  #define _TIF_IA32		(1 << TIF_IA32)  #define _TIF_FORK		(1 << TIF_FORK) -#define _TIF_ABI_PENDING	(1 << TIF_ABI_PENDING)  #define _TIF_DEBUG		(1 << TIF_DEBUG)  #define _TIF_IO_BITMAP		(1 << TIF_IO_BITMAP)  #define _TIF_FREEZE		(1 << TIF_FREEZE) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 036d28adf59..0acbcdfa5ca 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -1185,9 +1185,6 @@ static void __init acpi_process_madt(void)  		if (!error) {  			acpi_lapic = 1; -#ifdef CONFIG_X86_BIGSMP -			generic_bigsmp_probe(); -#endif  			/*  			 * Parse MADT IO-APIC entries  			 */ @@ -1197,8 +1194,6 @@ static void __init acpi_process_madt(void)  				acpi_ioapic = 1;  				smp_found_config = 1; -				if (apic->setup_apic_routing) -					apic->setup_apic_routing();  			}  		}  		if (error == -EINVAL) { diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index 23824fef789..adb0ba02570 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c @@ -980,7 +980,7 @@ static int alloc_new_range(struct dma_ops_domain *dma_dom,  {  	int index = dma_dom->aperture_size >> APERTURE_RANGE_SHIFT;  	struct amd_iommu *iommu; -	int i; +	unsigned long i;  #ifdef CONFIG_IOMMU_STRESS  	populate = false; @@ -1489,11 +1489,14 @@ static void __detach_device(struct device *dev)  {  	struct iommu_dev_data *dev_data = get_dev_data(dev);  	struct iommu_dev_data *alias_data; +	struct protection_domain *domain;  	unsigned long flags;  	BUG_ON(!dev_data->domain); -	spin_lock_irqsave(&dev_data->domain->lock, flags); +	domain = dev_data->domain; + +	spin_lock_irqsave(&domain->lock, flags);  	if (dev_data->alias != dev) {  		alias_data = get_dev_data(dev_data->alias); @@ -1504,13 +1507,15 @@ static void __detach_device(struct device *dev)  	if (atomic_dec_and_test(&dev_data->bind))  		do_detach(dev); -	spin_unlock_irqrestore(&dev_data->domain->lock, flags); +	spin_unlock_irqrestore(&domain->lock, flags);  	/*  	 * If we run in passthrough mode the device must be assigned to the -	 * passthrough domain if it is detached from any other domain +	 * passthrough domain if it is detached from any other domain. +	 * Make sure we can deassign from the pt_domain itself.  	 */ -	if (iommu_pass_through && dev_data->domain == NULL) +	if (iommu_pass_through && +	    (dev_data->domain == NULL && domain != pt_domain))  		__attach_device(dev, pt_domain);  } @@ -2218,6 +2223,12 @@ static struct dma_map_ops amd_iommu_dma_ops = {  /*   * The function which clues the AMD IOMMU driver into dma_ops.   */ + +void __init amd_iommu_init_api(void) +{ +	register_iommu(&amd_iommu_ops); +} +  int __init amd_iommu_init_dma_ops(void)  {  	struct amd_iommu *iommu; @@ -2253,8 +2264,6 @@ int __init amd_iommu_init_dma_ops(void)  	/* Make the driver finally visible to the drivers */  	dma_ops = &amd_iommu_dma_ops; -	register_iommu(&amd_iommu_ops); -  	amd_iommu_stats_init();  	return 0; diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c index fb490ce7dd5..9dc91b43147 100644 --- a/arch/x86/kernel/amd_iommu_init.c +++ b/arch/x86/kernel/amd_iommu_init.c @@ -1292,9 +1292,12 @@ static int __init amd_iommu_init(void)  		ret = amd_iommu_init_passthrough();  	else  		ret = amd_iommu_init_dma_ops(); +  	if (ret)  		goto free; +	amd_iommu_init_api(); +  	amd_iommu_init_notifier();  	enable_iommus(); diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 3987e4408f7..dfca210f6a1 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1641,9 +1641,7 @@ int __init APIC_init_uniprocessor(void)  #endif  	enable_IR_x2apic(); -#ifdef CONFIG_X86_64  	default_setup_apic_routing(); -#endif  	verify_local_APIC();  	connect_bsp_APIC(); @@ -1891,21 +1889,6 @@ void __cpuinit generic_processor_info(int apicid, int version)  	if (apicid > max_physical_apicid)  		max_physical_apicid = apicid; -#ifdef CONFIG_X86_32 -	if (num_processors > 8) { -		switch (boot_cpu_data.x86_vendor) { -		case X86_VENDOR_INTEL: -			if (!APIC_XAPIC(version)) { -				def_to_bigsmp = 0; -				break; -			} -			/* If P4 and above fall through */ -		case X86_VENDOR_AMD: -			def_to_bigsmp = 1; -		} -	} -#endif -  #if defined(CONFIG_SMP) || defined(CONFIG_X86_64)  	early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;  	early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid; diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c index 1a6559f6768..99d2fe01608 100644 --- a/arch/x86/kernel/apic/probe_32.c +++ b/arch/x86/kernel/apic/probe_32.c @@ -52,7 +52,32 @@ static int __init print_ipi_mode(void)  }  late_initcall(print_ipi_mode); -void default_setup_apic_routing(void) +void __init default_setup_apic_routing(void) +{ +	int version = apic_version[boot_cpu_physical_apicid]; + +	if (num_possible_cpus() > 8) { +		switch (boot_cpu_data.x86_vendor) { +		case X86_VENDOR_INTEL: +			if (!APIC_XAPIC(version)) { +				def_to_bigsmp = 0; +				break; +			} +			/* If P4 and above fall through */ +		case X86_VENDOR_AMD: +			def_to_bigsmp = 1; +		} +	} + +#ifdef CONFIG_X86_BIGSMP +	generic_bigsmp_probe(); +#endif + +	if (apic->setup_apic_routing) +		apic->setup_apic_routing(); +} + +static void setup_apic_flat_routing(void)  {  #ifdef CONFIG_X86_IO_APIC  	printk(KERN_INFO @@ -103,7 +128,7 @@ struct apic apic_default = {  	.init_apic_ldr			= default_init_apic_ldr,  	.ioapic_phys_id_map		= default_ioapic_phys_id_map, -	.setup_apic_routing		= default_setup_apic_routing, +	.setup_apic_routing		= setup_apic_flat_routing,  	.multi_timer_check		= NULL,  	.apicid_to_node			= default_apicid_to_node,  	.cpu_to_logical_apicid		= default_cpu_to_logical_apicid, diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c index 450fe2064a1..83e9be4778e 100644 --- a/arch/x86/kernel/apic/probe_64.c +++ b/arch/x86/kernel/apic/probe_64.c @@ -67,7 +67,7 @@ void __init default_setup_apic_routing(void)  	}  #endif -	if (apic == &apic_flat && num_processors > 8) +	if (apic == &apic_flat && num_possible_cpus() > 8)  			apic = &apic_physflat;  	printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile index 1d2cb383410..c202b62f367 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile @@ -19,8 +19,6 @@ obj-y			+= vmware.o hypervisor.o sched.o  obj-$(CONFIG_X86_32)	+= bugs.o cmpxchg.o  obj-$(CONFIG_X86_64)	+= bugs_64.o -obj-$(CONFIG_X86_CPU_DEBUG)		+= cpu_debug.o -  obj-$(CONFIG_CPU_SUP_INTEL)		+= intel.o  obj-$(CONFIG_CPU_SUP_AMD)		+= amd.o  obj-$(CONFIG_CPU_SUP_CYRIX_32)		+= cyrix.o diff --git a/arch/x86/kernel/cpu/cpu_debug.c b/arch/x86/kernel/cpu/cpu_debug.c deleted file mode 100644 index b368cd86299..00000000000 --- a/arch/x86/kernel/cpu/cpu_debug.c +++ /dev/null @@ -1,688 +0,0 @@ -/* - * CPU x86 architecture debug code - * - * Copyright(C) 2009 Jaswinder Singh Rajput - * - * For licencing details see kernel-base/COPYING - */ - -#include <linux/interrupt.h> -#include <linux/compiler.h> -#include <linux/seq_file.h> -#include <linux/debugfs.h> -#include <linux/kprobes.h> -#include <linux/uaccess.h> -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/percpu.h> -#include <linux/signal.h> -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/types.h> -#include <linux/init.h> -#include <linux/slab.h> -#include <linux/smp.h> - -#include <asm/cpu_debug.h> -#include <asm/paravirt.h> -#include <asm/system.h> -#include <asm/traps.h> -#include <asm/apic.h> -#include <asm/desc.h> - -static DEFINE_PER_CPU(struct cpu_cpuX_base [CPU_REG_ALL_BIT], cpud_arr); -static DEFINE_PER_CPU(struct cpu_private * [MAX_CPU_FILES], cpud_priv_arr); -static DEFINE_PER_CPU(int, cpud_priv_count); - -static DEFINE_MUTEX(cpu_debug_lock); - -static struct dentry *cpu_debugfs_dir; - -static struct cpu_debug_base cpu_base[] = { -	{ "mc",		CPU_MC,		0	}, -	{ "monitor",	CPU_MONITOR,	0	}, -	{ "time",	CPU_TIME,	0	}, -	{ "pmc",	CPU_PMC,	1	}, -	{ "platform",	CPU_PLATFORM,	0	}, -	{ "apic",	CPU_APIC,	0	}, -	{ "poweron",	CPU_POWERON,	0	}, -	{ "control",	CPU_CONTROL,	0	}, -	{ "features",	CPU_FEATURES,	0	}, -	{ "lastbranch",	CPU_LBRANCH,	0	}, -	{ "bios",	CPU_BIOS,	0	}, -	{ "freq",	CPU_FREQ,	0	}, -	{ "mtrr",	CPU_MTRR,	0	}, -	{ "perf",	CPU_PERF,	0	}, -	{ "cache",	CPU_CACHE,	0	}, -	{ "sysenter",	CPU_SYSENTER,	0	}, -	{ "therm",	CPU_THERM,	0	}, -	{ "misc",	CPU_MISC,	0	}, -	{ "debug",	CPU_DEBUG,	0	}, -	{ "pat",	CPU_PAT,	0	}, -	{ "vmx",	CPU_VMX,	0	}, -	{ "call",	CPU_CALL,	0	}, -	{ "base",	CPU_BASE,	0	}, -	{ "ver",	CPU_VER,	0	}, -	{ "conf",	CPU_CONF,	0	}, -	{ "smm",	CPU_SMM,	0	}, -	{ "svm",	CPU_SVM,	0	}, -	{ "osvm",	CPU_OSVM,	0	}, -	{ "tss",	CPU_TSS,	0	}, -	{ "cr",		CPU_CR,		0	}, -	{ "dt",		CPU_DT,		0	}, -	{ "registers",	CPU_REG_ALL,	0	}, -}; - -static struct cpu_file_base cpu_file[] = { -	{ "index",	CPU_REG_ALL,	0	}, -	{ "value",	CPU_REG_ALL,	1	}, -}; - -/* CPU Registers Range */ -static struct cpu_debug_range cpu_reg_range[] = { -	{ 0x00000000, 0x00000001, CPU_MC,	}, -	{ 0x00000006, 0x00000007, CPU_MONITOR,	}, -	{ 0x00000010, 0x00000010, CPU_TIME,	}, -	{ 0x00000011, 0x00000013, CPU_PMC,	}, -	{ 0x00000017, 0x00000017, CPU_PLATFORM,	}, -	{ 0x0000001B, 0x0000001B, CPU_APIC,	}, -	{ 0x0000002A, 0x0000002B, CPU_POWERON,	}, -	{ 0x0000002C, 0x0000002C, CPU_FREQ,	}, -	{ 0x0000003A, 0x0000003A, CPU_CONTROL,	}, -	{ 0x00000040, 0x00000047, CPU_LBRANCH,	}, -	{ 0x00000060, 0x00000067, CPU_LBRANCH,	}, -	{ 0x00000079, 0x00000079, CPU_BIOS,	}, -	{ 0x00000088, 0x0000008A, CPU_CACHE,	}, -	{ 0x0000008B, 0x0000008B, CPU_BIOS,	}, -	{ 0x0000009B, 0x0000009B, CPU_MONITOR,	}, -	{ 0x000000C1, 0x000000C4, CPU_PMC,	}, -	{ 0x000000CD, 0x000000CD, CPU_FREQ,	}, -	{ 0x000000E7, 0x000000E8, CPU_PERF,	}, -	{ 0x000000FE, 0x000000FE, CPU_MTRR,	}, - -	{ 0x00000116, 0x0000011E, CPU_CACHE,	}, -	{ 0x00000174, 0x00000176, CPU_SYSENTER,	}, -	{ 0x00000179, 0x0000017B, CPU_MC,	}, -	{ 0x00000186, 0x00000189, CPU_PMC,	}, -	{ 0x00000198, 0x00000199, CPU_PERF,	}, -	{ 0x0000019A, 0x0000019A, CPU_TIME,	}, -	{ 0x0000019B, 0x0000019D, CPU_THERM,	}, -	{ 0x000001A0, 0x000001A0, CPU_MISC,	}, -	{ 0x000001C9, 0x000001C9, CPU_LBRANCH,	}, -	{ 0x000001D7, 0x000001D8, CPU_LBRANCH,	}, -	{ 0x000001D9, 0x000001D9, CPU_DEBUG,	}, -	{ 0x000001DA, 0x000001E0, CPU_LBRANCH,	}, - -	{ 0x00000200, 0x0000020F, CPU_MTRR,	}, -	{ 0x00000250, 0x00000250, CPU_MTRR,	}, -	{ 0x00000258, 0x00000259, CPU_MTRR,	}, -	{ 0x00000268, 0x0000026F, CPU_MTRR,	}, -	{ 0x00000277, 0x00000277, CPU_PAT,	}, -	{ 0x000002FF, 0x000002FF, CPU_MTRR,	}, - -	{ 0x00000300, 0x00000311, CPU_PMC,	}, -	{ 0x00000345, 0x00000345, CPU_PMC,	}, -	{ 0x00000360, 0x00000371, CPU_PMC,	}, -	{ 0x0000038D, 0x00000390, CPU_PMC,	}, -	{ 0x000003A0, 0x000003BE, CPU_PMC,	}, -	{ 0x000003C0, 0x000003CD, CPU_PMC,	}, -	{ 0x000003E0, 0x000003E1, CPU_PMC,	}, -	{ 0x000003F0, 0x000003F2, CPU_PMC,	}, - -	{ 0x00000400, 0x00000417, CPU_MC,	}, -	{ 0x00000480, 0x0000048B, CPU_VMX,	}, - -	{ 0x00000600, 0x00000600, CPU_DEBUG,	}, -	{ 0x00000680, 0x0000068F, CPU_LBRANCH,	}, -	{ 0x000006C0, 0x000006CF, CPU_LBRANCH,	}, - -	{ 0x000107CC, 0x000107D3, CPU_PMC,	}, - -	{ 0xC0000080, 0xC0000080, CPU_FEATURES,	}, -	{ 0xC0000081, 0xC0000084, CPU_CALL,	}, -	{ 0xC0000100, 0xC0000102, CPU_BASE,	}, -	{ 0xC0000103, 0xC0000103, CPU_TIME,	}, - -	{ 0xC0010000, 0xC0010007, CPU_PMC,	}, -	{ 0xC0010010, 0xC0010010, CPU_CONF,	}, -	{ 0xC0010015, 0xC0010015, CPU_CONF,	}, -	{ 0xC0010016, 0xC001001A, CPU_MTRR,	}, -	{ 0xC001001D, 0xC001001D, CPU_MTRR,	}, -	{ 0xC001001F, 0xC001001F, CPU_CONF,	}, -	{ 0xC0010030, 0xC0010035, CPU_BIOS,	}, -	{ 0xC0010044, 0xC0010048, CPU_MC,	}, -	{ 0xC0010050, 0xC0010056, CPU_SMM,	}, -	{ 0xC0010058, 0xC0010058, CPU_CONF,	}, -	{ 0xC0010060, 0xC0010060, CPU_CACHE,	}, -	{ 0xC0010061, 0xC0010068, CPU_SMM,	}, -	{ 0xC0010069, 0xC001006B, CPU_SMM,	}, -	{ 0xC0010070, 0xC0010071, CPU_SMM,	}, -	{ 0xC0010111, 0xC0010113, CPU_SMM,	}, -	{ 0xC0010114, 0xC0010118, CPU_SVM,	}, -	{ 0xC0010140, 0xC0010141, CPU_OSVM,	}, -	{ 0xC0011022, 0xC0011023, CPU_CONF,	}, -}; - -static int is_typeflag_valid(unsigned cpu, unsigned flag) -{ -	int i; - -	/* Standard Registers should be always valid */ -	if (flag >= CPU_TSS) -		return 1; - -	for (i = 0; i < ARRAY_SIZE(cpu_reg_range); i++) { -		if (cpu_reg_range[i].flag == flag) -			return 1; -	} - -	/* Invalid */ -	return 0; -} - -static unsigned get_cpu_range(unsigned cpu, unsigned *min, unsigned *max, -			      int index, unsigned flag) -{ -	if (cpu_reg_range[index].flag == flag) { -		*min = cpu_reg_range[index].min; -		*max = cpu_reg_range[index].max; -	} else -		*max = 0; - -	return *max; -} - -/* This function can also be called with seq = NULL for printk */ -static void print_cpu_data(struct seq_file *seq, unsigned type, -			   u32 low, u32 high) -{ -	struct cpu_private *priv; -	u64 val = high; - -	if (seq) { -		priv = seq->private; -		if (priv->file) { -			val = (val << 32) | low; -			seq_printf(seq, "0x%llx\n", val); -		} else -			seq_printf(seq, " %08x: %08x_%08x\n", -				   type, high, low); -	} else -		printk(KERN_INFO " %08x: %08x_%08x\n", type, high, low); -} - -/* This function can also be called with seq = NULL for printk */ -static void print_msr(struct seq_file *seq, unsigned cpu, unsigned flag) -{ -	unsigned msr, msr_min, msr_max; -	struct cpu_private *priv; -	u32 low, high; -	int i; - -	if (seq) { -		priv = seq->private; -		if (priv->file) { -			if (!rdmsr_safe_on_cpu(priv->cpu, priv->reg, -					       &low, &high)) -				print_cpu_data(seq, priv->reg, low, high); -			return; -		} -	} - -	for (i = 0; i < ARRAY_SIZE(cpu_reg_range); i++) { -		if (!get_cpu_range(cpu, &msr_min, &msr_max, i, flag)) -			continue; - -		for (msr = msr_min; msr <= msr_max; msr++) { -			if (rdmsr_safe_on_cpu(cpu, msr, &low, &high)) -				continue; -			print_cpu_data(seq, msr, low, high); -		} -	} -} - -static void print_tss(void *arg) -{ -	struct pt_regs *regs = task_pt_regs(current); -	struct seq_file *seq = arg; -	unsigned int seg; - -	seq_printf(seq, " RAX\t: %016lx\n", regs->ax); -	seq_printf(seq, " RBX\t: %016lx\n", regs->bx); -	seq_printf(seq, " RCX\t: %016lx\n", regs->cx); -	seq_printf(seq, " RDX\t: %016lx\n", regs->dx); - -	seq_printf(seq, " RSI\t: %016lx\n", regs->si); -	seq_printf(seq, " RDI\t: %016lx\n", regs->di); -	seq_printf(seq, " RBP\t: %016lx\n", regs->bp); -	seq_printf(seq, " ESP\t: %016lx\n", regs->sp); - -#ifdef CONFIG_X86_64 -	seq_printf(seq, " R08\t: %016lx\n", regs->r8); -	seq_printf(seq, " R09\t: %016lx\n", regs->r9); -	seq_printf(seq, " R10\t: %016lx\n", regs->r10); -	seq_printf(seq, " R11\t: %016lx\n", regs->r11); -	seq_printf(seq, " R12\t: %016lx\n", regs->r12); -	seq_printf(seq, " R13\t: %016lx\n", regs->r13); -	seq_printf(seq, " R14\t: %016lx\n", regs->r14); -	seq_printf(seq, " R15\t: %016lx\n", regs->r15); -#endif - -	asm("movl %%cs,%0" : "=r" (seg)); -	seq_printf(seq, " CS\t:             %04x\n", seg); -	asm("movl %%ds,%0" : "=r" (seg)); -	seq_printf(seq, " DS\t:             %04x\n", seg); -	seq_printf(seq, " SS\t:             %04lx\n", regs->ss & 0xffff); -	asm("movl %%es,%0" : "=r" (seg)); -	seq_printf(seq, " ES\t:             %04x\n", seg); -	asm("movl %%fs,%0" : "=r" (seg)); -	seq_printf(seq, " FS\t:             %04x\n", seg); -	asm("movl %%gs,%0" : "=r" (seg)); -	seq_printf(seq, " GS\t:             %04x\n", seg); - -	seq_printf(seq, " EFLAGS\t: %016lx\n", regs->flags); - -	seq_printf(seq, " EIP\t: %016lx\n", regs->ip); -} - -static void print_cr(void *arg) -{ -	struct seq_file *seq = arg; - -	seq_printf(seq, " cr0\t: %016lx\n", read_cr0()); -	seq_printf(seq, " cr2\t: %016lx\n", read_cr2()); -	seq_printf(seq, " cr3\t: %016lx\n", read_cr3()); -	seq_printf(seq, " cr4\t: %016lx\n", read_cr4_safe()); -#ifdef CONFIG_X86_64 -	seq_printf(seq, " cr8\t: %016lx\n", read_cr8()); -#endif -} - -static void print_desc_ptr(char *str, struct seq_file *seq, struct desc_ptr dt) -{ -	seq_printf(seq, " %s\t: %016llx\n", str, (u64)(dt.address | dt.size)); -} - -static void print_dt(void *seq) -{ -	struct desc_ptr dt; -	unsigned long ldt; - -	/* IDT */ -	store_idt((struct desc_ptr *)&dt); -	print_desc_ptr("IDT", seq, dt); - -	/* GDT */ -	store_gdt((struct desc_ptr *)&dt); -	print_desc_ptr("GDT", seq, dt); - -	/* LDT */ -	store_ldt(ldt); -	seq_printf(seq, " LDT\t: %016lx\n", ldt); - -	/* TR */ -	store_tr(ldt); -	seq_printf(seq, " TR\t: %016lx\n", ldt); -} - -static void print_dr(void *arg) -{ -	struct seq_file *seq = arg; -	unsigned long dr; -	int i; - -	for (i = 0; i < 8; i++) { -		/* Ignore db4, db5 */ -		if ((i == 4) || (i == 5)) -			continue; -		get_debugreg(dr, i); -		seq_printf(seq, " dr%d\t: %016lx\n", i, dr); -	} - -	seq_printf(seq, "\n MSR\t:\n"); -} - -static void print_apic(void *arg) -{ -	struct seq_file *seq = arg; - -#ifdef CONFIG_X86_LOCAL_APIC -	seq_printf(seq, " LAPIC\t:\n"); -	seq_printf(seq, " ID\t\t: %08x\n",  apic_read(APIC_ID) >> 24); -	seq_printf(seq, " LVR\t\t: %08x\n",  apic_read(APIC_LVR)); -	seq_printf(seq, " TASKPRI\t: %08x\n",  apic_read(APIC_TASKPRI)); -	seq_printf(seq, " ARBPRI\t\t: %08x\n",  apic_read(APIC_ARBPRI)); -	seq_printf(seq, " PROCPRI\t: %08x\n",  apic_read(APIC_PROCPRI)); -	seq_printf(seq, " LDR\t\t: %08x\n",  apic_read(APIC_LDR)); -	seq_printf(seq, " DFR\t\t: %08x\n",  apic_read(APIC_DFR)); -	seq_printf(seq, " SPIV\t\t: %08x\n",  apic_read(APIC_SPIV)); -	seq_printf(seq, " ISR\t\t: %08x\n",  apic_read(APIC_ISR)); -	seq_printf(seq, " ESR\t\t: %08x\n",  apic_read(APIC_ESR)); -	seq_printf(seq, " ICR\t\t: %08x\n",  apic_read(APIC_ICR)); -	seq_printf(seq, " ICR2\t\t: %08x\n",  apic_read(APIC_ICR2)); -	seq_printf(seq, " LVTT\t\t: %08x\n",  apic_read(APIC_LVTT)); -	seq_printf(seq, " LVTTHMR\t: %08x\n",  apic_read(APIC_LVTTHMR)); -	seq_printf(seq, " LVTPC\t\t: %08x\n",  apic_read(APIC_LVTPC)); -	seq_printf(seq, " LVT0\t\t: %08x\n",  apic_read(APIC_LVT0)); -	seq_printf(seq, " LVT1\t\t: %08x\n",  apic_read(APIC_LVT1)); -	seq_printf(seq, " LVTERR\t\t: %08x\n",  apic_read(APIC_LVTERR)); -	seq_printf(seq, " TMICT\t\t: %08x\n",  apic_read(APIC_TMICT)); -	seq_printf(seq, " TMCCT\t\t: %08x\n",  apic_read(APIC_TMCCT)); -	seq_printf(seq, " TDCR\t\t: %08x\n",  apic_read(APIC_TDCR)); -	if (boot_cpu_has(X86_FEATURE_EXTAPIC)) { -		unsigned int i, v, maxeilvt; - -		v = apic_read(APIC_EFEAT); -		maxeilvt = (v >> 16) & 0xff; -		seq_printf(seq, " EFEAT\t\t: %08x\n", v); -		seq_printf(seq, " ECTRL\t\t: %08x\n", apic_read(APIC_ECTRL)); - -		for (i = 0; i < maxeilvt; i++) { -			v = apic_read(APIC_EILVTn(i)); -			seq_printf(seq, " EILVT%d\t\t: %08x\n", i, v); -		} -	} -#endif /* CONFIG_X86_LOCAL_APIC */ -	seq_printf(seq, "\n MSR\t:\n"); -} - -static int cpu_seq_show(struct seq_file *seq, void *v) -{ -	struct cpu_private *priv = seq->private; - -	if (priv == NULL) -		return -EINVAL; - -	switch (cpu_base[priv->type].flag) { -	case CPU_TSS: -		smp_call_function_single(priv->cpu, print_tss, seq, 1); -		break; -	case CPU_CR: -		smp_call_function_single(priv->cpu, print_cr, seq, 1); -		break; -	case CPU_DT: -		smp_call_function_single(priv->cpu, print_dt, seq, 1); -		break; -	case CPU_DEBUG: -		if (priv->file == CPU_INDEX_BIT) -			smp_call_function_single(priv->cpu, print_dr, seq, 1); -		print_msr(seq, priv->cpu, cpu_base[priv->type].flag); -		break; -	case CPU_APIC: -		if (priv->file == CPU_INDEX_BIT) -			smp_call_function_single(priv->cpu, print_apic, seq, 1); -		print_msr(seq, priv->cpu, cpu_base[priv->type].flag); -		break; - -	default: -		print_msr(seq, priv->cpu, cpu_base[priv->type].flag); -		break; -	} -	seq_printf(seq, "\n"); - -	return 0; -} - -static void *cpu_seq_start(struct seq_file *seq, loff_t *pos) -{ -	if (*pos == 0) /* One time is enough ;-) */ -		return seq; - -	return NULL; -} - -static void *cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ -	(*pos)++; - -	return cpu_seq_start(seq, pos); -} - -static void cpu_seq_stop(struct seq_file *seq, void *v) -{ -} - -static const struct seq_operations cpu_seq_ops = { -	.start		= cpu_seq_start, -	.next		= cpu_seq_next, -	.stop		= cpu_seq_stop, -	.show		= cpu_seq_show, -}; - -static int cpu_seq_open(struct inode *inode, struct file *file) -{ -	struct cpu_private *priv = inode->i_private; -	struct seq_file *seq; -	int err; - -	err = seq_open(file, &cpu_seq_ops); -	if (!err) { -		seq = file->private_data; -		seq->private = priv; -	} - -	return err; -} - -static int write_msr(struct cpu_private *priv, u64 val) -{ -	u32 low, high; - -	high = (val >> 32) & 0xffffffff; -	low = val & 0xffffffff; - -	if (!wrmsr_safe_on_cpu(priv->cpu, priv->reg, low, high)) -		return 0; - -	return -EPERM; -} - -static int write_cpu_register(struct cpu_private *priv, const char *buf) -{ -	int ret = -EPERM; -	u64 val; - -	ret = strict_strtoull(buf, 0, &val); -	if (ret < 0) -		return ret; - -	/* Supporting only MSRs */ -	if (priv->type < CPU_TSS_BIT) -		return write_msr(priv, val); - -	return ret; -} - -static ssize_t cpu_write(struct file *file, const char __user *ubuf, -			     size_t count, loff_t *off) -{ -	struct seq_file *seq = file->private_data; -	struct cpu_private *priv = seq->private; -	char buf[19]; - -	if ((priv == NULL) || (count >= sizeof(buf))) -		return -EINVAL; - -	if (copy_from_user(&buf, ubuf, count)) -		return -EFAULT; - -	buf[count] = 0; - -	if ((cpu_base[priv->type].write) && (cpu_file[priv->file].write)) -		if (!write_cpu_register(priv, buf)) -			return count; - -	return -EACCES; -} - -static const struct file_operations cpu_fops = { -	.owner		= THIS_MODULE, -	.open		= cpu_seq_open, -	.read		= seq_read, -	.write		= cpu_write, -	.llseek		= seq_lseek, -	.release	= seq_release, -}; - -static int cpu_create_file(unsigned cpu, unsigned type, unsigned reg, -			   unsigned file, struct dentry *dentry) -{ -	struct cpu_private *priv = NULL; - -	/* Already intialized */ -	if (file == CPU_INDEX_BIT) -		if (per_cpu(cpud_arr[type].init, cpu)) -			return 0; - -	priv = kzalloc(sizeof(*priv), GFP_KERNEL); -	if (priv == NULL) -		return -ENOMEM; - -	priv->cpu = cpu; -	priv->type = type; -	priv->reg = reg; -	priv->file = file; -	mutex_lock(&cpu_debug_lock); -	per_cpu(cpud_priv_arr[type], cpu) = priv; -	per_cpu(cpud_priv_count, cpu)++; -	mutex_unlock(&cpu_debug_lock); - -	if (file) -		debugfs_create_file(cpu_file[file].name, S_IRUGO, -				    dentry, (void *)priv, &cpu_fops); -	else { -		debugfs_create_file(cpu_base[type].name, S_IRUGO, -				    per_cpu(cpud_arr[type].dentry, cpu), -				    (void *)priv, &cpu_fops); -		mutex_lock(&cpu_debug_lock); -		per_cpu(cpud_arr[type].init, cpu) = 1; -		mutex_unlock(&cpu_debug_lock); -	} - -	return 0; -} - -static int cpu_init_regfiles(unsigned cpu, unsigned int type, unsigned reg, -			     struct dentry *dentry) -{ -	unsigned file; -	int err = 0; - -	for (file = 0; file <  ARRAY_SIZE(cpu_file); file++) { -		err = cpu_create_file(cpu, type, reg, file, dentry); -		if (err) -			return err; -	} - -	return err; -} - -static int cpu_init_msr(unsigned cpu, unsigned type, struct dentry *dentry) -{ -	struct dentry *cpu_dentry = NULL; -	unsigned reg, reg_min, reg_max; -	int i, err = 0; -	char reg_dir[12]; -	u32 low, high; - -	for (i = 0; i < ARRAY_SIZE(cpu_reg_range); i++) { -		if (!get_cpu_range(cpu, ®_min, ®_max, i, -				   cpu_base[type].flag)) -			continue; - -		for (reg = reg_min; reg <= reg_max; reg++) { -			if (rdmsr_safe_on_cpu(cpu, reg, &low, &high)) -				continue; - -			sprintf(reg_dir, "0x%x", reg); -			cpu_dentry = debugfs_create_dir(reg_dir, dentry); -			err = cpu_init_regfiles(cpu, type, reg, cpu_dentry); -			if (err) -				return err; -		} -	} - -	return err; -} - -static int cpu_init_allreg(unsigned cpu, struct dentry *dentry) -{ -	struct dentry *cpu_dentry = NULL; -	unsigned type; -	int err = 0; - -	for (type = 0; type <  ARRAY_SIZE(cpu_base) - 1; type++) { -		if (!is_typeflag_valid(cpu, cpu_base[type].flag)) -			continue; -		cpu_dentry = debugfs_create_dir(cpu_base[type].name, dentry); -		per_cpu(cpud_arr[type].dentry, cpu) = cpu_dentry; - -		if (type < CPU_TSS_BIT) -			err = cpu_init_msr(cpu, type, cpu_dentry); -		else -			err = cpu_create_file(cpu, type, 0, CPU_INDEX_BIT, -					      cpu_dentry); -		if (err) -			return err; -	} - -	return err; -} - -static int cpu_init_cpu(void) -{ -	struct dentry *cpu_dentry = NULL; -	struct cpuinfo_x86 *cpui; -	char cpu_dir[12]; -	unsigned cpu; -	int err = 0; - -	for (cpu = 0; cpu < nr_cpu_ids; cpu++) { -		cpui = &cpu_data(cpu); -		if (!cpu_has(cpui, X86_FEATURE_MSR)) -			continue; - -		sprintf(cpu_dir, "cpu%d", cpu); -		cpu_dentry = debugfs_create_dir(cpu_dir, cpu_debugfs_dir); -		err = cpu_init_allreg(cpu, cpu_dentry); - -		pr_info("cpu%d(%d) debug files %d\n", -			cpu, nr_cpu_ids, per_cpu(cpud_priv_count, cpu)); -		if (per_cpu(cpud_priv_count, cpu) > MAX_CPU_FILES) { -			pr_err("Register files count %d exceeds limit %d\n", -				per_cpu(cpud_priv_count, cpu), MAX_CPU_FILES); -			per_cpu(cpud_priv_count, cpu) = MAX_CPU_FILES; -			err = -ENFILE; -		} -		if (err) -			return err; -	} - -	return err; -} - -static int __init cpu_debug_init(void) -{ -	cpu_debugfs_dir = debugfs_create_dir("cpu", arch_debugfs_dir); - -	return cpu_init_cpu(); -} - -static void __exit cpu_debug_exit(void) -{ -	int i, cpu; - -	if (cpu_debugfs_dir) -		debugfs_remove_recursive(cpu_debugfs_dir); - -	for (cpu = 0; cpu <  nr_cpu_ids; cpu++) -		for (i = 0; i < per_cpu(cpud_priv_count, cpu); i++) -			kfree(per_cpu(cpud_priv_arr[i], cpu)); -} - -module_init(cpu_debug_init); -module_exit(cpu_debug_exit); - -MODULE_AUTHOR("Jaswinder Singh Rajput"); -MODULE_DESCRIPTION("CPU Debug module"); -MODULE_LICENSE("GPL"); diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index f125e5c551c..6e44519960c 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c @@ -1356,6 +1356,7 @@ static int __devexit powernowk8_cpu_exit(struct cpufreq_policy *pol)  	kfree(data->powernow_table);  	kfree(data); +	per_cpu(powernow_data, pol->cpu) = NULL;  	return 0;  } @@ -1375,7 +1376,7 @@ static unsigned int powernowk8_get(unsigned int cpu)  	int err;  	if (!data) -		return -EINVAL; +		return 0;  	smp_call_function_single(cpu, query_values_on_cpu, &err, true);  	if (err) diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index cb27fd6136c..83e5e628de7 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c @@ -229,7 +229,7 @@ static void __exit cpuid_exit(void)  	for_each_online_cpu(cpu)  		cpuid_device_destroy(cpu);  	class_destroy(cpuid_class); -	unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); +	__unregister_chrdev(CPUID_MAJOR, 0, NR_CPUS, "cpu/cpuid");  	unregister_hotcpu_notifier(&cpuid_class_cpu_notifier);  } diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index ba6e6588460..ad80a1c718c 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c @@ -34,6 +34,8 @@   */  unsigned long				hpet_address;  u8					hpet_blockid; /* OS timer block num */ +u8					hpet_msi_disable; +  #ifdef CONFIG_PCI_MSI  static unsigned long			hpet_num_timers;  #endif @@ -596,6 +598,9 @@ static void hpet_msi_capability_lookup(unsigned int start_timer)  	unsigned int num_timers_used = 0;  	int i; +	if (hpet_msi_disable) +		return; +  	if (boot_cpu_has(X86_FEATURE_ARAT))  		return;  	id = hpet_readl(HPET_ID); @@ -928,6 +933,9 @@ static __init int hpet_late_init(void)  	hpet_reserve_platform_timers(hpet_readl(HPET_ID));  	hpet_print_config(); +	if (hpet_msi_disable) +		return 0; +  	if (boot_cpu_has(X86_FEATURE_ARAT))  		return 0; diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index dd74fe7273b..bfba6019d76 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c @@ -42,6 +42,7 @@  #include <linux/init.h>  #include <linux/smp.h>  #include <linux/nmi.h> +#include <linux/hw_breakpoint.h>  #include <asm/debugreg.h>  #include <asm/apicdef.h> @@ -204,40 +205,81 @@ void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs)  static struct hw_breakpoint {  	unsigned		enabled; -	unsigned		type; -	unsigned		len;  	unsigned long		addr; +	int			len; +	int			type; +	struct perf_event	**pev;  } breakinfo[4];  static void kgdb_correct_hw_break(void)  { -	unsigned long dr7; -	int correctit = 0; -	int breakbit;  	int breakno; -	get_debugreg(dr7, 7);  	for (breakno = 0; breakno < 4; breakno++) { -		breakbit = 2 << (breakno << 1); -		if (!(dr7 & breakbit) && breakinfo[breakno].enabled) { -			correctit = 1; -			dr7 |= breakbit; -			dr7 &= ~(0xf0000 << (breakno << 2)); -			dr7 |= ((breakinfo[breakno].len << 2) | -				 breakinfo[breakno].type) << -			       ((breakno << 2) + 16); -			set_debugreg(breakinfo[breakno].addr, breakno); +		struct perf_event *bp; +		struct arch_hw_breakpoint *info; +		int val; +		int cpu = raw_smp_processor_id(); +		if (!breakinfo[breakno].enabled) +			continue; +		bp = *per_cpu_ptr(breakinfo[breakno].pev, cpu); +		info = counter_arch_bp(bp); +		if (bp->attr.disabled != 1) +			continue; +		bp->attr.bp_addr = breakinfo[breakno].addr; +		bp->attr.bp_len = breakinfo[breakno].len; +		bp->attr.bp_type = breakinfo[breakno].type; +		info->address = breakinfo[breakno].addr; +		info->len = breakinfo[breakno].len; +		info->type = breakinfo[breakno].type; +		val = arch_install_hw_breakpoint(bp); +		if (!val) +			bp->attr.disabled = 0; +	} +	hw_breakpoint_restore(); +} -		} else { -			if ((dr7 & breakbit) && !breakinfo[breakno].enabled) { -				correctit = 1; -				dr7 &= ~breakbit; -				dr7 &= ~(0xf0000 << (breakno << 2)); -			} -		} +static int hw_break_reserve_slot(int breakno) +{ +	int cpu; +	int cnt = 0; +	struct perf_event **pevent; + +	for_each_online_cpu(cpu) { +		cnt++; +		pevent = per_cpu_ptr(breakinfo[breakno].pev, cpu); +		if (dbg_reserve_bp_slot(*pevent)) +			goto fail; +	} + +	return 0; + +fail: +	for_each_online_cpu(cpu) { +		cnt--; +		if (!cnt) +			break; +		pevent = per_cpu_ptr(breakinfo[breakno].pev, cpu); +		dbg_release_bp_slot(*pevent); +	} +	return -1; +} + +static int hw_break_release_slot(int breakno) +{ +	struct perf_event **pevent; +	int cpu; + +	for_each_online_cpu(cpu) { +		pevent = per_cpu_ptr(breakinfo[breakno].pev, cpu); +		if (dbg_release_bp_slot(*pevent)) +			/* +			 * The debugger is responisble for handing the retry on +			 * remove failure. +			 */ +			return -1;  	} -	if (correctit) -		set_debugreg(dr7, 7); +	return 0;  }  static int @@ -251,6 +293,10 @@ kgdb_remove_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)  	if (i == 4)  		return -1; +	if (hw_break_release_slot(i)) { +		printk(KERN_ERR "Cannot remove hw breakpoint at %lx\n", addr); +		return -1; +	}  	breakinfo[i].enabled = 0;  	return 0; @@ -259,15 +305,23 @@ kgdb_remove_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)  static void kgdb_remove_all_hw_break(void)  {  	int i; +	int cpu = raw_smp_processor_id(); +	struct perf_event *bp; -	for (i = 0; i < 4; i++) -		memset(&breakinfo[i], 0, sizeof(struct hw_breakpoint)); +	for (i = 0; i < 4; i++) { +		if (!breakinfo[i].enabled) +			continue; +		bp = *per_cpu_ptr(breakinfo[i].pev, cpu); +		if (bp->attr.disabled == 1) +			continue; +		arch_uninstall_hw_breakpoint(bp); +		bp->attr.disabled = 1; +	}  }  static int  kgdb_set_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)  { -	unsigned type;  	int i;  	for (i = 0; i < 4; i++) @@ -278,27 +332,42 @@ kgdb_set_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)  	switch (bptype) {  	case BP_HARDWARE_BREAKPOINT: -		type = 0; -		len  = 1; +		len = 1; +		breakinfo[i].type = X86_BREAKPOINT_EXECUTE;  		break;  	case BP_WRITE_WATCHPOINT: -		type = 1; +		breakinfo[i].type = X86_BREAKPOINT_WRITE;  		break;  	case BP_ACCESS_WATCHPOINT: -		type = 3; +		breakinfo[i].type = X86_BREAKPOINT_RW;  		break;  	default:  		return -1;  	} - -	if (len == 1 || len == 2 || len == 4) -		breakinfo[i].len  = len - 1; -	else +	switch (len) { +	case 1: +		breakinfo[i].len = X86_BREAKPOINT_LEN_1; +		break; +	case 2: +		breakinfo[i].len = X86_BREAKPOINT_LEN_2; +		break; +	case 4: +		breakinfo[i].len = X86_BREAKPOINT_LEN_4; +		break; +#ifdef CONFIG_X86_64 +	case 8: +		breakinfo[i].len = X86_BREAKPOINT_LEN_8; +		break; +#endif +	default:  		return -1; - -	breakinfo[i].enabled = 1; +	}  	breakinfo[i].addr = addr; -	breakinfo[i].type = type; +	if (hw_break_reserve_slot(i)) { +		breakinfo[i].addr = 0; +		return -1; +	} +	breakinfo[i].enabled = 1;  	return 0;  } @@ -313,8 +382,21 @@ kgdb_set_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)   */  void kgdb_disable_hw_debug(struct pt_regs *regs)  { +	int i; +	int cpu = raw_smp_processor_id(); +	struct perf_event *bp; +  	/* Disable hardware debugging while we are in kgdb: */  	set_debugreg(0UL, 7); +	for (i = 0; i < 4; i++) { +		if (!breakinfo[i].enabled) +			continue; +		bp = *per_cpu_ptr(breakinfo[i].pev, cpu); +		if (bp->attr.disabled == 1) +			continue; +		arch_uninstall_hw_breakpoint(bp); +		bp->attr.disabled = 1; +	}  }  /** @@ -378,7 +460,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,  			       struct pt_regs *linux_regs)  {  	unsigned long addr; -	unsigned long dr6;  	char *ptr;  	int newPC; @@ -404,20 +485,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,  				   raw_smp_processor_id());  		} -		get_debugreg(dr6, 6); -		if (!(dr6 & 0x4000)) { -			int breakno; - -			for (breakno = 0; breakno < 4; breakno++) { -				if (dr6 & (1 << breakno) && -				    breakinfo[breakno].type == 0) { -					/* Set restore flag: */ -					linux_regs->flags |= X86_EFLAGS_RF; -					break; -				} -			} -		} -		set_debugreg(0UL, 6);  		kgdb_correct_hw_break();  		return 0; @@ -485,8 +552,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)  		break;  	case DIE_DEBUG: -		if (atomic_read(&kgdb_cpu_doing_single_step) == -		    raw_smp_processor_id()) { +		if (atomic_read(&kgdb_cpu_doing_single_step) != -1) {  			if (user_mode(regs))  				return single_step_cont(regs, args);  			break; @@ -539,7 +605,42 @@ static struct notifier_block kgdb_notifier = {   */  int kgdb_arch_init(void)  { -	return register_die_notifier(&kgdb_notifier); +	int i, cpu; +	int ret; +	struct perf_event_attr attr; +	struct perf_event **pevent; + +	ret = register_die_notifier(&kgdb_notifier); +	if (ret != 0) +		return ret; +	/* +	 * Pre-allocate the hw breakpoint structions in the non-atomic +	 * portion of kgdb because this operation requires mutexs to +	 * complete. +	 */ +	attr.bp_addr = (unsigned long)kgdb_arch_init; +	attr.type = PERF_TYPE_BREAKPOINT; +	attr.bp_len = HW_BREAKPOINT_LEN_1; +	attr.bp_type = HW_BREAKPOINT_W; +	attr.disabled = 1; +	for (i = 0; i < 4; i++) { +		breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL); +		if (IS_ERR(breakinfo[i].pev)) { +			printk(KERN_ERR "kgdb: Could not allocate hw breakpoints\n"); +			breakinfo[i].pev = NULL; +			kgdb_arch_exit(); +			return -1; +		} +		for_each_online_cpu(cpu) { +			pevent = per_cpu_ptr(breakinfo[i].pev, cpu); +			pevent[0]->hw.sample_period = 1; +			if (pevent[0]->destroy != NULL) { +				pevent[0]->destroy = NULL; +				release_bp_slot(*pevent); +			} +		} +	} +	return ret;  }  /** @@ -550,6 +651,13 @@ int kgdb_arch_init(void)   */  void kgdb_arch_exit(void)  { +	int i; +	for (i = 0; i < 4; i++) { +		if (breakinfo[i].pev) { +			unregister_wide_hw_breakpoint(breakinfo[i].pev); +			breakinfo[i].pev = NULL; +		} +	}  	unregister_die_notifier(&kgdb_notifier);  } diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c index 37542b67c57..e1af7c055c7 100644 --- a/arch/x86/kernel/microcode_amd.c +++ b/arch/x86/kernel/microcode_amd.c @@ -36,9 +36,6 @@ MODULE_LICENSE("GPL v2");  #define UCODE_EQUIV_CPU_TABLE_TYPE 0x00000000  #define UCODE_UCODE_TYPE           0x00000001 -const struct firmware *firmware; -static int supported_cpu; -  struct equiv_cpu_entry {  	u32	installed_cpu;  	u32	fixed_errata_mask; @@ -77,12 +74,15 @@ static struct equiv_cpu_entry *equiv_cpu_table;  static int collect_cpu_info_amd(int cpu, struct cpu_signature *csig)  { +	struct cpuinfo_x86 *c = &cpu_data(cpu);  	u32 dummy; -	if (!supported_cpu) -		return -1; -  	memset(csig, 0, sizeof(*csig)); +	if (c->x86_vendor != X86_VENDOR_AMD || c->x86 < 0x10) { +		pr_warning("microcode: CPU%d: AMD CPU family 0x%x not " +			   "supported\n", cpu, c->x86); +		return -1; +	}  	rdmsr(MSR_AMD64_PATCH_LEVEL, csig->rev, dummy);  	pr_info("CPU%d: patch_level=0x%x\n", cpu, csig->rev);  	return 0; @@ -294,10 +294,14 @@ generic_load_microcode(int cpu, const u8 *data, size_t size)  static enum ucode_state request_microcode_fw(int cpu, struct device *device)  { +	const char *fw_name = "amd-ucode/microcode_amd.bin"; +	const struct firmware *firmware;  	enum ucode_state ret; -	if (firmware == NULL) +	if (request_firmware(&firmware, fw_name, device)) { +		printk(KERN_ERR "microcode: failed to load file %s\n", fw_name);  		return UCODE_NFOUND; +	}  	if (*(u32 *)firmware->data != UCODE_MAGIC) {  		pr_err("invalid UCODE_MAGIC (0x%08x)\n", @@ -307,6 +311,8 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device)  	ret = generic_load_microcode(cpu, firmware->data, firmware->size); +	release_firmware(firmware); +  	return ret;  } @@ -325,31 +331,7 @@ static void microcode_fini_cpu_amd(int cpu)  	uci->mc = NULL;  } -void init_microcode_amd(struct device *device) -{ -	const char *fw_name = "amd-ucode/microcode_amd.bin"; -	struct cpuinfo_x86 *c = &boot_cpu_data; - -	WARN_ON(c->x86_vendor != X86_VENDOR_AMD); - -	if (c->x86 < 0x10) { -		pr_warning("AMD CPU family 0x%x not supported\n", c->x86); -		return; -	} -	supported_cpu = 1; - -	if (request_firmware(&firmware, fw_name, device)) -		pr_err("failed to load file %s\n", fw_name); -} - -void fini_microcode_amd(void) -{ -	release_firmware(firmware); -} -  static struct microcode_ops microcode_amd_ops = { -	.init				  = init_microcode_amd, -	.fini				  = fini_microcode_amd,  	.request_microcode_user           = request_microcode_user,  	.request_microcode_fw             = request_microcode_fw,  	.collect_cpu_info                 = collect_cpu_info_amd, diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c index 0c863243309..cceb5bc3c3c 100644 --- a/arch/x86/kernel/microcode_core.c +++ b/arch/x86/kernel/microcode_core.c @@ -521,9 +521,6 @@ static int __init microcode_init(void)  		return PTR_ERR(microcode_pdev);  	} -	if (microcode_ops->init) -		microcode_ops->init(µcode_pdev->dev); -  	get_online_cpus();  	mutex_lock(µcode_mutex); @@ -566,9 +563,6 @@ static void __exit microcode_exit(void)  	platform_device_unregister(microcode_pdev); -	if (microcode_ops->fini) -		microcode_ops->fini(); -  	microcode_ops = NULL;  	pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n"); diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 40b54ceb68b..a2c1edd2d3a 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c @@ -359,13 +359,6 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)  		x86_init.mpparse.mpc_record(1);  	} -#ifdef CONFIG_X86_BIGSMP -	generic_bigsmp_probe(); -#endif - -	if (apic->setup_apic_routing) -		apic->setup_apic_routing(); -  	if (!num_processors)  		printk(KERN_ERR "MPTABLE: no processors registered!\n");  	return num_processors; diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index 4bd93c9b2b2..206735ac8cb 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c @@ -285,7 +285,7 @@ static void __exit msr_exit(void)  	for_each_online_cpu(cpu)  		msr_device_destroy(cpu);  	class_destroy(msr_class); -	unregister_chrdev(MSR_MAJOR, "cpu/msr"); +	__unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr");  	unregister_hotcpu_notifier(&msr_class_cpu_notifier);  } diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 02c3ee013cc..c9b3522b6b4 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -115,18 +115,6 @@ void flush_thread(void)  {  	struct task_struct *tsk = current; -#ifdef CONFIG_X86_64 -	if (test_tsk_thread_flag(tsk, TIF_ABI_PENDING)) { -		clear_tsk_thread_flag(tsk, TIF_ABI_PENDING); -		if (test_tsk_thread_flag(tsk, TIF_IA32)) { -			clear_tsk_thread_flag(tsk, TIF_IA32); -		} else { -			set_tsk_thread_flag(tsk, TIF_IA32); -			current_thread_info()->status |= TS_COMPAT; -		} -	} -#endif -  	flush_ptrace_hw_breakpoint(tsk);  	memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));  	/* diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index f9e033150cd..126f0b493d0 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -521,6 +521,18 @@ void set_personality_64bit(void)  	current->personality &= ~READ_IMPLIES_EXEC;  } +void set_personality_ia32(void) +{ +	/* inherit personality from parent */ + +	/* Make sure to be in 32bit mode */ +	set_thread_flag(TIF_IA32); +	current->personality |= force_personality32; + +	/* Prepare the first "return" to user space */ +	current_thread_info()->status |= TS_COMPAT; +} +  unsigned long get_wchan(struct task_struct *p)  {  	unsigned long stack; diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 18093d7498f..12e9feaa2f7 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c @@ -491,6 +491,19 @@ void force_hpet_resume(void)  		break;  	}  } + +/* + * HPET MSI on some boards (ATI SB700/SB800) has side effect on + * floppy DMA. Disable HPET MSI on such platforms. + */ +static void force_disable_hpet_msi(struct pci_dev *unused) +{ +	hpet_msi_disable = 1; +} + +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, +			 force_disable_hpet_msi); +  #endif  #if defined(CONFIG_PCI) && defined(CONFIG_NUMA) diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 1545bc0c984..704bddcdf64 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -203,6 +203,15 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {  			DMI_MATCH(DMI_BOARD_NAME, "0T656F"),  		},  	}, +	{	/* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G*/ +		.callback = set_bios_reboot, +		.ident = "Dell OptiPlex 760", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), +			DMI_MATCH(DMI_BOARD_NAME, "0G919G"), +		}, +	},  	{	/* Handle problems with rebooting on Dell 2400's */  		.callback = set_bios_reboot,  		.ident = "Dell PowerEdge 2400", diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index f7b8b9894b2..5d9e40c5862 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -642,19 +642,27 @@ static struct dmi_system_id __initdata bad_bios_dmi_table[] = {  			DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix/MSC"),  		},  	}, -	{  	/* -	 * AMI BIOS with low memory corruption was found on Intel DG45ID board. -	 * It hase different DMI_BIOS_VENDOR = "Intel Corp.", for now we will +	 * AMI BIOS with low memory corruption was found on Intel DG45ID and +	 * DG45FC boards. +	 * It has a different DMI_BIOS_VENDOR = "Intel Corp.", for now we will  	 * match only DMI_BOARD_NAME and see if there is more bad products  	 * with this vendor.  	 */ +	{  		.callback = dmi_low_memory_corruption,  		.ident = "AMI BIOS",  		.matches = {  			DMI_MATCH(DMI_BOARD_NAME, "DG45ID"),  		},  	}, +	{ +		.callback = dmi_low_memory_corruption, +		.ident = "AMI BIOS", +		.matches = { +			DMI_MATCH(DMI_BOARD_NAME, "DG45FC"), +		}, +	},  #endif  	{}  }; diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 678d0b8c26f..b4e870cbdc6 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1083,9 +1083,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)  	set_cpu_sibling_map(0);  	enable_IR_x2apic(); -#ifdef CONFIG_X86_64  	default_setup_apic_routing(); -#endif  	if (smp_sanity_check(max_cpus) < 0) {  		printk(KERN_INFO "SMP disabled\n"); diff --git a/arch/x86/kernel/uv_time.c b/arch/x86/kernel/uv_time.c index 3c84aa001c1..2b75ef638db 100644 --- a/arch/x86/kernel/uv_time.c +++ b/arch/x86/kernel/uv_time.c @@ -282,10 +282,21 @@ static int uv_rtc_unset_timer(int cpu, int force)  /*   * Read the RTC. + * + * Starting with HUB rev 2.0, the UV RTC register is replicated across all + * cachelines of it's own page.  This allows faster simultaneous reads + * from a given socket.   */  static cycle_t uv_read_rtc(struct clocksource *cs)  { -	return (cycle_t)uv_read_local_mmr(UVH_RTC); +	unsigned long offset; + +	if (uv_get_min_hub_revision_id() == 1) +		offset = 0; +	else +		offset = (uv_blade_processor_id() * L1_CACHE_BYTES) % PAGE_SIZE; + +	return (cycle_t)uv_read_local_mmr(UVH_RTC | offset);  }  /* diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index 296aba49472..15578f180e5 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c @@ -467,6 +467,9 @@ static int pit_ioport_read(struct kvm_io_device *this,  		return -EOPNOTSUPP;  	addr &= KVM_PIT_CHANNEL_MASK; +	if (addr == 3) +		return 0; +  	s = &pit_state->channels[addr];  	mutex_lock(&pit_state->lock); diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 3063a0c4858..ba8c045da78 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -373,6 +373,12 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode,  		if (unlikely(!apic_enabled(apic)))  			break; +		if (trig_mode) { +			apic_debug("level trig mode for vector %d", vector); +			apic_set_vector(vector, apic->regs + APIC_TMR); +		} else +			apic_clear_vector(vector, apic->regs + APIC_TMR); +  		result = !apic_test_and_set_irr(vector, apic);  		trace_kvm_apic_accept_irq(vcpu->vcpu_id, delivery_mode,  					  trig_mode, vector, !result); @@ -383,11 +389,6 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode,  			break;  		} -		if (trig_mode) { -			apic_debug("level trig mode for vector %d", vector); -			apic_set_vector(vector, apic->regs + APIC_TMR); -		} else -			apic_clear_vector(vector, apic->regs + APIC_TMR);  		kvm_vcpu_kick(vcpu);  		break; diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 4c3e5b2314c..89a49fb46a2 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -477,7 +477,7 @@ static int host_mapping_level(struct kvm *kvm, gfn_t gfn)  	addr = gfn_to_hva(kvm, gfn);  	if (kvm_is_error_hva(addr)) -		return page_size; +		return PT_PAGE_TABLE_LEVEL;  	down_read(¤t->mm->mmap_sem);  	vma = find_vma(current->mm, addr); @@ -515,11 +515,9 @@ static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn)  	if (host_level == PT_PAGE_TABLE_LEVEL)  		return host_level; -	for (level = PT_DIRECTORY_LEVEL; level <= host_level; ++level) { - +	for (level = PT_DIRECTORY_LEVEL; level <= host_level; ++level)  		if (has_wrprotected_page(vcpu->kvm, large_gfn, level))  			break; -	}  	return level - 1;  } diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index 58a0f1e8859..ede2131a922 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h @@ -150,7 +150,9 @@ walk:  		walker->table_gfn[walker->level - 1] = table_gfn;  		walker->pte_gpa[walker->level - 1] = pte_gpa; -		kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte)); +		if (kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte))) +			goto not_present; +  		trace_kvm_mmu_paging_element(pte, walker->level);  		if (!is_present_gpte(pte)) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 6651dbf5867..a1e1bc9d412 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -670,7 +670,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock)  {  	static int version;  	struct pvclock_wall_clock wc; -	struct timespec now, sys, boot; +	struct timespec boot;  	if (!wall_clock)  		return; @@ -685,9 +685,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock)  	 * wall clock specified here.  guest system time equals host  	 * system time for us, thus we must fill in host boot time here.  	 */ -	now = current_kernel_time(); -	ktime_get_ts(&sys); -	boot = ns_to_timespec(timespec_to_ns(&now) - timespec_to_ns(&sys)); +	getboottime(&boot);  	wc.sec = boot.tv_sec;  	wc.nsec = boot.tv_nsec; @@ -762,6 +760,7 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)  	local_irq_save(flags);  	kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp);  	ktime_get_ts(&ts); +	monotonic_to_bootbased(&ts);  	local_irq_restore(flags);  	/* With all the info we got, fill in the values */ @@ -5072,12 +5071,13 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)  				       GFP_KERNEL);  	if (!vcpu->arch.mce_banks) {  		r = -ENOMEM; -		goto fail_mmu_destroy; +		goto fail_free_lapic;  	}  	vcpu->arch.mcg_cap = KVM_MAX_MCE_BANKS;  	return 0; - +fail_free_lapic: +	kvm_free_lapic(vcpu);  fail_mmu_destroy:  	kvm_mmu_destroy(vcpu);  fail_free_pio_data: @@ -5088,6 +5088,7 @@ fail:  void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)  { +	kfree(vcpu->arch.mce_banks);  	kvm_free_lapic(vcpu);  	down_read(&vcpu->kvm->slots_lock);  	kvm_mmu_destroy(vcpu); diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c index 71da1bca13c..738e6593799 100644 --- a/arch/x86/mm/gup.c +++ b/arch/x86/mm/gup.c @@ -18,7 +18,7 @@ static inline pte_t gup_get_pte(pte_t *ptep)  #else  	/*  	 * With get_user_pages_fast, we walk down the pagetables without taking -	 * any locks.  For this we would like to load the pointers atoimcally, +	 * any locks.  For this we would like to load the pointers atomically,  	 * but that is not possible (without expensive cmpxchg8b) on PAE.  What  	 * we do have is the guarantee that a pte will only either go from not  	 * present to present, or present to not present or both -- it will not diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 5198b9bb34e..69ddfbd9113 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -49,6 +49,7 @@  #include <asm/numa.h>  #include <asm/cacheflush.h>  #include <asm/init.h> +#include <linux/bootmem.h>  static unsigned long dma_reserve __initdata; @@ -616,6 +617,21 @@ void __init paging_init(void)   */  #ifdef CONFIG_MEMORY_HOTPLUG  /* + * After memory hotplug the variables max_pfn, max_low_pfn and high_memory need + * updating. + */ +static void  update_end_of_memory_vars(u64 start, u64 size) +{ +	unsigned long end_pfn = PFN_UP(start + size); + +	if (end_pfn > max_pfn) { +		max_pfn = end_pfn; +		max_low_pfn = end_pfn; +		high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1; +	} +} + +/*   * Memory is added always to NORMAL zone. This means you will never get   * additional DMA/DMA32 memory.   */ @@ -634,6 +650,9 @@ int arch_add_memory(int nid, u64 start, u64 size)  	ret = __add_pages(nid, zone, start_pfn, nr_pages);  	WARN_ON_ONCE(ret); +	/* update max_pfn, max_low_pfn and high_memory */ +	update_end_of_memory_vars(start, size); +  	return ret;  }  EXPORT_SYMBOL_GPL(arch_add_memory); diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c index a27124185fc..28c68762648 100644 --- a/arch/x86/mm/srat_64.c +++ b/arch/x86/mm/srat_64.c @@ -229,9 +229,11 @@ update_nodes_add(int node, unsigned long start, unsigned long end)  			printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n");  	} -	if (changed) +	if (changed) { +		node_set(node, cpu_nodes_parsed);  		printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n",  				 nd->start, nd->end); +	}  }  /* Callback for parsing of the Proximity Domain <-> Memory Area mappings */ diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index cb88b1a0bd5..3347f696edc 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -222,7 +222,7 @@ static void nmi_cpu_switch(void *dummy)  	/* move to next set */  	si += model->num_counters; -	if ((si > model->num_virt_counters) || (counter_config[si].count == 0)) +	if ((si >= model->num_virt_counters) || (counter_config[si].count == 0))  		per_cpu(switch_index, cpu) = 0;  	else  		per_cpu(switch_index, cpu) = si; @@ -598,6 +598,7 @@ static int __init ppro_init(char **cpu_type)  	case 15: case 23:  		*cpu_type = "i386/core_2";  		break; +	case 0x2e:  	case 26:  		spec = &op_arch_perfmon_spec;  		*cpu_type = "i386/core_i7"; diff --git a/arch/x86/pci/Makefile b/arch/x86/pci/Makefile index 564b008a51c..39fba37f702 100644 --- a/arch/x86/pci/Makefile +++ b/arch/x86/pci/Makefile @@ -15,7 +15,7 @@ obj-$(CONFIG_X86_NUMAQ)		+= numaq_32.o  obj-y				+= common.o early.o  obj-y				+= amd_bus.o -obj-$(CONFIG_X86_64)		+= bus_numa.o intel_bus.o +obj-$(CONFIG_X86_64)		+= bus_numa.o  ifeq ($(CONFIG_PCI_DEBUG),y)  EXTRA_CFLAGS += -DDEBUG diff --git a/arch/x86/pci/intel_bus.c b/arch/x86/pci/intel_bus.c deleted file mode 100644 index f81a2fa8fe2..00000000000 --- a/arch/x86/pci/intel_bus.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * to read io range from IOH pci conf, need to do it after mmconfig is there - */ - -#include <linux/delay.h> -#include <linux/dmi.h> -#include <linux/pci.h> -#include <linux/init.h> -#include <asm/pci_x86.h> - -#include "bus_numa.h" - -static inline void print_ioh_resources(struct pci_root_info *info) -{ -	int res_num; -	int busnum; -	int i; - -	printk(KERN_DEBUG "IOH bus: [%02x, %02x]\n", -			info->bus_min, info->bus_max); -	res_num = info->res_num; -	busnum = info->bus_min; -	for (i = 0; i < res_num; i++) { -		struct resource *res; - -		res = &info->res[i]; -		printk(KERN_DEBUG "IOH bus: %02x index %x %s: [%llx, %llx]\n", -			busnum, i, -			(res->flags & IORESOURCE_IO) ? "io port" : -							"mmio", -			res->start, res->end); -	} -} - -#define IOH_LIO			0x108 -#define IOH_LMMIOL		0x10c -#define IOH_LMMIOH		0x110 -#define IOH_LMMIOH_BASEU	0x114 -#define IOH_LMMIOH_LIMITU	0x118 -#define IOH_LCFGBUS		0x11c - -static void __devinit pci_root_bus_res(struct pci_dev *dev) -{ -	u16 word; -	u32 dword; -	struct pci_root_info *info; -	u16 io_base, io_end; -	u32 mmiol_base, mmiol_end; -	u64 mmioh_base, mmioh_end; -	int bus_base, bus_end; - -	/* some sys doesn't get mmconf enabled */ -	if (dev->cfg_size < 0x120) -		return; - -	if (pci_root_num >= PCI_ROOT_NR) { -		printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n"); -		return; -	} - -	info = &pci_root_info[pci_root_num]; -	pci_root_num++; - -	pci_read_config_word(dev, IOH_LCFGBUS, &word); -	bus_base = (word & 0xff); -	bus_end = (word & 0xff00) >> 8; -	sprintf(info->name, "PCI Bus #%02x", bus_base); -	info->bus_min = bus_base; -	info->bus_max = bus_end; - -	pci_read_config_word(dev, IOH_LIO, &word); -	io_base = (word & 0xf0) << (12 - 4); -	io_end = (word & 0xf000) | 0xfff; -	update_res(info, io_base, io_end, IORESOURCE_IO, 0); - -	pci_read_config_dword(dev, IOH_LMMIOL, &dword); -	mmiol_base = (dword & 0xff00) << (24 - 8); -	mmiol_end = (dword & 0xff000000) | 0xffffff; -	update_res(info, mmiol_base, mmiol_end, IORESOURCE_MEM, 0); - -	pci_read_config_dword(dev, IOH_LMMIOH, &dword); -	mmioh_base = ((u64)(dword & 0xfc00)) << (26 - 10); -	mmioh_end = ((u64)(dword & 0xfc000000) | 0x3ffffff); -	pci_read_config_dword(dev, IOH_LMMIOH_BASEU, &dword); -	mmioh_base |= ((u64)(dword & 0x7ffff)) << 32; -	pci_read_config_dword(dev, IOH_LMMIOH_LIMITU, &dword); -	mmioh_end |= ((u64)(dword & 0x7ffff)) << 32; -	update_res(info, mmioh_base, mmioh_end, IORESOURCE_MEM, 0); - -	print_ioh_resources(info); -} - -/* intel IOH */ -DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, pci_root_bus_res); diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 1fa2654db0a..e7dbbaf5fb3 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -147,16 +147,16 @@ blkiocg_weight_write(struct cgroup *cgroup, struct cftype *cftype, u64 val)  		return -EINVAL;  	blkcg = cgroup_to_blkio_cgroup(cgroup); +	spin_lock(&blkio_list_lock);  	spin_lock_irq(&blkcg->lock);  	blkcg->weight = (unsigned int)val;  	hlist_for_each_entry(blkg, n, &blkcg->blkg_list, blkcg_node) { -		spin_lock(&blkio_list_lock);  		list_for_each_entry(blkiop, &blkio_list, list)  			blkiop->ops.blkio_update_group_weight_fn(blkg,  					blkcg->weight); -		spin_unlock(&blkio_list_lock);  	}  	spin_unlock_irq(&blkcg->lock); +	spin_unlock(&blkio_list_lock);  	return 0;  } diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index ee130f14d1f..023f4e69a33 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -42,16 +42,13 @@ static const int cfq_hist_divisor = 4;   */  #define CFQ_MIN_TT		(2) -/* - * Allow merged cfqqs to perform this amount of seeky I/O before - * deciding to break the queues up again. - */ -#define CFQQ_COOP_TOUT		(HZ) -  #define CFQ_SLICE_SCALE		(5)  #define CFQ_HW_QUEUE_MIN	(5)  #define CFQ_SERVICE_SHIFT       12 +#define CFQQ_SEEK_THR		8 * 1024 +#define CFQQ_SEEKY(cfqq)	((cfqq)->seek_mean > CFQQ_SEEK_THR) +  #define RQ_CIC(rq)		\  	((struct cfq_io_context *) (rq)->elevator_private)  #define RQ_CFQQ(rq)		(struct cfq_queue *) ((rq)->elevator_private2) @@ -137,7 +134,6 @@ struct cfq_queue {  	u64 seek_total;  	sector_t seek_mean;  	sector_t last_request_pos; -	unsigned long seeky_start;  	pid_t pid; @@ -314,6 +310,7 @@ enum cfqq_state_flags {  	CFQ_CFQQ_FLAG_slice_new,	/* no requests dispatched in slice */  	CFQ_CFQQ_FLAG_sync,		/* synchronous queue */  	CFQ_CFQQ_FLAG_coop,		/* cfqq is shared */ +	CFQ_CFQQ_FLAG_split_coop,	/* shared cfqq will be splitted */  	CFQ_CFQQ_FLAG_deep,		/* sync cfqq experienced large depth */  	CFQ_CFQQ_FLAG_wait_busy,	/* Waiting for next request */  }; @@ -342,6 +339,7 @@ CFQ_CFQQ_FNS(prio_changed);  CFQ_CFQQ_FNS(slice_new);  CFQ_CFQQ_FNS(sync);  CFQ_CFQQ_FNS(coop); +CFQ_CFQQ_FNS(split_coop);  CFQ_CFQQ_FNS(deep);  CFQ_CFQQ_FNS(wait_busy);  #undef CFQ_CFQQ_FNS @@ -1566,6 +1564,15 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,  	cfq_clear_cfqq_wait_busy(cfqq);  	/* +	 * If this cfqq is shared between multiple processes, check to +	 * make sure that those processes are still issuing I/Os within +	 * the mean seek distance.  If not, it may be time to break the +	 * queues apart again. +	 */ +	if (cfq_cfqq_coop(cfqq) && CFQQ_SEEKY(cfqq)) +		cfq_mark_cfqq_split_coop(cfqq); + +	/*  	 * store what was left of this slice, if the queue idled/timed out  	 */  	if (timed_out && !cfq_cfqq_slice_new(cfqq)) { @@ -1663,9 +1670,6 @@ static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd,  		return cfqd->last_position - blk_rq_pos(rq);  } -#define CFQQ_SEEK_THR		8 * 1024 -#define CFQQ_SEEKY(cfqq)	((cfqq)->seek_mean > CFQQ_SEEK_THR) -  static inline int cfq_rq_close(struct cfq_data *cfqd, struct cfq_queue *cfqq,  			       struct request *rq, bool for_preempt)  { @@ -1803,7 +1807,7 @@ static bool cfq_should_idle(struct cfq_data *cfqd, struct cfq_queue *cfqq)  	 * Otherwise, we do only if they are the last ones  	 * in their service tree.  	 */ -	return service_tree->count == 1; +	return service_tree->count == 1 && cfq_cfqq_sync(cfqq);  }  static void cfq_arm_slice_timer(struct cfq_data *cfqd) @@ -3000,19 +3004,6 @@ cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_queue *cfqq,  	total = cfqq->seek_total + (cfqq->seek_samples/2);  	do_div(total, cfqq->seek_samples);  	cfqq->seek_mean = (sector_t)total; - -	/* -	 * If this cfqq is shared between multiple processes, check to -	 * make sure that those processes are still issuing I/Os within -	 * the mean seek distance.  If not, it may be time to break the -	 * queues apart again. -	 */ -	if (cfq_cfqq_coop(cfqq)) { -		if (CFQQ_SEEKY(cfqq) && !cfqq->seeky_start) -			cfqq->seeky_start = jiffies; -		else if (!CFQQ_SEEKY(cfqq)) -			cfqq->seeky_start = 0; -	}  }  /* @@ -3453,14 +3444,6 @@ cfq_merge_cfqqs(struct cfq_data *cfqd, struct cfq_io_context *cic,  	return cic_to_cfqq(cic, 1);  } -static int should_split_cfqq(struct cfq_queue *cfqq) -{ -	if (cfqq->seeky_start && -	    time_after(jiffies, cfqq->seeky_start + CFQQ_COOP_TOUT)) -		return 1; -	return 0; -} -  /*   * Returns NULL if a new cfqq should be allocated, or the old cfqq if this   * was the last process referring to said cfqq. @@ -3469,9 +3452,9 @@ static struct cfq_queue *  split_cfqq(struct cfq_io_context *cic, struct cfq_queue *cfqq)  {  	if (cfqq_process_refs(cfqq) == 1) { -		cfqq->seeky_start = 0;  		cfqq->pid = current->pid;  		cfq_clear_cfqq_coop(cfqq); +		cfq_clear_cfqq_split_coop(cfqq);  		return cfqq;  	} @@ -3510,7 +3493,7 @@ new_queue:  		/*  		 * If the queue was seeky for too long, break it apart.  		 */ -		if (cfq_cfqq_coop(cfqq) && should_split_cfqq(cfqq)) { +		if (cfq_cfqq_coop(cfqq) && cfq_cfqq_split_coop(cfqq)) {  			cfq_log_cfqq(cfqd, cfqq, "breaking apart cfqq");  			cfqq = split_cfqq(cic, cfqq);  			if (!cfqq) diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index b8bea100a16..b34390347c1 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -2868,6 +2868,21 @@ static bool ahci_broken_suspend(struct pci_dev *pdev)  			},  			.driver_data = "F.23",	/* cutoff BIOS version */  		}, +		/* +		 * Acer eMachines G725 has the same problem.  BIOS +		 * V1.03 is known to be broken.  V3.04 is known to +		 * work.  Inbetween, there are V1.06, V2.06 and V3.03 +		 * that we don't have much idea about.  For now, +		 * blacklist anything older than V3.04. +		 */ +		{ +			.ident = "G725", +			.matches = { +				DMI_MATCH(DMI_SYS_VENDOR, "eMachines"), +				DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"), +			}, +			.driver_data = "V3.04",	/* cutoff BIOS version */ +		},  		{ }	/* terminate list */  	};  	const struct dmi_system_id *dmi = dmi_first_match(sysids); diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index f4ea5a8c325..d096fbcbc77 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -2875,7 +2875,7 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)  	 * write indication (used for PIO/DMA setup), result TF is  	 * copied back and we don't whine too much about its failure.  	 */ -	tf->flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; +	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;  	if (scmd->sc_data_direction == DMA_TO_DEVICE)  		tf->flags |= ATA_TFLAG_WRITE; diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 741065c9da6..730ef3c384c 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c @@ -893,6 +893,9 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)  				       do_write);  	} +	if (!do_write) +		flush_dcache_page(page); +  	qc->curbytes += qc->sect_size;  	qc->cursg_ofs += qc->sect_size; diff --git a/drivers/base/class.c b/drivers/base/class.c index 161746deab4..6e2c3b064f5 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c @@ -59,6 +59,8 @@ static void class_release(struct kobject *kobj)  	else  		pr_debug("class '%s' does not have a release() function, "  			 "be careful\n", class->name); + +	kfree(cp);  }  static struct sysfs_ops class_sysfs_ops = { diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 873e594860d..9291614ac6b 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -337,6 +337,9 @@ static int cciss_seq_show(struct seq_file *seq, void *v)  	if (*pos > h->highest_lun)  		return 0; +	if (drv == NULL) /* it's possible for h->drv[] to have holes. */ +		return 0; +  	if (drv->heads == 0)  		return 0; diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index e898ad9eb1c..ab871e00ffc 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2973,7 +2973,6 @@ struct drbd_conf *drbd_new_device(unsigned int minor)  		goto out_no_q;  	mdev->rq_queue = q;  	q->queuedata   = mdev; -	blk_queue_max_segment_size(q, DRBD_MAX_SEGMENT_SIZE);  	disk = alloc_disk(1);  	if (!disk) @@ -2997,6 +2996,7 @@ struct drbd_conf *drbd_new_device(unsigned int minor)  	q->backing_dev_info.congested_data = mdev;  	blk_queue_make_request(q, drbd_make_request_26); +	blk_queue_max_segment_size(q, DRBD_MAX_SEGMENT_SIZE);  	blk_queue_bounce_limit(q, BLK_BOUNCE_ANY);  	blk_queue_merge_bvec(q, drbd_merge_bvec);  	q->queue_lock = &mdev->req_lock; /* needed since we use */ diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index f22a5283128..d065c646b35 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -1224,7 +1224,7 @@ static int receive_Barrier(struct drbd_conf *mdev, struct p_header *h)  	epoch = kmalloc(sizeof(struct drbd_epoch), GFP_NOIO);  	if (!epoch) {  		dev_warn(DEV, "Allocation of an epoch failed, slowing down\n"); -		issue_flush = !test_and_set_bit(DE_BARRIER_IN_NEXT_EPOCH_ISSUED, &epoch->flags); +		issue_flush = !test_and_set_bit(DE_BARRIER_IN_NEXT_EPOCH_ISSUED, &mdev->current_epoch->flags);  		drbd_wait_ee_list_empty(mdev, &mdev->active_ee);  		if (issue_flush) {  			rv = drbd_flush_after_epoch(mdev, mdev->current_epoch); diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c index 2ddf03ae034..68b5957f107 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c @@ -322,7 +322,7 @@ static void pkt_sysfs_dev_remove(struct pktcdvd_device *pd)  	pkt_kobj_remove(pd->kobj_stat);  	pkt_kobj_remove(pd->kobj_wqueue);  	if (class_pktcdvd) -		device_destroy(class_pktcdvd, pd->pkt_dev); +		device_unregister(pd->dev);  } diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 1afb8968a34..fd50ead59c7 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c @@ -729,9 +729,6 @@ int __init agp_amd64_init(void)  	if (agp_off)  		return -EINVAL; -	if (gart_iommu_aperture) -		return agp_bridges_found ? 0 : -ENODEV; -  	err = pci_register_driver(&agp_amd64_pci_driver);  	if (err < 0)  		return err; @@ -768,16 +765,27 @@ int __init agp_amd64_init(void)  	return err;  } +static int __init agp_amd64_mod_init(void) +{ +#ifndef MODULE +	if (gart_iommu_aperture) +		return agp_bridges_found ? 0 : -ENODEV; +#endif +	return agp_amd64_init(); +} +  static void __exit agp_amd64_cleanup(void)  { +#ifndef MODULE  	if (gart_iommu_aperture)  		return; +#endif  	if (aperture_resource)  		release_resource(aperture_resource);  	pci_unregister_driver(&agp_amd64_pci_driver);  } -module_init(agp_amd64_init); +module_init(agp_amd64_mod_init);  module_exit(agp_amd64_cleanup);  MODULE_AUTHOR("Dave Jones <davej@redhat.com>, Andi Kleen"); diff --git a/drivers/char/mem.c b/drivers/char/mem.c index be832b6f827..48788db4e28 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -395,6 +395,7 @@ static ssize_t read_kmem(struct file *file, char __user *buf,  	unsigned long p = *ppos;  	ssize_t low_count, read, sz;  	char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */ +	int err = 0;  	read = 0;  	if (p < (unsigned long) high_memory) { @@ -441,12 +442,16 @@ static ssize_t read_kmem(struct file *file, char __user *buf,  			return -ENOMEM;  		while (count > 0) {  			sz = size_inside_page(p, count); +			if (!is_vmalloc_or_module_addr((void *)p)) { +				err = -ENXIO; +				break; +			}  			sz = vread(kbuf, (char *)p, sz);  			if (!sz)  				break;  			if (copy_to_user(buf, kbuf, sz)) { -				free_page((unsigned long)kbuf); -				return -EFAULT; +				err = -EFAULT; +				break;  			}  			count -= sz;  			buf += sz; @@ -455,8 +460,8 @@ static ssize_t read_kmem(struct file *file, char __user *buf,  		}  		free_page((unsigned long)kbuf);  	} - 	*ppos = p; - 	return read; +	*ppos = p; +	return read ? read : err;  } @@ -520,6 +525,7 @@ static ssize_t write_kmem(struct file * file, const char __user * buf,  	ssize_t wrote = 0;  	ssize_t virtr = 0;  	char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */ +	int err = 0;  	if (p < (unsigned long) high_memory) {  		unsigned long to_write = min_t(unsigned long, count, @@ -540,14 +546,16 @@ static ssize_t write_kmem(struct file * file, const char __user * buf,  			unsigned long sz = size_inside_page(p, count);  			unsigned long n; +			if (!is_vmalloc_or_module_addr((void *)p)) { +				err = -ENXIO; +				break; +			}  			n = copy_from_user(kbuf, buf, sz);  			if (n) { -				if (wrote + virtr) -					break; -				free_page((unsigned long)kbuf); -				return -EFAULT; +				err = -EFAULT; +				break;  			} -			sz = vwrite(kbuf, (char *)p, sz); +			vwrite(kbuf, (char *)p, sz);  			count -= sz;  			buf += sz;  			virtr += sz; @@ -556,8 +564,8 @@ static ssize_t write_kmem(struct file * file, const char __user * buf,  		free_page((unsigned long)kbuf);  	} - 	*ppos = p; - 	return virtr + wrote; +	*ppos = p; +	return virtr + wrote ? : err;  }  #endif diff --git a/drivers/char/random.c b/drivers/char/random.c index 8258982b49e..2849713d223 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -1051,12 +1051,6 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)  				/* like a named pipe */  	} -	/* -	 * If we gave the user some bytes, update the access time. -	 */ -	if (count) -		file_accessed(file); -  	return (count ? count : retval);  } @@ -1107,7 +1101,6 @@ static ssize_t random_write(struct file *file, const char __user *buffer,  			    size_t count, loff_t *ppos)  {  	size_t ret; -	struct inode *inode = file->f_path.dentry->d_inode;  	ret = write_pool(&blocking_pool, buffer, count);  	if (ret) @@ -1116,8 +1109,6 @@ static ssize_t random_write(struct file *file, const char __user *buffer,  	if (ret)  		return ret; -	inode->i_mtime = current_fs_time(inode->i_sb); -	mark_inode_dirty(inode);  	return (ssize_t)count;  } diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c index ecba4942fc8..f58440791e6 100644 --- a/drivers/char/tpm/tpm_infineon.c +++ b/drivers/char/tpm/tpm_infineon.c @@ -39,12 +39,12 @@  struct tpm_inf_dev {  	int iotype; -	void __iomem *mem_base;		/* MMIO ioremap'd addr */ -	unsigned long map_base;		/* phys MMIO base */ -	unsigned long map_size;		/* MMIO region size */ -	unsigned int index_off;		/* index register offset */ +	void __iomem *mem_base;	/* MMIO ioremap'd addr */ +	unsigned long map_base;	/* phys MMIO base */ +	unsigned long map_size;	/* MMIO region size */ +	unsigned int index_off;	/* index register offset */ -	unsigned int data_regs;		/* Data registers */ +	unsigned int data_regs;	/* Data registers */  	unsigned int data_size;  	unsigned int config_port;	/* IO Port config index reg */ @@ -406,14 +406,14 @@ static const struct tpm_vendor_specific tpm_inf = {  	.miscdev = {.fops = &inf_ops,},  }; -static const struct pnp_device_id tpm_pnp_tbl[] = { +static const struct pnp_device_id tpm_inf_pnp_tbl[] = {  	/* Infineon TPMs */  	{"IFX0101", 0},  	{"IFX0102", 0},  	{"", 0}  }; -MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl); +MODULE_DEVICE_TABLE(pnp, tpm_inf_pnp_tbl);  static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  				       const struct pnp_device_id *dev_id) @@ -430,7 +430,7 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  	if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) &&  	    !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) { -	    	tpm_dev.iotype = TPM_INF_IO_PORT; +		tpm_dev.iotype = TPM_INF_IO_PORT;  		tpm_dev.config_port = pnp_port_start(dev, 0);  		tpm_dev.config_size = pnp_port_len(dev, 0); @@ -459,9 +459,9 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  			goto err_last;  		}  	} else if (pnp_mem_valid(dev, 0) && -	           !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { +		   !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { -	    	tpm_dev.iotype = TPM_INF_IO_MEM; +		tpm_dev.iotype = TPM_INF_IO_MEM;  		tpm_dev.map_base = pnp_mem_start(dev, 0);  		tpm_dev.map_size = pnp_mem_len(dev, 0); @@ -563,11 +563,11 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  			 "product id 0x%02x%02x"  			 "%s\n",  			 tpm_dev.iotype == TPM_INF_IO_PORT ? -				tpm_dev.config_port : -				tpm_dev.map_base + tpm_dev.index_off, +			 tpm_dev.config_port : +			 tpm_dev.map_base + tpm_dev.index_off,  			 tpm_dev.iotype == TPM_INF_IO_PORT ? -				tpm_dev.data_regs : -				tpm_dev.map_base + tpm_dev.data_regs, +			 tpm_dev.data_regs : +			 tpm_dev.map_base + tpm_dev.data_regs,  			 version[0], version[1],  			 vendorid[0], vendorid[1],  			 productid[0], productid[1], chipname); @@ -607,20 +607,55 @@ static __devexit void tpm_inf_pnp_remove(struct pnp_dev *dev)  			iounmap(tpm_dev.mem_base);  			release_mem_region(tpm_dev.map_base, tpm_dev.map_size);  		} +		tpm_dev_vendor_release(chip);  		tpm_remove_hardware(chip->dev);  	}  } +static int tpm_inf_pnp_suspend(struct pnp_dev *dev, pm_message_t pm_state) +{ +	struct tpm_chip *chip = pnp_get_drvdata(dev); +	int rc; +	if (chip) { +		u8 savestate[] = { +			0, 193,	/* TPM_TAG_RQU_COMMAND */ +			0, 0, 0, 10,	/* blob length (in bytes) */ +			0, 0, 0, 152	/* TPM_ORD_SaveState */ +		}; +		dev_info(&dev->dev, "saving TPM state\n"); +		rc = tpm_inf_send(chip, savestate, sizeof(savestate)); +		if (rc < 0) { +			dev_err(&dev->dev, "error while saving TPM state\n"); +			return rc; +		} +	} +	return 0; +} + +static int tpm_inf_pnp_resume(struct pnp_dev *dev) +{ +	/* Re-configure TPM after suspending */ +	tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR); +	tpm_config_out(IOLIMH, TPM_INF_ADDR); +	tpm_config_out((tpm_dev.data_regs >> 8) & 0xff, TPM_INF_DATA); +	tpm_config_out(IOLIML, TPM_INF_ADDR); +	tpm_config_out((tpm_dev.data_regs & 0xff), TPM_INF_DATA); +	/* activate register */ +	tpm_config_out(TPM_DAR, TPM_INF_ADDR); +	tpm_config_out(0x01, TPM_INF_DATA); +	tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); +	/* disable RESET, LP and IRQC */ +	tpm_data_out(RESET_LP_IRQC_DISABLE, CMD); +	return tpm_pm_resume(&dev->dev); +} +  static struct pnp_driver tpm_inf_pnp_driver = {  	.name = "tpm_inf_pnp", -	.driver = { -		.owner = THIS_MODULE, -		.suspend = tpm_pm_suspend, -		.resume = tpm_pm_resume, -	}, -	.id_table = tpm_pnp_tbl, +	.id_table = tpm_inf_pnp_tbl,  	.probe = tpm_inf_pnp_probe, -	.remove = __devexit_p(tpm_inf_pnp_remove), +	.suspend = tpm_inf_pnp_suspend, +	.resume = tpm_inf_pnp_resume, +	.remove = __devexit_p(tpm_inf_pnp_remove)  };  static int __init init_inf(void) @@ -638,5 +673,5 @@ module_exit(cleanup_inf);  MODULE_AUTHOR("Marcel Selhorst <m.selhorst@sirrix.com>");  MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); -MODULE_VERSION("1.9"); +MODULE_VERSION("1.9.2");  MODULE_LICENSE("GPL"); diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index c6f3b48be9d..dcb9083ecde 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -1951,8 +1951,10 @@ static int tty_fasync(int fd, struct file *filp, int on)  			pid = task_pid(current);  			type = PIDTYPE_PID;  		} -		retval = __f_setown(filp, pid, type, 0); +		get_pid(pid);  		spin_unlock_irqrestore(&tty->ctrl_lock, flags); +		retval = __f_setown(filp, pid, type, 0); +		put_pid(pid);  		if (retval)  			goto out;  	} else { diff --git a/drivers/char/uv_mmtimer.c b/drivers/char/uv_mmtimer.c index 867b67be9f0..c7072ba14f4 100644 --- a/drivers/char/uv_mmtimer.c +++ b/drivers/char/uv_mmtimer.c @@ -89,13 +89,17 @@ static long uv_mmtimer_ioctl(struct file *file, unsigned int cmd,  	switch (cmd) {  	case MMTIMER_GETOFFSET:	/* offset of the counter */  		/* -		 * UV RTC register is on its own page +		 * Starting with HUB rev 2.0, the UV RTC register is +		 * replicated across all cachelines of it's own page. +		 * This allows faster simultaneous reads from a given socket. +		 * +		 * The offset returned is in 64 bit units.  		 */ -		if (PAGE_SIZE <= (1 << 16)) -			ret = ((UV_LOCAL_MMR_BASE | UVH_RTC) & (PAGE_SIZE-1)) -				/ 8; +		if (uv_get_min_hub_revision_id() == 1) +			ret = 0;  		else -			ret = -ENOSYS; +			ret = ((uv_blade_processor_id() * L1_CACHE_BYTES) % +					PAGE_SIZE) / 8;  		break;  	case MMTIMER_GETRES: /* resolution of the clock in 10^-15 s */ @@ -115,8 +119,8 @@ static long uv_mmtimer_ioctl(struct file *file, unsigned int cmd,  		ret = hweight64(UVH_RTC_REAL_TIME_CLOCK_MASK);  		break; -	case MMTIMER_MMAPAVAIL: /* can we mmap the clock into userspace? */ -		ret = (PAGE_SIZE <= (1 << 16)) ? 1 : 0; +	case MMTIMER_MMAPAVAIL: +		ret = 1;  		break;  	case MMTIMER_GETCOUNTER: diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 4b34ade2332..bd444dc93cf 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c @@ -554,6 +554,9 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)  				(dbs_tuners_ins.up_threshold -  				 dbs_tuners_ins.down_differential); +		if (freq_next < policy->min) +			freq_next = policy->min; +  		if (!dbs_tuners_ins.powersave_bias) {  			__cpufreq_driver_target(policy, freq_next,  					CPUFREQ_RELATION_L); diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c index 0af80577dc7..d3a27e0119b 100644 --- a/drivers/crypto/padlock-sha.c +++ b/drivers/crypto/padlock-sha.c @@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,  	return crypto_shash_update(&dctx->fallback, data, length);  } +static int padlock_sha_export(struct shash_desc *desc, void *out) +{ +	struct padlock_sha_desc *dctx = shash_desc_ctx(desc); + +	return crypto_shash_export(&dctx->fallback, out); +} + +static int padlock_sha_import(struct shash_desc *desc, const void *in) +{ +	struct padlock_sha_desc *dctx = shash_desc_ctx(desc); +	struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm); + +	dctx->fallback.tfm = ctx->fallback; +	dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP; +	return crypto_shash_import(&dctx->fallback, in); +} +  static inline void padlock_output_block(uint32_t *src,  		 	uint32_t *dst, size_t count)  { @@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {  	.update 	=	padlock_sha_update,  	.finup  	=	padlock_sha1_finup,  	.final  	=	padlock_sha1_final, +	.export		=	padlock_sha_export, +	.import		=	padlock_sha_import,  	.descsize	=	sizeof(struct padlock_sha_desc), +	.statesize	=	sizeof(struct sha1_state),  	.base		=	{  		.cra_name		=	"sha1",  		.cra_driver_name	=	"sha1-padlock", @@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {  	.update 	=	padlock_sha_update,  	.finup  	=	padlock_sha256_finup,  	.final  	=	padlock_sha256_final, +	.export		=	padlock_sha_export, +	.import		=	padlock_sha_import,  	.descsize	=	sizeof(struct padlock_sha_desc), +	.statesize	=	sizeof(struct sha256_state),  	.base		=	{  		.cra_name		=	"sha256",  		.cra_driver_name	=	"sha256-padlock", diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c index b5f2ee0f8e2..64a937262a4 100644 --- a/drivers/dma/coh901318.c +++ b/drivers/dma/coh901318.c @@ -613,8 +613,6 @@ static void dma_tasklet(unsigned long data)  	cohd_fin->pending_irqs--;  	cohc->completed = cohd_fin->desc.cookie; -	BUG_ON(cohc->nbr_active_done && cohd_fin == NULL); -  	if (cohc->nbr_active_done == 0)  		return; diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 6f51a0a7a8b..e7a3230fb7d 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -826,6 +826,7 @@ void dma_async_device_unregister(struct dma_device *device)  		chan->dev->chan = NULL;  		mutex_unlock(&dma_list_mutex);  		device_unregister(&chan->dev->device); +		free_percpu(chan->local);  	}  }  EXPORT_SYMBOL(dma_async_device_unregister); diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 8b905161fbf..948d563941c 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -467,7 +467,7 @@ err_srcs:  	if (iterations > 0)  		while (!kthread_should_stop()) { -			DECLARE_WAIT_QUEUE_HEAD(wait_dmatest_exit); +			DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit);  			interruptible_sleep_on(&wait_dmatest_exit);  		} diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c index 5f7a500e18d..5cc37afe2bc 100644 --- a/drivers/dma/ioat/dma_v2.c +++ b/drivers/dma/ioat/dma_v2.c @@ -249,7 +249,7 @@ int ioat2_quiesce(struct ioat_chan_common *chan, unsigned long tmo)  	if (is_ioat_active(status) || is_ioat_idle(status))  		ioat_suspend(chan);  	while (is_ioat_active(status) || is_ioat_idle(status)) { -		if (end && time_after(jiffies, end)) { +		if (tmo && time_after(jiffies, end)) {  			err = -ETIMEDOUT;  			break;  		} diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c index 9a5bc1a7389..e80bae1673f 100644 --- a/drivers/dma/ipu/ipu_idmac.c +++ b/drivers/dma/ipu/ipu_idmac.c @@ -761,12 +761,10 @@ static void ipu_select_buffer(enum ipu_channel channel, int buffer_n)   * @buffer_n:	buffer number to update.   *		0 or 1 are the only valid values.   * @phyaddr:	buffer physical address. - * @return:	Returns 0 on success or negative error code on failure. This - *              function will fail if the buffer is set to ready.   */  /* Called under spin_lock(_irqsave)(&ichan->lock) */ -static int ipu_update_channel_buffer(struct idmac_channel *ichan, -				     int buffer_n, dma_addr_t phyaddr) +static void ipu_update_channel_buffer(struct idmac_channel *ichan, +				      int buffer_n, dma_addr_t phyaddr)  {  	enum ipu_channel channel = ichan->dma_chan.chan_id;  	uint32_t reg; @@ -806,8 +804,6 @@ static int ipu_update_channel_buffer(struct idmac_channel *ichan,  	}  	spin_unlock_irqrestore(&ipu_data.lock, flags); - -	return 0;  }  /* Called under spin_lock_irqsave(&ichan->lock) */ @@ -816,7 +812,6 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,  {  	unsigned int chan_id = ichan->dma_chan.chan_id;  	struct device *dev = &ichan->dma_chan.dev->device; -	int ret;  	if (async_tx_test_ack(&desc->txd))  		return -EINTR; @@ -827,14 +822,7 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,  	 * could make it conditional on status >= IPU_CHANNEL_ENABLED, but  	 * doing it again shouldn't hurt either.  	 */ -	ret = ipu_update_channel_buffer(ichan, buf_idx, -					sg_dma_address(sg)); - -	if (ret < 0) { -		dev_err(dev, "Updating sg %p on channel 0x%x buffer %d failed!\n", -			sg, chan_id, buf_idx); -		return ret; -	} +	ipu_update_channel_buffer(ichan, buf_idx, sg_dma_address(sg));  	ipu_select_buffer(chan_id, buf_idx);  	dev_dbg(dev, "Updated sg %p on channel 0x%x buffer %d\n", @@ -1379,10 +1367,11 @@ static irqreturn_t idmac_interrupt(int irq, void *dev_id)  	if (likely(sgnew) &&  	    ipu_submit_buffer(ichan, descnew, sgnew, ichan->active_buffer) < 0) { -		callback = desc->txd.callback; -		callback_param = desc->txd.callback_param; +		callback = descnew->txd.callback; +		callback_param = descnew->txd.callback_param;  		spin_unlock(&ichan->lock); -		callback(callback_param); +		if (callback) +			callback(callback_param);  		spin_lock(&ichan->lock);  	} diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 000dc67b85b..3391e6739d0 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -2658,10 +2658,11 @@ static void amd64_restore_ecc_error_reporting(struct amd64_pvt *pvt)   * the memory system completely. A command line option allows to force-enable   * hardware ECC later in amd64_enable_ecc_error_reporting().   */ -static const char *ecc_warning = -	"WARNING: ECC is disabled by BIOS. Module will NOT be loaded.\n" -	" Either Enable ECC in the BIOS, or set 'ecc_enable_override'.\n" -	" Also, use of the override can cause unknown side effects.\n"; +static const char *ecc_msg = +	"ECC disabled in the BIOS or no ECC capability, module will not load.\n" +	" Either enable ECC checking or force module loading by setting " +	"'ecc_enable_override'.\n" +	" (Note that use of the override may cause unknown side effects.)\n";  static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  { @@ -2673,7 +2674,7 @@ static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  	ecc_enabled = !!(value & K8_NBCFG_ECC_ENABLE);  	if (!ecc_enabled) -		amd64_printk(KERN_WARNING, "This node reports that Memory ECC " +		amd64_printk(KERN_NOTICE, "This node reports that Memory ECC "  			     "is currently disabled, set F3x%x[22] (%s).\n",  			     K8_NBCFG, pci_name(pvt->misc_f3_ctl));  	else @@ -2681,13 +2682,13 @@ static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  	nb_mce_en = amd64_nb_mce_bank_enabled_on_node(pvt->mc_node_id);  	if (!nb_mce_en) -		amd64_printk(KERN_WARNING, "NB MCE bank disabled, set MSR " +		amd64_printk(KERN_NOTICE, "NB MCE bank disabled, set MSR "  			     "0x%08x[4] on node %d to enable.\n",  			     MSR_IA32_MCG_CTL, pvt->mc_node_id);  	if (!ecc_enabled || !nb_mce_en) {  		if (!ecc_enable_override) { -			amd64_printk(KERN_WARNING, "%s", ecc_warning); +			amd64_printk(KERN_NOTICE, "%s", ecc_msg);  			return -ENODEV;  		}  		ecc_enable_override = 0; diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c index cf27402af97..ecd5928d711 100644 --- a/drivers/edac/mpc85xx_edac.c +++ b/drivers/edac/mpc85xx_edac.c @@ -804,8 +804,8 @@ static void __devinit mpc85xx_init_csrows(struct mem_ctl_info *mci)  		end   <<= (24 - PAGE_SHIFT);  		end    |= (1 << (24 - PAGE_SHIFT)) - 1; -		csrow->first_page = start >> PAGE_SHIFT; -		csrow->last_page = end >> PAGE_SHIFT; +		csrow->first_page = start; +		csrow->last_page = end;  		csrow->nr_pages = end + 1 - start;  		csrow->grain = 8;  		csrow->mtype = mtype; @@ -892,10 +892,6 @@ static int __devinit mpc85xx_mc_err_probe(struct of_device *op,  	mpc85xx_init_csrows(mci); -#ifdef CONFIG_EDAC_DEBUG -	edac_mc_register_mcidev_debug((struct attribute **)debug_attr); -#endif -  	/* store the original error disable bits */  	orig_ddr_err_disable =  	    in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DISABLE); diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 7083bcc1b9c..5045156c531 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -57,6 +57,8 @@ static LIST_HEAD(descriptor_list);  static int descriptor_count;  static __be32 tmp_config_rom[256]; +/* ROM header, bus info block, root dir header, capabilities = 7 quadlets */ +static size_t config_rom_length = 1 + 4 + 1 + 1;  #define BIB_CRC(v)		((v) <<  0)  #define BIB_CRC_LENGTH(v)	((v) << 16) @@ -73,7 +75,7 @@ static __be32 tmp_config_rom[256];  #define BIB_CMC			((1) << 30)  #define BIB_IMC			((1) << 31) -static size_t generate_config_rom(struct fw_card *card, __be32 *config_rom) +static void generate_config_rom(struct fw_card *card, __be32 *config_rom)  {  	struct fw_descriptor *desc;  	int i, j, k, length; @@ -130,23 +132,30 @@ static size_t generate_config_rom(struct fw_card *card, __be32 *config_rom)  	for (i = 0; i < j; i += length + 1)  		length = fw_compute_block_crc(config_rom + i); -	return j; +	WARN_ON(j != config_rom_length);  }  static void update_config_roms(void)  {  	struct fw_card *card; -	size_t length;  	list_for_each_entry (card, &card_list, link) { -		length = generate_config_rom(card, tmp_config_rom); -		card->driver->set_config_rom(card, tmp_config_rom, length); +		generate_config_rom(card, tmp_config_rom); +		card->driver->set_config_rom(card, tmp_config_rom, +					     config_rom_length);  	}  } +static size_t required_space(struct fw_descriptor *desc) +{ +	/* descriptor + entry into root dir + optional immediate entry */ +	return desc->length + 1 + (desc->immediate > 0 ? 1 : 0); +} +  int fw_core_add_descriptor(struct fw_descriptor *desc)  {  	size_t i; +	int ret;  	/*  	 * Check descriptor is valid; the length of all blocks in the @@ -162,15 +171,21 @@ int fw_core_add_descriptor(struct fw_descriptor *desc)  	mutex_lock(&card_mutex); -	list_add_tail(&desc->link, &descriptor_list); -	descriptor_count++; -	if (desc->immediate > 0) +	if (config_rom_length + required_space(desc) > 256) { +		ret = -EBUSY; +	} else { +		list_add_tail(&desc->link, &descriptor_list); +		config_rom_length += required_space(desc);  		descriptor_count++; -	update_config_roms(); +		if (desc->immediate > 0) +			descriptor_count++; +		update_config_roms(); +		ret = 0; +	}  	mutex_unlock(&card_mutex); -	return 0; +	return ret;  }  EXPORT_SYMBOL(fw_core_add_descriptor); @@ -179,6 +194,7 @@ void fw_core_remove_descriptor(struct fw_descriptor *desc)  	mutex_lock(&card_mutex);  	list_del(&desc->link); +	config_rom_length -= required_space(desc);  	descriptor_count--;  	if (desc->immediate > 0)  		descriptor_count--; @@ -428,7 +444,6 @@ EXPORT_SYMBOL(fw_card_initialize);  int fw_card_add(struct fw_card *card,  		u32 max_receive, u32 link_speed, u64 guid)  { -	size_t length;  	int ret;  	card->max_receive = max_receive; @@ -437,8 +452,8 @@ int fw_card_add(struct fw_card *card,  	mutex_lock(&card_mutex); -	length = generate_config_rom(card, tmp_config_rom); -	ret = card->driver->enable(card, tmp_config_rom, length); +	generate_config_rom(card, tmp_config_rom); +	ret = card->driver->enable(card, tmp_config_rom, config_rom_length);  	if (ret == 0)  		list_add_tail(&card->link, &card_list); diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index e6d63849e78..4eeaed57e21 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -35,6 +35,7 @@  #include <linux/preempt.h>  #include <linux/sched.h>  #include <linux/spinlock.h> +#include <linux/string.h>  #include <linux/time.h>  #include <linux/uaccess.h>  #include <linux/vmalloc.h> @@ -595,13 +596,20 @@ static int ioctl_send_request(struct client *client, void *buffer)  			    client->device->max_speed);  } +static inline bool is_fcp_request(struct fw_request *request) +{ +	return request == NULL; +} +  static void release_request(struct client *client,  			    struct client_resource *resource)  {  	struct inbound_transaction_resource *r = container_of(resource,  			struct inbound_transaction_resource, resource); -	if (r->request) +	if (is_fcp_request(r->request)) +		kfree(r->data); +	else  		fw_send_response(client->device->card, r->request,  				 RCODE_CONFLICT_ERROR);  	kfree(r); @@ -616,6 +624,7 @@ static void handle_request(struct fw_card *card, struct fw_request *request,  	struct address_handler_resource *handler = callback_data;  	struct inbound_transaction_resource *r;  	struct inbound_transaction_event *e; +	void *fcp_frame = NULL;  	int ret;  	r = kmalloc(sizeof(*r), GFP_ATOMIC); @@ -627,6 +636,18 @@ static void handle_request(struct fw_card *card, struct fw_request *request,  	r->data    = payload;  	r->length  = length; +	if (is_fcp_request(request)) { +		/* +		 * FIXME: Let core-transaction.c manage a +		 * single reference-counted copy? +		 */ +		fcp_frame = kmemdup(payload, length, GFP_ATOMIC); +		if (fcp_frame == NULL) +			goto failed; + +		r->data = fcp_frame; +	} +  	r->resource.release = release_request;  	ret = add_client_resource(handler->client, &r->resource, GFP_ATOMIC);  	if (ret < 0) @@ -640,13 +661,15 @@ static void handle_request(struct fw_card *card, struct fw_request *request,  	e->request.closure = handler->closure;  	queue_event(handler->client, &e->event, -		    &e->request, sizeof(e->request), payload, length); +		    &e->request, sizeof(e->request), r->data, length);  	return;   failed:  	kfree(r);  	kfree(e); -	if (request) +	kfree(fcp_frame); + +	if (!is_fcp_request(request))  		fw_send_response(card, request, RCODE_CONFLICT_ERROR);  } @@ -717,18 +740,17 @@ static int ioctl_send_response(struct client *client, void *buffer)  	r = container_of(resource, struct inbound_transaction_resource,  			 resource); -	if (r->request) { -		if (request->length < r->length) -			r->length = request->length; -		if (copy_from_user(r->data, u64_to_uptr(request->data), -				   r->length)) { -			ret = -EFAULT; -			kfree(r->request); -			goto out; -		} -		fw_send_response(client->device->card, r->request, -				 request->rcode); +	if (is_fcp_request(r->request)) +		goto out; + +	if (request->length < r->length) +		r->length = request->length; +	if (copy_from_user(r->data, u64_to_uptr(request->data), r->length)) { +		ret = -EFAULT; +		kfree(r->request); +		goto out;  	} +	fw_send_response(client->device->card, r->request, request->rcode);   out:  	kfree(r); diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c index cbaf420c36c..2d3dc7ded0a 100644 --- a/drivers/firewire/net.c +++ b/drivers/firewire/net.c @@ -893,20 +893,31 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context,  static struct kmem_cache *fwnet_packet_task_cache; +static void fwnet_free_ptask(struct fwnet_packet_task *ptask) +{ +	dev_kfree_skb_any(ptask->skb); +	kmem_cache_free(fwnet_packet_task_cache, ptask); +} +  static int fwnet_send_packet(struct fwnet_packet_task *ptask);  static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)  { -	struct fwnet_device *dev; +	struct fwnet_device *dev = ptask->dev;  	unsigned long flags; - -	dev = ptask->dev; +	bool free;  	spin_lock_irqsave(&dev->lock, flags); -	list_del(&ptask->pt_link); -	spin_unlock_irqrestore(&dev->lock, flags); -	ptask->outstanding_pkts--; /* FIXME access inside lock */ +	ptask->outstanding_pkts--; + +	/* Check whether we or the networking TX soft-IRQ is last user. */ +	free = (ptask->outstanding_pkts == 0 && !list_empty(&ptask->pt_link)); + +	if (ptask->outstanding_pkts == 0) +		list_del(&ptask->pt_link); + +	spin_unlock_irqrestore(&dev->lock, flags);  	if (ptask->outstanding_pkts > 0) {  		u16 dg_size; @@ -951,10 +962,10 @@ static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)  			ptask->max_payload = skb->len + RFC2374_FRAG_HDR_SIZE;  		}  		fwnet_send_packet(ptask); -	} else { -		dev_kfree_skb_any(ptask->skb); -		kmem_cache_free(fwnet_packet_task_cache, ptask);  	} + +	if (free) +		fwnet_free_ptask(ptask);  }  static void fwnet_write_complete(struct fw_card *card, int rcode, @@ -977,6 +988,7 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)  	unsigned tx_len;  	struct rfc2734_header *bufhdr;  	unsigned long flags; +	bool free;  	dev = ptask->dev;  	tx_len = ptask->max_payload; @@ -1022,12 +1034,16 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)  				generation, SCODE_100, 0ULL, ptask->skb->data,  				tx_len + 8, fwnet_write_complete, ptask); -		/* FIXME race? */  		spin_lock_irqsave(&dev->lock, flags); -		list_add_tail(&ptask->pt_link, &dev->broadcasted_list); + +		/* If the AT tasklet already ran, we may be last user. */ +		free = (ptask->outstanding_pkts == 0 && list_empty(&ptask->pt_link)); +		if (!free) +			list_add_tail(&ptask->pt_link, &dev->broadcasted_list); +  		spin_unlock_irqrestore(&dev->lock, flags); -		return 0; +		goto out;  	}  	fw_send_request(dev->card, &ptask->transaction, @@ -1035,12 +1051,19 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)  			ptask->generation, ptask->speed, ptask->fifo_addr,  			ptask->skb->data, tx_len, fwnet_write_complete, ptask); -	/* FIXME race? */  	spin_lock_irqsave(&dev->lock, flags); -	list_add_tail(&ptask->pt_link, &dev->sent_list); + +	/* If the AT tasklet already ran, we may be last user. */ +	free = (ptask->outstanding_pkts == 0 && list_empty(&ptask->pt_link)); +	if (!free) +		list_add_tail(&ptask->pt_link, &dev->sent_list); +  	spin_unlock_irqrestore(&dev->lock, flags);  	dev->netdev->trans_start = jiffies; + out: +	if (free) +		fwnet_free_ptask(ptask);  	return 0;  } @@ -1298,6 +1321,8 @@ static netdev_tx_t fwnet_tx(struct sk_buff *skb, struct net_device *net)  	spin_unlock_irqrestore(&dev->lock, flags);  	ptask->max_payload = max_payload; +	INIT_LIST_HEAD(&ptask->pt_link); +  	fwnet_send_packet(ptask);  	return NETDEV_TX_OK; diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index a61571c63c5..43ebf337b13 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -2101,11 +2101,6 @@ static int ohci_queue_iso_transmit(struct fw_iso_context *base,  	u32 payload_index, payload_end_index, next_page_index;  	int page, end_page, i, length, offset; -	/* -	 * FIXME: Cycle lost behavior should be configurable: lose -	 * packet, retransmit or terminate.. -	 */ -  	p = packet;  	payload_index = payload; @@ -2135,6 +2130,14 @@ static int ohci_queue_iso_transmit(struct fw_iso_context *base,  	if (!p->skip) {  		d[0].control   = cpu_to_le16(DESCRIPTOR_KEY_IMMEDIATE);  		d[0].req_count = cpu_to_le16(8); +		/* +		 * Link the skip address to this descriptor itself.  This causes +		 * a context to skip a cycle whenever lost cycles or FIFO +		 * overruns occur, without dropping the data.  The application +		 * should then decide whether this is an error condition or not. +		 * FIXME:  Make the context's cycle-lost behaviour configurable? +		 */ +		d[0].branch_address = cpu_to_le32(d_bus | z);  		header = (__le32 *) &d[1];  		header[0] = cpu_to_le32(IT_HEADER_SY(p->sy) | @@ -2420,6 +2423,7 @@ static void ohci_pmac_off(struct pci_dev *dev)  #define PCI_VENDOR_ID_AGERE		PCI_VENDOR_ID_ATT  #define PCI_DEVICE_ID_AGERE_FW643	0x5901 +#define PCI_DEVICE_ID_TI_TSB43AB23	0x8024  static int __devinit pci_probe(struct pci_dev *dev,  			       const struct pci_device_id *ent) @@ -2488,7 +2492,8 @@ static int __devinit pci_probe(struct pci_dev *dev,  #if !defined(CONFIG_X86_32)  	/* dual-buffer mode is broken with descriptor addresses above 2G */  	if (dev->vendor == PCI_VENDOR_ID_TI && -	    dev->device == PCI_DEVICE_ID_TI_TSB43AB22) +	    (dev->device == PCI_DEVICE_ID_TI_TSB43AB22 || +	     dev->device == PCI_DEVICE_ID_TI_TSB43AB23))  		ohci->use_dualbuffer = false;  #endif diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 96eddd17e05..305c5900396 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -66,6 +66,8 @@ config DRM_RADEON  	  If M is selected, the module will be called radeon. +source "drivers/gpu/drm/radeon/Kconfig" +  config DRM_I810  	tristate "Intel I810"  	depends on DRM && AGP && AGP_INTEL diff --git a/drivers/gpu/drm/ati_pcigart.c b/drivers/gpu/drm/ati_pcigart.c index a1fce68e3bb..17be051b7aa 100644 --- a/drivers/gpu/drm/ati_pcigart.c +++ b/drivers/gpu/drm/ati_pcigart.c @@ -113,7 +113,7 @@ int drm_ati_pcigart_init(struct drm_device *dev, struct drm_ati_pcigart_info *ga  		if (pci_set_dma_mask(dev->pdev, gart_info->table_mask)) {  			DRM_ERROR("fail to set dma mask to 0x%Lx\n", -				  gart_info->table_mask); +				  (unsigned long long)gart_info->table_mask);  			ret = 1;  			goto done;  		} diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index defcaf10846..f665b05592f 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -633,8 +633,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,  		return NULL;  	}  	if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) { -		printk(KERN_WARNING "integrated sync not supported\n"); -		return NULL; +		printk(KERN_WARNING "composite sync not supported\n");  	}  	/* it is incorrect if hsync/vsync width is zero */ diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 1c2b7d44ec0..0f9e90552dc 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -389,7 +389,7 @@ int drm_fb_helper_blank(int blank, struct fb_info *info)  		break;  	/* Display: Off; HSync: On, VSync: On */  	case FB_BLANK_NORMAL: -		drm_fb_helper_off(info, DRM_MODE_DPMS_ON); +		drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY);  		break;  	/* Display: Off; HSync: Off, VSync: On */  	case FB_BLANK_HSYNC_SUSPEND: diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index e9dbb481c46..8bf3770f294 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -142,19 +142,6 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size)  	if (IS_ERR(obj->filp))  		goto free; -	/* Basically we want to disable the OOM killer and handle ENOMEM -	 * ourselves by sacrificing pages from cached buffers. -	 * XXX shmem_file_[gs]et_gfp_mask() -	 */ -	mapping_set_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping, -			     GFP_HIGHUSER | -			     __GFP_COLD | -			     __GFP_FS | -			     __GFP_RECLAIMABLE | -			     __GFP_NORETRY | -			     __GFP_NOWARN | -			     __GFP_NOMEMALLOC); -  	kref_init(&obj->refcount);  	kref_init(&obj->handlecount);  	obj->size = size; diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index cdec3297712..2ac074c8f5d 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c @@ -405,7 +405,8 @@ struct drm_mm_node *drm_mm_search_free_in_range(const struct drm_mm *mm,  				wasted += alignment - tmp;  		} -		if (entry->size >= size + wasted) { +		if (entry->size >= size + wasted && +		    (entry->start + wasted + size) <= end) {  			if (!best_match)  				return entry;  			if (entry->size < best_size) { diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 9c9998c4dce..a894ade0309 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -290,7 +290,7 @@ static int i915_batchbuffer_info(struct seq_file *m, void *data)  	list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {  		obj = obj_priv->obj;  		if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) { -		    ret = i915_gem_object_get_pages(obj); +		    ret = i915_gem_object_get_pages(obj, 0);  		    if (ret) {  			    DRM_ERROR("Failed to get pages: %d\n", ret);  			    spin_unlock(&dev_priv->mm.active_list_lock); diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index e660ac07f3b..2307f98349f 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -735,8 +735,10 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,  	if (cmdbuf->num_cliprects) {  		cliprects = kcalloc(cmdbuf->num_cliprects,  				    sizeof(struct drm_clip_rect), GFP_KERNEL); -		if (cliprects == NULL) +		if (cliprects == NULL) { +			ret = -ENOMEM;  			goto fail_batch_free; +		}  		ret = copy_from_user(cliprects, cmdbuf->cliprects,  				     cmdbuf->num_cliprects * diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 46d88965852..79beffcf593 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -120,7 +120,7 @@ const static struct intel_device_info intel_gm45_info = {  const static struct intel_device_info intel_pineview_info = {  	.is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1, -	.has_pipe_cxsr = 1, +	.need_gfx_hws = 1,  	.has_hotplug = 1,  }; @@ -174,78 +174,100 @@ const static struct pci_device_id pciidlist[] = {  MODULE_DEVICE_TABLE(pci, pciidlist);  #endif -static int i915_suspend(struct drm_device *dev, pm_message_t state) +static int i915_drm_freeze(struct drm_device *dev)  { -	struct drm_i915_private *dev_priv = dev->dev_private; - -	if (!dev || !dev_priv) { -		DRM_ERROR("dev: %p, dev_priv: %p\n", dev, dev_priv); -		DRM_ERROR("DRM not initialized, aborting suspend.\n"); -		return -ENODEV; -	} - -	if (state.event == PM_EVENT_PRETHAW) -		return 0; -  	pci_save_state(dev->pdev);  	/* If KMS is active, we do the leavevt stuff here */  	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		if (i915_gem_idle(dev)) +		int error = i915_gem_idle(dev); +		if (error) {  			dev_err(&dev->pdev->dev, -				"GEM idle failed, resume may fail\n"); +				"GEM idle failed, resume might fail\n"); +			return error; +		}  		drm_irq_uninstall(dev);  	}  	i915_save_state(dev); +	return 0; +} + +static void i915_drm_suspend(struct drm_device *dev) +{ +	struct drm_i915_private *dev_priv = dev->dev_private; +  	intel_opregion_free(dev, 1); +	/* Modeset on resume, not lid events */ +	dev_priv->modeset_on_lid = 0; +} + +static int i915_suspend(struct drm_device *dev, pm_message_t state) +{ +	int error; + +	if (!dev || !dev->dev_private) { +		DRM_ERROR("dev: %p\n", dev); +		DRM_ERROR("DRM not initialized, aborting suspend.\n"); +		return -ENODEV; +	} + +	if (state.event == PM_EVENT_PRETHAW) +		return 0; + +	error = i915_drm_freeze(dev); +	if (error) +		return error; + +	i915_drm_suspend(dev); +  	if (state.event == PM_EVENT_SUSPEND) {  		/* Shut down the device */  		pci_disable_device(dev->pdev);  		pci_set_power_state(dev->pdev, PCI_D3hot);  	} -	/* Modeset on resume, not lid events */ -	dev_priv->modeset_on_lid = 0; -  	return 0;  } -static int i915_resume(struct drm_device *dev) +static int i915_drm_thaw(struct drm_device *dev)  {  	struct drm_i915_private *dev_priv = dev->dev_private; -	int ret = 0; - -	if (pci_enable_device(dev->pdev)) -		return -1; -	pci_set_master(dev->pdev); - -	i915_restore_state(dev); - -	intel_opregion_init(dev, 1); +	int error = 0;  	/* KMS EnterVT equivalent */  	if (drm_core_check_feature(dev, DRIVER_MODESET)) {  		mutex_lock(&dev->struct_mutex);  		dev_priv->mm.suspended = 0; -		ret = i915_gem_init_ringbuffer(dev); -		if (ret != 0) -			ret = -1; +		error = i915_gem_init_ringbuffer(dev);  		mutex_unlock(&dev->struct_mutex);  		drm_irq_install(dev); -	} -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { +  		/* Resume the modeset for every activated CRTC */  		drm_helper_resume_force_mode(dev);  	}  	dev_priv->modeset_on_lid = 0; -	return ret; +	return error; +} + +static int i915_resume(struct drm_device *dev) +{ +	if (pci_enable_device(dev->pdev)) +		return -EIO; + +	pci_set_master(dev->pdev); + +	i915_restore_state(dev); + +	intel_opregion_init(dev, 1); + +	return i915_drm_thaw(dev);  }  /** @@ -386,57 +408,69 @@ i915_pci_remove(struct pci_dev *pdev)  	drm_put_dev(dev);  } -static int -i915_pci_suspend(struct pci_dev *pdev, pm_message_t state) +static int i915_pm_suspend(struct device *dev)  { -	struct drm_device *dev = pci_get_drvdata(pdev); +	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = pci_get_drvdata(pdev); +	int error; -	return i915_suspend(dev, state); -} +	if (!drm_dev || !drm_dev->dev_private) { +		dev_err(dev, "DRM not initialized, aborting suspend.\n"); +		return -ENODEV; +	} -static int -i915_pci_resume(struct pci_dev *pdev) -{ -	struct drm_device *dev = pci_get_drvdata(pdev); +	error = i915_drm_freeze(drm_dev); +	if (error) +		return error; -	return i915_resume(dev); -} +	i915_drm_suspend(drm_dev); -static int -i915_pm_suspend(struct device *dev) -{ -	return i915_pci_suspend(to_pci_dev(dev), PMSG_SUSPEND); -} +	pci_disable_device(pdev); +	pci_set_power_state(pdev, PCI_D3hot); -static int -i915_pm_resume(struct device *dev) -{ -	return i915_pci_resume(to_pci_dev(dev)); +	return 0;  } -static int -i915_pm_freeze(struct device *dev) +static int i915_pm_resume(struct device *dev)  { -	return i915_pci_suspend(to_pci_dev(dev), PMSG_FREEZE); +	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = pci_get_drvdata(pdev); + +	return i915_resume(drm_dev);  } -static int -i915_pm_thaw(struct device *dev) +static int i915_pm_freeze(struct device *dev)  { -	/* thaw during hibernate, do nothing! */ -	return 0; +	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = pci_get_drvdata(pdev); + +	if (!drm_dev || !drm_dev->dev_private) { +		dev_err(dev, "DRM not initialized, aborting suspend.\n"); +		return -ENODEV; +	} + +	return i915_drm_freeze(drm_dev);  } -static int -i915_pm_poweroff(struct device *dev) +static int i915_pm_thaw(struct device *dev)  { -	return i915_pci_suspend(to_pci_dev(dev), PMSG_HIBERNATE); +	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = pci_get_drvdata(pdev); + +	return i915_drm_thaw(drm_dev);  } -static int -i915_pm_restore(struct device *dev) +static int i915_pm_poweroff(struct device *dev)  { -	return i915_pci_resume(to_pci_dev(dev)); +	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = pci_get_drvdata(pdev); +	int error; + +	error = i915_drm_freeze(drm_dev); +	if (!error) +		i915_drm_suspend(drm_dev); + +	return error;  }  const struct dev_pm_ops i915_pm_ops = { @@ -445,7 +479,7 @@ const struct dev_pm_ops i915_pm_ops = {       .freeze = i915_pm_freeze,       .thaw = i915_pm_thaw,       .poweroff = i915_pm_poweroff, -     .restore = i915_pm_restore, +     .restore = i915_pm_resume,  };  static struct vm_operations_struct i915_gem_vm_ops = { diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 2c1669488b5..b99b6a841d9 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -493,6 +493,15 @@ typedef struct drm_i915_private {  		struct list_head flushing_list;  		/** +		 * List of objects currently pending a GPU write flush. +		 * +		 * All elements on this list will belong to either the +		 * active_list or flushing_list, last_rendering_seqno can +		 * be used to differentiate between the two elements. +		 */ +		struct list_head gpu_write_list; + +		/**  		 * LRU list of objects which are not in the ringbuffer and  		 * are ready to unbind, but are still in the GTT.  		 * @@ -592,6 +601,8 @@ struct drm_i915_gem_object {  	/** This object's place on the active/flushing/inactive lists */  	struct list_head list; +	/** This object's place on GPU write list */ +	struct list_head gpu_write_list;  	/** This object's place on the fenced object LRU */  	struct list_head fence_list; @@ -872,7 +883,7 @@ int i915_gem_attach_phys_object(struct drm_device *dev,  void i915_gem_detach_phys_object(struct drm_device *dev,  				 struct drm_gem_object *obj);  void i915_gem_free_all_phys_object(struct drm_device *dev); -int i915_gem_object_get_pages(struct drm_gem_object *obj); +int i915_gem_object_get_pages(struct drm_gem_object *obj, gfp_t gfpmask);  void i915_gem_object_put_pages(struct drm_gem_object *obj);  void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv);  void i915_gem_object_flush_write_domain(struct drm_gem_object *obj); diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 0c67924ca80..ec8a0d7ffa3 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -277,7 +277,7 @@ i915_gem_shmem_pread_fast(struct drm_device *dev, struct drm_gem_object *obj,  	mutex_lock(&dev->struct_mutex); -	ret = i915_gem_object_get_pages(obj); +	ret = i915_gem_object_get_pages(obj, 0);  	if (ret != 0)  		goto fail_unlock; @@ -321,40 +321,24 @@ fail_unlock:  	return ret;  } -static inline gfp_t -i915_gem_object_get_page_gfp_mask (struct drm_gem_object *obj) -{ -	return mapping_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping); -} - -static inline void -i915_gem_object_set_page_gfp_mask (struct drm_gem_object *obj, gfp_t gfp) -{ -	mapping_set_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping, gfp); -} -  static int  i915_gem_object_get_pages_or_evict(struct drm_gem_object *obj)  {  	int ret; -	ret = i915_gem_object_get_pages(obj); +	ret = i915_gem_object_get_pages(obj, __GFP_NORETRY | __GFP_NOWARN);  	/* If we've insufficient memory to map in the pages, attempt  	 * to make some space by throwing out some old buffers.  	 */  	if (ret == -ENOMEM) {  		struct drm_device *dev = obj->dev; -		gfp_t gfp;  		ret = i915_gem_evict_something(dev, obj->size);  		if (ret)  			return ret; -		gfp = i915_gem_object_get_page_gfp_mask(obj); -		i915_gem_object_set_page_gfp_mask(obj, gfp & ~__GFP_NORETRY); -		ret = i915_gem_object_get_pages(obj); -		i915_gem_object_set_page_gfp_mask (obj, gfp); +		ret = i915_gem_object_get_pages(obj, 0);  	}  	return ret; @@ -790,7 +774,7 @@ i915_gem_shmem_pwrite_fast(struct drm_device *dev, struct drm_gem_object *obj,  	mutex_lock(&dev->struct_mutex); -	ret = i915_gem_object_get_pages(obj); +	ret = i915_gem_object_get_pages(obj, 0);  	if (ret != 0)  		goto fail_unlock; @@ -1568,6 +1552,8 @@ i915_gem_object_move_to_inactive(struct drm_gem_object *obj)  	else  		list_move_tail(&obj_priv->list, &dev_priv->mm.inactive_list); +	BUG_ON(!list_empty(&obj_priv->gpu_write_list)); +  	obj_priv->last_rendering_seqno = 0;  	if (obj_priv->active) {  		obj_priv->active = 0; @@ -1638,7 +1624,8 @@ i915_add_request(struct drm_device *dev, struct drm_file *file_priv,  		struct drm_i915_gem_object *obj_priv, *next;  		list_for_each_entry_safe(obj_priv, next, -					 &dev_priv->mm.flushing_list, list) { +					 &dev_priv->mm.gpu_write_list, +					 gpu_write_list) {  			struct drm_gem_object *obj = obj_priv->obj;  			if ((obj->write_domain & flush_domains) == @@ -1646,6 +1633,7 @@ i915_add_request(struct drm_device *dev, struct drm_file *file_priv,  				uint32_t old_write_domain = obj->write_domain;  				obj->write_domain = 0; +				list_del_init(&obj_priv->gpu_write_list);  				i915_gem_object_move_to_active(obj, seqno);  				trace_i915_gem_object_change_domain(obj, @@ -2100,8 +2088,8 @@ static int  i915_gem_evict_everything(struct drm_device *dev)  {  	drm_i915_private_t *dev_priv = dev->dev_private; -	uint32_t seqno;  	int ret; +	uint32_t seqno;  	bool lists_empty;  	spin_lock(&dev_priv->mm.active_list_lock); @@ -2123,6 +2111,8 @@ i915_gem_evict_everything(struct drm_device *dev)  	if (ret)  		return ret; +	BUG_ON(!list_empty(&dev_priv->mm.flushing_list)); +  	ret = i915_gem_evict_from_inactive_list(dev);  	if (ret)  		return ret; @@ -2230,7 +2220,8 @@ i915_gem_evict_something(struct drm_device *dev, int min_size)  }  int -i915_gem_object_get_pages(struct drm_gem_object *obj) +i915_gem_object_get_pages(struct drm_gem_object *obj, +			  gfp_t gfpmask)  {  	struct drm_i915_gem_object *obj_priv = obj->driver_private;  	int page_count, i; @@ -2256,7 +2247,10 @@ i915_gem_object_get_pages(struct drm_gem_object *obj)  	inode = obj->filp->f_path.dentry->d_inode;  	mapping = inode->i_mapping;  	for (i = 0; i < page_count; i++) { -		page = read_mapping_page(mapping, i, NULL); +		page = read_cache_page_gfp(mapping, i, +					   mapping_gfp_mask (mapping) | +					   __GFP_COLD | +					   gfpmask);  		if (IS_ERR(page)) {  			ret = PTR_ERR(page);  			i915_gem_object_put_pages(obj); @@ -2579,7 +2573,7 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)  	drm_i915_private_t *dev_priv = dev->dev_private;  	struct drm_i915_gem_object *obj_priv = obj->driver_private;  	struct drm_mm_node *free_space; -	bool retry_alloc = false; +	gfp_t gfpmask =  __GFP_NORETRY | __GFP_NOWARN;  	int ret;  	if (obj_priv->madv != I915_MADV_WILLNEED) { @@ -2623,15 +2617,7 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)  	DRM_INFO("Binding object of size %zd at 0x%08x\n",  		 obj->size, obj_priv->gtt_offset);  #endif -	if (retry_alloc) { -		i915_gem_object_set_page_gfp_mask (obj, -						   i915_gem_object_get_page_gfp_mask (obj) & ~__GFP_NORETRY); -	} -	ret = i915_gem_object_get_pages(obj); -	if (retry_alloc) { -		i915_gem_object_set_page_gfp_mask (obj, -						   i915_gem_object_get_page_gfp_mask (obj) | __GFP_NORETRY); -	} +	ret = i915_gem_object_get_pages(obj, gfpmask);  	if (ret) {  		drm_mm_put_block(obj_priv->gtt_space);  		obj_priv->gtt_space = NULL; @@ -2641,9 +2627,9 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)  			ret = i915_gem_evict_something(dev, obj->size);  			if (ret) {  				/* now try to shrink everyone else */ -				if (! retry_alloc) { -				    retry_alloc = true; -				    goto search_free; +				if (gfpmask) { +					gfpmask = 0; +					goto search_free;  				}  				return ret; @@ -2721,7 +2707,7 @@ i915_gem_object_flush_gpu_write_domain(struct drm_gem_object *obj)  	old_write_domain = obj->write_domain;  	i915_gem_flush(dev, 0, obj->write_domain);  	seqno = i915_add_request(dev, NULL, obj->write_domain); -	obj->write_domain = 0; +	BUG_ON(obj->write_domain);  	i915_gem_object_move_to_active(obj, seqno);  	trace_i915_gem_object_change_domain(obj, @@ -3584,6 +3570,9 @@ i915_gem_put_relocs_to_user(struct drm_i915_gem_exec_object2 *exec_list,  	uint32_t reloc_count = 0, i;  	int ret = 0; +	if (relocs == NULL) +	    return 0; +  	for (i = 0; i < buffer_count; i++) {  		struct drm_i915_gem_relocation_entry __user *user_relocs;  		int unwritten; @@ -3673,7 +3662,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  	struct drm_gem_object *batch_obj;  	struct drm_i915_gem_object *obj_priv;  	struct drm_clip_rect *cliprects = NULL; -	struct drm_i915_gem_relocation_entry *relocs; +	struct drm_i915_gem_relocation_entry *relocs = NULL;  	int ret = 0, ret2, i, pinned = 0;  	uint64_t exec_offset;  	uint32_t seqno, flush_domains, reloc_index; @@ -3699,8 +3688,10 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  	if (args->num_cliprects != 0) {  		cliprects = kcalloc(args->num_cliprects, sizeof(*cliprects),  				    GFP_KERNEL); -		if (cliprects == NULL) +		if (cliprects == NULL) { +			ret = -ENOMEM;  			goto pre_mutex_err; +		}  		ret = copy_from_user(cliprects,  				     (struct drm_clip_rect __user *) @@ -3742,6 +3733,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  		if (object_list[i] == NULL) {  			DRM_ERROR("Invalid object handle %d at index %d\n",  				   exec_list[i].handle, i); +			/* prevent error path from reading uninitialized data */ +			args->buffer_count = i + 1;  			ret = -EBADF;  			goto err;  		} @@ -3750,6 +3743,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  		if (obj_priv->in_execbuffer) {  			DRM_ERROR("Object %p appears more than once in object list\n",  				   object_list[i]); +			/* prevent error path from reading uninitialized data */ +			args->buffer_count = i + 1;  			ret = -EBADF;  			goto err;  		} @@ -3863,16 +3858,23 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  		i915_gem_flush(dev,  			       dev->invalidate_domains,  			       dev->flush_domains); -		if (dev->flush_domains) +		if (dev->flush_domains & I915_GEM_GPU_DOMAINS)  			(void)i915_add_request(dev, file_priv,  					       dev->flush_domains);  	}  	for (i = 0; i < args->buffer_count; i++) {  		struct drm_gem_object *obj = object_list[i]; +		struct drm_i915_gem_object *obj_priv = obj->driver_private;  		uint32_t old_write_domain = obj->write_domain;  		obj->write_domain = obj->pending_write_domain; +		if (obj->write_domain) +			list_move_tail(&obj_priv->gpu_write_list, +				       &dev_priv->mm.gpu_write_list); +		else +			list_del_init(&obj_priv->gpu_write_list); +  		trace_i915_gem_object_change_domain(obj,  						    obj->read_domains,  						    old_write_domain); @@ -3946,6 +3948,7 @@ err:  	mutex_unlock(&dev->struct_mutex); +pre_mutex_err:  	/* Copy the updated relocations out regardless of current error  	 * state.  Failure to update the relocs would mean that the next  	 * time userland calls execbuf, it would do so with presumed offset @@ -3960,7 +3963,6 @@ err:  			ret = ret2;  	} -pre_mutex_err:  	drm_free_large(object_list);  	kfree(cliprects); @@ -4383,6 +4385,7 @@ int i915_gem_init_object(struct drm_gem_object *obj)  	obj_priv->obj = obj;  	obj_priv->fence_reg = I915_FENCE_REG_NONE;  	INIT_LIST_HEAD(&obj_priv->list); +	INIT_LIST_HEAD(&obj_priv->gpu_write_list);  	INIT_LIST_HEAD(&obj_priv->fence_list);  	obj_priv->madv = I915_MADV_WILLNEED; @@ -4834,6 +4837,7 @@ i915_gem_load(struct drm_device *dev)  	spin_lock_init(&dev_priv->mm.active_list_lock);  	INIT_LIST_HEAD(&dev_priv->mm.active_list);  	INIT_LIST_HEAD(&dev_priv->mm.flushing_list); +	INIT_LIST_HEAD(&dev_priv->mm.gpu_write_list);  	INIT_LIST_HEAD(&dev_priv->mm.inactive_list);  	INIT_LIST_HEAD(&dev_priv->mm.request_list);  	INIT_LIST_HEAD(&dev_priv->mm.fence_list); @@ -4946,7 +4950,7 @@ void i915_gem_detach_phys_object(struct drm_device *dev,  	if (!obj_priv->phys_obj)  		return; -	ret = i915_gem_object_get_pages(obj); +	ret = i915_gem_object_get_pages(obj, 0);  	if (ret)  		goto out; @@ -5004,7 +5008,7 @@ i915_gem_attach_phys_object(struct drm_device *dev,  	obj_priv->phys_obj = dev_priv->mm.phys_objs[id - 1];  	obj_priv->phys_obj->cur_obj = obj; -	ret = i915_gem_object_get_pages(obj); +	ret = i915_gem_object_get_pages(obj, 0);  	if (ret) {  		DRM_ERROR("failed to get page list\n");  		goto out; diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 89a071a3e6f..a17d6bdfe63 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -309,6 +309,22 @@ irqreturn_t ironlake_irq_handler(struct drm_device *dev)  	if (de_iir & DE_GSE)  		ironlake_opregion_gse_intr(dev); +	if (de_iir & DE_PLANEA_FLIP_DONE) { +		intel_prepare_page_flip(dev, 0); +		intel_finish_page_flip(dev, 0); +	} + +	if (de_iir & DE_PLANEB_FLIP_DONE) { +		intel_prepare_page_flip(dev, 1); +		intel_finish_page_flip(dev, 1); +	} + +	if (de_iir & DE_PIPEA_VBLANK) +		drm_handle_vblank(dev, 0); + +	if (de_iir & DE_PIPEB_VBLANK) +		drm_handle_vblank(dev, 1); +  	/* check event from PCH */  	if ((de_iir & DE_PCH_EVENT) &&  	    (pch_iir & SDE_HOTPLUG_MASK)) { @@ -844,11 +860,11 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)  	if (!(pipeconf & PIPEACONF_ENABLE))  		return -EINVAL; -	if (IS_IRONLAKE(dev)) -		return 0; -  	spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); -	if (IS_I965G(dev)) +	if (IS_IRONLAKE(dev)) +		ironlake_enable_display_irq(dev_priv, (pipe == 0) ?  +					    DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); +	else if (IS_I965G(dev))  		i915_enable_pipestat(dev_priv, pipe,  				     PIPE_START_VBLANK_INTERRUPT_ENABLE);  	else @@ -866,13 +882,14 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;  	unsigned long irqflags; -	if (IS_IRONLAKE(dev)) -		return; -  	spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); -	i915_disable_pipestat(dev_priv, pipe, -			      PIPE_VBLANK_INTERRUPT_ENABLE | -			      PIPE_START_VBLANK_INTERRUPT_ENABLE); +	if (IS_IRONLAKE(dev)) +		ironlake_disable_display_irq(dev_priv, (pipe == 0) ?  +					     DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); +	else +		i915_disable_pipestat(dev_priv, pipe, +				      PIPE_VBLANK_INTERRUPT_ENABLE | +				      PIPE_START_VBLANK_INTERRUPT_ENABLE);  	spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);  } @@ -1015,13 +1032,14 @@ static int ironlake_irq_postinstall(struct drm_device *dev)  {  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;  	/* enable kind of interrupts always enabled */ -	u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT; +	u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT | +			   DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE;  	u32 render_mask = GT_USER_INTERRUPT;  	u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG |  			   SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG;  	dev_priv->irq_mask_reg = ~display_mask; -	dev_priv->de_irq_enable_reg = display_mask; +	dev_priv->de_irq_enable_reg = display_mask | DE_PIPEA_VBLANK | DE_PIPEB_VBLANK;  	/* should always can generate irq */  	I915_WRITE(DEIIR, I915_READ(DEIIR)); diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 847006c5218..ab1bd2d3d3b 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -338,6 +338,7 @@  #define   FBC_CTL_PERIODIC	(1<<30)  #define   FBC_CTL_INTERVAL_SHIFT (16)  #define   FBC_CTL_UNCOMPRESSIBLE (1<<14) +#define   FBC_C3_IDLE		(1<<13)  #define   FBC_CTL_STRIDE_SHIFT	(5)  #define   FBC_CTL_FENCENO	(1<<0)  #define FBC_COMMAND		0x0320c diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index ddefc871edf..79dd4026586 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c @@ -157,6 +157,9 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)  	adpa = I915_READ(PCH_ADPA);  	adpa &= ~ADPA_CRT_HOTPLUG_MASK; +	/* disable HPD first */ +	I915_WRITE(PCH_ADPA, adpa); +	(void)I915_READ(PCH_ADPA);  	adpa |= (ADPA_CRT_HOTPLUG_PERIOD_128 |  			ADPA_CRT_HOTPLUG_WARMUP_10MS | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 45da78ef4a9..b27202d23eb 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -240,33 +240,86 @@ struct intel_limit {  #define IRONLAKE_DOT_MAX         350000  #define IRONLAKE_VCO_MIN         1760000  #define IRONLAKE_VCO_MAX         3510000 -#define IRONLAKE_N_MIN           1 -#define IRONLAKE_N_MAX           6 -#define IRONLAKE_M_MIN           79 -#define IRONLAKE_M_MAX           127  #define IRONLAKE_M1_MIN          12  #define IRONLAKE_M1_MAX          22  #define IRONLAKE_M2_MIN          5  #define IRONLAKE_M2_MAX          9 -#define IRONLAKE_P_SDVO_DAC_MIN  5 -#define IRONLAKE_P_SDVO_DAC_MAX  80 -#define IRONLAKE_P_LVDS_MIN      28 -#define IRONLAKE_P_LVDS_MAX      112 -#define IRONLAKE_P1_MIN          1 -#define IRONLAKE_P1_MAX          8 -#define IRONLAKE_P2_SDVO_DAC_SLOW 10 -#define IRONLAKE_P2_SDVO_DAC_FAST 5 -#define IRONLAKE_P2_LVDS_SLOW    14 /* single channel */ -#define IRONLAKE_P2_LVDS_FAST    7  /* double channel */  #define IRONLAKE_P2_DOT_LIMIT    225000 /* 225Mhz */ -#define IRONLAKE_P_DISPLAY_PORT_MIN	10 -#define IRONLAKE_P_DISPLAY_PORT_MAX	20 -#define IRONLAKE_P2_DISPLAY_PORT_FAST	10 -#define IRONLAKE_P2_DISPLAY_PORT_SLOW	10 -#define IRONLAKE_P2_DISPLAY_PORT_LIMIT	0 -#define IRONLAKE_P1_DISPLAY_PORT_MIN	1 -#define IRONLAKE_P1_DISPLAY_PORT_MAX	2 +/* We have parameter ranges for different type of outputs. */ + +/* DAC & HDMI Refclk 120Mhz */ +#define IRONLAKE_DAC_N_MIN	1 +#define IRONLAKE_DAC_N_MAX	5 +#define IRONLAKE_DAC_M_MIN	79 +#define IRONLAKE_DAC_M_MAX	127 +#define IRONLAKE_DAC_P_MIN	5 +#define IRONLAKE_DAC_P_MAX	80 +#define IRONLAKE_DAC_P1_MIN	1 +#define IRONLAKE_DAC_P1_MAX	8 +#define IRONLAKE_DAC_P2_SLOW	10 +#define IRONLAKE_DAC_P2_FAST	5 + +/* LVDS single-channel 120Mhz refclk */ +#define IRONLAKE_LVDS_S_N_MIN	1 +#define IRONLAKE_LVDS_S_N_MAX	3 +#define IRONLAKE_LVDS_S_M_MIN	79 +#define IRONLAKE_LVDS_S_M_MAX	118 +#define IRONLAKE_LVDS_S_P_MIN	28 +#define IRONLAKE_LVDS_S_P_MAX	112 +#define IRONLAKE_LVDS_S_P1_MIN	2 +#define IRONLAKE_LVDS_S_P1_MAX	8 +#define IRONLAKE_LVDS_S_P2_SLOW	14 +#define IRONLAKE_LVDS_S_P2_FAST	14 + +/* LVDS dual-channel 120Mhz refclk */ +#define IRONLAKE_LVDS_D_N_MIN	1 +#define IRONLAKE_LVDS_D_N_MAX	3 +#define IRONLAKE_LVDS_D_M_MIN	79 +#define IRONLAKE_LVDS_D_M_MAX	127 +#define IRONLAKE_LVDS_D_P_MIN	14 +#define IRONLAKE_LVDS_D_P_MAX	56 +#define IRONLAKE_LVDS_D_P1_MIN	2 +#define IRONLAKE_LVDS_D_P1_MAX	8 +#define IRONLAKE_LVDS_D_P2_SLOW	7 +#define IRONLAKE_LVDS_D_P2_FAST	7 + +/* LVDS single-channel 100Mhz refclk */ +#define IRONLAKE_LVDS_S_SSC_N_MIN	1 +#define IRONLAKE_LVDS_S_SSC_N_MAX	2 +#define IRONLAKE_LVDS_S_SSC_M_MIN	79 +#define IRONLAKE_LVDS_S_SSC_M_MAX	126 +#define IRONLAKE_LVDS_S_SSC_P_MIN	28 +#define IRONLAKE_LVDS_S_SSC_P_MAX	112 +#define IRONLAKE_LVDS_S_SSC_P1_MIN	2 +#define IRONLAKE_LVDS_S_SSC_P1_MAX	8 +#define IRONLAKE_LVDS_S_SSC_P2_SLOW	14 +#define IRONLAKE_LVDS_S_SSC_P2_FAST	14 + +/* LVDS dual-channel 100Mhz refclk */ +#define IRONLAKE_LVDS_D_SSC_N_MIN	1 +#define IRONLAKE_LVDS_D_SSC_N_MAX	3 +#define IRONLAKE_LVDS_D_SSC_M_MIN	79 +#define IRONLAKE_LVDS_D_SSC_M_MAX	126 +#define IRONLAKE_LVDS_D_SSC_P_MIN	14 +#define IRONLAKE_LVDS_D_SSC_P_MAX	42 +#define IRONLAKE_LVDS_D_SSC_P1_MIN	2 +#define IRONLAKE_LVDS_D_SSC_P1_MAX	6 +#define IRONLAKE_LVDS_D_SSC_P2_SLOW	7 +#define IRONLAKE_LVDS_D_SSC_P2_FAST	7 + +/* DisplayPort */ +#define IRONLAKE_DP_N_MIN		1 +#define IRONLAKE_DP_N_MAX		2 +#define IRONLAKE_DP_M_MIN		81 +#define IRONLAKE_DP_M_MAX		90 +#define IRONLAKE_DP_P_MIN		10 +#define IRONLAKE_DP_P_MAX		20 +#define IRONLAKE_DP_P2_FAST		10 +#define IRONLAKE_DP_P2_SLOW		10 +#define IRONLAKE_DP_P2_LIMIT		0 +#define IRONLAKE_DP_P1_MIN		1 +#define IRONLAKE_DP_P1_MAX		2  static bool  intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, @@ -474,33 +527,78 @@ static const intel_limit_t intel_limits_pineview_lvds = {  	.find_pll = intel_find_best_PLL,  }; -static const intel_limit_t intel_limits_ironlake_sdvo = { +static const intel_limit_t intel_limits_ironlake_dac = { +	.dot = { .min = IRONLAKE_DOT_MIN,          .max = IRONLAKE_DOT_MAX }, +	.vco = { .min = IRONLAKE_VCO_MIN,          .max = IRONLAKE_VCO_MAX }, +	.n   = { .min = IRONLAKE_DAC_N_MIN,        .max = IRONLAKE_DAC_N_MAX }, +	.m   = { .min = IRONLAKE_DAC_M_MIN,        .max = IRONLAKE_DAC_M_MAX }, +	.m1  = { .min = IRONLAKE_M1_MIN,           .max = IRONLAKE_M1_MAX }, +	.m2  = { .min = IRONLAKE_M2_MIN,           .max = IRONLAKE_M2_MAX }, +	.p   = { .min = IRONLAKE_DAC_P_MIN,	   .max = IRONLAKE_DAC_P_MAX }, +	.p1  = { .min = IRONLAKE_DAC_P1_MIN,       .max = IRONLAKE_DAC_P1_MAX }, +	.p2  = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, +		 .p2_slow = IRONLAKE_DAC_P2_SLOW, +		 .p2_fast = IRONLAKE_DAC_P2_FAST }, +	.find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_single_lvds = { +	.dot = { .min = IRONLAKE_DOT_MIN,          .max = IRONLAKE_DOT_MAX }, +	.vco = { .min = IRONLAKE_VCO_MIN,          .max = IRONLAKE_VCO_MAX }, +	.n   = { .min = IRONLAKE_LVDS_S_N_MIN,     .max = IRONLAKE_LVDS_S_N_MAX }, +	.m   = { .min = IRONLAKE_LVDS_S_M_MIN,     .max = IRONLAKE_LVDS_S_M_MAX }, +	.m1  = { .min = IRONLAKE_M1_MIN,           .max = IRONLAKE_M1_MAX }, +	.m2  = { .min = IRONLAKE_M2_MIN,           .max = IRONLAKE_M2_MAX }, +	.p   = { .min = IRONLAKE_LVDS_S_P_MIN,     .max = IRONLAKE_LVDS_S_P_MAX }, +	.p1  = { .min = IRONLAKE_LVDS_S_P1_MIN,    .max = IRONLAKE_LVDS_S_P1_MAX }, +	.p2  = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, +		 .p2_slow = IRONLAKE_LVDS_S_P2_SLOW, +		 .p2_fast = IRONLAKE_LVDS_S_P2_FAST }, +	.find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_dual_lvds = { +	.dot = { .min = IRONLAKE_DOT_MIN,          .max = IRONLAKE_DOT_MAX }, +	.vco = { .min = IRONLAKE_VCO_MIN,          .max = IRONLAKE_VCO_MAX }, +	.n   = { .min = IRONLAKE_LVDS_D_N_MIN,     .max = IRONLAKE_LVDS_D_N_MAX }, +	.m   = { .min = IRONLAKE_LVDS_D_M_MIN,     .max = IRONLAKE_LVDS_D_M_MAX }, +	.m1  = { .min = IRONLAKE_M1_MIN,           .max = IRONLAKE_M1_MAX }, +	.m2  = { .min = IRONLAKE_M2_MIN,           .max = IRONLAKE_M2_MAX }, +	.p   = { .min = IRONLAKE_LVDS_D_P_MIN,     .max = IRONLAKE_LVDS_D_P_MAX }, +	.p1  = { .min = IRONLAKE_LVDS_D_P1_MIN,    .max = IRONLAKE_LVDS_D_P1_MAX }, +	.p2  = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, +		 .p2_slow = IRONLAKE_LVDS_D_P2_SLOW, +		 .p2_fast = IRONLAKE_LVDS_D_P2_FAST }, +	.find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_single_lvds_100m = {  	.dot = { .min = IRONLAKE_DOT_MIN,          .max = IRONLAKE_DOT_MAX },  	.vco = { .min = IRONLAKE_VCO_MIN,          .max = IRONLAKE_VCO_MAX }, -	.n   = { .min = IRONLAKE_N_MIN,            .max = IRONLAKE_N_MAX }, -	.m   = { .min = IRONLAKE_M_MIN,            .max = IRONLAKE_M_MAX }, +	.n   = { .min = IRONLAKE_LVDS_S_SSC_N_MIN, .max = IRONLAKE_LVDS_S_SSC_N_MAX }, +	.m   = { .min = IRONLAKE_LVDS_S_SSC_M_MIN, .max = IRONLAKE_LVDS_S_SSC_M_MAX },  	.m1  = { .min = IRONLAKE_M1_MIN,           .max = IRONLAKE_M1_MAX },  	.m2  = { .min = IRONLAKE_M2_MIN,           .max = IRONLAKE_M2_MAX }, -	.p   = { .min = IRONLAKE_P_SDVO_DAC_MIN,   .max = IRONLAKE_P_SDVO_DAC_MAX }, -	.p1  = { .min = IRONLAKE_P1_MIN,           .max = IRONLAKE_P1_MAX }, +	.p   = { .min = IRONLAKE_LVDS_S_SSC_P_MIN, .max = IRONLAKE_LVDS_S_SSC_P_MAX }, +	.p1  = { .min = IRONLAKE_LVDS_S_SSC_P1_MIN,.max = IRONLAKE_LVDS_S_SSC_P1_MAX },  	.p2  = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, -		 .p2_slow = IRONLAKE_P2_SDVO_DAC_SLOW, -		 .p2_fast = IRONLAKE_P2_SDVO_DAC_FAST }, +		 .p2_slow = IRONLAKE_LVDS_S_SSC_P2_SLOW, +		 .p2_fast = IRONLAKE_LVDS_S_SSC_P2_FAST },  	.find_pll = intel_g4x_find_best_PLL,  }; -static const intel_limit_t intel_limits_ironlake_lvds = { +static const intel_limit_t intel_limits_ironlake_dual_lvds_100m = {  	.dot = { .min = IRONLAKE_DOT_MIN,          .max = IRONLAKE_DOT_MAX },  	.vco = { .min = IRONLAKE_VCO_MIN,          .max = IRONLAKE_VCO_MAX }, -	.n   = { .min = IRONLAKE_N_MIN,            .max = IRONLAKE_N_MAX }, -	.m   = { .min = IRONLAKE_M_MIN,            .max = IRONLAKE_M_MAX }, +	.n   = { .min = IRONLAKE_LVDS_D_SSC_N_MIN, .max = IRONLAKE_LVDS_D_SSC_N_MAX }, +	.m   = { .min = IRONLAKE_LVDS_D_SSC_M_MIN, .max = IRONLAKE_LVDS_D_SSC_M_MAX },  	.m1  = { .min = IRONLAKE_M1_MIN,           .max = IRONLAKE_M1_MAX },  	.m2  = { .min = IRONLAKE_M2_MIN,           .max = IRONLAKE_M2_MAX }, -	.p   = { .min = IRONLAKE_P_LVDS_MIN,       .max = IRONLAKE_P_LVDS_MAX }, -	.p1  = { .min = IRONLAKE_P1_MIN,           .max = IRONLAKE_P1_MAX }, +	.p   = { .min = IRONLAKE_LVDS_D_SSC_P_MIN, .max = IRONLAKE_LVDS_D_SSC_P_MAX }, +	.p1  = { .min = IRONLAKE_LVDS_D_SSC_P1_MIN,.max = IRONLAKE_LVDS_D_SSC_P1_MAX },  	.p2  = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, -		 .p2_slow = IRONLAKE_P2_LVDS_SLOW, -		 .p2_fast = IRONLAKE_P2_LVDS_FAST }, +		 .p2_slow = IRONLAKE_LVDS_D_SSC_P2_SLOW, +		 .p2_fast = IRONLAKE_LVDS_D_SSC_P2_FAST },  	.find_pll = intel_g4x_find_best_PLL,  }; @@ -509,34 +607,53 @@ static const intel_limit_t intel_limits_ironlake_display_port = {                   .max = IRONLAKE_DOT_MAX },          .vco = { .min = IRONLAKE_VCO_MIN,                   .max = IRONLAKE_VCO_MAX}, -        .n   = { .min = IRONLAKE_N_MIN, -                 .max = IRONLAKE_N_MAX }, -        .m   = { .min = IRONLAKE_M_MIN, -                 .max = IRONLAKE_M_MAX }, +        .n   = { .min = IRONLAKE_DP_N_MIN, +                 .max = IRONLAKE_DP_N_MAX }, +        .m   = { .min = IRONLAKE_DP_M_MIN, +                 .max = IRONLAKE_DP_M_MAX },          .m1  = { .min = IRONLAKE_M1_MIN,                   .max = IRONLAKE_M1_MAX },          .m2  = { .min = IRONLAKE_M2_MIN,                   .max = IRONLAKE_M2_MAX }, -        .p   = { .min = IRONLAKE_P_DISPLAY_PORT_MIN, -                 .max = IRONLAKE_P_DISPLAY_PORT_MAX }, -        .p1  = { .min = IRONLAKE_P1_DISPLAY_PORT_MIN, -                 .max = IRONLAKE_P1_DISPLAY_PORT_MAX}, -        .p2  = { .dot_limit = IRONLAKE_P2_DISPLAY_PORT_LIMIT, -                 .p2_slow = IRONLAKE_P2_DISPLAY_PORT_SLOW, -                 .p2_fast = IRONLAKE_P2_DISPLAY_PORT_FAST }, +        .p   = { .min = IRONLAKE_DP_P_MIN, +                 .max = IRONLAKE_DP_P_MAX }, +        .p1  = { .min = IRONLAKE_DP_P1_MIN, +                 .max = IRONLAKE_DP_P1_MAX}, +        .p2  = { .dot_limit = IRONLAKE_DP_P2_LIMIT, +                 .p2_slow = IRONLAKE_DP_P2_SLOW, +                 .p2_fast = IRONLAKE_DP_P2_FAST },          .find_pll = intel_find_pll_ironlake_dp,  };  static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc)  { +	struct drm_device *dev = crtc->dev; +	struct drm_i915_private *dev_priv = dev->dev_private;  	const intel_limit_t *limit; -	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) -		limit = &intel_limits_ironlake_lvds; -	else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) || +	int refclk = 120; + +	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { +		if (dev_priv->lvds_use_ssc && dev_priv->lvds_ssc_freq == 100) +			refclk = 100; + +		if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == +		    LVDS_CLKB_POWER_UP) { +			/* LVDS dual channel */ +			if (refclk == 100) +				limit = &intel_limits_ironlake_dual_lvds_100m; +			else +				limit = &intel_limits_ironlake_dual_lvds; +		} else { +			if (refclk == 100) +				limit = &intel_limits_ironlake_single_lvds_100m; +			else +				limit = &intel_limits_ironlake_single_lvds; +		} +	} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||  			HAS_eDP)  		limit = &intel_limits_ironlake_display_port;  	else -		limit = &intel_limits_ironlake_sdvo; +		limit = &intel_limits_ironlake_dac;  	return limit;  } @@ -914,6 +1031,8 @@ static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)  	/* enable it... */  	fbc_ctl = FBC_CTL_EN | FBC_CTL_PERIODIC; +	if (IS_I945GM(dev)) +		fbc_ctl |= FBC_C3_IDLE; /* 945 needs special SR handling */  	fbc_ctl |= (dev_priv->cfb_pitch & 0xff) << FBC_CTL_STRIDE_SHIFT;  	fbc_ctl |= (interval & 0x2fff) << FBC_CTL_INTERVAL_SHIFT;  	if (obj_priv->tiling_mode != I915_TILING_NONE) @@ -1638,6 +1757,7 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode)  	case DRM_MODE_DPMS_OFF:  		DRM_DEBUG_KMS("crtc %d dpms off\n", pipe); +		drm_vblank_off(dev, pipe);  		/* Disable display plane */  		temp = I915_READ(dspcntr_reg);  		if ((temp & DISPLAY_PLANE_ENABLE) != 0) { @@ -2519,6 +2639,10 @@ static void g4x_update_wm(struct drm_device *dev,  int planea_clock,  		sr_entries = roundup(sr_entries / cacheline_size, 1);  		DRM_DEBUG("self-refresh entries: %d\n", sr_entries);  		I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); +	} else { +		/* Turn off self refresh if both pipes are enabled */ +		I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) +					& ~FW_BLC_SELF_EN);  	}  	DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, SR %d\n", @@ -2562,6 +2686,10 @@ static void i965_update_wm(struct drm_device *dev, int planea_clock,  			srwm = 1;  		srwm &= 0x3f;  		I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); +	} else { +		/* Turn off self refresh if both pipes are enabled */ +		I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) +					& ~FW_BLC_SELF_EN);  	}  	DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n", @@ -2630,6 +2758,10 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,  		if (srwm < 0)  			srwm = 1;  		I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f)); +	} else { +		/* Turn off self refresh if both pipes are enabled */ +		I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) +					& ~FW_BLC_SELF_EN);  	}  	DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n", @@ -3949,7 +4081,8 @@ static void intel_crtc_destroy(struct drm_crtc *crtc)  struct intel_unpin_work {  	struct work_struct work;  	struct drm_device *dev; -	struct drm_gem_object *obj; +	struct drm_gem_object *old_fb_obj; +	struct drm_gem_object *pending_flip_obj;  	struct drm_pending_vblank_event *event;  	int pending;  }; @@ -3960,8 +4093,9 @@ static void intel_unpin_work_fn(struct work_struct *__work)  		container_of(__work, struct intel_unpin_work, work);  	mutex_lock(&work->dev->struct_mutex); -	i915_gem_object_unpin(work->obj); -	drm_gem_object_unreference(work->obj); +	i915_gem_object_unpin(work->old_fb_obj); +	drm_gem_object_unreference(work->pending_flip_obj); +	drm_gem_object_unreference(work->old_fb_obj);  	mutex_unlock(&work->dev->struct_mutex);  	kfree(work);  } @@ -3984,6 +4118,12 @@ void intel_finish_page_flip(struct drm_device *dev, int pipe)  	spin_lock_irqsave(&dev->event_lock, flags);  	work = intel_crtc->unpin_work;  	if (work == NULL || !work->pending) { +		if (work && !work->pending) { +			obj_priv = work->pending_flip_obj->driver_private; +			DRM_DEBUG_DRIVER("flip finish: %p (%d) not pending?\n", +					 obj_priv, +					 atomic_read(&obj_priv->pending_flip)); +		}  		spin_unlock_irqrestore(&dev->event_lock, flags);  		return;  	} @@ -4004,8 +4144,11 @@ void intel_finish_page_flip(struct drm_device *dev, int pipe)  	spin_unlock_irqrestore(&dev->event_lock, flags); -	obj_priv = work->obj->driver_private; -	if (atomic_dec_and_test(&obj_priv->pending_flip)) +	obj_priv = work->pending_flip_obj->driver_private; + +	/* Initial scanout buffer will have a 0 pending flip count */ +	if ((atomic_read(&obj_priv->pending_flip) == 0) || +	    atomic_dec_and_test(&obj_priv->pending_flip))  		DRM_WAKEUP(&dev_priv->pending_flip_queue);  	schedule_work(&work->work);  } @@ -4018,8 +4161,11 @@ void intel_prepare_page_flip(struct drm_device *dev, int plane)  	unsigned long flags;  	spin_lock_irqsave(&dev->event_lock, flags); -	if (intel_crtc->unpin_work) +	if (intel_crtc->unpin_work) {  		intel_crtc->unpin_work->pending = 1; +	} else { +		DRM_DEBUG_DRIVER("preparing flip with no unpin work?\n"); +	}  	spin_unlock_irqrestore(&dev->event_lock, flags);  } @@ -4035,7 +4181,8 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);  	struct intel_unpin_work *work;  	unsigned long flags; -	int ret; +	int pipesrc_reg = (intel_crtc->pipe == 0) ? PIPEASRC : PIPEBSRC; +	int ret, pipesrc;  	RING_LOCALS;  	work = kzalloc(sizeof *work, GFP_KERNEL); @@ -4047,12 +4194,13 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	work->event = event;  	work->dev = crtc->dev;  	intel_fb = to_intel_framebuffer(crtc->fb); -	work->obj = intel_fb->obj; +	work->old_fb_obj = intel_fb->obj;  	INIT_WORK(&work->work, intel_unpin_work_fn);  	/* We borrow the event spin lock for protecting unpin_work */  	spin_lock_irqsave(&dev->event_lock, flags);  	if (intel_crtc->unpin_work) { +		DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");  		spin_unlock_irqrestore(&dev->event_lock, flags);  		kfree(work);  		mutex_unlock(&dev->struct_mutex); @@ -4066,19 +4214,24 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	ret = intel_pin_and_fence_fb_obj(dev, obj);  	if (ret != 0) { +		DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n", +			  obj->driver_private);  		kfree(work); +		intel_crtc->unpin_work = NULL;  		mutex_unlock(&dev->struct_mutex);  		return ret;  	} -	/* Reference the old fb object for the scheduled work. */ -	drm_gem_object_reference(work->obj); +	/* Reference the objects for the scheduled work. */ +	drm_gem_object_reference(work->old_fb_obj); +	drm_gem_object_reference(obj);  	crtc->fb = fb;  	i915_gem_object_flush_write_domain(obj);  	drm_vblank_get(dev, intel_crtc->pipe);  	obj_priv = obj->driver_private;  	atomic_inc(&obj_priv->pending_flip); +	work->pending_flip_obj = obj;  	BEGIN_LP_RING(4);  	OUT_RING(MI_DISPLAY_FLIP | @@ -4086,7 +4239,8 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	OUT_RING(fb->pitch);  	if (IS_I965G(dev)) {  		OUT_RING(obj_priv->gtt_offset | obj_priv->tiling_mode); -		OUT_RING((fb->width << 16) | fb->height); +		pipesrc = I915_READ(pipesrc_reg);  +		OUT_RING(pipesrc & 0x0fff0fff);  	} else {  		OUT_RING(obj_priv->gtt_offset);  		OUT_RING(MI_NOOP); diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index 371d753e362..aaabbcbe590 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c @@ -148,7 +148,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,  	mutex_lock(&dev->struct_mutex); -	ret = i915_gem_object_pin(fbo, PAGE_SIZE); +	ret = i915_gem_object_pin(fbo, 64*1024);  	if (ret) {  		DRM_ERROR("failed to pin fb: %d\n", ret);  		goto out_unref; diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index aa74e59bec6..b1d0acbae4e 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c @@ -611,7 +611,7 @@ static const struct dmi_system_id bad_lid_status[] = {  	{  		.ident = "Samsung SX20S",  		.matches = { -			DMI_MATCH(DMI_SYS_VENDOR, "Phoenix Technologies LTD"), +			DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"),  			DMI_MATCH(DMI_BOARD_NAME, "SX20S"),  		},  	}, @@ -623,6 +623,13 @@ static const struct dmi_system_id bad_lid_status[] = {  		},  	},  	{ +		.ident = "Aspire 1810T", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +			DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1810T"), +		}, +	}, +	{  		.ident = "PC-81005",  		.matches = {  			DMI_MATCH(DMI_SYS_VENDOR, "MALATA"), @@ -643,7 +650,7 @@ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connect  {  	enum drm_connector_status status = connector_status_connected; -	if (!acpi_lid_open() && !dmi_check_system(bad_lid_status)) +	if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())  		status = connector_status_disconnected;  	return status; diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index eaacfd0920d..82678d30ab0 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -2345,6 +2345,14 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  		connector->connector_type = DRM_MODE_CONNECTOR_VGA;  		intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |  					(1 << INTEL_ANALOG_CLONE_BIT); +	} else if (flags & SDVO_OUTPUT_CVBS0) { + +		sdvo_priv->controlled_output = SDVO_OUTPUT_CVBS0; +		encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; +		connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; +		sdvo_priv->is_tv = true; +		intel_output->needs_tv_clock = true; +		intel_output->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;  	} else if (flags & SDVO_OUTPUT_LVDS0) {  		sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS0; diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c index 1cf488247a1..48227e74475 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c @@ -90,21 +90,21 @@ int nouveau_hybrid_setup(struct drm_device *dev)  {  	int result; -	if (nouveau_dsm(dev, NOUVEAU_DSM_ACTIVE, NOUVEAU_DSM_ACTIVE_QUERY, +	if (nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STATE,  								&result))  		return -ENODEV;  	NV_INFO(dev, "_DSM hardware status gave 0x%x\n", result); -	if (result & 0x1) {	/* Stamina mode - disable the external GPU */ +	if (result) { /* Ensure that the external GPU is enabled */ +		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_SPEED, NULL); +		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_SPEED, +									NULL); +	} else { /* Stamina mode - disable the external GPU */  		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_STAMINA,  									NULL);  		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STAMINA,  									NULL); -	} else {		/* Ensure that the external GPU is enabled */ -		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_SPEED, NULL); -		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_SPEED, -									NULL);  	}  	return 0; diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c index ba143972769..2cd0fad17da 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.c +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c @@ -310,63 +310,22 @@ valid_reg(struct nvbios *bios, uint32_t reg)  	struct drm_device *dev = bios->dev;  	/* C51 has misaligned regs on purpose. Marvellous */ -	if (reg & 0x2 || (reg & 0x1 && dev_priv->VBIOS.pub.chip_version != 0x51)) { -		NV_ERROR(dev, "========== misaligned reg 0x%08X ==========\n", -			 reg); -		return 0; -	} -	/* -	 * Warn on C51 regs that have not been verified accessible in -	 * mmiotracing -	 */ +	if (reg & 0x2 || +	    (reg & 0x1 && dev_priv->VBIOS.pub.chip_version != 0x51)) +		NV_ERROR(dev, "======= misaligned reg 0x%08X =======\n", reg); + +	/* warn on C51 regs that haven't been verified accessible in tracing */  	if (reg & 0x1 && dev_priv->VBIOS.pub.chip_version == 0x51 &&  	    reg != 0x130d && reg != 0x1311 && reg != 0x60081d)  		NV_WARN(dev, "=== C51 misaligned reg 0x%08X not verified ===\n",  			reg); -	/* Trust the init scripts on G80 */ -	if (dev_priv->card_type >= NV_50) -		return 1; - -	#define WITHIN(x, y, z) ((x >= y) && (x < y + z)) -	if (WITHIN(reg, NV_PMC_OFFSET, NV_PMC_SIZE)) -		return 1; -	if (WITHIN(reg, NV_PBUS_OFFSET, NV_PBUS_SIZE)) -		return 1; -	if (WITHIN(reg, NV_PFIFO_OFFSET, NV_PFIFO_SIZE)) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version >= 0x30 && -	    (WITHIN(reg, 0x4000, 0x600) || reg == 0x00004600)) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version >= 0x40 && -						WITHIN(reg, 0xc000, 0x48)) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version >= 0x17 && reg == 0x0000d204) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version >= 0x40) { -		if (reg == 0x00011014 || reg == 0x00020328) -			return 1; -		if (WITHIN(reg, 0x88000, NV_PBUS_SIZE)) /* new PBUS */ -			return 1; +	if (reg >= (8*1024*1024)) { +		NV_ERROR(dev, "=== reg 0x%08x out of mapped bounds ===\n", reg); +		return 0;  	} -	if (WITHIN(reg, NV_PFB_OFFSET, NV_PFB_SIZE)) -		return 1; -	if (WITHIN(reg, NV_PEXTDEV_OFFSET, NV_PEXTDEV_SIZE)) -		return 1; -	if (WITHIN(reg, NV_PCRTC0_OFFSET, NV_PCRTC0_SIZE * 2)) -		return 1; -	if (WITHIN(reg, NV_PRAMDAC0_OFFSET, NV_PRAMDAC0_SIZE * 2)) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version >= 0x17 && reg == 0x0070fff0) -		return 1; -	if (dev_priv->VBIOS.pub.chip_version == 0x51 && -				WITHIN(reg, NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE)) -		return 1; -	#undef WITHIN - -	NV_ERROR(dev, "========== unknown reg 0x%08X ==========\n", reg); -	return 0; +	return 1;  }  static bool @@ -1906,7 +1865,7 @@ init_compute_mem(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)  	struct drm_nouveau_private *dev_priv = bios->dev->dev_private; -	if (dev_priv->card_type >= NV_50) +	if (dev_priv->card_type >= NV_40)  		return 1;  	/* @@ -3196,16 +3155,25 @@ static int call_lvds_manufacturer_script(struct drm_device *dev, struct dcb_entr  	}  #ifdef __powerpc__  	/* Powerbook specific quirks */ -	if (script == LVDS_RESET && ((dev->pci_device & 0xffff) == 0x0179 || (dev->pci_device & 0xffff) == 0x0329)) -		nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72); -	if ((dev->pci_device & 0xffff) == 0x0179 || (dev->pci_device & 0xffff) == 0x0189 || (dev->pci_device & 0xffff) == 0x0329) { -		if (script == LVDS_PANEL_ON) { -			bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) | (1 << 31)); -			bios_wr32(bios, NV_PCRTC_GPIO_EXT, bios_rd32(bios, NV_PCRTC_GPIO_EXT) | 1); -		} -		if (script == LVDS_PANEL_OFF) { -			bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) & ~(1 << 31)); -			bios_wr32(bios, NV_PCRTC_GPIO_EXT, bios_rd32(bios, NV_PCRTC_GPIO_EXT) & ~3); +	if ((dev->pci_device & 0xffff) == 0x0179 || +	    (dev->pci_device & 0xffff) == 0x0189 || +	    (dev->pci_device & 0xffff) == 0x0329) { +		if (script == LVDS_RESET) { +			nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72); + +		} else if (script == LVDS_PANEL_ON) { +			bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, +				  bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) +				  | (1 << 31)); +			bios_wr32(bios, NV_PCRTC_GPIO_EXT, +				  bios_rd32(bios, NV_PCRTC_GPIO_EXT) | 1); + +		} else if (script == LVDS_PANEL_OFF) { +			bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, +				  bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) +				  & ~(1 << 31)); +			bios_wr32(bios, NV_PCRTC_GPIO_EXT, +				  bios_rd32(bios, NV_PCRTC_GPIO_EXT) & ~3);  		}  	}  #endif @@ -3797,7 +3765,6 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  	 */  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	struct init_exec iexec = {true, false};  	struct nvbios *bios = &dev_priv->VBIOS;  	uint8_t *table = &bios->data[bios->display.script_table_ptr];  	uint8_t *otable = NULL; @@ -3877,8 +3844,6 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  	} -	bios->display.output = dcbent; -  	if (pxclk == 0) {  		script = ROM16(otable[6]);  		if (!script) { @@ -3887,7 +3852,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 0\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk == -1) {  		script = ROM16(otable[8]); @@ -3897,7 +3862,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 1\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk == -2) {  		if (table[4] >= 12) @@ -3910,7 +3875,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 2\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk > 0) {  		script = ROM16(otable[table[4] + i*6 + 2]); @@ -3922,7 +3887,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing clock script 0\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk < 0) {  		script = ROM16(otable[table[4] + i*6 + 4]); @@ -3934,7 +3899,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing clock script 1\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	}  	return 0; @@ -5434,52 +5399,49 @@ static bool  parse_dcb15_entry(struct drm_device *dev, struct parsed_dcb *dcb,  		  uint32_t conn, uint32_t conf, struct dcb_entry *entry)  { -	if (conn != 0xf0003f00 && conn != 0xf2247f10 && conn != 0xf2204001 && -	    conn != 0xf2204301 && conn != 0xf2204311 && conn != 0xf2208001 && -	    conn != 0xf2244001 && conn != 0xf2244301 && conn != 0xf2244311 && -	    conn != 0xf4204011 && conn != 0xf4208011 && conn != 0xf4248011 && -	    conn != 0xf2045ff2 && conn != 0xf2045f14 && conn != 0xf207df14 && -	    conn != 0xf2205004 && conn != 0xf2209004) { -		NV_ERROR(dev, "Unknown DCB 1.5 entry, please report\n"); - -		/* cause output setting to fail for !TV, so message is seen */ -		if ((conn & 0xf) != 0x1) -			dcb->entries = 0; - -		return false; -	} -	/* most of the below is a "best guess" atm */ -	entry->type = conn & 0xf; -	if (entry->type == 2) -		/* another way of specifying straps based lvds... */ +	switch (conn & 0x0000000f) { +	case 0: +		entry->type = OUTPUT_ANALOG; +		break; +	case 1: +		entry->type = OUTPUT_TV; +		break; +	case 2: +	case 3:  		entry->type = OUTPUT_LVDS; -	if (entry->type == 4) { /* digital */ -		if (conn & 0x10) -			entry->type = OUTPUT_LVDS; -		else +		break; +	case 4: +		switch ((conn & 0x000000f0) >> 4) { +		case 0:  			entry->type = OUTPUT_TMDS; +			break; +		case 1: +			entry->type = OUTPUT_LVDS; +			break; +		default: +			NV_ERROR(dev, "Unknown DCB subtype 4/%d\n", +				 (conn & 0x000000f0) >> 4); +			return false; +		} +		break; +	default: +		NV_ERROR(dev, "Unknown DCB type %d\n", conn & 0x0000000f); +		return false;  	} -	/* what's in bits 5-13? could be some encoder maker thing, in tv case */ -	entry->i2c_index = (conn >> 14) & 0xf; -	/* raw heads field is in range 0-1, so move to 1-2 */ -	entry->heads = ((conn >> 18) & 0x7) + 1; -	entry->location = (conn >> 21) & 0xf; -	/* unused: entry->bus = (conn >> 25) & 0x7; */ -	/* set or to be same as heads -- hopefully safe enough */ -	entry->or = entry->heads; + +	entry->i2c_index = (conn & 0x0003c000) >> 14; +	entry->heads = ((conn & 0x001c0000) >> 18) + 1; +	entry->or = entry->heads; /* same as heads, hopefully safe enough */ +	entry->location = (conn & 0x01e00000) >> 21; +	entry->bus = (conn & 0x0e000000) >> 25;  	entry->duallink_possible = false;  	switch (entry->type) {  	case OUTPUT_ANALOG:  		entry->crtconf.maxfreq = (conf & 0xffff) * 10;  		break; -	case OUTPUT_LVDS: -		/* -		 * This is probably buried in conn's unknown bits. -		 * This will upset EDID-ful models, if they exist -		 */ -		entry->lvdsconf.use_straps_for_mode = true; -		entry->lvdsconf.use_power_scripts = true; +	case OUTPUT_TV: +		entry->tvconf.has_component_output = false;  		break;  	case OUTPUT_TMDS:  		/* @@ -5488,8 +5450,12 @@ parse_dcb15_entry(struct drm_device *dev, struct parsed_dcb *dcb,  		 */  		fabricate_vga_output(dcb, entry->i2c_index, entry->heads);  		break; -	case OUTPUT_TV: -		entry->tvconf.has_component_output = false; +	case OUTPUT_LVDS: +		if ((conn & 0x00003f00) != 0x10) +			entry->lvdsconf.use_straps_for_mode = true; +		entry->lvdsconf.use_power_scripts = true; +		break; +	default:  		break;  	} @@ -5564,11 +5530,13 @@ void merge_like_dcb_entries(struct drm_device *dev, struct parsed_dcb *dcb)  	dcb->entries = newentries;  } -static int parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads) +static int +parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)  { +	struct drm_nouveau_private *dev_priv = dev->dev_private;  	struct bios_parsed_dcb *bdcb = &bios->bdcb;  	struct parsed_dcb *dcb; -	uint16_t dcbptr, i2ctabptr = 0; +	uint16_t dcbptr = 0, i2ctabptr = 0;  	uint8_t *dcbtable;  	uint8_t headerlen = 0x4, entries = DCB_MAX_NUM_ENTRIES;  	bool configblock = true; @@ -5579,16 +5547,18 @@ static int parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool two  	dcb->entries = 0;  	/* get the offset from 0x36 */ -	dcbptr = ROM16(bios->data[0x36]); +	if (dev_priv->card_type > NV_04) { +		dcbptr = ROM16(bios->data[0x36]); +		if (dcbptr == 0x0000) +			NV_WARN(dev, "No output data (DCB) found in BIOS\n"); +	} +	/* this situation likely means a really old card, pre DCB */  	if (dcbptr == 0x0) { -		NV_WARN(dev, "No output data (DCB) found in BIOS, " -			       "assuming a CRT output exists\n"); -		/* this situation likely means a really old card, pre DCB */ +		NV_INFO(dev, "Assuming a CRT output exists\n");  		fabricate_vga_output(dcb, LEGACY_I2C_CRT, 1); -		if (nv04_tv_identify(dev, -				     bios->legacy.i2c_indices.tv) >= 0) +		if (nv04_tv_identify(dev, bios->legacy.i2c_indices.tv) >= 0)  			fabricate_tv_output(dcb, twoHeads);  		return 0; @@ -5891,10 +5861,13 @@ nouveau_bios_run_init_table(struct drm_device *dev, uint16_t table,  	struct drm_nouveau_private *dev_priv = dev->dev_private;  	struct nvbios *bios = &dev_priv->VBIOS;  	struct init_exec iexec = { true, false }; +	unsigned long flags; +	spin_lock_irqsave(&bios->lock, flags);  	bios->display.output = dcbent;  	parse_init_table(bios, table, &iexec);  	bios->display.output = NULL; +	spin_unlock_irqrestore(&bios->lock, flags);  }  static bool NVInitVBIOS(struct drm_device *dev) @@ -5903,6 +5876,7 @@ static bool NVInitVBIOS(struct drm_device *dev)  	struct nvbios *bios = &dev_priv->VBIOS;  	memset(bios, 0, sizeof(struct nvbios)); +	spin_lock_init(&bios->lock);  	bios->dev = dev;  	if (!NVShadowVBIOS(dev, bios->data)) diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.h b/drivers/gpu/drm/nouveau/nouveau_bios.h index 058e98c76d8..68446fd4146 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.h +++ b/drivers/gpu/drm/nouveau/nouveau_bios.h @@ -205,6 +205,8 @@ struct nvbios {  	struct drm_device *dev;  	struct nouveau_bios_info pub; +	spinlock_t lock; +  	uint8_t data[NV_PROM_SIZE];  	unsigned int length;  	bool execute; diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index e342a418d43..028719fddf7 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -65,8 +65,10 @@ nouveau_bo_fixup_align(struct drm_device *dev,  	/*  	 * Some of the tile_flags have a periodic structure of N*4096 bytes, -	 * align to to that as well as the page size. Overallocate memory to -	 * avoid corruption of other buffer objects. +	 * align to to that as well as the page size. Align the size to the +	 * appropriate boundaries. This does imply that sizes are rounded up +	 * 3-7 pages, so be aware of this and do not waste memory by allocating +	 * many small buffers.  	 */  	if (dev_priv->card_type == NV_50) {  		uint32_t block_size = nouveau_mem_fb_amount(dev) >> 15; @@ -77,22 +79,20 @@ nouveau_bo_fixup_align(struct drm_device *dev,  		case 0x2800:  		case 0x4800:  		case 0x7a00: -			*size = roundup(*size, block_size);  			if (is_power_of_2(block_size)) { -				*size += 3 * block_size;  				for (i = 1; i < 10; i++) {  					*align = 12 * i * block_size;  					if (!(*align % 65536))  						break;  				}  			} else { -				*size += 6 * block_size;  				for (i = 1; i < 10; i++) {  					*align = 8 * i * block_size;  					if (!(*align % 65536))  						break;  				}  			} +			*size = roundup(*size, *align);  			break;  		default:  			break; @@ -469,6 +469,8 @@ nouveau_bo_move_accel_cleanup(struct nouveau_channel *chan,  	ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL,  					evict, no_wait, new_mem); +	if (nvbo->channel && nvbo->channel != chan) +		ret = nouveau_fence_wait(fence, NULL, false, false);  	nouveau_fence_unref((void *)&fence);  	return ret;  } diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c index 343d718a966..2281f99da7f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_channel.c +++ b/drivers/gpu/drm/nouveau/nouveau_channel.c @@ -278,12 +278,11 @@ nouveau_channel_free(struct nouveau_channel *chan)  	/* Ensure the channel is no longer active on the GPU */  	pfifo->reassign(dev, false); -	if (pgraph->channel(dev) == chan) { -		pgraph->fifo_access(dev, false); +	pgraph->fifo_access(dev, false); +	if (pgraph->channel(dev) == chan)  		pgraph->unload_context(dev); -		pgraph->fifo_access(dev, true); -	}  	pgraph->destroy_context(chan); +	pgraph->fifo_access(dev, true);  	if (pfifo->channel_id(dev) == chan->id) {  		pfifo->disable(dev); diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 5a10deb8bdb..d2f63353ea9 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -24,9 +24,12 @@   *   */ +#include <acpi/button.h> +  #include "drmP.h"  #include "drm_edid.h"  #include "drm_crtc_helper.h" +  #include "nouveau_reg.h"  #include "nouveau_drv.h"  #include "nouveau_encoder.h" @@ -83,14 +86,17 @@ nouveau_encoder_connector_get(struct nouveau_encoder *encoder)  static void  nouveau_connector_destroy(struct drm_connector *drm_connector)  { -	struct nouveau_connector *connector = nouveau_connector(drm_connector); -	struct drm_device *dev = connector->base.dev; +	struct nouveau_connector *nv_connector = +		nouveau_connector(drm_connector); +	struct drm_device *dev; -	NV_DEBUG_KMS(dev, "\n"); - -	if (!connector) +	if (!nv_connector)  		return; +	dev = nv_connector->base.dev; +	NV_DEBUG_KMS(dev, "\n"); + +	kfree(nv_connector->edid);  	drm_sysfs_connector_remove(drm_connector);  	drm_connector_cleanup(drm_connector);  	kfree(drm_connector); @@ -233,10 +239,21 @@ nouveau_connector_detect(struct drm_connector *connector)  	if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)  		nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);  	if (nv_encoder && nv_connector->native_mode) { +#ifdef CONFIG_ACPI +		if (!nouveau_ignorelid && !acpi_lid_open()) +			return connector_status_disconnected; +#endif  		nouveau_connector_set_encoder(connector, nv_encoder);  		return connector_status_connected;  	} +	/* Cleanup the previous EDID block. */ +	if (nv_connector->edid) { +		drm_mode_connector_update_edid_property(connector, NULL); +		kfree(nv_connector->edid); +		nv_connector->edid = NULL; +	} +  	i2c = nouveau_connector_ddc_detect(connector, &nv_encoder);  	if (i2c) {  		nouveau_connector_ddc_prepare(connector, &flags); @@ -247,7 +264,7 @@ nouveau_connector_detect(struct drm_connector *connector)  		if (!nv_connector->edid) {  			NV_ERROR(dev, "DDC responded, but no EDID for %s\n",  				 drm_get_connector_name(connector)); -			return connector_status_disconnected; +			goto detect_analog;  		}  		if (nv_encoder->dcb->type == OUTPUT_DP && @@ -281,6 +298,7 @@ nouveau_connector_detect(struct drm_connector *connector)  		return connector_status_connected;  	} +detect_analog:  	nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG);  	if (!nv_encoder)  		nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); @@ -687,8 +705,12 @@ nouveau_connector_create_lvds(struct drm_device *dev,  	 */  	if (!nv_connector->edid && !nv_connector->native_mode &&  	    !dev_priv->VBIOS.pub.fp_no_ddc) { -		nv_connector->edid = +		struct edid *edid =  			(struct edid *)nouveau_bios_embedded_edid(dev); +		if (edid) { +			nv_connector->edid = kmalloc(EDID_LENGTH, GFP_KERNEL); +			*(nv_connector->edid) = *edid; +		}  	}  	if (!nv_connector->edid) diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c b/drivers/gpu/drm/nouveau/nouveau_dma.c index 7afbe8b40d5..50d9e67745a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dma.c +++ b/drivers/gpu/drm/nouveau/nouveau_dma.c @@ -126,47 +126,52 @@ OUT_RINGp(struct nouveau_channel *chan, const void *data, unsigned nr_dwords)  	chan->dma.cur += nr_dwords;  } -static inline bool -READ_GET(struct nouveau_channel *chan, uint32_t *get) +/* Fetch and adjust GPU GET pointer + * + * Returns: + *  value >= 0, the adjusted GET pointer + *  -EINVAL if GET pointer currently outside main push buffer + *  -EBUSY if timeout exceeded + */ +static inline int +READ_GET(struct nouveau_channel *chan, uint32_t *prev_get, uint32_t *timeout)  {  	uint32_t val;  	val = nvchan_rd32(chan, chan->user_get); -	if (val < chan->pushbuf_base || -	    val > chan->pushbuf_base + (chan->dma.max << 2)) { -		/* meaningless to dma_wait() except to know whether the -		 * GPU has stalled or not -		 */ -		*get = val; -		return false; + +	/* reset counter as long as GET is still advancing, this is +	 * to avoid misdetecting a GPU lockup if the GPU happens to +	 * just be processing an operation that takes a long time +	 */ +	if (val != *prev_get) { +		*prev_get = val; +		*timeout = 0; +	} + +	if ((++*timeout & 0xff) == 0) { +		DRM_UDELAY(1); +		if (*timeout > 100000) +			return -EBUSY;  	} -	*get = (val - chan->pushbuf_base) >> 2; -	return true; +	if (val < chan->pushbuf_base || +	    val > chan->pushbuf_base + (chan->dma.max << 2)) +		return -EINVAL; + +	return (val - chan->pushbuf_base) >> 2;  }  int  nouveau_dma_wait(struct nouveau_channel *chan, int size)  { -	uint32_t get, prev_get = 0, cnt = 0; -	bool get_valid; +	uint32_t prev_get = 0, cnt = 0; +	int get;  	while (chan->dma.free < size) { -		/* reset counter as long as GET is still advancing, this is -		 * to avoid misdetecting a GPU lockup if the GPU happens to -		 * just be processing an operation that takes a long time -		 */ -		get_valid = READ_GET(chan, &get); -		if (get != prev_get) { -			prev_get = get; -			cnt = 0; -		} - -		if ((++cnt & 0xff) == 0) { -			DRM_UDELAY(1); -			if (cnt > 100000) -				return -EBUSY; -		} +		get = READ_GET(chan, &prev_get, &cnt); +		if (unlikely(get == -EBUSY)) +			return -EBUSY;  		/* loop until we have a usable GET pointer.  the value  		 * we read from the GPU may be outside the main ring if @@ -177,7 +182,7 @@ nouveau_dma_wait(struct nouveau_channel *chan, int size)  		 * from the SKIPS area, so the code below doesn't have to deal  		 * with some fun corner cases.  		 */ -		if (!get_valid || get < NOUVEAU_DMA_SKIPS) +		if (unlikely(get == -EINVAL) || get < NOUVEAU_DMA_SKIPS)  			continue;  		if (get <= chan->dma.cur) { @@ -203,6 +208,19 @@ nouveau_dma_wait(struct nouveau_channel *chan, int size)  			 * after processing the currently pending commands.  			 */  			OUT_RING(chan, chan->pushbuf_base | 0x20000000); + +			/* wait for GET to depart from the skips area. +			 * prevents writing GET==PUT and causing a race +			 * condition that causes us to think the GPU is +			 * idle when it's not. +			 */ +			do { +				get = READ_GET(chan, &prev_get, &cnt); +				if (unlikely(get == -EBUSY)) +					return -EBUSY; +				if (unlikely(get == -EINVAL)) +					continue; +			} while (get <= NOUVEAU_DMA_SKIPS);  			WRITE_PUT(NOUVEAU_DMA_SKIPS);  			/* we're now submitting commands at the start of diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 9e2926c4857..f954ad93e81 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -490,7 +490,8 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,  		if (!nv_wait(NV50_AUXCH_CTRL(index), 0x00010000, 0x00000000)) {  			NV_ERROR(dev, "expected bit 16 == 0, got 0x%08x\n",  				 nv_rd32(dev, NV50_AUXCH_CTRL(index))); -			return -EBUSY; +			ret = -EBUSY; +			goto out;  		}  		udelay(400); @@ -502,6 +503,11 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,  	}  	if (cmd & 1) { +		if ((stat & NV50_AUXCH_STAT_COUNT) != data_nr) { +			ret = -EREMOTEIO; +			goto out; +		} +  		for (i = 0; i < 4; i++) {  			data32[i] = nv_rd32(dev, NV50_AUXCH_DATA_IN(index, i));  			NV_DEBUG_KMS(dev, "rd %d: 0x%08x\n", i, data32[i]); diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c index 06eb993e088..da3b93b8450 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.c +++ b/drivers/gpu/drm/nouveau/nouveau_drv.c @@ -56,7 +56,7 @@ int nouveau_vram_pushbuf;  module_param_named(vram_pushbuf, nouveau_vram_pushbuf, int, 0400);  MODULE_PARM_DESC(vram_notify, "Force DMA notifiers to be in VRAM"); -int nouveau_vram_notify; +int nouveau_vram_notify = 1;  module_param_named(vram_notify, nouveau_vram_notify, int, 0400);  MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (>=GeForce 8)"); @@ -71,6 +71,18 @@ MODULE_PARM_DESC(uscript_tmds, "TMDS output script table ID (>=GeForce 8)");  int nouveau_uscript_tmds = -1;  module_param_named(uscript_tmds, nouveau_uscript_tmds, int, 0400); +MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status"); +int nouveau_ignorelid = 0; +module_param_named(ignorelid, nouveau_ignorelid, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable all acceleration"); +int nouveau_noaccel = 0; +module_param_named(noaccel, nouveau_noaccel, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable fbcon acceleration"); +int nouveau_nofbaccel = 0; +module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400); +  MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"  		 "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"  		 "\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n" diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h index 026419fe879..5445cefdd03 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -509,6 +509,8 @@ struct drm_nouveau_private {  	void __iomem *ramin;  	uint32_t ramin_size; +	struct nouveau_bo *vga_ram; +  	struct workqueue_struct *wq;  	struct work_struct irq_work; @@ -675,6 +677,9 @@ extern char *nouveau_tv_norm;  extern int nouveau_reg_debug;  extern char *nouveau_vbios;  extern int nouveau_ctxfw; +extern int nouveau_ignorelid; +extern int nouveau_nofbaccel; +extern int nouveau_noaccel;  /* nouveau_state.c */  extern void nouveau_preclose(struct drm_device *dev, struct drm_file *); diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c index 0b05c869e0e..ea879a2efef 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c @@ -107,6 +107,34 @@ static struct fb_ops nouveau_fbcon_ops = {  	.fb_setcmap = drm_fb_helper_setcmap,  }; +static struct fb_ops nv04_fbcon_ops = { +	.owner = THIS_MODULE, +	.fb_check_var = drm_fb_helper_check_var, +	.fb_set_par = drm_fb_helper_set_par, +	.fb_setcolreg = drm_fb_helper_setcolreg, +	.fb_fillrect = nv04_fbcon_fillrect, +	.fb_copyarea = nv04_fbcon_copyarea, +	.fb_imageblit = nv04_fbcon_imageblit, +	.fb_sync = nouveau_fbcon_sync, +	.fb_pan_display = drm_fb_helper_pan_display, +	.fb_blank = drm_fb_helper_blank, +	.fb_setcmap = drm_fb_helper_setcmap, +}; + +static struct fb_ops nv50_fbcon_ops = { +	.owner = THIS_MODULE, +	.fb_check_var = drm_fb_helper_check_var, +	.fb_set_par = drm_fb_helper_set_par, +	.fb_setcolreg = drm_fb_helper_setcolreg, +	.fb_fillrect = nv50_fbcon_fillrect, +	.fb_copyarea = nv50_fbcon_copyarea, +	.fb_imageblit = nv50_fbcon_imageblit, +	.fb_sync = nouveau_fbcon_sync, +	.fb_pan_display = drm_fb_helper_pan_display, +	.fb_blank = drm_fb_helper_blank, +	.fb_setcmap = drm_fb_helper_setcmap, +}; +  static void nouveau_fbcon_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,  				    u16 blue, int regno)  { @@ -267,8 +295,12 @@ nouveau_fbcon_create(struct drm_device *dev, uint32_t fb_width,  	dev_priv->fbdev_info = info;  	strcpy(info->fix.id, "nouveaufb"); -	info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | -		      FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; +	if (nouveau_nofbaccel) +		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_DISABLED; +	else +		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | +			      FBINFO_HWACCEL_FILLRECT | +			      FBINFO_HWACCEL_IMAGEBLIT;  	info->fbops = &nouveau_fbcon_ops;  	info->fix.smem_start = dev->mode_config.fb_base + nvbo->bo.offset -  			       dev_priv->vm_vram_base; @@ -316,13 +348,15 @@ nouveau_fbcon_create(struct drm_device *dev, uint32_t fb_width,  	par->nouveau_fb = nouveau_fb;  	par->dev = dev; -	if (dev_priv->channel) { +	if (dev_priv->channel && !nouveau_nofbaccel) {  		switch (dev_priv->card_type) {  		case NV_50:  			nv50_fbcon_accel_init(info); +			info->fbops = &nv50_fbcon_ops;  			break;  		default:  			nv04_fbcon_accel_init(info); +			info->fbops = &nv04_fbcon_ops;  			break;  		};  	} diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.h b/drivers/gpu/drm/nouveau/nouveau_fbcon.h index 462e0b87b4b..f9c34e1a8c1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.h +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.h @@ -40,7 +40,13 @@ int nouveau_fbcon_remove(struct drm_device *dev, struct drm_framebuffer *fb);  void nouveau_fbcon_restore(void);  void nouveau_fbcon_zfill(struct drm_device *dev); +void nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);  int nv04_fbcon_accel_init(struct fb_info *info); +void nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);  int nv50_fbcon_accel_init(struct fb_info *info);  void nouveau_fbcon_gpu_lockup(struct fb_info *info); diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 2009db2426c..70cc30803e3 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -321,6 +321,7 @@ retry:  		else {  			NV_ERROR(dev, "invalid valid domains: 0x%08x\n",  				 b->valid_domains); +			list_add_tail(&nvbo->entry, &op->both_list);  			validate_fini(op, NULL);  			return -EINVAL;  		} @@ -466,13 +467,14 @@ u_memcpya(uint64_t user, unsigned nmemb, unsigned size)  static int  nouveau_gem_pushbuf_reloc_apply(struct nouveau_channel *chan, int nr_bo,  				struct drm_nouveau_gem_pushbuf_bo *bo, -				int nr_relocs, uint64_t ptr_relocs, -				int nr_dwords, int first_dword, +				unsigned nr_relocs, uint64_t ptr_relocs, +				unsigned nr_dwords, unsigned first_dword,  				uint32_t *pushbuf, bool is_iomem)  {  	struct drm_nouveau_gem_pushbuf_reloc *reloc = NULL;  	struct drm_device *dev = chan->dev; -	int ret = 0, i; +	int ret = 0; +	unsigned i;  	reloc = u_memcpya(ptr_relocs, nr_relocs, sizeof(*reloc));  	if (IS_ERR(reloc)) @@ -667,6 +669,18 @@ nouveau_gem_ioctl_pushbuf_call(struct drm_device *dev, void *data,  	}  	pbbo = nouveau_gem_object(gem); +	if ((req->offset & 3) || req->nr_dwords < 2 || +	    (unsigned long)req->offset > (unsigned long)pbbo->bo.mem.size || +	    (unsigned long)req->nr_dwords > +	     ((unsigned long)(pbbo->bo.mem.size - req->offset ) >> 2)) { +		NV_ERROR(dev, "pb call misaligned or out of bounds: " +			      "%d + %d * 4 > %ld\n", +			 req->offset, req->nr_dwords, pbbo->bo.mem.size); +		ret = -EINVAL; +		drm_gem_object_unreference(gem); +		goto out; +	} +  	ret = ttm_bo_reserve(&pbbo->bo, false, false, true,  			     chan->fence.sequence);  	if (ret) { @@ -911,7 +925,9 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data,  	}  	if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) { +		spin_lock(&nvbo->bo.lock);  		ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait); +		spin_unlock(&nvbo->bo.lock);  	} else {  		ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait);  		if (ret == 0) diff --git a/drivers/gpu/drm/nouveau/nouveau_grctx.c b/drivers/gpu/drm/nouveau/nouveau_grctx.c index 419f4c2b3b8..c7ebec69674 100644 --- a/drivers/gpu/drm/nouveau/nouveau_grctx.c +++ b/drivers/gpu/drm/nouveau/nouveau_grctx.c @@ -97,8 +97,8 @@ nouveau_grctx_prog_load(struct drm_device *dev)  		}  		pgraph->ctxvals = kmalloc(fw->size, GFP_KERNEL); -		if (!pgraph->ctxprog) { -			NV_ERROR(dev, "OOM copying ctxprog\n"); +		if (!pgraph->ctxvals) { +			NV_ERROR(dev, "OOM copying ctxvals\n");  			release_firmware(fw);  			nouveau_grctx_fini(dev);  			return -ENOMEM; diff --git a/drivers/gpu/drm/nouveau/nouveau_irq.c b/drivers/gpu/drm/nouveau/nouveau_irq.c index 919a619ca7f..447f9f69d6b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_irq.c +++ b/drivers/gpu/drm/nouveau/nouveau_irq.c @@ -211,6 +211,20 @@ nouveau_fifo_irq_handler(struct drm_device *dev)  								get + 4);  		} +		if (status & NV_PFIFO_INTR_SEMAPHORE) { +			uint32_t sem; + +			status &= ~NV_PFIFO_INTR_SEMAPHORE; +			nv_wr32(dev, NV03_PFIFO_INTR_0, +				NV_PFIFO_INTR_SEMAPHORE); + +			sem = nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE); +			nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, sem | 0x1); + +			nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); +			nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); +		} +  		if (status) {  			NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n",  				status, chid); @@ -483,6 +497,13 @@ nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource)  	if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) {  		if (nouveau_pgraph_intr_swmthd(dev, &trap))  			unhandled = 1; +	} else if (nsource & NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION) { +		uint32_t v = nv_rd32(dev, 0x402000); +		nv_wr32(dev, 0x402000, v); + +		/* dump the error anyway for now: it's useful for +		   Gallium development */ +		unhandled = 1;  	} else {  		unhandled = 1;  	} @@ -559,86 +580,99 @@ nouveau_pgraph_irq_handler(struct drm_device *dev)  static void  nv50_pgraph_irq_handler(struct drm_device *dev)  { -	uint32_t status, nsource; +	uint32_t status; -	status = nv_rd32(dev, NV03_PGRAPH_INTR); -	nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); +	while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { +		uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); -	if (status & 0x00000001) { -		nouveau_pgraph_intr_notify(dev, nsource); -		status &= ~0x00000001; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); -	} +		if (status & 0x00000001) { +			nouveau_pgraph_intr_notify(dev, nsource); +			status &= ~0x00000001; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); +		} -	if (status & 0x00000010) { -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD); +		if (status & 0x00000010) { +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD); -		status &= ~0x00000010; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); -	} +			status &= ~0x00000010; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); +		} -	if (status & 0x00001000) { -		nv_wr32(dev, 0x400500, 0x00000000); -		nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_CONTEXT_SWITCH); -		nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, -			NV40_PGRAPH_INTR_EN) & ~NV_PGRAPH_INTR_CONTEXT_SWITCH); -		nv_wr32(dev, 0x400500, 0x00010001); +		if (status & 0x00001000) { +			nv_wr32(dev, 0x400500, 0x00000000); +			nv_wr32(dev, NV03_PGRAPH_INTR, +				NV_PGRAPH_INTR_CONTEXT_SWITCH); +			nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, +				NV40_PGRAPH_INTR_EN) & +				~NV_PGRAPH_INTR_CONTEXT_SWITCH); +			nv_wr32(dev, 0x400500, 0x00010001); -		nv50_graph_context_switch(dev); +			nv50_graph_context_switch(dev); -		status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; -	} +			status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; +		} -	if (status & 0x00100000) { -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_DATA_ERROR); +		if (status & 0x00100000) { +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_DATA_ERROR); -		status &= ~0x00100000; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); -	} +			status &= ~0x00100000; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); +		} -	if (status & 0x00200000) { -		int r; +		if (status & 0x00200000) { +			int r; -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_PROTECTION_ERROR); +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_PROTECTION_ERROR); -		NV_ERROR(dev, "magic set 1:\n"); -		for (r = 0x408900; r <= 0x408910; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x408900, nv_rd32(dev, 0x408904) | 0xc0000000); -		for (r = 0x408e08; r <= 0x408e24; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x408e08, nv_rd32(dev, 0x408e08) | 0xc0000000); +			NV_ERROR(dev, "magic set 1:\n"); +			for (r = 0x408900; r <= 0x408910; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x408900, +				nv_rd32(dev, 0x408904) | 0xc0000000); +			for (r = 0x408e08; r <= 0x408e24; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +							nv_rd32(dev, r)); +			nv_wr32(dev, 0x408e08, +				nv_rd32(dev, 0x408e08) | 0xc0000000); -		NV_ERROR(dev, "magic set 2:\n"); -		for (r = 0x409900; r <= 0x409910; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x409900, nv_rd32(dev, 0x409904) | 0xc0000000); -		for (r = 0x409e08; r <= 0x409e24; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x409e08, nv_rd32(dev, 0x409e08) | 0xc0000000); +			NV_ERROR(dev, "magic set 2:\n"); +			for (r = 0x409900; r <= 0x409910; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x409900, +				nv_rd32(dev, 0x409904) | 0xc0000000); +			for (r = 0x409e08; r <= 0x409e24; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x409e08, +				nv_rd32(dev, 0x409e08) | 0xc0000000); -		status &= ~0x00200000; -		nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource); -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); -	} +			status &= ~0x00200000; +			nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource); +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); +		} -	if (status) { -		NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", status); -		nv_wr32(dev, NV03_PGRAPH_INTR, status); -	} +		if (status) { +			NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", +				status); +			nv_wr32(dev, NV03_PGRAPH_INTR, status); +		} -	{ -		const int isb = (1 << 16) | (1 << 0); +		{ +			const int isb = (1 << 16) | (1 << 0); -		if ((nv_rd32(dev, 0x400500) & isb) != isb) -			nv_wr32(dev, 0x400500, nv_rd32(dev, 0x400500) | isb); -		nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +			if ((nv_rd32(dev, 0x400500) & isb) != isb) +				nv_wr32(dev, 0x400500, +					nv_rd32(dev, 0x400500) | isb); +		}  	}  	nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); +	nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31));  }  static void diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c index fb9bdd6edf1..8f3a12f614e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_mem.c +++ b/drivers/gpu/drm/nouveau/nouveau_mem.c @@ -383,9 +383,8 @@ void nouveau_mem_close(struct drm_device *dev)  {  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	if (dev_priv->ttm.bdev.man[TTM_PL_PRIV0].has_type) -		ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_PRIV0); -	ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM); +	nouveau_bo_unpin(dev_priv->vga_ram); +	nouveau_bo_ref(NULL, &dev_priv->vga_ram);  	ttm_bo_device_release(&dev_priv->ttm.bdev); @@ -622,6 +621,15 @@ nouveau_mem_init(struct drm_device *dev)  		return ret;  	} +	ret = nouveau_bo_new(dev, NULL, 256*1024, 0, TTM_PL_FLAG_VRAM, +			     0, 0, true, true, &dev_priv->vga_ram); +	if (ret == 0) +		ret = nouveau_bo_pin(dev_priv->vga_ram, TTM_PL_FLAG_VRAM); +	if (ret) { +		NV_WARN(dev, "failed to reserve VGA memory\n"); +		nouveau_bo_ref(NULL, &dev_priv->vga_ram); +	} +  	/* GART */  #if !defined(__powerpc__) && !defined(__ia64__)  	if (drm_device_is_agp(dev) && dev->agp) { @@ -653,6 +661,7 @@ nouveau_mem_init(struct drm_device *dev)  	dev_priv->fb_mtrr = drm_mtrr_add(drm_get_resource_start(dev, 1),  					 drm_get_resource_len(dev, 1),  					 DRM_MTRR_WC); +  	return 0;  } diff --git a/drivers/gpu/drm/nouveau/nouveau_notifier.c b/drivers/gpu/drm/nouveau/nouveau_notifier.c index 6c66a34b634..d99dc087f9b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_notifier.c +++ b/drivers/gpu/drm/nouveau/nouveau_notifier.c @@ -34,15 +34,20 @@ nouveau_notifier_init_channel(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct nouveau_bo *ntfy = NULL; +	uint32_t flags;  	int ret; -	ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, nouveau_vram_notify ? -			      TTM_PL_FLAG_VRAM : TTM_PL_FLAG_TT, +	if (nouveau_vram_notify) +		flags = TTM_PL_FLAG_VRAM; +	else +		flags = TTM_PL_FLAG_TT; + +	ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, flags,  			      0, 0x0000, false, true, &ntfy);  	if (ret)  		return ret; -	ret = nouveau_bo_pin(ntfy, TTM_PL_FLAG_VRAM); +	ret = nouveau_bo_pin(ntfy, flags);  	if (ret)  		goto out_err; @@ -128,6 +133,8 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle,  			target = NV_DMA_TARGET_PCI;  		} else {  			target = NV_DMA_TARGET_AGP; +			if (dev_priv->card_type >= NV_50) +				offset += dev_priv->vm_gart_base;  		}  	} else {  		NV_ERROR(dev, "Bad DMA target, mem_type %d!\n", diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c index 6c2cf81716d..e7c100ba63a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_object.c +++ b/drivers/gpu/drm/nouveau/nouveau_object.c @@ -885,11 +885,12 @@ int  nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class,  		      struct nouveau_gpuobj **gpuobj_ret)  { -	struct drm_nouveau_private *dev_priv = chan->dev->dev_private; +	struct drm_nouveau_private *dev_priv;  	struct nouveau_gpuobj *gpuobj;  	if (!chan || !gpuobj_ret || *gpuobj_ret != NULL)  		return -EINVAL; +	dev_priv = chan->dev->dev_private;  	gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL);  	if (!gpuobj) diff --git a/drivers/gpu/drm/nouveau/nouveau_reg.h b/drivers/gpu/drm/nouveau/nouveau_reg.h index 251f1b3b38b..aa9b310e41b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_reg.h +++ b/drivers/gpu/drm/nouveau/nouveau_reg.h @@ -99,6 +99,7 @@   * the card will hang early on in the X init process.   */  #    define NV_PMC_ENABLE_UNK13                               (1<<13) +#define NV40_PMC_GRAPH_UNITS				   0x00001540  #define NV40_PMC_BACKLIGHT				   0x000015f0  #	define NV40_PMC_BACKLIGHT_MASK			   0x001f0000  #define NV40_PMC_1700                                      0x00001700 diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index 4c7f1e403e8..ed1590577b6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c @@ -54,11 +54,12 @@ static void  nouveau_sgdma_clear(struct ttm_backend *be)  {  	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; -	struct drm_device *dev = nvbe->dev; - -	NV_DEBUG(nvbe->dev, "\n"); +	struct drm_device *dev;  	if (nvbe && nvbe->pages) { +		dev = nvbe->dev; +		NV_DEBUG(dev, "\n"); +  		if (nvbe->bound)  			be->func->unbind(be); diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 09b9a46dfc0..a4851af5b05 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c @@ -310,6 +310,14 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)  static unsigned int  nouveau_vga_set_decode(void *priv, bool state)  { +	struct drm_device *dev = priv; +	struct drm_nouveau_private *dev_priv = dev->dev_private; + +	if (dev_priv->chipset >= 0x40) +		nv_wr32(dev, 0x88054, state); +	else +		nv_wr32(dev, 0x1854, state); +  	if (state)  		return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |  		       VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; @@ -427,15 +435,19 @@ nouveau_card_init(struct drm_device *dev)  	if (ret)  		goto out_timer; -	/* PGRAPH */ -	ret = engine->graph.init(dev); -	if (ret) -		goto out_fb; +	if (nouveau_noaccel) +		engine->graph.accel_blocked = true; +	else { +		/* PGRAPH */ +		ret = engine->graph.init(dev); +		if (ret) +			goto out_fb; -	/* PFIFO */ -	ret = engine->fifo.init(dev); -	if (ret) -		goto out_graph; +		/* PFIFO */ +		ret = engine->fifo.init(dev); +		if (ret) +			goto out_graph; +	}  	/* this call irq_preinstall, register irq handler and  	 * call irq_postinstall @@ -479,9 +491,11 @@ nouveau_card_init(struct drm_device *dev)  out_irq:  	drm_irq_uninstall(dev);  out_fifo: -	engine->fifo.takedown(dev); +	if (!nouveau_noaccel) +		engine->fifo.takedown(dev);  out_graph: -	engine->graph.takedown(dev); +	if (!nouveau_noaccel) +		engine->graph.takedown(dev);  out_fb:  	engine->fb.takedown(dev);  out_timer: @@ -518,13 +532,16 @@ static void nouveau_card_takedown(struct drm_device *dev)  			dev_priv->channel = NULL;  		} -		engine->fifo.takedown(dev); -		engine->graph.takedown(dev); +		if (!nouveau_noaccel) { +			engine->fifo.takedown(dev); +			engine->graph.takedown(dev); +		}  		engine->fb.takedown(dev);  		engine->timer.takedown(dev);  		engine->mc.takedown(dev);  		mutex_lock(&dev->struct_mutex); +		ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM);  		ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_TT);  		mutex_unlock(&dev->struct_mutex);  		nouveau_sgdma_takedown(dev); @@ -816,6 +833,15 @@ int nouveau_ioctl_getparam(struct drm_device *dev, void *data,  	case NOUVEAU_GETPARAM_VM_VRAM_BASE:  		getparam->value = dev_priv->vm_vram_base;  		break; +	case NOUVEAU_GETPARAM_GRAPH_UNITS: +		/* NV40 and NV50 versions are quite different, but register +		 * address is the same. User is supposed to know the card +		 * family anyway... */ +		if (dev_priv->chipset >= 0x40) { +			getparam->value = nv_rd32(dev, NV40_PMC_GRAPH_UNITS); +			break; +		} +		/* FALLTHRU */  	default:  		NV_ERROR(dev, "unknown parameter %lld\n", getparam->param);  		return -EINVAL; diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c index d910873c136..fd01caabd5c 100644 --- a/drivers/gpu/drm/nouveau/nv04_fbcon.c +++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c @@ -27,7 +27,7 @@  #include "nouveau_dma.h"  #include "nouveau_fbcon.h" -static void +void  nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  {  	struct nouveau_fbcon_par *par = info->par; @@ -54,7 +54,7 @@ nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  	FIRE_RING(chan);  } -static void +void  nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  {  	struct nouveau_fbcon_par *par = info->par; @@ -88,7 +88,7 @@ nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  	FIRE_RING(chan);  } -static void +void  nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)  {  	struct nouveau_fbcon_par *par = info->par; @@ -307,9 +307,6 @@ nv04_fbcon_accel_init(struct fb_info *info)  	FIRE_RING(chan); -	info->fbops->fb_fillrect = nv04_fbcon_fillrect; -	info->fbops->fb_copyarea = nv04_fbcon_copyarea; -	info->fbops->fb_imageblit = nv04_fbcon_imageblit;  	return 0;  } diff --git a/drivers/gpu/drm/nouveau/nv04_instmem.c b/drivers/gpu/drm/nouveau/nv04_instmem.c index a20c206625a..a3b9563a6f6 100644 --- a/drivers/gpu/drm/nouveau/nv04_instmem.c +++ b/drivers/gpu/drm/nouveau/nv04_instmem.c @@ -30,7 +30,7 @@ nv04_instmem_determine_amount(struct drm_device *dev)  		 * of vram.  For now, only reserve a small piece until we know  		 * more about what each chipset requires.  		 */ -		switch (dev_priv->chipset & 0xf0) { +		switch (dev_priv->chipset) {  		case 0x40:  		case 0x47:  		case 0x49: diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c index 118d3285fd8..d1a651e3400 100644 --- a/drivers/gpu/drm/nouveau/nv50_crtc.c +++ b/drivers/gpu/drm/nouveau/nv50_crtc.c @@ -298,14 +298,17 @@ nv50_crtc_set_clock(struct drm_device *dev, int head, int pclk)  static void  nv50_crtc_destroy(struct drm_crtc *crtc)  { -	struct drm_device *dev = crtc->dev; -	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); - -	NV_DEBUG_KMS(dev, "\n"); +	struct drm_device *dev; +	struct nouveau_crtc *nv_crtc;  	if (!crtc)  		return; +	dev = crtc->dev; +	nv_crtc = nouveau_crtc(crtc); + +	NV_DEBUG_KMS(dev, "\n"); +  	drm_crtc_cleanup(&nv_crtc->base);  	nv50_cursor_fini(nv_crtc); @@ -432,6 +435,7 @@ nv50_crtc_prepare(struct drm_crtc *crtc)  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);  	struct drm_device *dev = crtc->dev;  	struct drm_encoder *encoder; +	uint32_t dac = 0, sor = 0;  	NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); @@ -439,9 +443,28 @@ nv50_crtc_prepare(struct drm_crtc *crtc)  	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {  		struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); -		if (drm_helper_encoder_in_use(encoder)) +		if (!drm_helper_encoder_in_use(encoder))  			continue; +		if (nv_encoder->dcb->type == OUTPUT_ANALOG || +		    nv_encoder->dcb->type == OUTPUT_TV) +			dac |= (1 << nv_encoder->or); +		else +			sor |= (1 << nv_encoder->or); +	} + +	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { +		struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + +		if (nv_encoder->dcb->type == OUTPUT_ANALOG || +		    nv_encoder->dcb->type == OUTPUT_TV) { +			if (dac & (1 << nv_encoder->or)) +				continue; +		} else { +			if (sor & (1 << nv_encoder->or)) +				continue; +		} +  		nv_encoder->disconnect(nv_encoder);  	} diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c index e4f279ee61c..0f57cdf7ccb 100644 --- a/drivers/gpu/drm/nouveau/nv50_fbcon.c +++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c @@ -3,7 +3,7 @@  #include "nouveau_dma.h"  #include "nouveau_fbcon.h" -static void +void  nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  {  	struct nouveau_fbcon_par *par = info->par; @@ -46,7 +46,7 @@ nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  	FIRE_RING(chan);  } -static void +void  nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  {  	struct nouveau_fbcon_par *par = info->par; @@ -81,7 +81,7 @@ nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  	FIRE_RING(chan);  } -static void +void  nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)  {  	struct nouveau_fbcon_par *par = info->par; @@ -262,9 +262,6 @@ nv50_fbcon_accel_init(struct fb_info *info)  	OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys +  			 dev_priv->vm_vram_base); -	info->fbops->fb_fillrect = nv50_fbcon_fillrect; -	info->fbops->fb_copyarea = nv50_fbcon_copyarea; -	info->fbops->fb_imageblit = nv50_fbcon_imageblit;  	return 0;  } diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c index 39caf167587..204a79ff10f 100644 --- a/drivers/gpu/drm/nouveau/nv50_fifo.c +++ b/drivers/gpu/drm/nouveau/nv50_fifo.c @@ -272,7 +272,7 @@ nv50_fifo_create_context(struct nouveau_channel *chan)  			return ret;  		ramfc = chan->ramfc->gpuobj; -		ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 4096, 256, +		ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 4096, 1024,  					     0, &chan->cache);  		if (ret)  			return ret; @@ -317,17 +317,20 @@ void  nv50_fifo_destroy_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev; +	struct nouveau_gpuobj_ref *ramfc = chan->ramfc;  	NV_DEBUG(dev, "ch%d\n", chan->id); -	nouveau_gpuobj_ref_del(dev, &chan->ramfc); -	nouveau_gpuobj_ref_del(dev, &chan->cache); - +	/* This will ensure the channel is seen as disabled. */ +	chan->ramfc = NULL;  	nv50_fifo_channel_disable(dev, chan->id, false);  	/* Dummy channel, also used on ch 127 */  	if (chan->id == 0)  		nv50_fifo_channel_disable(dev, 127, false); + +	nouveau_gpuobj_ref_del(dev, &ramfc); +	nouveau_gpuobj_ref_del(dev, &chan->cache);  }  int diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c index ca79f32be44..6d504801b51 100644 --- a/drivers/gpu/drm/nouveau/nv50_graph.c +++ b/drivers/gpu/drm/nouveau/nv50_graph.c @@ -84,7 +84,7 @@ nv50_graph_init_regs__nv(struct drm_device *dev)  	nv_wr32(dev, 0x400804, 0xc0000000);  	nv_wr32(dev, 0x406800, 0xc0000000);  	nv_wr32(dev, 0x400c04, 0xc0000000); -	nv_wr32(dev, 0x401804, 0xc0000000); +	nv_wr32(dev, 0x401800, 0xc0000000);  	nv_wr32(dev, 0x405018, 0xc0000000);  	nv_wr32(dev, 0x402000, 0xc0000000); @@ -165,6 +165,12 @@ nv50_graph_channel(struct drm_device *dev)  	uint32_t inst;  	int i; +	/* Be sure we're not in the middle of a context switch or bad things +	 * will happen, such as unloading the wrong pgraph context. +	 */ +	if (!nv_wait(0x400300, 0x00000001, 0x00000000)) +		NV_ERROR(dev, "Ctxprog is still running\n"); +  	inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);  	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED))  		return NULL; @@ -275,19 +281,18 @@ nv50_graph_load_context(struct nouveau_channel *chan)  int  nv50_graph_unload_context(struct drm_device *dev)  { -	uint32_t inst, fifo = nv_rd32(dev, 0x400500); +	uint32_t inst;  	inst  = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);  	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED))  		return 0;  	inst &= NV50_PGRAPH_CTXCTL_CUR_INSTANCE; -	nv_wr32(dev, 0x400500, fifo & ~1); +	nouveau_wait_for_idle(dev);  	nv_wr32(dev, 0x400784, inst);  	nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) | 0x20);  	nv_wr32(dev, 0x400304, nv_rd32(dev, 0x400304) | 0x01);  	nouveau_wait_for_idle(dev); -	nv_wr32(dev, 0x400500, fifo);  	nv_wr32(dev, NV50_PGRAPH_CTXCTL_CUR, inst);  	return 0; diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c index e395c16d30f..c2fff543b06 100644 --- a/drivers/gpu/drm/nouveau/nv50_sor.c +++ b/drivers/gpu/drm/nouveau/nv50_sor.c @@ -90,11 +90,25 @@ nv50_sor_dpms(struct drm_encoder *encoder, int mode)  {  	struct drm_device *dev = encoder->dev;  	struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); +	struct drm_encoder *enc;  	uint32_t val;  	int or = nv_encoder->or;  	NV_DEBUG_KMS(dev, "or %d mode %d\n", or, mode); +	nv_encoder->last_dpms = mode; +	list_for_each_entry(enc, &dev->mode_config.encoder_list, head) { +		struct nouveau_encoder *nvenc = nouveau_encoder(enc); + +		if (nvenc == nv_encoder || +		    nvenc->disconnect != nv50_sor_disconnect || +		    nvenc->dcb->or != nv_encoder->dcb->or) +			continue; + +		if (nvenc->last_dpms == DRM_MODE_DPMS_ON) +			return; +	} +  	/* wait for it to be done */  	if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_CTRL(or),  		     NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING, 0)) { diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig index 5982321be4d..1c02d23f6fc 100644 --- a/drivers/gpu/drm/radeon/Kconfig +++ b/drivers/gpu/drm/radeon/Kconfig @@ -1,10 +1,14 @@  config DRM_RADEON_KMS -	bool "Enable modesetting on radeon by default" +	bool "Enable modesetting on radeon by default - NEW DRIVER"  	depends on DRM_RADEON  	help -	  Choose this option if you want kernel modesetting enabled by default, -	  and you have a new enough userspace to support this. Running old -	  userspaces with this enabled will cause pain. +	  Choose this option if you want kernel modesetting enabled by default. + +	  This is a completely new driver. It's only part of the existing drm +	  for compatibility reasons. It requires an entirely different graphics +	  stack above it and works very differently from the old drm stack. +	  i.e. don't enable this unless you know what you are doing it may +	  cause issues or bugs compared to the previous userspace driver stack.  	  When kernel modesetting is enabled the IOCTL of radeon/drm  	  driver are considered as invalid and an error message is printed diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c index 388140a7e65..2a3df5599ab 100644 --- a/drivers/gpu/drm/radeon/atom.c +++ b/drivers/gpu/drm/radeon/atom.c @@ -24,6 +24,7 @@  #include <linux/module.h>  #include <linux/sched.h> +#include <asm/unaligned.h>  #define ATOM_DEBUG @@ -212,7 +213,9 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,  	case ATOM_ARG_PS:  		idx = U8(*ptr);  		(*ptr)++; -		val = le32_to_cpu(ctx->ps[idx]); +		/* get_unaligned_le32 avoids unaligned accesses from atombios +		 * tables, noticed on a DEC Alpha. */ +		val = get_unaligned_le32((u32 *)&ctx->ps[idx]);  		if (print)  			DEBUG("PS[0x%02X,0x%04X]", idx, val);  		break; @@ -246,6 +249,9 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,  		case ATOM_WS_ATTRIBUTES:  			val = gctx->io_attr;  			break; +		case ATOM_WS_REGPTR: +			val = gctx->reg_block; +			break;  		default:  			val = ctx->ws[idx];  		} @@ -385,6 +391,32 @@ static uint32_t atom_get_src(atom_exec_context *ctx, uint8_t attr, int *ptr)  	return atom_get_src_int(ctx, attr, ptr, NULL, 1);  } +static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *ptr) +{ +	uint32_t val = 0xCDCDCDCD; + +	switch (align) { +	case ATOM_SRC_DWORD: +		val = U32(*ptr); +		(*ptr) += 4; +		break; +	case ATOM_SRC_WORD0: +	case ATOM_SRC_WORD8: +	case ATOM_SRC_WORD16: +		val = U16(*ptr); +		(*ptr) += 2; +		break; +	case ATOM_SRC_BYTE0: +	case ATOM_SRC_BYTE8: +	case ATOM_SRC_BYTE16: +	case ATOM_SRC_BYTE24: +		val = U8(*ptr); +		(*ptr)++; +		break; +	} +	return val; +} +  static uint32_t atom_get_dst(atom_exec_context *ctx, int arg, uint8_t attr,  			     int *ptr, uint32_t *saved, int print)  { @@ -482,6 +514,9 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,  		case ATOM_WS_ATTRIBUTES:  			gctx->io_attr = val;  			break; +		case ATOM_WS_REGPTR: +			gctx->reg_block = val; +			break;  		default:  			ctx->ws[idx] = val;  		} @@ -677,7 +712,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)  	SDEBUG("   dst: ");  	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);  	SDEBUG("   src1: "); -	src1 = atom_get_src(ctx, attr, ptr); +	src1 = atom_get_src_direct(ctx, ((attr >> 3) & 7), ptr);  	SDEBUG("   src2: ");  	src2 = atom_get_src(ctx, attr, ptr);  	dst &= src1; @@ -809,6 +844,38 @@ static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)  	SDEBUG("   base: 0x%04X\n", ctx->ctx->reg_block);  } +static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg) +{ +	uint8_t attr = U8((*ptr)++), shift; +	uint32_t saved, dst; +	int dptr = *ptr; +	attr &= 0x38; +	attr |= atom_def_dst[attr >> 3] << 6; +	SDEBUG("   dst: "); +	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); +	shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); +	SDEBUG("   shift: %d\n", shift); +	dst <<= shift; +	SDEBUG("   dst: "); +	atom_put_dst(ctx, arg, attr, &dptr, dst, saved); +} + +static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg) +{ +	uint8_t attr = U8((*ptr)++), shift; +	uint32_t saved, dst; +	int dptr = *ptr; +	attr &= 0x38; +	attr |= atom_def_dst[attr >> 3] << 6; +	SDEBUG("   dst: "); +	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); +	shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); +	SDEBUG("   shift: %d\n", shift); +	dst >>= shift; +	SDEBUG("   dst: "); +	atom_put_dst(ctx, arg, attr, &dptr, dst, saved); +} +  static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)  {  	uint8_t attr = U8((*ptr)++), shift; @@ -818,7 +885,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)  	attr |= atom_def_dst[attr >> 3] << 6;  	SDEBUG("   dst: ");  	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); -	shift = U8((*ptr)++); +	shift = atom_get_src(ctx, attr, ptr);  	SDEBUG("   shift: %d\n", shift);  	dst <<= shift;  	SDEBUG("   dst: "); @@ -834,7 +901,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)  	attr |= atom_def_dst[attr >> 3] << 6;  	SDEBUG("   dst: ");  	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); -	shift = U8((*ptr)++); +	shift = atom_get_src(ctx, attr, ptr);  	SDEBUG("   shift: %d\n", shift);  	dst >>= shift;  	SDEBUG("   dst: "); @@ -937,18 +1004,18 @@ static struct {  	atom_op_or, ATOM_ARG_FB}, {  	atom_op_or, ATOM_ARG_PLL}, {  	atom_op_or, ATOM_ARG_MC}, { -	atom_op_shl, ATOM_ARG_REG}, { -	atom_op_shl, ATOM_ARG_PS}, { -	atom_op_shl, ATOM_ARG_WS}, { -	atom_op_shl, ATOM_ARG_FB}, { -	atom_op_shl, ATOM_ARG_PLL}, { -	atom_op_shl, ATOM_ARG_MC}, { -	atom_op_shr, ATOM_ARG_REG}, { -	atom_op_shr, ATOM_ARG_PS}, { -	atom_op_shr, ATOM_ARG_WS}, { -	atom_op_shr, ATOM_ARG_FB}, { -	atom_op_shr, ATOM_ARG_PLL}, { -	atom_op_shr, ATOM_ARG_MC}, { +	atom_op_shift_left, ATOM_ARG_REG}, { +	atom_op_shift_left, ATOM_ARG_PS}, { +	atom_op_shift_left, ATOM_ARG_WS}, { +	atom_op_shift_left, ATOM_ARG_FB}, { +	atom_op_shift_left, ATOM_ARG_PLL}, { +	atom_op_shift_left, ATOM_ARG_MC}, { +	atom_op_shift_right, ATOM_ARG_REG}, { +	atom_op_shift_right, ATOM_ARG_PS}, { +	atom_op_shift_right, ATOM_ARG_WS}, { +	atom_op_shift_right, ATOM_ARG_FB}, { +	atom_op_shift_right, ATOM_ARG_PLL}, { +	atom_op_shift_right, ATOM_ARG_MC}, {  	atom_op_mul, ATOM_ARG_REG}, {  	atom_op_mul, ATOM_ARG_PS}, {  	atom_op_mul, ATOM_ARG_WS}, { @@ -1058,8 +1125,6 @@ static void atom_execute_table_locked(struct atom_context *ctx, int index, uint3  	SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps); -	/* reset reg block */ -	ctx->reg_block = 0;  	ectx.ctx = ctx;  	ectx.ps_shift = ps / 4;  	ectx.start = base; @@ -1096,6 +1161,12 @@ static void atom_execute_table_locked(struct atom_context *ctx, int index, uint3  void atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)  {  	mutex_lock(&ctx->mutex); +	/* reset reg block */ +	ctx->reg_block = 0; +	/* reset fb window */ +	ctx->fb_base = 0; +	/* reset io mode */ +	ctx->io_mode = ATOM_IO_MM;  	atom_execute_table_locked(ctx, index, params);  	mutex_unlock(&ctx->mutex);  } diff --git a/drivers/gpu/drm/radeon/atom.h b/drivers/gpu/drm/radeon/atom.h index 47fd943f6d1..bc73781423a 100644 --- a/drivers/gpu/drm/radeon/atom.h +++ b/drivers/gpu/drm/radeon/atom.h @@ -91,6 +91,7 @@  #define ATOM_WS_AND_MASK	0x45  #define ATOM_WS_FB_WINDOW	0x46  #define ATOM_WS_ATTRIBUTES	0x47 +#define ATOM_WS_REGPTR  	0x48  #define ATOM_IIO_NOP		0  #define ATOM_IIO_START		1 diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 260fcf59f00..af464e351fb 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c @@ -307,7 +307,6 @@ atombios_set_crtc_dtd_timing(struct drm_crtc *crtc,  	args.susModeMiscInfo.usAccess = cpu_to_le16(misc);  	args.ucCRTC = radeon_crtc->crtc_id; -	printk("executing set crtc dtd timing\n");  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);  } @@ -347,7 +346,6 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc,  	args.susModeMiscInfo.usAccess = cpu_to_le16(misc);  	args.ucCRTC = radeon_crtc->crtc_id; -	printk("executing set crtc timing\n");  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);  } @@ -409,59 +407,57 @@ static void atombios_set_ss(struct drm_crtc *crtc, int enable)  	}  } -void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode) +union adjust_pixel_clock { +	ADJUST_DISPLAY_PLL_PS_ALLOCATION v1; +}; + +static u32 atombios_adjust_pll(struct drm_crtc *crtc, +			       struct drm_display_mode *mode, +			       struct radeon_pll *pll)  { -	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);  	struct drm_device *dev = crtc->dev;  	struct radeon_device *rdev = dev->dev_private;  	struct drm_encoder *encoder = NULL;  	struct radeon_encoder *radeon_encoder = NULL; -	uint8_t frev, crev; -	int index; -	SET_PIXEL_CLOCK_PS_ALLOCATION args; -	PIXEL_CLOCK_PARAMETERS *spc1_ptr; -	PIXEL_CLOCK_PARAMETERS_V2 *spc2_ptr; -	PIXEL_CLOCK_PARAMETERS_V3 *spc3_ptr; -	uint32_t pll_clock = mode->clock; -	uint32_t adjusted_clock; -	uint32_t ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0; -	struct radeon_pll *pll; -	int pll_flags = 0; +	u32 adjusted_clock = mode->clock; -	memset(&args, 0, sizeof(args)); +	/* reset the pll flags */ +	pll->flags = 0;  	if (ASIC_IS_AVIVO(rdev)) {  		if ((rdev->family == CHIP_RS600) ||  		    (rdev->family == CHIP_RS690) ||  		    (rdev->family == CHIP_RS740)) -			pll_flags |= (RADEON_PLL_USE_FRAC_FB_DIV | -				      RADEON_PLL_PREFER_CLOSEST_LOWER); +			pll->flags |= (RADEON_PLL_USE_FRAC_FB_DIV | +				       RADEON_PLL_PREFER_CLOSEST_LOWER);  		if (ASIC_IS_DCE32(rdev) && mode->clock > 200000)	/* range limits??? */ -			pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; +			pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;  		else -			pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; +			pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;  	} else { -		pll_flags |= RADEON_PLL_LEGACY; +		pll->flags |= RADEON_PLL_LEGACY;  		if (mode->clock > 200000)	/* range limits??? */ -			pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; +			pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;  		else -			pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; +			pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;  	}  	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {  		if (encoder->crtc == crtc) { -			if (!ASIC_IS_AVIVO(rdev)) { -				if (encoder->encoder_type != -				    DRM_MODE_ENCODER_DAC) -					pll_flags |= RADEON_PLL_NO_ODD_POST_DIV; -				if (encoder->encoder_type == -					DRM_MODE_ENCODER_LVDS) -					pll_flags |= RADEON_PLL_USE_REF_DIV; -			}  			radeon_encoder = to_radeon_encoder(encoder); +			if (ASIC_IS_AVIVO(rdev)) { +				/* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ +				if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1) +					adjusted_clock = mode->clock * 2; +			} else { +				if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) +					pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; +				if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) +					pll->flags |= RADEON_PLL_USE_REF_DIV; +			}  			break;  		}  	} @@ -471,46 +467,101 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  	 * special hw requirements.  	 */  	if (ASIC_IS_DCE3(rdev)) { -		ADJUST_DISPLAY_PLL_PS_ALLOCATION adjust_pll_args; +		union adjust_pixel_clock args; +		struct radeon_encoder_atom_dig *dig; +		u8 frev, crev; +		int index; -		if (!encoder) -			return; - -		memset(&adjust_pll_args, 0, sizeof(adjust_pll_args)); -		adjust_pll_args.usPixelClock = cpu_to_le16(mode->clock / 10); -		adjust_pll_args.ucTransmitterID = radeon_encoder->encoder_id; -		adjust_pll_args.ucEncodeMode = atombios_get_encoder_mode(encoder); +		if (!radeon_encoder->enc_priv) +			return adjusted_clock; +		dig = radeon_encoder->enc_priv;  		index = GetIndexIntoMasterTable(COMMAND, AdjustDisplayPll); -		atom_execute_table(rdev->mode_info.atom_context, -				   index, (uint32_t *)&adjust_pll_args); -		adjusted_clock = le16_to_cpu(adjust_pll_args.usPixelClock) * 10; -	} else { -		/* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ -		if (ASIC_IS_AVIVO(rdev) && -		    (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)) -			adjusted_clock = mode->clock * 2; -		else -			adjusted_clock = mode->clock; +		atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, +				      &crev); + +		memset(&args, 0, sizeof(args)); + +		switch (frev) { +		case 1: +			switch (crev) { +			case 1: +			case 2: +				args.v1.usPixelClock = cpu_to_le16(mode->clock / 10); +				args.v1.ucTransmitterID = radeon_encoder->encoder_id; +				args.v1.ucEncodeMode = atombios_get_encoder_mode(encoder); + +				atom_execute_table(rdev->mode_info.atom_context, +						   index, (uint32_t *)&args); +				adjusted_clock = le16_to_cpu(args.v1.usPixelClock) * 10; +				break; +			default: +				DRM_ERROR("Unknown table version %d %d\n", frev, crev); +				return adjusted_clock; +			} +			break; +		default: +			DRM_ERROR("Unknown table version %d %d\n", frev, crev); +			return adjusted_clock; +		} +	} +	return adjusted_clock; +} + +union set_pixel_clock { +	SET_PIXEL_CLOCK_PS_ALLOCATION base; +	PIXEL_CLOCK_PARAMETERS v1; +	PIXEL_CLOCK_PARAMETERS_V2 v2; +	PIXEL_CLOCK_PARAMETERS_V3 v3; +}; + +void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode) +{ +	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); +	struct drm_device *dev = crtc->dev; +	struct radeon_device *rdev = dev->dev_private; +	struct drm_encoder *encoder = NULL; +	struct radeon_encoder *radeon_encoder = NULL; +	u8 frev, crev; +	int index; +	union set_pixel_clock args; +	u32 pll_clock = mode->clock; +	u32 ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0; +	struct radeon_pll *pll; +	u32 adjusted_clock; + +	memset(&args, 0, sizeof(args)); + +	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { +		if (encoder->crtc == crtc) { +			radeon_encoder = to_radeon_encoder(encoder); +			break; +		}  	} +	if (!radeon_encoder) +		return; +  	if (radeon_crtc->crtc_id == 0)  		pll = &rdev->clock.p1pll;  	else  		pll = &rdev->clock.p2pll; +	/* adjust pixel clock as needed */ +	adjusted_clock = atombios_adjust_pll(crtc, mode, pll); +  	if (ASIC_IS_AVIVO(rdev)) {  		if (radeon_new_pll)  			radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock,  						 &fb_div, &frac_fb_div, -						 &ref_div, &post_div, pll_flags); +						 &ref_div, &post_div);  		else  			radeon_compute_pll(pll, adjusted_clock, &pll_clock,  					   &fb_div, &frac_fb_div, -					   &ref_div, &post_div, pll_flags); +					   &ref_div, &post_div);  	} else  		radeon_compute_pll(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, -				   &ref_div, &post_div, pll_flags); +				   &ref_div, &post_div);  	index = GetIndexIntoMasterTable(COMMAND, SetPixelClock);  	atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, @@ -520,45 +571,38 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  	case 1:  		switch (crev) {  		case 1: -			spc1_ptr = (PIXEL_CLOCK_PARAMETERS *) & args.sPCLKInput; -			spc1_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); -			spc1_ptr->usRefDiv = cpu_to_le16(ref_div); -			spc1_ptr->usFbDiv = cpu_to_le16(fb_div); -			spc1_ptr->ucFracFbDiv = frac_fb_div; -			spc1_ptr->ucPostDiv = post_div; -			spc1_ptr->ucPpll = +			args.v1.usPixelClock = cpu_to_le16(mode->clock / 10); +			args.v1.usRefDiv = cpu_to_le16(ref_div); +			args.v1.usFbDiv = cpu_to_le16(fb_div); +			args.v1.ucFracFbDiv = frac_fb_div; +			args.v1.ucPostDiv = post_div; +			args.v1.ucPpll =  			    radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; -			spc1_ptr->ucCRTC = radeon_crtc->crtc_id; -			spc1_ptr->ucRefDivSrc = 1; +			args.v1.ucCRTC = radeon_crtc->crtc_id; +			args.v1.ucRefDivSrc = 1;  			break;  		case 2: -			spc2_ptr = -			    (PIXEL_CLOCK_PARAMETERS_V2 *) & args.sPCLKInput; -			spc2_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); -			spc2_ptr->usRefDiv = cpu_to_le16(ref_div); -			spc2_ptr->usFbDiv = cpu_to_le16(fb_div); -			spc2_ptr->ucFracFbDiv = frac_fb_div; -			spc2_ptr->ucPostDiv = post_div; -			spc2_ptr->ucPpll = +			args.v2.usPixelClock = cpu_to_le16(mode->clock / 10); +			args.v2.usRefDiv = cpu_to_le16(ref_div); +			args.v2.usFbDiv = cpu_to_le16(fb_div); +			args.v2.ucFracFbDiv = frac_fb_div; +			args.v2.ucPostDiv = post_div; +			args.v2.ucPpll =  			    radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; -			spc2_ptr->ucCRTC = radeon_crtc->crtc_id; -			spc2_ptr->ucRefDivSrc = 1; +			args.v2.ucCRTC = radeon_crtc->crtc_id; +			args.v2.ucRefDivSrc = 1;  			break;  		case 3: -			if (!encoder) -				return; -			spc3_ptr = -			    (PIXEL_CLOCK_PARAMETERS_V3 *) & args.sPCLKInput; -			spc3_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); -			spc3_ptr->usRefDiv = cpu_to_le16(ref_div); -			spc3_ptr->usFbDiv = cpu_to_le16(fb_div); -			spc3_ptr->ucFracFbDiv = frac_fb_div; -			spc3_ptr->ucPostDiv = post_div; -			spc3_ptr->ucPpll = +			args.v3.usPixelClock = cpu_to_le16(mode->clock / 10); +			args.v3.usRefDiv = cpu_to_le16(ref_div); +			args.v3.usFbDiv = cpu_to_le16(fb_div); +			args.v3.ucFracFbDiv = frac_fb_div; +			args.v3.ucPostDiv = post_div; +			args.v3.ucPpll =  			    radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; -			spc3_ptr->ucMiscInfo = (radeon_crtc->crtc_id << 2); -			spc3_ptr->ucTransmitterId = radeon_encoder->encoder_id; -			spc3_ptr->ucEncoderMode = +			args.v3.ucMiscInfo = (radeon_crtc->crtc_id << 2); +			args.v3.ucTransmitterId = radeon_encoder->encoder_id; +			args.v3.ucEncoderMode =  			    atombios_get_encoder_mode(encoder);  			break;  		default: @@ -571,12 +615,11 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  		return;  	} -	printk("executing set pll\n");  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);  } -int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, -			   struct drm_framebuffer *old_fb) +static int avivo_crtc_set_base(struct drm_crtc *crtc, int x, int y, +			       struct drm_framebuffer *old_fb)  {  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);  	struct drm_device *dev = crtc->dev; @@ -706,6 +749,42 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,  	return 0;  } +int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, +			   struct drm_framebuffer *old_fb) +{ +	struct drm_device *dev = crtc->dev; +	struct radeon_device *rdev = dev->dev_private; + +	if (ASIC_IS_AVIVO(rdev)) +		return avivo_crtc_set_base(crtc, x, y, old_fb); +	else +		return radeon_crtc_set_base(crtc, x, y, old_fb); +} + +/* properly set additional regs when using atombios */ +static void radeon_legacy_atom_fixup(struct drm_crtc *crtc) +{ +	struct drm_device *dev = crtc->dev; +	struct radeon_device *rdev = dev->dev_private; +	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); +	u32 disp_merge_cntl; + +	switch (radeon_crtc->crtc_id) { +	case 0: +		disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL); +		disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN; +		WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl); +		break; +	case 1: +		disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL); +		disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN; +		WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl); +		WREG32(RADEON_FP_H2_SYNC_STRT_WID,   RREG32(RADEON_CRTC2_H_SYNC_STRT_WID)); +		WREG32(RADEON_FP_V2_SYNC_STRT_WID,   RREG32(RADEON_CRTC2_V_SYNC_STRT_WID)); +		break; +	} +} +  int atombios_crtc_mode_set(struct drm_crtc *crtc,  			   struct drm_display_mode *mode,  			   struct drm_display_mode *adjusted_mode, @@ -727,8 +806,8 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,  	else {  		if (radeon_crtc->crtc_id == 0)  			atombios_set_crtc_dtd_timing(crtc, adjusted_mode); -		radeon_crtc_set_base(crtc, x, y, old_fb); -		radeon_legacy_atom_set_surface(crtc); +		atombios_crtc_set_base(crtc, x, y, old_fb); +		radeon_legacy_atom_fixup(crtc);  	}  	atombios_overscan_setup(crtc, mode, adjusted_mode);  	atombios_scaler_setup(crtc); @@ -746,8 +825,8 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,  static void atombios_crtc_prepare(struct drm_crtc *crtc)  { -	atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);  	atombios_lock_crtc(crtc, 1); +	atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);  }  static void atombios_crtc_commit(struct drm_crtc *crtc) diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index 3eb0ca5b3d7..99915a682d5 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c @@ -332,11 +332,13 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,  	PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION args;  	int index = GetIndexIntoMasterTable(COMMAND, ProcessAuxChannelTransaction);  	unsigned char *base; +	int retry_count = 0;  	memset(&args, 0, sizeof(args));  	base = (unsigned char *)rdev->mode_info.atom_context->scratch; +retry:  	memcpy(base, req_bytes, num_bytes);  	args.lpAuxRequest = 0; @@ -347,10 +349,12 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); -	if (args.ucReplyStatus) { -		DRM_DEBUG("failed to get auxch %02x%02x %02x %02x 0x%02x %02x\n", +	if (args.ucReplyStatus && !args.ucDataOutLen) { +		if (args.ucReplyStatus == 0x20 && retry_count++ < 10) +			goto retry; +		DRM_DEBUG("failed to get auxch %02x%02x %02x %02x 0x%02x %02x after %d retries\n",  			  req_bytes[1], req_bytes[0], req_bytes[2], req_bytes[3], -			  chan->rec.i2c_id, args.ucReplyStatus); +			  chan->rec.i2c_id, args.ucReplyStatus, retry_count);  		return false;  	} @@ -468,7 +472,7 @@ void radeon_dp_set_link_config(struct drm_connector *connector,  	struct radeon_connector *radeon_connector;  	struct radeon_connector_atom_dig *dig_connector; -	if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) || +	if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) &&  	    (connector->connector_type != DRM_MODE_CONNECTOR_eDP))  		return; @@ -583,7 +587,7 @@ void dp_link_train(struct drm_encoder *encoder,  	u8 train_set[4];  	int i; -	if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) || +	if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) &&  	    (connector->connector_type != DRM_MODE_CONNECTOR_eDP))  		return; @@ -596,21 +600,14 @@ void dp_link_train(struct drm_encoder *encoder,  		return;  	dig_connector = radeon_connector->con_priv; -	if (ASIC_IS_DCE32(rdev)) { -		if (dig->dig_block) -			enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER; -		else -			enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER; -		if (dig_connector->linkb) -			enc_id |= ATOM_DP_CONFIG_LINK_B; -		else -			enc_id |= ATOM_DP_CONFIG_LINK_A; -	} else { -		if (dig_connector->linkb) -			enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER | ATOM_DP_CONFIG_LINK_B; -		else -			enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER | ATOM_DP_CONFIG_LINK_A; -	} +	if (dig->dig_encoder) +		enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER; +	else +		enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER; +	if (dig_connector->linkb) +		enc_id |= ATOM_DP_CONFIG_LINK_B; +	else +		enc_id |= ATOM_DP_CONFIG_LINK_A;  	memset(link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);  	if (dig_connector->dp_clock == 270000) diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index 8760d66e058..c0d4650cdb7 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c @@ -354,11 +354,17 @@ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc)  		return RREG32(RADEON_CRTC2_CRNT_FRAME);  } +/* Who ever call radeon_fence_emit should call ring_lock and ask + * for enough space (today caller are ib schedule and buffer move) */  void r100_fence_ring_emit(struct radeon_device *rdev,  			  struct radeon_fence *fence)  { -	/* Who ever call radeon_fence_emit should call ring_lock and ask -	 * for enough space (today caller are ib schedule and buffer move) */ +	/* We have to make sure that caches are flushed before +	 * CPU might read something from VRAM. */ +	radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); +	radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL); +	radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0)); +	radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL);  	/* Wait until IDLE & CLEAN */  	radeon_ring_write(rdev, PACKET0(0x1720, 0));  	radeon_ring_write(rdev, (1 << 16) | (1 << 17)); @@ -1504,6 +1510,7 @@ static int r100_packet3_check(struct radeon_cs_parser *p,  			DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n");  			return -EINVAL;  		} +		track->vtx_size = r100_get_vtx_size(radeon_get_ib_value(p, idx + 0));  		track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);  		track->immd_dwords = pkt->count - 1;  		r = r100_cs_track_check(p->rdev, track); @@ -3368,7 +3375,6 @@ int r100_suspend(struct radeon_device *rdev)  void r100_fini(struct radeon_device *rdev)  { -	r100_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -3399,9 +3405,7 @@ int r100_mc_init(struct radeon_device *rdev)  	if (rdev->flags & RADEON_IS_AGP) {  		r = radeon_agp_init(rdev);  		if (r) { -			printk(KERN_WARNING "[drm] Disabling AGP\n"); -			rdev->flags &= ~RADEON_IS_AGP; -			rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; +			radeon_agp_disable(rdev);  		} else {  			rdev->mc.gtt_location = rdev->mc.agp_base;  		} @@ -3482,13 +3486,12 @@ int r100_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		r100_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); +		radeon_irq_kms_fini(rdev);  		if (rdev->flags & RADEON_IS_PCI)  			r100_pci_gart_fini(rdev); -		radeon_irq_kms_fini(rdev);  		rdev->accel_working = false;  	}  	return 0; diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c index 20942127c46..ff1e0cd608b 100644 --- a/drivers/gpu/drm/radeon/r200.c +++ b/drivers/gpu/drm/radeon/r200.c @@ -371,13 +371,16 @@ int r200_packet0_check(struct radeon_cs_parser *p,  		case 5:  		case 6:  		case 7: +			/* 1D/2D */  			track->textures[i].tex_coord_type = 0;  			break;  		case 1: -			track->textures[i].tex_coord_type = 1; +			/* CUBE */ +			track->textures[i].tex_coord_type = 2;  			break;  		case 2: -			track->textures[i].tex_coord_type = 2; +			/* 3D */ +			track->textures[i].tex_coord_type = 1;  			break;  		}  		break; diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 0051d11b907..43b55a030b4 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c @@ -506,11 +506,14 @@ void r300_vram_info(struct radeon_device *rdev)  	/* DDR for all card after R300 & IGP */  	rdev->mc.vram_is_ddr = true; +  	tmp = RREG32(RADEON_MEM_CNTL); -	if (tmp & R300_MEM_NUM_CHANNELS_MASK) { -		rdev->mc.vram_width = 128; -	} else { -		rdev->mc.vram_width = 64; +	tmp &= R300_MEM_NUM_CHANNELS_MASK; +	switch (tmp) { +	case 0: rdev->mc.vram_width = 64; break; +	case 1: rdev->mc.vram_width = 128; break; +	case 2: rdev->mc.vram_width = 256; break; +	default:  rdev->mc.vram_width = 128; break;  	}  	r100_vram_init_sizes(rdev); @@ -1327,7 +1330,6 @@ int r300_suspend(struct radeon_device *rdev)  void r300_fini(struct radeon_device *rdev)  { -	r300_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -1418,15 +1420,15 @@ int r300_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		r300_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); +		radeon_irq_kms_fini(rdev);  		if (rdev->flags & RADEON_IS_PCIE)  			rv370_pcie_gart_fini(rdev);  		if (rdev->flags & RADEON_IS_PCI)  			r100_pci_gart_fini(rdev); -		radeon_irq_kms_fini(rdev); +		radeon_agp_fini(rdev);  		rdev->accel_working = false;  	}  	return 0; diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c index 053404e71a9..d9373246c97 100644 --- a/drivers/gpu/drm/radeon/r420.c +++ b/drivers/gpu/drm/radeon/r420.c @@ -50,9 +50,7 @@ int r420_mc_init(struct radeon_device *rdev)  	if (rdev->flags & RADEON_IS_AGP) {  		r = radeon_agp_init(rdev);  		if (r) { -			printk(KERN_WARNING "[drm] Disabling AGP\n"); -			rdev->flags &= ~RADEON_IS_AGP; -			rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; +			radeon_agp_disable(rdev);  		} else {  			rdev->mc.gtt_location = rdev->mc.agp_base;  		} @@ -391,16 +389,15 @@ int r420_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		r420_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); +		radeon_irq_kms_fini(rdev);  		if (rdev->flags & RADEON_IS_PCIE)  			rv370_pcie_gart_fini(rdev);  		if (rdev->flags & RADEON_IS_PCI)  			r100_pci_gart_fini(rdev);  		radeon_agp_fini(rdev); -		radeon_irq_kms_fini(rdev);  		rdev->accel_working = false;  	}  	return 0; diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c index 9a189072f2b..ddf5731eba0 100644 --- a/drivers/gpu/drm/radeon/r520.c +++ b/drivers/gpu/drm/radeon/r520.c @@ -294,13 +294,12 @@ int r520_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		rv515_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); +		radeon_irq_kms_fini(rdev);  		rv370_pcie_gart_fini(rdev);  		radeon_agp_fini(rdev); -		radeon_irq_kms_fini(rdev);  		rdev->accel_working = false;  	}  	return 0; diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index f5ff3490929..2ffcf5a0355 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c @@ -624,7 +624,6 @@ int r600_mc_init(struct radeon_device *rdev)  	fixed20_12 a;  	u32 tmp;  	int chansize, numchan; -	int r;  	/* Get VRAM informations */  	rdev->mc.vram_is_ddr = true; @@ -667,9 +666,6 @@ int r600_mc_init(struct radeon_device *rdev)  		rdev->mc.real_vram_size = rdev->mc.aper_size;  	if (rdev->flags & RADEON_IS_AGP) { -		r = radeon_agp_init(rdev); -		if (r) -			return r;  		/* gtt_size is setup by radeon_agp_init */  		rdev->mc.gtt_location = rdev->mc.agp_base;  		tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size; @@ -1658,6 +1654,12 @@ void r600_ring_init(struct radeon_device *rdev, unsigned ring_size)  	rdev->cp.align_mask = 16 - 1;  } +void r600_cp_fini(struct radeon_device *rdev) +{ +	r600_cp_stop(rdev); +	radeon_ring_fini(rdev); +} +  /*   * GPU scratch registers helpers function. @@ -1792,23 +1794,24 @@ void r600_fence_ring_emit(struct radeon_device *rdev,  	radeon_ring_write(rdev, RB_INT_STAT);  } -int r600_copy_dma(struct radeon_device *rdev, -		  uint64_t src_offset, -		  uint64_t dst_offset, -		  unsigned num_pages, -		  struct radeon_fence *fence) -{ -	/* FIXME: implement */ -	return 0; -} -  int r600_copy_blit(struct radeon_device *rdev,  		   uint64_t src_offset, uint64_t dst_offset,  		   unsigned num_pages, struct radeon_fence *fence)  { -	r600_blit_prepare_copy(rdev, num_pages * RADEON_GPU_PAGE_SIZE); +	int r; + +	mutex_lock(&rdev->r600_blit.mutex); +	rdev->r600_blit.vb_ib = NULL; +	r = r600_blit_prepare_copy(rdev, num_pages * RADEON_GPU_PAGE_SIZE); +	if (r) { +		if (rdev->r600_blit.vb_ib) +			radeon_ib_free(rdev, &rdev->r600_blit.vb_ib); +		mutex_unlock(&rdev->r600_blit.mutex); +		return r; +	}  	r600_kms_blit_copy(rdev, src_offset, dst_offset, num_pages * RADEON_GPU_PAGE_SIZE);  	r600_blit_done_copy(rdev, fence); +	mutex_unlock(&rdev->r600_blit.mutex);  	return 0;  } @@ -1864,26 +1867,25 @@ int r600_startup(struct radeon_device *rdev)  			return r;  	}  	r600_gpu_init(rdev); - -	if (!rdev->r600_blit.shader_obj) { -		r = r600_blit_init(rdev); +	r = r600_blit_init(rdev); +	if (r) { +		r600_blit_fini(rdev); +		rdev->asic->copy = NULL; +		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); +	} +	/* pin copy shader into vram */ +	if (rdev->r600_blit.shader_obj) { +		r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); +		if (unlikely(r != 0)) +			return r; +		r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, +				&rdev->r600_blit.shader_gpu_addr); +		radeon_bo_unreserve(rdev->r600_blit.shader_obj);  		if (r) { -			DRM_ERROR("radeon: failed blitter (%d).\n", r); +			dev_err(rdev->dev, "(%d) pin blit object failed\n", r);  			return r;  		}  	} - -	r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); -	if (unlikely(r != 0)) -		return r; -	r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, -			&rdev->r600_blit.shader_gpu_addr); -	radeon_bo_unreserve(rdev->r600_blit.shader_obj); -	if (r) { -		dev_err(rdev->dev, "(%d) pin blit object failed\n", r); -		return r; -	} -  	/* Enable IRQ */  	r = r600_irq_init(rdev);  	if (r) { @@ -1948,6 +1950,13 @@ int r600_resume(struct radeon_device *rdev)  		DRM_ERROR("radeon: failled testing IB (%d).\n", r);  		return r;  	} + +	r = r600_audio_init(rdev); +	if (r) { +		DRM_ERROR("radeon: audio resume failed\n"); +		return r; +	} +  	return r;  } @@ -1955,17 +1964,21 @@ int r600_suspend(struct radeon_device *rdev)  {  	int r; +	r600_audio_fini(rdev);  	/* FIXME: we should wait for ring to be empty */  	r600_cp_stop(rdev);  	rdev->cp.ready = false; +	r600_irq_suspend(rdev);  	r600_wb_disable(rdev);  	r600_pcie_gart_disable(rdev);  	/* unpin shaders bo */ -	r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); -	if (unlikely(r != 0)) -		return r; -	radeon_bo_unpin(rdev->r600_blit.shader_obj); -	radeon_bo_unreserve(rdev->r600_blit.shader_obj); +	if (rdev->r600_blit.shader_obj) { +		r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); +		if (!r) { +			radeon_bo_unpin(rdev->r600_blit.shader_obj); +			radeon_bo_unreserve(rdev->r600_blit.shader_obj); +		} +	}  	return 0;  } @@ -2026,6 +2039,11 @@ int r600_init(struct radeon_device *rdev)  	r = radeon_fence_driver_init(rdev);  	if (r)  		return r; +	if (rdev->flags & RADEON_IS_AGP) { +		r = radeon_agp_init(rdev); +		if (r) +			radeon_agp_disable(rdev); +	}  	r = r600_mc_init(rdev);  	if (r)  		return r; @@ -2051,22 +2069,25 @@ int r600_init(struct radeon_device *rdev)  	rdev->accel_working = true;  	r = r600_startup(rdev);  	if (r) { -		r600_suspend(rdev); +		dev_err(rdev->dev, "disabling GPU acceleration\n"); +		r600_cp_fini(rdev);  		r600_wb_fini(rdev); -		radeon_ring_fini(rdev); +		r600_irq_fini(rdev); +		radeon_irq_kms_fini(rdev);  		r600_pcie_gart_fini(rdev);  		rdev->accel_working = false;  	}  	if (rdev->accel_working) {  		r = radeon_ib_pool_init(rdev);  		if (r) { -			DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r); -			rdev->accel_working = false; -		} -		r = r600_ib_test(rdev); -		if (r) { -			DRM_ERROR("radeon: failed testing IB (%d).\n", r); +			dev_err(rdev->dev, "IB initialization failed (%d).\n", r);  			rdev->accel_working = false; +		} else { +			r = r600_ib_test(rdev); +			if (r) { +				dev_err(rdev->dev, "IB test failed (%d).\n", r); +				rdev->accel_working = false; +			}  		}  	} @@ -2078,20 +2099,17 @@ int r600_init(struct radeon_device *rdev)  void r600_fini(struct radeon_device *rdev)  { -	/* Suspend operations */ -	r600_suspend(rdev); -  	r600_audio_fini(rdev);  	r600_blit_fini(rdev); +	r600_cp_fini(rdev); +	r600_wb_fini(rdev);  	r600_irq_fini(rdev);  	radeon_irq_kms_fini(rdev); -	radeon_ring_fini(rdev); -	r600_wb_fini(rdev);  	r600_pcie_gart_fini(rdev); +	radeon_agp_fini(rdev);  	radeon_gem_fini(rdev);  	radeon_fence_driver_fini(rdev);  	radeon_clocks_fini(rdev); -	radeon_agp_fini(rdev);  	radeon_bo_fini(rdev);  	radeon_atombios_fini(rdev);  	kfree(rdev->bios); @@ -2197,14 +2215,14 @@ void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size)  	rb_bufsz = drm_order(ring_size / 4);  	ring_size = (1 << rb_bufsz) * 4;  	rdev->ih.ring_size = ring_size; -	rdev->ih.align_mask = 4 - 1; +	rdev->ih.ptr_mask = rdev->ih.ring_size - 1; +	rdev->ih.rptr = 0;  } -static int r600_ih_ring_alloc(struct radeon_device *rdev, unsigned ring_size) +static int r600_ih_ring_alloc(struct radeon_device *rdev)  {  	int r; -	rdev->ih.ring_size = ring_size;  	/* Allocate ring buffer */  	if (rdev->ih.ring_obj == NULL) {  		r = radeon_bo_create(rdev, NULL, rdev->ih.ring_size, @@ -2234,9 +2252,6 @@ static int r600_ih_ring_alloc(struct radeon_device *rdev, unsigned ring_size)  			return r;  		}  	} -	rdev->ih.ptr_mask = (rdev->cp.ring_size / 4) - 1; -	rdev->ih.rptr = 0; -  	return 0;  } @@ -2386,7 +2401,7 @@ int r600_irq_init(struct radeon_device *rdev)  	u32 interrupt_cntl, ih_cntl, ih_rb_cntl;  	/* allocate ring */ -	ret = r600_ih_ring_alloc(rdev, rdev->ih.ring_size); +	ret = r600_ih_ring_alloc(rdev);  	if (ret)  		return ret; @@ -2449,10 +2464,15 @@ int r600_irq_init(struct radeon_device *rdev)  	return ret;  } -void r600_irq_fini(struct radeon_device *rdev) +void r600_irq_suspend(struct radeon_device *rdev)  {  	r600_disable_interrupts(rdev);  	r600_rlc_stop(rdev); +} + +void r600_irq_fini(struct radeon_device *rdev) +{ +	r600_irq_suspend(rdev);  	r600_ih_ring_fini(rdev);  } @@ -2467,8 +2487,12 @@ int r600_irq_set(struct radeon_device *rdev)  		return -EINVAL;  	}  	/* don't enable anything if the ih is disabled */ -	if (!rdev->ih.enabled) +	if (!rdev->ih.enabled) { +		r600_disable_interrupts(rdev); +		/* force the active interrupt state to all disabled */ +		r600_disable_interrupt_state(rdev);  		return 0; +	}  	if (ASIC_IS_DCE3(rdev)) {  		hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; @@ -2638,16 +2662,18 @@ static inline u32 r600_get_ih_wptr(struct radeon_device *rdev)  	wptr = RREG32(IH_RB_WPTR);  	if (wptr & RB_OVERFLOW) { -		WARN_ON(1); -		/* XXX deal with overflow */ -		DRM_ERROR("IH RB overflow\n"); +		/* When a ring buffer overflow happen start parsing interrupt +		 * from the last not overwritten vector (wptr + 16). Hopefully +		 * this should allow us to catchup. +		 */ +		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n", +			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask); +		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;  		tmp = RREG32(IH_RB_CNTL);  		tmp |= IH_WPTR_OVERFLOW_CLEAR;  		WREG32(IH_RB_CNTL, tmp);  	} -	wptr = wptr & WPTR_OFFSET_MASK; - -	return wptr; +	return (wptr & rdev->ih.ptr_mask);  }  /*        r600 IV Ring @@ -2683,12 +2709,13 @@ int r600_irq_process(struct radeon_device *rdev)  	u32 wptr = r600_get_ih_wptr(rdev);  	u32 rptr = rdev->ih.rptr;  	u32 src_id, src_data; -	u32 last_entry = rdev->ih.ring_size - 16;  	u32 ring_index, disp_int, disp_int_cont, disp_int_cont2;  	unsigned long flags;  	bool queue_hotplug = false;  	DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr); +	if (!rdev->ih.enabled) +		return IRQ_NONE;  	spin_lock_irqsave(&rdev->ih.lock, flags); @@ -2817,10 +2844,8 @@ restart_ih:  		}  		/* wptr/rptr are in bytes! */ -		if (rptr == last_entry) -			rptr = 0; -		else -			rptr += 16; +		rptr += 16; +		rptr &= rdev->ih.ptr_mask;  	}  	/* make sure wptr hasn't changed while processing */  	wptr = r600_get_ih_wptr(rdev); @@ -2888,3 +2913,18 @@ int r600_debugfs_mc_info_init(struct radeon_device *rdev)  	return 0;  #endif  } + +/** + * r600_ioctl_wait_idle - flush host path cache on wait idle ioctl + * rdev: radeon device structure + * bo: buffer object struct which userspace is waiting for idle + * + * Some R6XX/R7XX doesn't seems to take into account HDP flush performed + * through ring buffer, this leads to corruption in rendering, see + * http://bugzilla.kernel.org/show_bug.cgi?id=15186 to avoid this we + * directly perform HDP flush by writing register through MMIO. + */ +void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo) +{ +	WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); +} diff --git a/drivers/gpu/drm/radeon/r600_audio.c b/drivers/gpu/drm/radeon/r600_audio.c index 99e2c3891a7..0dcb6904c4f 100644 --- a/drivers/gpu/drm/radeon/r600_audio.c +++ b/drivers/gpu/drm/radeon/r600_audio.c @@ -35,7 +35,7 @@   */  static int r600_audio_chipset_supported(struct radeon_device *rdev)  { -	return rdev->family >= CHIP_R600 +	return (rdev->family >= CHIP_R600 && rdev->family < CHIP_RV710)  		|| rdev->family == CHIP_RS600  		|| rdev->family == CHIP_RS690  		|| rdev->family == CHIP_RS740; @@ -261,7 +261,6 @@ void r600_audio_fini(struct radeon_device *rdev)  	if (!r600_audio_chipset_supported(rdev))  		return; -	WREG32_P(R600_AUDIO_ENABLE, 0x0, ~0x81000000); -  	del_timer(&rdev->audio_timer); +	WREG32_P(R600_AUDIO_ENABLE, 0x0, ~0x81000000);  } diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c index 8787ea89dc6..af1c3ca8a4c 100644 --- a/drivers/gpu/drm/radeon/r600_blit_kms.c +++ b/drivers/gpu/drm/radeon/r600_blit_kms.c @@ -449,6 +449,7 @@ int r600_blit_init(struct radeon_device *rdev)  	u32 packet2s[16];  	int num_packet2s = 0; +	mutex_init(&rdev->r600_blit.mutex);  	rdev->r600_blit.state_offset = 0;  	if (rdev->family >= CHIP_RV770) @@ -512,14 +513,16 @@ void r600_blit_fini(struct radeon_device *rdev)  {  	int r; +	if (rdev->r600_blit.shader_obj == NULL) +		return; +	/* If we can't reserve the bo, unref should be enough to destroy +	 * it when it becomes idle. +	 */  	r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); -	if (unlikely(r != 0)) { -		dev_err(rdev->dev, "(%d) can't finish r600 blit\n", r); -		goto out_unref; +	if (!r) { +		radeon_bo_unpin(rdev->r600_blit.shader_obj); +		radeon_bo_unreserve(rdev->r600_blit.shader_obj);  	} -	radeon_bo_unpin(rdev->r600_blit.shader_obj); -	radeon_bo_unreserve(rdev->r600_blit.shader_obj); -out_unref:  	radeon_bo_unref(&rdev->r600_blit.shader_obj);  } @@ -555,7 +558,8 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)  	int dwords_per_loop = 76, num_loops;  	r = r600_vb_ib_get(rdev); -	WARN_ON(r); +	if (r) +		return r;  	/* set_render_target emits 2 extra dwords on rv6xx */  	if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770) @@ -581,7 +585,8 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)  	ring_size += 5; /* done copy */  	ring_size += 7; /* fence emit for done copy */  	r = radeon_ring_lock(rdev, ring_size); -	WARN_ON(r); +	if (r) +		return r;  	set_default_state(rdev); /* 14 */  	set_shaders(rdev); /* 26 */ diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c index 44060b92d9e..e4c45ec1650 100644 --- a/drivers/gpu/drm/radeon/r600_cs.c +++ b/drivers/gpu/drm/radeon/r600_cs.c @@ -36,6 +36,10 @@ static int r600_cs_packet_next_reloc_nomm(struct radeon_cs_parser *p,  typedef int (*next_reloc_t)(struct radeon_cs_parser*, struct radeon_cs_reloc**);  static next_reloc_t r600_cs_packet_next_reloc = &r600_cs_packet_next_reloc_mm; +struct r600_cs_track { +	u32	cb_color0_base_last; +}; +  /**   * r600_cs_packet_parse() - parse cp packet and point ib index to next packet   * @parser:	parser structure holding parsing context. @@ -177,6 +181,28 @@ static int r600_cs_packet_next_reloc_nomm(struct radeon_cs_parser *p,  }  /** + * r600_cs_packet_next_is_pkt3_nop() - test if next packet is packet3 nop for reloc + * @parser:		parser structure holding parsing context. + * + * Check next packet is relocation packet3, do bo validation and compute + * GPU offset using the provided start. + **/ +static inline int r600_cs_packet_next_is_pkt3_nop(struct radeon_cs_parser *p) +{ +	struct radeon_cs_packet p3reloc; +	int r; + +	r = r600_cs_packet_parse(p, &p3reloc, p->idx); +	if (r) { +		return 0; +	} +	if (p3reloc.type != PACKET_TYPE3 || p3reloc.opcode != PACKET3_NOP) { +		return 0; +	} +	return 1; +} + +/**   * r600_cs_packet_next_vline() - parse userspace VLINE packet   * @parser:		parser structure holding parsing context.   * @@ -337,6 +363,7 @@ static int r600_packet3_check(struct radeon_cs_parser *p,  				struct radeon_cs_packet *pkt)  {  	struct radeon_cs_reloc *reloc; +	struct r600_cs_track *track;  	volatile u32 *ib;  	unsigned idx;  	unsigned i; @@ -344,6 +371,7 @@ static int r600_packet3_check(struct radeon_cs_parser *p,  	int r;  	u32 idx_value; +	track = (struct r600_cs_track *)p->track;  	ib = p->ib->ptr;  	idx = pkt->idx + 1;  	idx_value = radeon_get_ib_value(p, idx); @@ -503,9 +531,60 @@ static int r600_packet3_check(struct radeon_cs_parser *p,  		for (i = 0; i < pkt->count; i++) {  			reg = start_reg + (4 * i);  			switch (reg) { +			/* This register were added late, there is userspace +			 * which does provide relocation for those but set +			 * 0 offset. In order to avoid breaking old userspace +			 * we detect this and set address to point to last +			 * CB_COLOR0_BASE, note that if userspace doesn't set +			 * CB_COLOR0_BASE before this register we will report +			 * error. Old userspace always set CB_COLOR0_BASE +			 * before any of this. +			 */ +			case R_0280E0_CB_COLOR0_FRAG: +			case R_0280E4_CB_COLOR1_FRAG: +			case R_0280E8_CB_COLOR2_FRAG: +			case R_0280EC_CB_COLOR3_FRAG: +			case R_0280F0_CB_COLOR4_FRAG: +			case R_0280F4_CB_COLOR5_FRAG: +			case R_0280F8_CB_COLOR6_FRAG: +			case R_0280FC_CB_COLOR7_FRAG: +			case R_0280C0_CB_COLOR0_TILE: +			case R_0280C4_CB_COLOR1_TILE: +			case R_0280C8_CB_COLOR2_TILE: +			case R_0280CC_CB_COLOR3_TILE: +			case R_0280D0_CB_COLOR4_TILE: +			case R_0280D4_CB_COLOR5_TILE: +			case R_0280D8_CB_COLOR6_TILE: +			case R_0280DC_CB_COLOR7_TILE: +				if (!r600_cs_packet_next_is_pkt3_nop(p)) { +					if (!track->cb_color0_base_last) { +						dev_err(p->dev, "Broken old userspace ? no cb_color0_base supplied before trying to write 0x%08X\n", reg); +						return -EINVAL; +					} +					ib[idx+1+i] = track->cb_color0_base_last; +					printk_once(KERN_WARNING "radeon: You have old & broken userspace " +						"please consider updating mesa & xf86-video-ati\n"); +				} else { +					r = r600_cs_packet_next_reloc(p, &reloc); +					if (r) { +						dev_err(p->dev, "bad SET_CONTEXT_REG 0x%04X\n", reg); +						return -EINVAL; +					} +					ib[idx+1+i] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); +				} +				break;  			case DB_DEPTH_BASE:  			case DB_HTILE_DATA_BASE:  			case CB_COLOR0_BASE: +				r = r600_cs_packet_next_reloc(p, &reloc); +				if (r) { +					DRM_ERROR("bad SET_CONTEXT_REG " +							"0x%04X\n", reg); +					return -EINVAL; +				} +				ib[idx+1+i] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); +				track->cb_color0_base_last = ib[idx+1+i]; +				break;  			case CB_COLOR1_BASE:  			case CB_COLOR2_BASE:  			case CB_COLOR3_BASE: @@ -678,8 +757,11 @@ static int r600_packet3_check(struct radeon_cs_parser *p,  int r600_cs_parse(struct radeon_cs_parser *p)  {  	struct radeon_cs_packet pkt; +	struct r600_cs_track *track;  	int r; +	track = kzalloc(sizeof(*track), GFP_KERNEL); +	p->track = track;  	do {  		r = r600_cs_packet_parse(p, &pkt, p->idx);  		if (r) { @@ -757,6 +839,7 @@ int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp,  	/* initialize parser */  	memset(&parser, 0, sizeof(struct radeon_cs_parser));  	parser.filp = filp; +	parser.dev = &dev->pdev->dev;  	parser.rdev = NULL;  	parser.family = family;  	parser.ib = &fake_ib; diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h index 05894edadab..30480881aed 100644 --- a/drivers/gpu/drm/radeon/r600d.h +++ b/drivers/gpu/drm/radeon/r600d.h @@ -882,4 +882,29 @@  #define		S_000E60_SOFT_RESET_VMC(x)		(((x) & 1) << 17)  #define R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL		0x5480 + +#define R_0280E0_CB_COLOR0_FRAG                      0x0280E0 +#define   S_0280E0_BASE_256B(x)                        (((x) & 0xFFFFFFFF) << 0) +#define   G_0280E0_BASE_256B(x)                        (((x) >> 0) & 0xFFFFFFFF) +#define   C_0280E0_BASE_256B                           0x00000000 +#define R_0280E4_CB_COLOR1_FRAG                      0x0280E4 +#define R_0280E8_CB_COLOR2_FRAG                      0x0280E8 +#define R_0280EC_CB_COLOR3_FRAG                      0x0280EC +#define R_0280F0_CB_COLOR4_FRAG                      0x0280F0 +#define R_0280F4_CB_COLOR5_FRAG                      0x0280F4 +#define R_0280F8_CB_COLOR6_FRAG                      0x0280F8 +#define R_0280FC_CB_COLOR7_FRAG                      0x0280FC +#define R_0280C0_CB_COLOR0_TILE                      0x0280C0 +#define   S_0280C0_BASE_256B(x)                        (((x) & 0xFFFFFFFF) << 0) +#define   G_0280C0_BASE_256B(x)                        (((x) >> 0) & 0xFFFFFFFF) +#define   C_0280C0_BASE_256B                           0x00000000 +#define R_0280C4_CB_COLOR1_TILE                      0x0280C4 +#define R_0280C8_CB_COLOR2_TILE                      0x0280C8 +#define R_0280CC_CB_COLOR3_TILE                      0x0280CC +#define R_0280D0_CB_COLOR4_TILE                      0x0280D0 +#define R_0280D4_CB_COLOR5_TILE                      0x0280D4 +#define R_0280D8_CB_COLOR6_TILE                      0x0280D8 +#define R_0280DC_CB_COLOR7_TILE                      0x0280DC + +  #endif diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index eb5f99b9469..f57480ba135 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -410,13 +410,13 @@ struct r600_ih {  	unsigned		wptr_old;  	unsigned		ring_size;  	uint64_t		gpu_addr; -	uint32_t		align_mask;  	uint32_t		ptr_mask;  	spinlock_t              lock;  	bool                    enabled;  };  struct r600_blit { +	struct mutex		mutex;  	struct radeon_bo	*shader_obj;  	u64 shader_gpu_addr;  	u32 vs_offset, ps_offset; @@ -465,6 +465,7 @@ struct radeon_cs_chunk {  };  struct radeon_cs_parser { +	struct device		*dev;  	struct radeon_device	*rdev;  	struct drm_file		*filp;  	/* chunks */ @@ -660,6 +661,13 @@ struct radeon_asic {  	void (*hpd_fini)(struct radeon_device *rdev);  	bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd);  	void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); +	/* ioctl hw specific callback. Some hw might want to perform special +	 * operation on specific ioctl. For instance on wait idle some hw +	 * might want to perform and HDP flush through MMIO as it seems that +	 * some R6XX/R7XX hw doesn't take HDP flush into account if programmed +	 * through ring. +	 */ +	void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo);  };  /* @@ -847,7 +855,7 @@ void r600_kms_blit_copy(struct radeon_device *rdev,  static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg)  { -	if (reg < 0x10000) +	if (reg < rdev->rmmio_size)  		return readl(((void __iomem *)rdev->rmmio) + reg);  	else {  		writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); @@ -857,7 +865,7 @@ static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg)  static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)  { -	if (reg < 0x10000) +	if (reg < rdev->rmmio_size)  		writel(v, ((void __iomem *)rdev->rmmio) + reg);  	else {  		writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); @@ -1017,6 +1025,8 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)  #define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd))  /* Common functions */ +/* AGP */ +extern void radeon_agp_disable(struct radeon_device *rdev);  extern int radeon_gart_table_vram_pin(struct radeon_device *rdev);  extern int radeon_modeset_init(struct radeon_device *rdev);  extern void radeon_modeset_fini(struct radeon_device *rdev); @@ -1140,6 +1150,7 @@ extern bool r600_card_posted(struct radeon_device *rdev);  extern void r600_cp_stop(struct radeon_device *rdev);  extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size);  extern int r600_cp_resume(struct radeon_device *rdev); +extern void r600_cp_fini(struct radeon_device *rdev);  extern int r600_count_pipe_bits(uint32_t val);  extern int r600_gart_clear_page(struct radeon_device *rdev, int i);  extern int r600_mc_wait_for_idle(struct radeon_device *rdev); @@ -1160,7 +1171,8 @@ extern int r600_irq_init(struct radeon_device *rdev);  extern void r600_irq_fini(struct radeon_device *rdev);  extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);  extern int r600_irq_set(struct radeon_device *rdev); - +extern void r600_irq_suspend(struct radeon_device *rdev); +/* r600 audio */  extern int r600_audio_init(struct radeon_device *rdev);  extern int r600_audio_tmds_index(struct drm_encoder *encoder);  extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock); diff --git a/drivers/gpu/drm/radeon/radeon_agp.c b/drivers/gpu/drm/radeon/radeon_agp.c index 220f454ea9f..c0681a5556d 100644 --- a/drivers/gpu/drm/radeon/radeon_agp.c +++ b/drivers/gpu/drm/radeon/radeon_agp.c @@ -144,9 +144,19 @@ int radeon_agp_init(struct radeon_device *rdev)  	ret = drm_agp_info(rdev->ddev, &info);  	if (ret) { +		drm_agp_release(rdev->ddev);  		DRM_ERROR("Unable to get AGP info: %d\n", ret);  		return ret;  	} + +	if (rdev->ddev->agp->agp_info.aper_size < 32) { +		drm_agp_release(rdev->ddev); +		dev_warn(rdev->dev, "AGP aperture too small (%zuM) " +			"need at least 32M, disabling AGP\n", +			rdev->ddev->agp->agp_info.aper_size); +		return -EINVAL; +	} +  	mode.mode = info.mode;  	agp_status = (RREG32(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode;  	is_v3 = !!(agp_status & RADEON_AGPv3_MODE); @@ -221,6 +231,7 @@ int radeon_agp_init(struct radeon_device *rdev)  	ret = drm_agp_enable(rdev->ddev, mode);  	if (ret) {  		DRM_ERROR("Unable to enable AGP (mode = 0x%lx)\n", mode.mode); +		drm_agp_release(rdev->ddev);  		return ret;  	} diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index f2fbd2e4e9d..05ee1aeac3f 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h @@ -117,6 +117,7 @@ static struct radeon_asic r100_asic = {  	.hpd_fini = &r100_hpd_fini,  	.hpd_sense = &r100_hpd_sense,  	.hpd_set_polarity = &r100_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -176,6 +177,7 @@ static struct radeon_asic r300_asic = {  	.hpd_fini = &r100_hpd_fini,  	.hpd_sense = &r100_hpd_sense,  	.hpd_set_polarity = &r100_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  };  /* @@ -219,6 +221,7 @@ static struct radeon_asic r420_asic = {  	.hpd_fini = &r100_hpd_fini,  	.hpd_sense = &r100_hpd_sense,  	.hpd_set_polarity = &r100_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -267,6 +270,7 @@ static struct radeon_asic rs400_asic = {  	.hpd_fini = &r100_hpd_fini,  	.hpd_sense = &r100_hpd_sense,  	.hpd_set_polarity = &r100_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -323,6 +327,7 @@ static struct radeon_asic rs600_asic = {  	.hpd_fini = &rs600_hpd_fini,  	.hpd_sense = &rs600_hpd_sense,  	.hpd_set_polarity = &rs600_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -370,6 +375,7 @@ static struct radeon_asic rs690_asic = {  	.hpd_fini = &rs600_hpd_fini,  	.hpd_sense = &rs600_hpd_sense,  	.hpd_set_polarity = &rs600_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -421,6 +427,7 @@ static struct radeon_asic rv515_asic = {  	.hpd_fini = &rs600_hpd_fini,  	.hpd_sense = &rs600_hpd_sense,  	.hpd_set_polarity = &rs600_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  }; @@ -463,6 +470,7 @@ static struct radeon_asic r520_asic = {  	.hpd_fini = &rs600_hpd_fini,  	.hpd_sense = &rs600_hpd_sense,  	.hpd_set_polarity = &rs600_hpd_set_polarity, +	.ioctl_wait_idle = NULL,  };  /* @@ -504,6 +512,7 @@ void r600_hpd_fini(struct radeon_device *rdev);  bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);  void r600_hpd_set_polarity(struct radeon_device *rdev,  			   enum radeon_hpd_id hpd); +extern void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo);  static struct radeon_asic r600_asic = {  	.init = &r600_init, @@ -538,6 +547,7 @@ static struct radeon_asic r600_asic = {  	.hpd_fini = &r600_hpd_fini,  	.hpd_sense = &r600_hpd_sense,  	.hpd_set_polarity = &r600_hpd_set_polarity, +	.ioctl_wait_idle = r600_ioctl_wait_idle,  };  /* @@ -582,6 +592,7 @@ static struct radeon_asic rv770_asic = {  	.hpd_fini = &r600_hpd_fini,  	.hpd_sense = &r600_hpd_sense,  	.hpd_set_polarity = &r600_hpd_set_polarity, +	.ioctl_wait_idle = r600_ioctl_wait_idle,  };  #endif diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index fa82ca74324..2dcda611587 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c @@ -287,6 +287,15 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,  			*connector_type = DRM_MODE_CONNECTOR_DVID;  	} +	/* XFX Pine Group device rv730 reports no VGA DDC lines +	 * even though they are wired up to record 0x93 +	 */ +	if ((dev->pdev->device == 0x9498) && +	    (dev->pdev->subsystem_vendor == 0x1682) && +	    (dev->pdev->subsystem_device == 0x2452)) { +		struct radeon_device *rdev = dev->dev_private; +		*i2c_bus = radeon_lookup_i2c_gpio(rdev, 0x93); +	}  	return true;  } diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 4ddfd4b5bc5..7932dc4d6b9 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -65,31 +65,42 @@ void radeon_benchmark_move(struct radeon_device *rdev, unsigned bsize,  	if (r) {  		goto out_cleanup;  	} -	start_jiffies = jiffies; -	for (i = 0; i < n; i++) { -		r = radeon_fence_create(rdev, &fence); -		if (r) { -			goto out_cleanup; + +	/* r100 doesn't have dma engine so skip the test */ +	if (rdev->asic->copy_dma) { + +		start_jiffies = jiffies; +		for (i = 0; i < n; i++) { +			r = radeon_fence_create(rdev, &fence); +			if (r) { +				goto out_cleanup; +			} + +			r = radeon_copy_dma(rdev, saddr, daddr, +					size / RADEON_GPU_PAGE_SIZE, fence); + +			if (r) { +				goto out_cleanup; +			} +			r = radeon_fence_wait(fence, false); +			if (r) { +				goto out_cleanup; +			} +			radeon_fence_unref(&fence);  		} -		r = radeon_copy_dma(rdev, saddr, daddr, size / RADEON_GPU_PAGE_SIZE, fence); -		if (r) { -			goto out_cleanup; +		end_jiffies = jiffies; +		time = end_jiffies - start_jiffies; +		time = jiffies_to_msecs(time); +		if (time > 0) { +			i = ((n * size) >> 10) / time; +			printk(KERN_INFO "radeon: dma %u bo moves of %ukb from" +					" %d to %d in %lums (%ukb/ms %ukb/s %uM/s)\n", +					n, size >> 10, +					sdomain, ddomain, time, +					i, i * 1000, (i * 1000) / 1024);  		} -		r = radeon_fence_wait(fence, false); -		if (r) { -			goto out_cleanup; -		} -		radeon_fence_unref(&fence); -	} -	end_jiffies = jiffies; -	time = end_jiffies - start_jiffies; -	time = jiffies_to_msecs(time); -	if (time > 0) { -		i = ((n * size) >> 10) / time; -		printk(KERN_INFO "radeon: dma %u bo moves of %ukb from %d to %d" -		       " in %lums (%ukb/ms %ukb/s %uM/s)\n", n, size >> 10, -		       sdomain, ddomain, time, i, i * 1000, (i * 1000) / 1024);  	} +  	start_jiffies = jiffies;  	for (i = 0; i < n; i++) {  		r = radeon_fence_create(rdev, &fence); diff --git a/drivers/gpu/drm/radeon/radeon_clocks.c b/drivers/gpu/drm/radeon/radeon_clocks.c index 812f24dbc2a..73c4405bf42 100644 --- a/drivers/gpu/drm/radeon/radeon_clocks.c +++ b/drivers/gpu/drm/radeon/radeon_clocks.c @@ -56,7 +56,7 @@ uint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev)  	else if (post_div == 3)  		sclk >>= 2;  	else if (post_div == 4) -		sclk >>= 4; +		sclk >>= 3;  	return sclk;  } @@ -86,7 +86,7 @@ uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev)  	else if (post_div == 3)  		mclk >>= 2;  	else if (post_div == 4) -		mclk >>= 4; +		mclk >>= 3;  	return mclk;  } diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index 579c8920e08..e7b19440102 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c @@ -971,8 +971,7 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder  			 lvds->native_mode.vdisplay);  		lvds->panel_vcc_delay = RBIOS16(lcd_info + 0x2c); -		if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0) -			lvds->panel_vcc_delay = 2000; +		lvds->panel_vcc_delay = min_t(u16, lvds->panel_vcc_delay, 2000);  		lvds->panel_pwr_delay = RBIOS8(lcd_info + 0x24);  		lvds->panel_digon_delay = RBIOS16(lcd_info + 0x38) & 0xf; diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 55266416fa4..23818854001 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -580,16 +580,18 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect  	struct radeon_connector *radeon_connector = to_radeon_connector(connector);  	struct drm_encoder *encoder;  	struct drm_encoder_helper_funcs *encoder_funcs; -	bool dret; +	bool dret = false;  	enum drm_connector_status ret = connector_status_disconnected;  	encoder = radeon_best_single_encoder(connector);  	if (!encoder)  		ret = connector_status_disconnected; -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); -	dret = radeon_ddc_probe(radeon_connector); -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	if (radeon_connector->ddc_bus) { +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); +		dret = radeon_ddc_probe(radeon_connector); +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	}  	if (dret) {  		if (radeon_connector->edid) {  			kfree(radeon_connector->edid); @@ -740,11 +742,13 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect  	struct drm_mode_object *obj;  	int i;  	enum drm_connector_status ret = connector_status_disconnected; -	bool dret; +	bool dret = false; -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); -	dret = radeon_ddc_probe(radeon_connector); -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	if (radeon_connector->ddc_bus) { +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); +		dret = radeon_ddc_probe(radeon_connector); +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	}  	if (dret) {  		if (radeon_connector->edid) {  			kfree(radeon_connector->edid); @@ -1343,7 +1347,7 @@ radeon_add_legacy_connector(struct drm_device *dev,  				radeon_connector->dac_load_detect = false;  			drm_connector_attach_property(&radeon_connector->base,  						      rdev->mode_info.load_detect_property, -						      1); +						      radeon_connector->dac_load_detect);  			drm_connector_attach_property(&radeon_connector->base,  						      rdev->mode_info.tv_std_property,  						      radeon_combios_get_tv_info(rdev)); diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 65590a0f1d9..1190148cf5e 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c @@ -189,7 +189,7 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error)  {  	unsigned i; -	if (error) { +	if (error && parser->ib) {  		radeon_bo_list_unvalidate(&parser->validated,  						parser->ib->fence);  	} else { @@ -231,6 +231,7 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)  	memset(&parser, 0, sizeof(struct radeon_cs_parser));  	parser.filp = filp;  	parser.rdev = rdev; +	parser.dev = rdev->dev;  	r = radeon_cs_parser_init(&parser, data);  	if (r) {  		DRM_ERROR("Failed to initialize parser !\n"); diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 0c51f8e4661..768b1509fa0 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -544,6 +544,7 @@ void radeon_agp_disable(struct radeon_device *rdev)  		rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;  		rdev->asic->gart_set_page = &r100_pci_gart_set_page;  	} +	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;  }  void radeon_check_arguments(struct radeon_device *rdev) diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 0ec491ead2f..7e17a362b54 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -278,7 +278,7 @@ static void radeon_print_display_setup(struct drm_device *dev)  		DRM_INFO("  %s\n", connector_names[connector->connector_type]);  		if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)  			DRM_INFO("  %s\n", hpd_names[radeon_connector->hpd.hpd]); -		if (radeon_connector->ddc_bus) +		if (radeon_connector->ddc_bus) {  			DRM_INFO("  DDC: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",  				 radeon_connector->ddc_bus->rec.mask_clk_reg,  				 radeon_connector->ddc_bus->rec.mask_data_reg, @@ -288,6 +288,15 @@ static void radeon_print_display_setup(struct drm_device *dev)  				 radeon_connector->ddc_bus->rec.en_data_reg,  				 radeon_connector->ddc_bus->rec.y_clk_reg,  				 radeon_connector->ddc_bus->rec.y_data_reg); +		} else { +			if (connector->connector_type == DRM_MODE_CONNECTOR_VGA || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVII || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVID || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVIA || +			    connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || +			    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) +				DRM_INFO("  DDC: no ddc bus - possible BIOS bug - please report to xorg-driver-ati@lists.x.org\n"); +		}  		DRM_INFO("  Encoders:\n");  		list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {  			radeon_encoder = to_radeon_encoder(encoder); @@ -357,7 +366,8 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)  	if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||  	    (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) {  		struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; -		if (dig->dp_i2c_bus) +		if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || +		     dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus)  			radeon_connector->edid = drm_get_edid(&radeon_connector->base, &dig->dp_i2c_bus->adapter);  	}  	if (!radeon_connector->ddc_bus) @@ -410,11 +420,12 @@ void radeon_compute_pll(struct radeon_pll *pll,  			uint32_t *fb_div_p,  			uint32_t *frac_fb_div_p,  			uint32_t *ref_div_p, -			uint32_t *post_div_p, -			int flags) +			uint32_t *post_div_p)  {  	uint32_t min_ref_div = pll->min_ref_div;  	uint32_t max_ref_div = pll->max_ref_div; +	uint32_t min_post_div = pll->min_post_div; +	uint32_t max_post_div = pll->max_post_div;  	uint32_t min_fractional_feed_div = 0;  	uint32_t max_fractional_feed_div = 0;  	uint32_t best_vco = pll->best_vco; @@ -430,7 +441,7 @@ void radeon_compute_pll(struct radeon_pll *pll,  	DRM_DEBUG("PLL freq %llu %u %u\n", freq, pll->min_ref_div, pll->max_ref_div);  	freq = freq * 1000; -	if (flags & RADEON_PLL_USE_REF_DIV) +	if (pll->flags & RADEON_PLL_USE_REF_DIV)  		min_ref_div = max_ref_div = pll->reference_div;  	else {  		while (min_ref_div < max_ref_div-1) { @@ -445,19 +456,22 @@ void radeon_compute_pll(struct radeon_pll *pll,  		}  	} -	if (flags & RADEON_PLL_USE_FRAC_FB_DIV) { +	if (pll->flags & RADEON_PLL_USE_POST_DIV) +		min_post_div = max_post_div = pll->post_div; + +	if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {  		min_fractional_feed_div = pll->min_frac_feedback_div;  		max_fractional_feed_div = pll->max_frac_feedback_div;  	} -	for (post_div = pll->min_post_div; post_div <= pll->max_post_div; ++post_div) { +	for (post_div = min_post_div; post_div <= max_post_div; ++post_div) {  		uint32_t ref_div; -		if ((flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1)) +		if ((pll->flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1))  			continue;  		/* legacy radeons only have a few post_divs */ -		if (flags & RADEON_PLL_LEGACY) { +		if (pll->flags & RADEON_PLL_LEGACY) {  			if ((post_div == 5) ||  			    (post_div == 7) ||  			    (post_div == 9) || @@ -504,7 +518,7 @@ void radeon_compute_pll(struct radeon_pll *pll,  					tmp += (uint64_t)pll->reference_freq * 1000 * frac_feedback_div;  					current_freq = radeon_div(tmp, ref_div * post_div); -					if (flags & RADEON_PLL_PREFER_CLOSEST_LOWER) { +					if (pll->flags & RADEON_PLL_PREFER_CLOSEST_LOWER) {  						error = freq - current_freq;  						error = error < 0 ? 0xffffffff : error;  					} else @@ -531,12 +545,12 @@ void radeon_compute_pll(struct radeon_pll *pll,  							best_freq = current_freq;  							best_error = error;  							best_vco_diff = vco_diff; -						} else if (((flags & RADEON_PLL_PREFER_LOW_REF_DIV) && (ref_div < best_ref_div)) || -							   ((flags & RADEON_PLL_PREFER_HIGH_REF_DIV) && (ref_div > best_ref_div)) || -							   ((flags & RADEON_PLL_PREFER_LOW_FB_DIV) && (feedback_div < best_feedback_div)) || -							   ((flags & RADEON_PLL_PREFER_HIGH_FB_DIV) && (feedback_div > best_feedback_div)) || -							   ((flags & RADEON_PLL_PREFER_LOW_POST_DIV) && (post_div < best_post_div)) || -							   ((flags & RADEON_PLL_PREFER_HIGH_POST_DIV) && (post_div > best_post_div))) { +						} else if (((pll->flags & RADEON_PLL_PREFER_LOW_REF_DIV) && (ref_div < best_ref_div)) || +							   ((pll->flags & RADEON_PLL_PREFER_HIGH_REF_DIV) && (ref_div > best_ref_div)) || +							   ((pll->flags & RADEON_PLL_PREFER_LOW_FB_DIV) && (feedback_div < best_feedback_div)) || +							   ((pll->flags & RADEON_PLL_PREFER_HIGH_FB_DIV) && (feedback_div > best_feedback_div)) || +							   ((pll->flags & RADEON_PLL_PREFER_LOW_POST_DIV) && (post_div < best_post_div)) || +							   ((pll->flags & RADEON_PLL_PREFER_HIGH_POST_DIV) && (post_div > best_post_div))) {  							best_post_div = post_div;  							best_ref_div = ref_div;  							best_feedback_div = feedback_div; @@ -572,8 +586,7 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,  			      uint32_t *fb_div_p,  			      uint32_t *frac_fb_div_p,  			      uint32_t *ref_div_p, -			      uint32_t *post_div_p, -			      int flags) +			      uint32_t *post_div_p)  {  	fixed20_12 m, n, frac_n, p, f_vco, f_pclk, best_freq;  	fixed20_12 pll_out_max, pll_out_min; @@ -667,7 +680,6 @@ static void radeon_user_framebuffer_destroy(struct drm_framebuffer *fb)  		radeonfb_remove(dev, fb);  	if (radeon_fb->obj) { -		radeon_gem_object_unpin(radeon_fb->obj);  		mutex_lock(&dev->struct_mutex);  		drm_gem_object_unreference(radeon_fb->obj);  		mutex_unlock(&dev->struct_mutex); @@ -715,7 +727,11 @@ radeon_user_framebuffer_create(struct drm_device *dev,  	struct drm_gem_object *obj;  	obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); - +	if (obj ==  NULL) { +		dev_err(&dev->pdev->dev, "No GEM object associated to handle 0x%08X, " +			"can't create framebuffer\n", mode_cmd->handle); +		return NULL; +	}  	return radeon_framebuffer_create(dev, mode_cmd, obj);  } diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c index 82eb551970b..3c91724457c 100644 --- a/drivers/gpu/drm/radeon/radeon_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_encoders.c @@ -156,6 +156,26 @@ radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t  	return ret;  } +static inline bool radeon_encoder_is_digital(struct drm_encoder *encoder) +{ +	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); +	switch (radeon_encoder->encoder_id) { +	case ENCODER_OBJECT_ID_INTERNAL_LVDS: +	case ENCODER_OBJECT_ID_INTERNAL_TMDS1: +	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: +	case ENCODER_OBJECT_ID_INTERNAL_LVTM1: +	case ENCODER_OBJECT_ID_INTERNAL_DVO1: +	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1: +	case ENCODER_OBJECT_ID_INTERNAL_DDI: +	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: +	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: +	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: +	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: +		return true; +	default: +		return false; +	} +}  void  radeon_link_encoder_connector(struct drm_device *dev)  { @@ -202,7 +222,7 @@ radeon_get_connector_for_encoder(struct drm_encoder *encoder)  	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {  		radeon_connector = to_radeon_connector(connector); -		if (radeon_encoder->devices & radeon_connector->devices) +		if (radeon_encoder->active_device & radeon_connector->devices)  			return connector;  	}  	return NULL; @@ -676,31 +696,11 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action)  	memset(&args, 0, sizeof(args)); -	if (ASIC_IS_DCE32(rdev)) { -		if (dig->dig_block) -			index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); -		else -			index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); -		num = dig->dig_block + 1; -	} else { -		switch (radeon_encoder->encoder_id) { -		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: -			/* XXX doesn't really matter which dig encoder we pick as long as it's -			 * not already in use -			 */ -			if (dig_connector->linkb) -				index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); -			else -				index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); -			num = 1; -			break; -		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: -			/* Only dig2 encoder can drive LVTMA */ -			index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); -			num = 2; -			break; -		} -	} +	if (dig->dig_encoder) +		index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); +	else +		index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); +	num = dig->dig_encoder + 1;  	atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev); @@ -822,7 +822,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t  			args.v1.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10);  	}  	if (ASIC_IS_DCE32(rdev)) { -		if (dig->dig_block) +		if (dig->dig_encoder == 1)  			args.v2.acConfig.ucEncoderSel = 1;  		if (dig_connector->linkb)  			args.v2.acConfig.ucLinkSel = 1; @@ -849,17 +849,16 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t  				args.v2.acConfig.fCoherentMode = 1;  		}  	} else { +  		args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; +		if (dig->dig_encoder) +			args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; +		else +			args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER; +  		switch (radeon_encoder->encoder_id) {  		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: -			/* XXX doesn't really matter which dig encoder we pick as long as it's -			 * not already in use -			 */ -			if (dig_connector->linkb) -				args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; -			else -				args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER;  			if (rdev->flags & RADEON_IS_IGP) {  				if (radeon_encoder->pixel_clock > 165000) {  					if (dig_connector->igp_lane_info & 0x3) @@ -878,10 +877,6 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t  				}  			}  			break; -		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: -			/* Only dig2 encoder can drive LVTMA */ -			args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; -			break;  		}  		if (radeon_encoder->pixel_clock > 165000) @@ -1046,6 +1041,7 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)  	union crtc_sourc_param args;  	int index = GetIndexIntoMasterTable(COMMAND, SelectCRTC_Source);  	uint8_t frev, crev; +	struct radeon_encoder_atom_dig *dig;  	memset(&args, 0, sizeof(args)); @@ -1109,40 +1105,16 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)  			case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:  			case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:  			case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: -				if (ASIC_IS_DCE32(rdev)) { -					if (radeon_crtc->crtc_id) -						args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; -					else -						args.v2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID; -				} else { -					struct drm_connector *connector; -					struct radeon_connector *radeon_connector; -					struct radeon_connector_atom_dig *dig_connector; - -					connector = radeon_get_connector_for_encoder(encoder); -					if (!connector) -						return; -					radeon_connector = to_radeon_connector(connector); -					if (!radeon_connector->con_priv) -						return; -					dig_connector = radeon_connector->con_priv; - -					/* XXX doesn't really matter which dig encoder we pick as long as it's -					 * not already in use -					 */ -					if (dig_connector->linkb) -						args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; -					else -						args.v2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID; -				} +			case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: +				dig = radeon_encoder->enc_priv; +				if (dig->dig_encoder) +					args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; +				else +					args.v2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID;  				break;  			case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:  				args.v2.ucEncoderID = ASIC_INT_DVO_ENCODER_ID;  				break; -			case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: -				/* Only dig2 encoder can drive LVTMA */ -				args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; -				break;  			case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:  				if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))  					args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID; @@ -1202,6 +1174,47 @@ atombios_apply_encoder_quirks(struct drm_encoder *encoder,  	}  } +static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder) +{ +	struct drm_device *dev = encoder->dev; +	struct radeon_device *rdev = dev->dev_private; +	struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); +	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); +	struct drm_encoder *test_encoder; +	struct radeon_encoder_atom_dig *dig; +	uint32_t dig_enc_in_use = 0; +	/* on DCE32 and encoder can driver any block so just crtc id */ +	if (ASIC_IS_DCE32(rdev)) { +		return radeon_crtc->crtc_id; +	} + +	/* on DCE3 - LVTMA can only be driven by DIGB */ +	list_for_each_entry(test_encoder, &dev->mode_config.encoder_list, head) { +		struct radeon_encoder *radeon_test_encoder; + +		if (encoder == test_encoder) +			continue; + +		if (!radeon_encoder_is_digital(test_encoder)) +			continue; + +		radeon_test_encoder = to_radeon_encoder(test_encoder); +		dig = radeon_test_encoder->enc_priv; + +		if (dig->dig_encoder >= 0) +			dig_enc_in_use |= (1 << dig->dig_encoder); +	} + +	if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA) { +		if (dig_enc_in_use & 0x2) +			DRM_ERROR("LVDS required digital encoder 2 but it was in use - stealing\n"); +		return 1; +	} +	if (!(dig_enc_in_use & 1)) +		return 0; +	return 1; +} +  static void  radeon_atom_encoder_mode_set(struct drm_encoder *encoder,  			     struct drm_display_mode *mode, @@ -1214,12 +1227,9 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,  	if (radeon_encoder->active_device &  	    (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) { -		if (radeon_encoder->enc_priv) { -			struct radeon_encoder_atom_dig *dig; - -			dig = radeon_encoder->enc_priv; -			dig->dig_block = radeon_crtc->crtc_id; -		} +		struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; +		if (dig) +			dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);  	}  	radeon_encoder->pixel_clock = adjusted_mode->clock; @@ -1379,7 +1389,13 @@ static void radeon_atom_encoder_commit(struct drm_encoder *encoder)  static void radeon_atom_encoder_disable(struct drm_encoder *encoder)  {  	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); +	struct radeon_encoder_atom_dig *dig;  	radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF); + +	if (radeon_encoder_is_digital(encoder)) { +		dig = radeon_encoder->enc_priv; +		dig->dig_encoder = -1; +	}  	radeon_encoder->active_device = 0;  } @@ -1436,6 +1452,7 @@ radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)  	/* coherent mode by default */  	dig->coherent_mode = true; +	dig->dig_encoder = -1;  	return dig;  } diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c index 3ba213d1b06..d71e346e9ab 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c @@ -248,7 +248,7 @@ int radeonfb_create(struct drm_device *dev,  	if (ret)  		goto out_unref; -	memset_io(fbptr, 0xff, aligned_size); +	memset_io(fbptr, 0x0, aligned_size);  	strcpy(info->fix.id, "radeondrmfb"); diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index 0e1325e1853..db8e9a355a0 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -308,6 +308,9 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,  	}  	robj = gobj->driver_private;  	r = radeon_bo_wait(robj, NULL, false); +	/* callback hw specific functions if any */ +	if (robj->rdev->asic->ioctl_wait_idle) +		robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj);  	mutex_lock(&dev->struct_mutex);  	drm_gem_object_unreference(gobj);  	mutex_unlock(&dev->struct_mutex); diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c index cc27485a07a..b6d8081e124 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c @@ -339,69 +339,6 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode)  	}  } -/* properly set crtc bpp when using atombios */ -void radeon_legacy_atom_set_surface(struct drm_crtc *crtc) -{ -	struct drm_device *dev = crtc->dev; -	struct radeon_device *rdev = dev->dev_private; -	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); -	int format; -	uint32_t crtc_gen_cntl; -	uint32_t disp_merge_cntl; -	uint32_t crtc_pitch; - -	switch (crtc->fb->bits_per_pixel) { -	case 8: -		format = 2; -		break; -	case 15:      /*  555 */ -		format = 3; -		break; -	case 16:      /*  565 */ -		format = 4; -		break; -	case 24:      /*  RGB */ -		format = 5; -		break; -	case 32:      /* xRGB */ -		format = 6; -		break; -	default: -		return; -	} - -	crtc_pitch  = ((((crtc->fb->pitch / (crtc->fb->bits_per_pixel / 8)) * crtc->fb->bits_per_pixel) + -			((crtc->fb->bits_per_pixel * 8) - 1)) / -		       (crtc->fb->bits_per_pixel * 8)); -	crtc_pitch |= crtc_pitch << 16; - -	WREG32(RADEON_CRTC_PITCH + radeon_crtc->crtc_offset, crtc_pitch); - -	switch (radeon_crtc->crtc_id) { -	case 0: -		disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL); -		disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN; -		WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl); - -		crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL) & 0xfffff0ff; -		crtc_gen_cntl |= (format << 8); -		crtc_gen_cntl |= RADEON_CRTC_EXT_DISP_EN; -		WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl); -		break; -	case 1: -		disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL); -		disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN; -		WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl); - -		crtc_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL) & 0xfffff0ff; -		crtc_gen_cntl |= (format << 8); -		WREG32(RADEON_CRTC2_GEN_CNTL, crtc_gen_cntl); -		WREG32(RADEON_FP_H2_SYNC_STRT_WID,   RREG32(RADEON_CRTC2_H_SYNC_STRT_WID)); -		WREG32(RADEON_FP_V2_SYNC_STRT_WID,   RREG32(RADEON_CRTC2_V_SYNC_STRT_WID)); -		break; -	} -} -  int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,  			 struct drm_framebuffer *old_fb)  { @@ -755,7 +692,6 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  	uint32_t post_divider = 0;  	uint32_t freq = 0;  	uint8_t pll_gain; -	int pll_flags = RADEON_PLL_LEGACY;  	bool use_bios_divs = false;  	/* PLL registers */  	uint32_t pll_ref_div = 0; @@ -789,10 +725,12 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  	else  		pll = &rdev->clock.p1pll; +	pll->flags = RADEON_PLL_LEGACY; +  	if (mode->clock > 200000) /* range limits??? */ -		pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; +		pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;  	else -		pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; +		pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;  	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {  		if (encoder->crtc == crtc) { @@ -804,7 +742,7 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  			}  			if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) -				pll_flags |= RADEON_PLL_NO_ODD_POST_DIV; +				pll->flags |= RADEON_PLL_NO_ODD_POST_DIV;  			if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) {  				if (!rdev->is_atom_bios) {  					struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); @@ -819,7 +757,7 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  						}  					}  				} -				pll_flags |= RADEON_PLL_USE_REF_DIV; +				pll->flags |= RADEON_PLL_USE_REF_DIV;  			}  		}  	} @@ -829,8 +767,7 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)  	if (!use_bios_divs) {  		radeon_compute_pll(pll, mode->clock,  				   &freq, &feedback_div, &frac_fb_div, -				   &reference_div, &post_divider, -				   pll_flags); +				   &reference_div, &post_divider);  		for (post_div = &post_divs[0]; post_div->divider; ++post_div) {  			if (post_div->divider == post_divider) diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 91cb041cb40..e81b2aeb6a8 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h @@ -125,16 +125,24 @@ struct radeon_tmds_pll {  #define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9)  #define RADEON_PLL_USE_FRAC_FB_DIV      (1 << 10)  #define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11) +#define RADEON_PLL_USE_POST_DIV         (1 << 12)  struct radeon_pll { -	uint16_t reference_freq; -	uint16_t reference_div; +	/* reference frequency */ +	uint32_t reference_freq; + +	/* fixed dividers */ +	uint32_t reference_div; +	uint32_t post_div; + +	/* pll in/out limits */  	uint32_t pll_in_min;  	uint32_t pll_in_max;  	uint32_t pll_out_min;  	uint32_t pll_out_max; -	uint16_t xclk; +	uint32_t best_vco; +	/* divider limits */  	uint32_t min_ref_div;  	uint32_t max_ref_div;  	uint32_t min_post_div; @@ -143,7 +151,12 @@ struct radeon_pll {  	uint32_t max_feedback_div;  	uint32_t min_frac_feedback_div;  	uint32_t max_frac_feedback_div; -	uint32_t best_vco; + +	/* flags for the current clock */ +	uint32_t flags; + +	/* pll id */ +	uint32_t id;  };  struct radeon_i2c_chan { @@ -286,7 +299,7 @@ struct radeon_atom_ss {  struct radeon_encoder_atom_dig {  	/* atom dig */  	bool coherent_mode; -	int dig_block; +	int dig_encoder; /* -1 disabled, 0 DIGA, 1 DIGB */  	/* atom lvds */  	uint32_t lvds_misc;  	uint16_t panel_pwr_delay; @@ -417,8 +430,7 @@ extern void radeon_compute_pll(struct radeon_pll *pll,  			       uint32_t *fb_div_p,  			       uint32_t *frac_fb_div_p,  			       uint32_t *ref_div_p, -			       uint32_t *post_div_p, -			       int flags); +			       uint32_t *post_div_p);  extern void radeon_compute_pll_avivo(struct radeon_pll *pll,  				     uint64_t freq, @@ -426,8 +438,7 @@ extern void radeon_compute_pll_avivo(struct radeon_pll *pll,  				     uint32_t *fb_div_p,  				     uint32_t *frac_fb_div_p,  				     uint32_t *ref_div_p, -				     uint32_t *post_div_p, -				     int flags); +				     uint32_t *post_div_p);  extern void radeon_setup_encoder_clones(struct drm_device *dev); @@ -453,7 +464,6 @@ extern void atombios_crtc_dpms(struct drm_crtc *crtc, int mode);  extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,  				 struct drm_framebuffer *old_fb); -extern void radeon_legacy_atom_set_surface(struct drm_crtc *crtc);  extern int radeon_crtc_cursor_set(struct drm_crtc *crtc,  				  struct drm_file *file_priv, diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 4e636de877b..d72a71bff21 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -220,7 +220,8 @@ int radeon_bo_unpin(struct radeon_bo *bo)  int radeon_bo_evict_vram(struct radeon_device *rdev)  { -	if (rdev->flags & RADEON_IS_IGP) { +	/* late 2.6.33 fix IGP hibernate - we need pm ops to do this correct */ +	if (0 && (rdev->flags & RADEON_IS_IGP)) {  		if (rdev->mc.igp_sideport_enabled == false)  			/* Useless to evict on IGP chips */  			return 0; diff --git a/drivers/gpu/drm/radeon/reg_srcs/r200 b/drivers/gpu/drm/radeon/reg_srcs/r200 index 6021c8849a1..c29ac434ac9 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/r200 +++ b/drivers/gpu/drm/radeon/reg_srcs/r200 @@ -91,6 +91,8 @@ r200 0x3294  0x22b8 SE_TCL_TEX_CYL_WRAP_CTL  0x22c0 SE_TCL_UCP_VERT_BLEND_CNTL  0x22c4 SE_TCL_POINT_SPRITE_CNTL +0x22d0 SE_PVS_CNTL +0x22d4 SE_PVS_CONST_CNTL  0x2648 RE_POINTSIZE  0x26c0 RE_TOP_LEFT  0x26c4 RE_MISC diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c index 9f5418983e2..287fcebfb4e 100644 --- a/drivers/gpu/drm/radeon/rs400.c +++ b/drivers/gpu/drm/radeon/rs400.c @@ -223,15 +223,31 @@ int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)  	return 0;  } +int rs400_mc_wait_for_idle(struct radeon_device *rdev) +{ +	unsigned i; +	uint32_t tmp; + +	for (i = 0; i < rdev->usec_timeout; i++) { +		/* read MC_STATUS */ +		tmp = RREG32(0x0150); +		if (tmp & (1 << 2)) { +			return 0; +		} +		DRM_UDELAY(1); +	} +	return -1; +} +  void rs400_gpu_init(struct radeon_device *rdev)  {  	/* FIXME: HDP same place on rs400 ? */  	r100_hdp_reset(rdev);  	/* FIXME: is this correct ? */  	r420_pipes_init(rdev); -	if (r300_mc_wait_for_idle(rdev)) { -		printk(KERN_WARNING "Failed to wait MC idle while " -		       "programming pipes. Bad things might happen.\n"); +	if (rs400_mc_wait_for_idle(rdev)) { +		printk(KERN_WARNING "rs400: Failed to wait MC idle while " +		       "programming pipes. Bad things might happen. %08x\n", RREG32(0x150));  	}  } @@ -370,8 +386,8 @@ void rs400_mc_program(struct radeon_device *rdev)  	r100_mc_stop(rdev, &save);  	/* Wait for mc idle */ -	if (r300_mc_wait_for_idle(rdev)) -		dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n"); +	if (rs400_mc_wait_for_idle(rdev)) +		dev_warn(rdev->dev, "rs400: Wait MC idle timeout before updating MC.\n");  	WREG32(R_000148_MC_FB_LOCATION,  		S_000148_MC_FB_START(rdev->mc.vram_start >> 16) |  		S_000148_MC_FB_TOP(rdev->mc.vram_end >> 16)); @@ -448,7 +464,6 @@ int rs400_suspend(struct radeon_device *rdev)  void rs400_fini(struct radeon_device *rdev)  { -	rs400_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -527,7 +542,6 @@ int rs400_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		rs400_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c index d5255751e7b..c3818562a13 100644 --- a/drivers/gpu/drm/radeon/rs600.c +++ b/drivers/gpu/drm/radeon/rs600.c @@ -610,7 +610,6 @@ int rs600_suspend(struct radeon_device *rdev)  void rs600_fini(struct radeon_device *rdev)  { -	rs600_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -689,7 +688,6 @@ int rs600_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		rs600_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c index cd31da91377..06e2771aee5 100644 --- a/drivers/gpu/drm/radeon/rs690.c +++ b/drivers/gpu/drm/radeon/rs690.c @@ -676,7 +676,6 @@ int rs690_suspend(struct radeon_device *rdev)  void rs690_fini(struct radeon_device *rdev)  { -	rs690_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -756,7 +755,6 @@ int rs690_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		rs690_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c index 62756717b04..0e1e6b8632b 100644 --- a/drivers/gpu/drm/radeon/rv515.c +++ b/drivers/gpu/drm/radeon/rv515.c @@ -537,7 +537,6 @@ void rv515_set_safe_registers(struct radeon_device *rdev)  void rv515_fini(struct radeon_device *rdev)  { -	rv515_suspend(rdev);  	r100_cp_fini(rdev);  	r100_wb_fini(rdev);  	r100_ib_fini(rdev); @@ -615,13 +614,12 @@ int rv515_init(struct radeon_device *rdev)  	if (r) {  		/* Somethings want wront with the accel init stop accel */  		dev_err(rdev->dev, "Disabling GPU acceleration\n"); -		rv515_suspend(rdev);  		r100_cp_fini(rdev);  		r100_wb_fini(rdev);  		r100_ib_fini(rdev); +		radeon_irq_kms_fini(rdev);  		rv370_pcie_gart_fini(rdev);  		radeon_agp_fini(rdev); -		radeon_irq_kms_fini(rdev);  		rdev->accel_working = false;  	}  	return 0; diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 59c71245fb9..5943d561fd1 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c @@ -779,7 +779,6 @@ int rv770_mc_init(struct radeon_device *rdev)  	fixed20_12 a;  	u32 tmp;  	int chansize, numchan; -	int r;  	/* Get VRAM informations */  	rdev->mc.vram_is_ddr = true; @@ -822,9 +821,6 @@ int rv770_mc_init(struct radeon_device *rdev)  		rdev->mc.real_vram_size = rdev->mc.aper_size;  	if (rdev->flags & RADEON_IS_AGP) { -		r = radeon_agp_init(rdev); -		if (r) -			return r;  		/* gtt_size is setup by radeon_agp_init */  		rdev->mc.gtt_location = rdev->mc.agp_base;  		tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size; @@ -891,26 +887,25 @@ static int rv770_startup(struct radeon_device *rdev)  			return r;  	}  	rv770_gpu_init(rdev); - -	if (!rdev->r600_blit.shader_obj) { -		r = r600_blit_init(rdev); +	r = r600_blit_init(rdev); +	if (r) { +		r600_blit_fini(rdev); +		rdev->asic->copy = NULL; +		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); +	} +	/* pin copy shader into vram */ +	if (rdev->r600_blit.shader_obj) { +		r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); +		if (unlikely(r != 0)) +			return r; +		r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, +				&rdev->r600_blit.shader_gpu_addr); +		radeon_bo_unreserve(rdev->r600_blit.shader_obj);  		if (r) { -			DRM_ERROR("radeon: failed blitter (%d).\n", r); +			DRM_ERROR("failed to pin blit object %d\n", r);  			return r;  		}  	} - -	r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); -	if (unlikely(r != 0)) -		return r; -	r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, -			&rdev->r600_blit.shader_gpu_addr); -	radeon_bo_unreserve(rdev->r600_blit.shader_obj); -	if (r) { -		DRM_ERROR("failed to pin blit object %d\n", r); -		return r; -	} -  	/* Enable IRQ */  	r = r600_irq_init(rdev);  	if (r) { @@ -972,13 +967,16 @@ int rv770_suspend(struct radeon_device *rdev)  	/* FIXME: we should wait for ring to be empty */  	r700_cp_stop(rdev);  	rdev->cp.ready = false; +	r600_irq_suspend(rdev);  	r600_wb_disable(rdev);  	rv770_pcie_gart_disable(rdev);  	/* unpin shaders bo */ -	r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); -	if (likely(r == 0)) { -		radeon_bo_unpin(rdev->r600_blit.shader_obj); -		radeon_bo_unreserve(rdev->r600_blit.shader_obj); +	if (rdev->r600_blit.shader_obj) { +		r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); +		if (likely(r == 0)) { +			radeon_bo_unpin(rdev->r600_blit.shader_obj); +			radeon_bo_unreserve(rdev->r600_blit.shader_obj); +		}  	}  	return 0;  } @@ -1037,6 +1035,11 @@ int rv770_init(struct radeon_device *rdev)  	r = radeon_fence_driver_init(rdev);  	if (r)  		return r; +	if (rdev->flags & RADEON_IS_AGP) { +		r = radeon_agp_init(rdev); +		if (r) +			radeon_agp_disable(rdev); +	}  	r = rv770_mc_init(rdev);  	if (r)  		return r; @@ -1062,22 +1065,25 @@ int rv770_init(struct radeon_device *rdev)  	rdev->accel_working = true;  	r = rv770_startup(rdev);  	if (r) { -		rv770_suspend(rdev); +		dev_err(rdev->dev, "disabling GPU acceleration\n"); +		r600_cp_fini(rdev);  		r600_wb_fini(rdev); -		radeon_ring_fini(rdev); +		r600_irq_fini(rdev); +		radeon_irq_kms_fini(rdev);  		rv770_pcie_gart_fini(rdev);  		rdev->accel_working = false;  	}  	if (rdev->accel_working) {  		r = radeon_ib_pool_init(rdev);  		if (r) { -			DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r); -			rdev->accel_working = false; -		} -		r = r600_ib_test(rdev); -		if (r) { -			DRM_ERROR("radeon: failed testing IB (%d).\n", r); +			dev_err(rdev->dev, "IB initialization failed (%d).\n", r);  			rdev->accel_working = false; +		} else { +			r = r600_ib_test(rdev); +			if (r) { +				dev_err(rdev->dev, "IB test failed (%d).\n", r); +				rdev->accel_working = false; +			}  		}  	}  	return 0; @@ -1085,13 +1091,11 @@ int rv770_init(struct radeon_device *rdev)  void rv770_fini(struct radeon_device *rdev)  { -	rv770_suspend(rdev); -  	r600_blit_fini(rdev); +	r600_cp_fini(rdev); +	r600_wb_fini(rdev);  	r600_irq_fini(rdev);  	radeon_irq_kms_fini(rdev); -	radeon_ring_fini(rdev); -	r600_wb_fini(rdev);  	rv770_pcie_gart_fini(rdev);  	radeon_gem_fini(rdev);  	radeon_fence_driver_fini(rdev); diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 2920f9a279e..c7320ce4567 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -426,7 +426,8 @@ moved:  		    bdev->man[bo->mem.mem_type].gpu_offset;  		bo->cur_placement = bo->mem.placement;  		spin_unlock(&bo->lock); -	} +	} else +		bo->offset = 0;  	return 0; @@ -523,52 +524,44 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)  static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)  {  	struct ttm_bo_global *glob = bdev->glob; -	struct ttm_buffer_object *entry, *nentry; -	struct list_head *list, *next; -	int ret; +	struct ttm_buffer_object *entry = NULL; +	int ret = 0;  	spin_lock(&glob->lru_lock); -	list_for_each_safe(list, next, &bdev->ddestroy) { -		entry = list_entry(list, struct ttm_buffer_object, ddestroy); -		nentry = NULL; +	if (list_empty(&bdev->ddestroy)) +		goto out_unlock; -		/* -		 * Protect the next list entry from destruction while we -		 * unlock the lru_lock. -		 */ +	entry = list_first_entry(&bdev->ddestroy, +		struct ttm_buffer_object, ddestroy); +	kref_get(&entry->list_kref); -		if (next != &bdev->ddestroy) { -			nentry = list_entry(next, struct ttm_buffer_object, -					    ddestroy); +	for (;;) { +		struct ttm_buffer_object *nentry = NULL; + +		if (entry->ddestroy.next != &bdev->ddestroy) { +			nentry = list_first_entry(&entry->ddestroy, +				struct ttm_buffer_object, ddestroy);  			kref_get(&nentry->list_kref);  		} -		kref_get(&entry->list_kref);  		spin_unlock(&glob->lru_lock);  		ret = ttm_bo_cleanup_refs(entry, remove_all);  		kref_put(&entry->list_kref, ttm_bo_release_list); +		entry = nentry; -		spin_lock(&glob->lru_lock); -		if (nentry) { -			bool next_onlist = !list_empty(next); -			spin_unlock(&glob->lru_lock); -			kref_put(&nentry->list_kref, ttm_bo_release_list); -			spin_lock(&glob->lru_lock); -			/* -			 * Someone might have raced us and removed the -			 * next entry from the list. We don't bother restarting -			 * list traversal. -			 */ +		if (ret || !entry) +			goto out; -			if (!next_onlist) -				break; -		} -		if (ret) +		spin_lock(&glob->lru_lock); +		if (list_empty(&entry->ddestroy))  			break;  	} -	ret = !list_empty(&bdev->ddestroy); -	spin_unlock(&glob->lru_lock); +out_unlock: +	spin_unlock(&glob->lru_lock); +out: +	if (entry) +		kref_put(&entry->list_kref, ttm_bo_release_list);  	return ret;  } @@ -950,6 +943,14 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,  		ttm_flag_masked(&cur_flags, placement->busy_placement[i],  				~TTM_PL_MASK_MEMTYPE); + +		if (mem_type == TTM_PL_SYSTEM) { +			mem->mem_type = mem_type; +			mem->placement = cur_flags; +			mem->mm_node = NULL; +			return 0; +		} +  		ret = ttm_bo_mem_force_space(bo, mem_type, placement, mem,  						interruptible, no_wait);  		if (ret == 0 && mem->mm_node) { @@ -1019,6 +1020,12 @@ static int ttm_bo_mem_compat(struct ttm_placement *placement,  			     struct ttm_mem_reg *mem)  {  	int i; +	struct drm_mm_node *node = mem->mm_node; + +	if (node && placement->lpfn != 0 && +	    (node->start < placement->fpfn || +	     node->start + node->size > placement->lpfn)) +		return -1;  	for (i = 0; i < placement->num_placement; i++) {  		if ((placement->placement[i] & mem->placement & @@ -1844,6 +1851,9 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)  	 * anyone tries to access a ttm page.  	 */ +	if (bo->bdev->driver->swap_notify) +		bo->bdev->driver->swap_notify(bo); +  	ret = ttm_tt_swapout(bo->ttm, bo->persistant_swap_storage);  out: @@ -1864,3 +1874,4 @@ void ttm_bo_swapout_all(struct ttm_bo_device *bdev)  	while (ttm_bo_swapout(&bdev->glob->shrink) == 0)  		;  } +EXPORT_SYMBOL(ttm_bo_swapout_all); diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 2ecf7d0c64f..5ca37a58a98 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -53,7 +53,6 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,  {  	struct ttm_tt *ttm = bo->ttm;  	struct ttm_mem_reg *old_mem = &bo->mem; -	uint32_t save_flags = old_mem->placement;  	int ret;  	if (old_mem->mem_type != TTM_PL_SYSTEM) { @@ -62,7 +61,6 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,  		ttm_flag_masked(&old_mem->placement, TTM_PL_FLAG_SYSTEM,  				TTM_PL_MASK_MEM);  		old_mem->mem_type = TTM_PL_SYSTEM; -		save_flags = old_mem->placement;  	}  	ret = ttm_tt_set_placement_caching(ttm, new_mem->placement); @@ -77,7 +75,7 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,  	*old_mem = *new_mem;  	new_mem->mm_node = NULL; -	ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE); +  	return 0;  }  EXPORT_SYMBOL(ttm_bo_move_ttm); @@ -219,7 +217,6 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,  	void *old_iomap;  	void *new_iomap;  	int ret; -	uint32_t save_flags = old_mem->placement;  	unsigned long i;  	unsigned long page;  	unsigned long add = 0; @@ -270,7 +267,6 @@ out2:  	*old_mem = *new_mem;  	new_mem->mm_node = NULL; -	ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE);  	if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && (ttm != NULL)) {  		ttm_tt_unbind(ttm); @@ -537,7 +533,6 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,  	struct ttm_mem_type_manager *man = &bdev->man[new_mem->mem_type];  	struct ttm_mem_reg *old_mem = &bo->mem;  	int ret; -	uint32_t save_flags = old_mem->placement;  	struct ttm_buffer_object *ghost_obj;  	void *tmp_obj = NULL; @@ -598,7 +593,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,  	*old_mem = *new_mem;  	new_mem->mm_node = NULL; -	ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE); +  	return 0;  }  EXPORT_SYMBOL(ttm_bo_move_accel_cleanup); diff --git a/drivers/gpu/drm/ttm/ttm_lock.c b/drivers/gpu/drm/ttm/ttm_lock.c index f619ebcaa4e..3d172ef04ee 100644 --- a/drivers/gpu/drm/ttm/ttm_lock.c +++ b/drivers/gpu/drm/ttm/ttm_lock.c @@ -288,6 +288,7 @@ void ttm_suspend_unlock(struct ttm_lock *lock)  	wake_up_all(&lock->queue);  	spin_unlock(&lock->lock);  } +EXPORT_SYMBOL(ttm_suspend_unlock);  static bool __ttm_suspend_lock(struct ttm_lock *lock)  { @@ -309,3 +310,4 @@ void ttm_suspend_lock(struct ttm_lock *lock)  {  	wait_event(lock->queue, __ttm_suspend_lock(lock));  } +EXPORT_SYMBOL(ttm_suspend_lock); diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c index 1099abac824..75e9d6f86ba 100644 --- a/drivers/gpu/drm/ttm/ttm_object.c +++ b/drivers/gpu/drm/ttm/ttm_object.c @@ -109,8 +109,8 @@ struct ttm_ref_object {  	struct drm_hash_item hash;  	struct list_head head;  	struct kref kref; -	struct ttm_base_object *obj;  	enum ttm_ref_type ref_type; +	struct ttm_base_object *obj;  	struct ttm_object_file *tfile;  }; diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 9c2b1cc5dba..e2123af7775 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c @@ -198,17 +198,26 @@ EXPORT_SYMBOL(ttm_tt_populate);  static inline int ttm_tt_set_page_caching(struct page *p,  					  enum ttm_caching_state c_state)  { +	int ret = 0; +  	if (PageHighMem(p))  		return 0; -	switch (c_state) { -	case tt_cached: -		return set_pages_wb(p, 1); -	case tt_wc: -	    return set_memory_wc((unsigned long) page_address(p), 1); -	default: -		return set_pages_uc(p, 1); +	if (get_page_memtype(p) != -1) { +		/* p isn't in the default caching state, set it to +		 * writeback first to free its current memtype. */ + +		ret = set_pages_wb(p, 1); +		if (ret) +			return ret;  	} + +	if (c_state == tt_wc) +		ret = set_memory_wc((unsigned long) page_address(p), 1); +	else if (c_state == tt_uncached) +		ret = set_pages_uc(p, 1); + +	return ret;  }  #else /* CONFIG_X86 */  static inline int ttm_tt_set_page_caching(struct page *p, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c index d6f2d2b882e..825ebe3d89d 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c @@ -48,6 +48,15 @@ struct ttm_placement vmw_vram_placement = {  	.busy_placement = &vram_placement_flags  }; +struct ttm_placement vmw_vram_sys_placement = { +	.fpfn = 0, +	.lpfn = 0, +	.num_placement = 1, +	.placement = &vram_placement_flags, +	.num_busy_placement = 1, +	.busy_placement = &sys_placement_flags +}; +  struct ttm_placement vmw_vram_ne_placement = {  	.fpfn = 0,  	.lpfn = 0, @@ -172,6 +181,18 @@ static int vmw_verify_access(struct ttm_buffer_object *bo, struct file *filp)  	return 0;  } +static void vmw_move_notify(struct ttm_buffer_object *bo, +		     struct ttm_mem_reg *new_mem) +{ +	if (new_mem->mem_type != TTM_PL_SYSTEM) +		vmw_dmabuf_gmr_unbind(bo); +} + +static void vmw_swap_notify(struct ttm_buffer_object *bo) +{ +	vmw_dmabuf_gmr_unbind(bo); +} +  /**   * FIXME: We're using the old vmware polling method to sync.   * Do this with fences instead. @@ -225,5 +246,7 @@ struct ttm_bo_driver vmw_bo_driver = {  	.sync_obj_wait = vmw_sync_obj_wait,  	.sync_obj_flush = vmw_sync_obj_flush,  	.sync_obj_unref = vmw_sync_obj_unref, -	.sync_obj_ref = vmw_sync_obj_ref +	.sync_obj_ref = vmw_sync_obj_ref, +	.move_notify = vmw_move_notify, +	.swap_notify = vmw_swap_notify  }; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 1db1ef30be2..a6e8f687fa6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -147,6 +147,8 @@ static char *vmw_devname = "vmwgfx";  static int vmw_probe(struct pci_dev *, const struct pci_device_id *);  static void vmw_master_init(struct vmw_master *); +static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val, +			      void *ptr);  static void vmw_print_capabilities(uint32_t capabilities)  { @@ -207,6 +209,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)  {  	struct vmw_private *dev_priv;  	int ret; +	uint32_t svga_id;  	dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);  	if (unlikely(dev_priv == NULL)) { @@ -217,6 +220,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)  	dev_priv->dev = dev;  	dev_priv->vmw_chipset = chipset; +	dev_priv->last_read_sequence = (uint32_t) -100;  	mutex_init(&dev_priv->hw_mutex);  	mutex_init(&dev_priv->cmdbuf_mutex);  	rwlock_init(&dev_priv->resource_lock); @@ -236,6 +240,16 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)  	dev_priv->mmio_start = pci_resource_start(dev->pdev, 2);  	mutex_lock(&dev_priv->hw_mutex); + +	vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); +	svga_id = vmw_read(dev_priv, SVGA_REG_ID); +	if (svga_id != SVGA_ID_2) { +		ret = -ENOSYS; +		DRM_ERROR("Unsuported SVGA ID 0x%x\n", svga_id); +		mutex_unlock(&dev_priv->hw_mutex); +		goto out_err0; +	} +  	dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES);  	if (dev_priv->capabilities & SVGA_CAP_GMR) { @@ -351,6 +365,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)  		vmw_fb_init(dev_priv);  	} +	dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier; +	register_pm_notifier(&dev_priv->pm_nb); + +	DRM_INFO("%s", vmw_fifo_have_3d(dev_priv) ? "Have 3D\n" : "No 3D\n"); +  	return 0;  out_no_device: @@ -385,6 +404,8 @@ static int vmw_driver_unload(struct drm_device *dev)  	DRM_INFO(VMWGFX_DRIVER_NAME " unload.\n"); +	unregister_pm_notifier(&dev_priv->pm_nb); +  	if (!dev_priv->stealth) {  		vmw_fb_close(dev_priv);  		vmw_kms_close(dev_priv); @@ -650,6 +671,57 @@ static void vmw_remove(struct pci_dev *pdev)  	drm_put_dev(dev);  } +static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val, +			      void *ptr) +{ +	struct vmw_private *dev_priv = +		container_of(nb, struct vmw_private, pm_nb); +	struct vmw_master *vmaster = dev_priv->active_master; + +	switch (val) { +	case PM_HIBERNATION_PREPARE: +	case PM_SUSPEND_PREPARE: +		ttm_suspend_lock(&vmaster->lock); + +		/** +		 * This empties VRAM and unbinds all GMR bindings. +		 * Buffer contents is moved to swappable memory. +		 */ +		ttm_bo_swapout_all(&dev_priv->bdev); +		break; +	case PM_POST_HIBERNATION: +	case PM_POST_SUSPEND: +		ttm_suspend_unlock(&vmaster->lock); +		break; +	case PM_RESTORE_PREPARE: +		break; +	case PM_POST_RESTORE: +		break; +	default: +		break; +	} +	return 0; +} + +/** + * These might not be needed with the virtual SVGA device. + */ + +int vmw_pci_suspend(struct pci_dev *pdev, pm_message_t state) +{ +	pci_save_state(pdev); +	pci_disable_device(pdev); +	pci_set_power_state(pdev, PCI_D3hot); +	return 0; +} + +int vmw_pci_resume(struct pci_dev *pdev) +{ +	pci_set_power_state(pdev, PCI_D0); +	pci_restore_state(pdev); +	return pci_enable_device(pdev); +} +  static struct drm_driver driver = {  	.driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |  	DRIVER_MODESET, @@ -689,7 +761,9 @@ static struct drm_driver driver = {  		       .name = VMWGFX_DRIVER_NAME,  		       .id_table = vmw_pci_id_list,  		       .probe = vmw_probe, -		       .remove = vmw_remove +		       .remove = vmw_remove, +		       .suspend = vmw_pci_suspend, +		       .resume = vmw_pci_resume  		       },  	.name = VMWGFX_DRIVER_NAME,  	.desc = VMWGFX_DRIVER_DESC, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index e61bd85b697..356dc935ec1 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -32,16 +32,17 @@  #include "drmP.h"  #include "vmwgfx_drm.h"  #include "drm_hashtab.h" +#include "linux/suspend.h"  #include "ttm/ttm_bo_driver.h"  #include "ttm/ttm_object.h"  #include "ttm/ttm_lock.h"  #include "ttm/ttm_execbuf_util.h"  #include "ttm/ttm_module.h" -#define VMWGFX_DRIVER_DATE "20090724" -#define VMWGFX_DRIVER_MAJOR 0 -#define VMWGFX_DRIVER_MINOR 1 -#define VMWGFX_DRIVER_PATCHLEVEL 2 +#define VMWGFX_DRIVER_DATE "20100209" +#define VMWGFX_DRIVER_MAJOR 1 +#define VMWGFX_DRIVER_MINOR 0 +#define VMWGFX_DRIVER_PATCHLEVEL 0  #define VMWGFX_FILE_PAGE_OFFSET 0x00100000  #define VMWGFX_FIFO_STATIC_SIZE (1024*1024)  #define VMWGFX_MAX_RELOCATIONS 2048 @@ -95,6 +96,8 @@ struct vmw_surface {  	struct drm_vmw_size *sizes;  	uint32_t num_sizes; +	bool scanout; +  	/* TODO so far just a extra pointer */  	struct vmw_cursor_snooper snooper;  }; @@ -110,6 +113,7 @@ struct vmw_fifo_state {  	unsigned long static_buffer_size;  	bool using_bounce_buffer;  	uint32_t capabilities; +	struct mutex fifo_mutex;  	struct rw_semaphore rwsem;  }; @@ -210,7 +214,7 @@ struct vmw_private {  	 * Fencing and IRQs.  	 */ -	uint32_t fence_seq; +	atomic_t fence_seq;  	wait_queue_head_t fence_queue;  	wait_queue_head_t fifo_queue;  	atomic_t fence_queue_waiters; @@ -258,6 +262,7 @@ struct vmw_private {  	struct vmw_master *active_master;  	struct vmw_master fbdev_master; +	struct notifier_block pm_nb;  };  static inline struct vmw_private *vmw_priv(struct drm_device *dev) @@ -353,6 +358,7 @@ extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv,  				       struct vmw_dma_buffer *bo);  extern int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv,  				struct vmw_dma_buffer *bo); +extern void vmw_dmabuf_gmr_unbind(struct ttm_buffer_object *bo);  extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data,  				  struct drm_file *file_priv);  extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, @@ -386,6 +392,7 @@ extern int vmw_fifo_send_fence(struct vmw_private *dev_priv,  			       uint32_t *sequence);  extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason);  extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma); +extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv);  /**   * TTM glue - vmwgfx_ttm_glue.c @@ -401,6 +408,7 @@ extern int vmw_mmap(struct file *filp, struct vm_area_struct *vma);  extern struct ttm_placement vmw_vram_placement;  extern struct ttm_placement vmw_vram_ne_placement; +extern struct ttm_placement vmw_vram_sys_placement;  extern struct ttm_placement vmw_sys_placement;  extern struct ttm_bo_driver vmw_bo_driver;  extern int vmw_dma_quiescent(struct drm_device *dev); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c index 2e92da56740..d69caf92ffe 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c @@ -490,10 +490,29 @@ static int vmw_validate_single_buffer(struct vmw_private *dev_priv,  	if (vmw_dmabuf_gmr(bo) != SVGA_GMR_NULL)  		return 0; +	/** +	 * Put BO in VRAM, only if there is space. +	 */ + +	ret = ttm_bo_validate(bo, &vmw_vram_sys_placement, true, false); +	if (unlikely(ret == -ERESTARTSYS)) +		return ret; + +	/** +	 * Otherwise, set it up as GMR. +	 */ + +	if (vmw_dmabuf_gmr(bo) != SVGA_GMR_NULL) +		return 0; +  	ret = vmw_gmr_bind(dev_priv, bo);  	if (likely(ret == 0 || ret == -ERESTARTSYS))  		return ret; +	/** +	 * If that failed, try VRAM again, this time evicting +	 * previous contents. +	 */  	ret = ttm_bo_validate(bo, &vmw_vram_placement, true, false);  	return ret; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c index 641dde76ada..4f4f6432be8 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c @@ -649,14 +649,6 @@ int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv,  	if (unlikely(ret != 0))  		goto err_unlock; -	if (vmw_bo->gmr_bound) { -		vmw_gmr_unbind(vmw_priv, vmw_bo->gmr_id); -		spin_lock(&bo->glob->lru_lock); -		ida_remove(&vmw_priv->gmr_ida, vmw_bo->gmr_id); -		spin_unlock(&bo->glob->lru_lock); -		vmw_bo->gmr_bound = NULL; -	} -  	ret = ttm_bo_validate(bo, &ne_placement, false, false);  	ttm_bo_unreserve(bo);  err_unlock: diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c index 01feb48af33..39d43a01d84 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c @@ -29,6 +29,25 @@  #include "drmP.h"  #include "ttm/ttm_placement.h" +bool vmw_fifo_have_3d(struct vmw_private *dev_priv) +{ +	__le32 __iomem *fifo_mem = dev_priv->mmio_virt; +	uint32_t fifo_min, hwversion; + +	fifo_min = ioread32(fifo_mem  + SVGA_FIFO_MIN); +	if (fifo_min <= SVGA_FIFO_3D_HWVERSION * sizeof(unsigned int)) +		return false; + +	hwversion = ioread32(fifo_mem + SVGA_FIFO_3D_HWVERSION); +	if (hwversion == 0) +		return false; + +	if (hwversion < SVGA3D_HWVERSION_WS65_B1) +		return false; + +	return true; +} +  int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)  {  	__le32 __iomem *fifo_mem = dev_priv->mmio_virt; @@ -55,6 +74,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)  	fifo->reserved_size = 0;  	fifo->using_bounce_buffer = false; +	mutex_init(&fifo->fifo_mutex);  	init_rwsem(&fifo->rwsem);  	/* @@ -98,8 +118,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)  		 (unsigned int) min,  		 (unsigned int) fifo->capabilities); -	dev_priv->fence_seq = (uint32_t) -100; -	dev_priv->last_read_sequence = (uint32_t) -100; +	atomic_set(&dev_priv->fence_seq, dev_priv->last_read_sequence);  	iowrite32(dev_priv->last_read_sequence, fifo_mem + SVGA_FIFO_FENCE);  	return vmw_fifo_send_fence(dev_priv, &dummy); @@ -265,7 +284,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)  	uint32_t reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE;  	int ret; -	down_write(&fifo_state->rwsem); +	mutex_lock(&fifo_state->fifo_mutex);  	max = ioread32(fifo_mem + SVGA_FIFO_MAX);  	min = ioread32(fifo_mem + SVGA_FIFO_MIN);  	next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); @@ -333,7 +352,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)  	}  out_err:  	fifo_state->reserved_size = 0; -	up_write(&fifo_state->rwsem); +	mutex_unlock(&fifo_state->fifo_mutex);  	return NULL;  } @@ -408,6 +427,7 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)  	} +	down_write(&fifo_state->rwsem);  	if (fifo_state->using_bounce_buffer || reserveable) {  		next_cmd += bytes;  		if (next_cmd >= max) @@ -419,8 +439,9 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)  	if (reserveable)  		iowrite32(0, fifo_mem + SVGA_FIFO_RESERVED);  	mb(); -	vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC);  	up_write(&fifo_state->rwsem); +	vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); +	mutex_unlock(&fifo_state->fifo_mutex);  }  int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence) @@ -433,9 +454,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)  	fm = vmw_fifo_reserve(dev_priv, bytes);  	if (unlikely(fm == NULL)) { -		down_write(&fifo_state->rwsem); -		*sequence = dev_priv->fence_seq; -		up_write(&fifo_state->rwsem); +		*sequence = atomic_read(&dev_priv->fence_seq);  		ret = -ENOMEM;  		(void)vmw_fallback_wait(dev_priv, false, true, *sequence,  					false, 3*HZ); @@ -443,7 +462,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)  	}  	do { -		*sequence = dev_priv->fence_seq++; +		*sequence = atomic_add_return(1, &dev_priv->fence_seq);  	} while (*sequence == 0);  	if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c index 5fa6a4ed238..1c7a316454d 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c @@ -43,11 +43,17 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,  		param->value = vmw_overlay_num_free_overlays(dev_priv);  		break;  	case DRM_VMW_PARAM_3D: -		param->value = dev_priv->capabilities & SVGA_CAP_3D ? 1 : 0; +		param->value = vmw_fifo_have_3d(dev_priv) ? 1 : 0;  		break;  	case DRM_VMW_PARAM_FIFO_OFFSET:  		param->value = dev_priv->mmio_start;  		break; +	case DRM_VMW_PARAM_HW_CAPS: +		param->value = dev_priv->capabilities; +		break; +	case DRM_VMW_PARAM_FIFO_CAPS: +		param->value = dev_priv->fifo.capabilities; +		break;  	default:  		DRM_ERROR("Illegal vmwgfx get param request: %d\n",  			  param->param); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c b/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c index d40086fc864..4d7cb539386 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c @@ -85,19 +85,12 @@ bool vmw_fence_signaled(struct vmw_private *dev_priv,  		return true;  	/** -	 * Below is to signal stale fences that have wrapped. -	 * First, block fence submission. -	 */ - -	down_read(&fifo_state->rwsem); - -	/**  	 * Then check if the sequence is higher than what we've actually  	 * emitted. Then the fence is stale and signaled.  	 */ -	ret = ((dev_priv->fence_seq - sequence) > VMW_FENCE_WRAP); -	up_read(&fifo_state->rwsem); +	ret = ((atomic_read(&dev_priv->fence_seq) - sequence) +	       > VMW_FENCE_WRAP);  	return ret;  } @@ -127,7 +120,7 @@ int vmw_fallback_wait(struct vmw_private *dev_priv,  	if (fifo_idle)  		down_read(&fifo_state->rwsem); -	signal_seq = dev_priv->fence_seq; +	signal_seq = atomic_read(&dev_priv->fence_seq);  	ret = 0;  	for (;;) { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index b1af76e371c..31f9afed0a6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -553,9 +553,7 @@ int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,  	} *cmd;  	int i, increment = 1; -	if (!num_clips || -	    !(dev_priv->fifo.capabilities & -	      SVGA_FIFO_CAP_SCREEN_OBJECT)) { +	if (!num_clips) {  		num_clips = 1;  		clips = &norect;  		norect.x1 = norect.y1 = 0; @@ -574,10 +572,10 @@ int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,  	for (i = 0; i < num_clips; i++, clips += increment) {  		cmd[i].header = cpu_to_le32(SVGA_CMD_UPDATE); -		cmd[i].body.x = cpu_to_le32(clips[i].x1); -		cmd[i].body.y = cpu_to_le32(clips[i].y1); -		cmd[i].body.width = cpu_to_le32(clips[i].x2 - clips[i].x1); -		cmd[i].body.height = cpu_to_le32(clips[i].y2 - clips[i].y1); +		cmd[i].body.x = cpu_to_le32(clips->x1); +		cmd[i].body.y = cpu_to_le32(clips->y1); +		cmd[i].body.width = cpu_to_le32(clips->x2 - clips->x1); +		cmd[i].body.height = cpu_to_le32(clips->y2 - clips->y1);  	}  	vmw_fifo_commit(dev_priv, sizeof(*cmd) * num_clips); @@ -709,6 +707,9 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev,  	if (ret)  		goto try_dmabuf; +	if (!surface->scanout) +		goto err_not_scanout; +  	ret = vmw_kms_new_framebuffer_surface(dev_priv, surface, &vfb,  					      mode_cmd->width, mode_cmd->height); @@ -742,6 +743,13 @@ try_dmabuf:  	}  	return &vfb->base; + +err_not_scanout: +	DRM_ERROR("surface not marked as scanout\n"); +	/* vmw_user_surface_lookup takes one ref */ +	vmw_surface_unreference(&surface); + +	return NULL;  }  static int vmw_kms_fb_changed(struct drm_device *dev) @@ -761,10 +769,10 @@ int vmw_kms_init(struct vmw_private *dev_priv)  	drm_mode_config_init(dev);  	dev->mode_config.funcs = &vmw_kms_funcs; -	dev->mode_config.min_width = 640; -	dev->mode_config.min_height = 480; -	dev->mode_config.max_width = 2048; -	dev->mode_config.max_height = 2048; +	dev->mode_config.min_width = 1; +	dev->mode_config.min_height = 1; +	dev->mode_config.max_width = dev_priv->fb_max_width; +	dev->mode_config.max_height = dev_priv->fb_max_height;  	ret = vmw_kms_init_legacy_display_system(dev_priv); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c index bb6e6a096d2..5b6eabeb7f5 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c @@ -104,7 +104,6 @@ static int vmw_dmabuf_pin_in_vram(struct vmw_private *dev_priv,  				  bool pin, bool interruptible)  {  	struct ttm_buffer_object *bo = &buf->base; -	struct ttm_bo_global *glob = bo->glob;  	struct ttm_placement *overlay_placement = &vmw_vram_placement;  	int ret; @@ -116,14 +115,6 @@ static int vmw_dmabuf_pin_in_vram(struct vmw_private *dev_priv,  	if (unlikely(ret != 0))  		goto err; -	if (buf->gmr_bound) { -		vmw_gmr_unbind(dev_priv, buf->gmr_id); -		spin_lock(&glob->lru_lock); -		ida_remove(&dev_priv->gmr_ida, buf->gmr_id); -		spin_unlock(&glob->lru_lock); -		buf->gmr_bound = NULL; -	} -  	if (pin)  		overlay_placement = &vmw_vram_ne_placement; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index c012d5927f6..f8fbbc67a40 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -574,6 +574,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	srf->flags = req->flags;  	srf->format = req->format; +	srf->scanout = req->scanout;  	memcpy(srf->mip_levels, req->mip_levels, sizeof(srf->mip_levels));  	srf->num_sizes = 0;  	for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) @@ -599,6 +600,26 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	if (unlikely(ret != 0))  		goto out_err1; +	if (srf->scanout && +	    srf->num_sizes == 1 && +	    srf->sizes[0].width == 64 && +	    srf->sizes[0].height == 64 && +	    srf->format == SVGA3D_A8R8G8B8) { + +		srf->snooper.image = kmalloc(64 * 64 * 4, GFP_KERNEL); +		/* clear the image */ +		if (srf->snooper.image) { +			memset(srf->snooper.image, 0x00, 64 * 64 * 4); +		} else { +			DRM_ERROR("Failed to allocate cursor_image\n"); +			ret = -ENOMEM; +			goto out_err1; +		} +	} else { +		srf->snooper.image = NULL; +	} +	srf->snooper.crtc = NULL; +  	user_srf->base.shareable = false;  	user_srf->base.tfile = NULL; @@ -622,24 +643,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  		return ret;  	} -	if (srf->flags & (1 << 9) && -	    srf->num_sizes == 1 && -	    srf->sizes[0].width == 64 && -	    srf->sizes[0].height == 64 && -	    srf->format == SVGA3D_A8R8G8B8) { - -		srf->snooper.image = kmalloc(64 * 64 * 4, GFP_KERNEL); -		/* clear the image */ -		if (srf->snooper.image) -			memset(srf->snooper.image, 0x00, 64 * 64 * 4); -		else -			DRM_ERROR("Failed to allocate cursor_image\n"); - -	} else { -		srf->snooper.image = NULL; -	} -	srf->snooper.crtc = NULL; -  	rep->sid = user_srf->base.hash.key;  	if (rep->sid == SVGA3D_INVALID_ID)  		DRM_ERROR("Created bad Surface ID.\n"); @@ -754,20 +757,29 @@ static size_t vmw_dmabuf_acc_size(struct ttm_bo_global *glob,  	return bo_user_size + page_array_size;  } -void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo) +void vmw_dmabuf_gmr_unbind(struct ttm_buffer_object *bo)  {  	struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo);  	struct ttm_bo_global *glob = bo->glob;  	struct vmw_private *dev_priv =  		container_of(bo->bdev, struct vmw_private, bdev); -	ttm_mem_global_free(glob->mem_glob, bo->acc_size);  	if (vmw_bo->gmr_bound) {  		vmw_gmr_unbind(dev_priv, vmw_bo->gmr_id);  		spin_lock(&glob->lru_lock);  		ida_remove(&dev_priv->gmr_ida, vmw_bo->gmr_id);  		spin_unlock(&glob->lru_lock); +		vmw_bo->gmr_bound = false;  	} +} + +void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo) +{ +	struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); +	struct ttm_bo_global *glob = bo->glob; + +	vmw_dmabuf_gmr_unbind(bo); +	ttm_mem_global_free(glob->mem_glob, bo->acc_size);  	kfree(vmw_bo);  } @@ -813,18 +825,10 @@ int vmw_dmabuf_init(struct vmw_private *dev_priv,  static void vmw_user_dmabuf_destroy(struct ttm_buffer_object *bo)  {  	struct vmw_user_dma_buffer *vmw_user_bo = vmw_user_dma_buffer(bo); -	struct vmw_dma_buffer *vmw_bo = &vmw_user_bo->dma;  	struct ttm_bo_global *glob = bo->glob; -	struct vmw_private *dev_priv = -		container_of(bo->bdev, struct vmw_private, bdev); +	vmw_dmabuf_gmr_unbind(bo);  	ttm_mem_global_free(glob->mem_glob, bo->acc_size); -	if (vmw_bo->gmr_bound) { -		vmw_gmr_unbind(dev_priv, vmw_bo->gmr_id); -		spin_lock(&glob->lru_lock); -		ida_remove(&dev_priv->gmr_ida, vmw_bo->gmr_id); -		spin_unlock(&glob->lru_lock); -	}  	kfree(vmw_user_bo);  } @@ -868,7 +872,7 @@ int vmw_dmabuf_alloc_ioctl(struct drm_device *dev, void *data,  	}  	ret = vmw_dmabuf_init(dev_priv, &vmw_user_bo->dma, req->size, -			      &vmw_vram_placement, true, +			      &vmw_vram_sys_placement, true,  			      &vmw_user_dmabuf_destroy);  	if (unlikely(ret != 0))  		return ret; diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index 1ac0c93603c..24b56dc5459 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c @@ -961,7 +961,7 @@ static ssize_t vga_arb_write(struct file *file, const char __user * buf,  		remaining -= 7;  		pr_devel("client 0x%p called 'target'\n", priv);  		/* if target is default */ -		if (!strncmp(buf, "default", 7)) +		if (!strncmp(kbuf, "default", 7))  			pdev = pci_dev_get(vga_default_device());  		else {  			if (!vga_pci_str_to_vars(curr_pos, remaining, diff --git a/drivers/hwmon/adt7462.c b/drivers/hwmon/adt7462.c index a31e77c776a..b8156b4893b 100644 --- a/drivers/hwmon/adt7462.c +++ b/drivers/hwmon/adt7462.c @@ -179,7 +179,7 @@ static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };   *   * Some, but not all, of these voltages have low/high limits.   */ -#define ADT7462_VOLT_COUNT	12 +#define ADT7462_VOLT_COUNT	13  #define ADT7462_VENDOR		0x41  #define ADT7462_DEVICE		0x62 diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c index 1c89d922d61..fa9708c2d72 100644 --- a/drivers/hwmon/amc6821.c +++ b/drivers/hwmon/amc6821.c @@ -686,7 +686,6 @@ static ssize_t set_fan1_div(  		data->fan1_div = 4;  		break;  	default: -		mutex_unlock(&data->update_lock);  		count = -EINVAL;  		goto EXIT;  	} diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c index 6811346c1c6..028284f544e 100644 --- a/drivers/hwmon/asus_atk0110.c +++ b/drivers/hwmon/asus_atk0110.c @@ -1329,17 +1329,16 @@ static int atk_add(struct acpi_device *device)  			&buf, ACPI_TYPE_PACKAGE);  	if (ret != AE_OK) {  		dev_dbg(&device->dev, "atk: method MBIF not found\n"); -		err = -ENODEV; -		goto out; -	} - -	obj = buf.pointer; -	if (obj->package.count >= 2 && -			obj->package.elements[1].type == ACPI_TYPE_STRING) { -		dev_dbg(&device->dev, "board ID = %s\n", -				obj->package.elements[1].string.pointer); +	} else { +		obj = buf.pointer; +		if (obj->package.count >= 2) { +			union acpi_object *id = &obj->package.elements[1]; +			if (id->type == ACPI_TYPE_STRING) +				dev_dbg(&device->dev, "board ID = %s\n", +					id->string.pointer); +		} +		ACPI_FREE(buf.pointer);  	} -	ACPI_FREE(buf.pointer);  	err = atk_probe_if(data);  	if (err) { diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c index bd0fc67e804..fa0728232e7 100644 --- a/drivers/hwmon/fschmd.c +++ b/drivers/hwmon/fschmd.c @@ -768,6 +768,7 @@ leave:  static int watchdog_open(struct inode *inode, struct file *filp)  {  	struct fschmd_data *pos, *data = NULL; +	int watchdog_is_open;  	/* We get called from drivers/char/misc.c with misc_mtx hold, and we  	   call misc_register() from fschmd_probe() with watchdog_data_mutex @@ -782,10 +783,12 @@ static int watchdog_open(struct inode *inode, struct file *filp)  		}  	}  	/* Note we can never not have found data, so we don't check for this */ -	kref_get(&data->kref); +	watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open); +	if (!watchdog_is_open) +		kref_get(&data->kref);  	mutex_unlock(&watchdog_data_mutex); -	if (test_and_set_bit(0, &data->watchdog_is_open)) +	if (watchdog_is_open)  		return -EBUSY;  	/* Start the watchdog */ diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c index cadcbd90ff3..72ff2c4e757 100644 --- a/drivers/hwmon/lm78.c +++ b/drivers/hwmon/lm78.c @@ -851,17 +851,16 @@ static struct lm78_data *lm78_update_device(struct device *dev)  static int __init lm78_isa_found(unsigned short address)  {  	int val, save, found = 0; +	int port; -	/* We have to request the region in two parts because some -	   boards declare base+4 to base+7 as a PNP device */ -	if (!request_region(address, 4, "lm78")) { -		pr_debug("lm78: Failed to request low part of region\n"); -		return 0; -	} -	if (!request_region(address + 4, 4, "lm78")) { -		pr_debug("lm78: Failed to request high part of region\n"); -		release_region(address, 4); -		return 0; +	/* Some boards declare base+0 to base+7 as a PNP device, some base+4 +	 * to base+7 and some base+5 to base+6. So we better request each port +	 * individually for the probing phase. */ +	for (port = address; port < address + LM78_EXTENT; port++) { +		if (!request_region(port, 1, "lm78")) { +			pr_debug("lm78: Failed to request port 0x%x\n", port); +			goto release; +		}  	}  #define REALLY_SLOW_IO @@ -925,8 +924,8 @@ static int __init lm78_isa_found(unsigned short address)  			val & 0x80 ? "LM79" : "LM78", (int)address);   release: -	release_region(address + 4, 4); -	release_region(address, 4); +	for (port--; port >= address; port--) +		release_region(port, 1);  	return found;  } diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c index 9ca97818bd4..8fa462f2b57 100644 --- a/drivers/hwmon/smsc47m1.c +++ b/drivers/hwmon/smsc47m1.c @@ -488,7 +488,7 @@ static int __init smsc47m1_find(unsigned short *addr,  }  /* Restore device to its initial state */ -static void __init smsc47m1_restore(const struct smsc47m1_sio_data *sio_data) +static void smsc47m1_restore(const struct smsc47m1_sio_data *sio_data)  {  	if ((sio_data->activate & 0x01) == 0) {  		superio_enter(); diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c index 05f9225b6f9..32d4adee73d 100644 --- a/drivers/hwmon/w83781d.c +++ b/drivers/hwmon/w83781d.c @@ -1793,17 +1793,17 @@ static int __init  w83781d_isa_found(unsigned short address)  {  	int val, save, found = 0; +	int port; -	/* We have to request the region in two parts because some -	   boards declare base+4 to base+7 as a PNP device */ -	if (!request_region(address, 4, "w83781d")) { -		pr_debug("w83781d: Failed to request low part of region\n"); -		return 0; -	} -	if (!request_region(address + 4, 4, "w83781d")) { -		pr_debug("w83781d: Failed to request high part of region\n"); -		release_region(address, 4); -		return 0; +	/* Some boards declare base+0 to base+7 as a PNP device, some base+4 +	 * to base+7 and some base+5 to base+6. So we better request each port +	 * individually for the probing phase. */ +	for (port = address; port < address + W83781D_EXTENT; port++) { +		if (!request_region(port, 1, "w83781d")) { +			pr_debug("w83781d: Failed to request port 0x%x\n", +				 port); +			goto release; +		}  	}  #define REALLY_SLOW_IO @@ -1877,8 +1877,8 @@ w83781d_isa_found(unsigned short address)  			val == 0x30 ? "W83782D" : "W83781D", (int)address);   release: -	release_region(address + 4, 4); -	release_region(address, 4); +	for (port--; port >= address; port--) +		release_region(port, 1);  	return found;  } diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index e3654d683e1..75bf820e7cc 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -226,7 +226,6 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)  		temp = readb(i2c_imx->base + IMX_I2C_I2CR);  		temp &= ~(I2CR_MSTA | I2CR_MTX);  		writeb(temp, i2c_imx->base + IMX_I2C_I2CR); -		i2c_imx->stopped = 1;  	}  	if (cpu_is_mx1()) {  		/* @@ -236,8 +235,10 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)  		udelay(i2c_imx->disable_delay);  	} -	if (!i2c_imx->stopped) +	if (!i2c_imx->stopped) {  		i2c_imx_bus_busy(i2c_imx, 0); +		i2c_imx->stopped = 1; +	}  	/* Disable I2C controller */  	writeb(0, i2c_imx->base + IMX_I2C_I2CR); @@ -496,22 +497,23 @@ static int __init i2c_imx_probe(struct platform_device *pdev)  	}  	res_size = resource_size(res); + +	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) { +		ret = -EBUSY; +		goto fail0; +	} +  	base = ioremap(res->start, res_size);  	if (!base) {  		dev_err(&pdev->dev, "ioremap failed\n");  		ret = -EIO; -		goto fail0; +		goto fail1;  	}  	i2c_imx = kzalloc(sizeof(struct imx_i2c_struct), GFP_KERNEL);  	if (!i2c_imx) {  		dev_err(&pdev->dev, "can't allocate interface\n");  		ret = -ENOMEM; -		goto fail1; -	} - -	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) { -		ret = -EBUSY;  		goto fail2;  	} @@ -582,11 +584,11 @@ fail5:  fail4:  	clk_put(i2c_imx->clk);  fail3: -	release_mem_region(i2c_imx->res->start, resource_size(res)); -fail2:  	kfree(i2c_imx); -fail1: +fail2:  	iounmap(base); +fail1: +	release_mem_region(res->start, resource_size(res));  fail0:  	if (pdata && pdata->exit)  		pdata->exit(&pdev->dev); @@ -618,8 +620,8 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)  	clk_put(i2c_imx->clk); -	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));  	iounmap(i2c_imx->base); +	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));  	kfree(i2c_imx);  	return 0;  } diff --git a/drivers/i2c/busses/i2c-tiny-usb.c b/drivers/i2c/busses/i2c-tiny-usb.c index b1c050ff311..e29b6d5ba8e 100644 --- a/drivers/i2c/busses/i2c-tiny-usb.c +++ b/drivers/i2c/busses/i2c-tiny-usb.c @@ -13,6 +13,7 @@  #include <linux/kernel.h>  #include <linux/errno.h>  #include <linux/module.h> +#include <linux/types.h>  /* include interfaces to usb layer */  #include <linux/usb.h> @@ -31,8 +32,8 @@  #define CMD_I2C_IO_END		(1<<1)  /* i2c bit delay, default is 10us -> 100kHz */ -static int delay = 10; -module_param(delay, int, 0); +static unsigned short delay = 10; +module_param(delay, ushort, 0);  MODULE_PARM_DESC(delay, "bit delay in microseconds, "  		 "e.g. 10 for 100kHz (default is 100kHz)"); @@ -109,7 +110,7 @@ static int usb_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)  static u32 usb_func(struct i2c_adapter *adapter)  { -	u32 func; +	__le32 func;  	/* get functionality from adapter */  	if (usb_read(adapter, CMD_GET_FUNC, 0, 0, &func, sizeof(func)) != @@ -118,7 +119,7 @@ static u32 usb_func(struct i2c_adapter *adapter)  		return 0;  	} -	return func; +	return le32_to_cpu(func);  }  /* This is the actual algorithm we define */ @@ -216,8 +217,7 @@ static int i2c_tiny_usb_probe(struct usb_interface *interface,  		 "i2c-tiny-usb at bus %03d device %03d",  		 dev->usb_dev->bus->busnum, dev->usb_dev->devnum); -	if (usb_write(&dev->adapter, CMD_SET_DELAY, -		      cpu_to_le16(delay), 0, NULL, 0) != 0) { +	if (usb_write(&dev->adapter, CMD_SET_DELAY, delay, 0, NULL, 0) != 0) {  		dev_err(&dev->adapter.dev,  			"failure setting delay to %dus\n", delay);  		retval = -EIO; diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index cc9b5940fa9..875e34e0b23 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -2115,9 +2115,7 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)  	if (ret)  		goto err1; -	if (cma_loopback_addr(addr)) { -		ret = cma_bind_loopback(id_priv); -	} else if (!cma_zero_addr(addr)) { +	if (!cma_any_addr(addr)) {  		ret = rdma_translate_ip(addr, &id->route.addr.dev_addr);  		if (ret)  			goto err1; diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c index b3684060465..100da8542bb 100644 --- a/drivers/infiniband/hw/ipath/ipath_fs.c +++ b/drivers/infiniband/hw/ipath/ipath_fs.c @@ -346,10 +346,8 @@ static int ipathfs_fill_super(struct super_block *sb, void *data,  	list_for_each_entry_safe(dd, tmp, &ipath_dev_list, ipath_list) {  		spin_unlock_irqrestore(&ipath_devs_lock, flags);  		ret = create_device_files(sb, dd); -		if (ret) { -			deactivate_locked_super(sb); +		if (ret)  			goto bail; -		}  		spin_lock_irqsave(&ipath_devs_lock, flags);  	} diff --git a/drivers/input/input.c b/drivers/input/input.c index 30b503b8d67..86cb2d2196f 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -46,6 +46,7 @@ static unsigned int input_abs_bypass_init_data[] __initdata = {  	ABS_MT_TOOL_TYPE,  	ABS_MT_BLOB_ID,  	ABS_MT_TRACKING_ID, +	ABS_MT_PRESSURE,  	0  };  static unsigned long input_abs_bypass[BITS_TO_LONGS(ABS_CNT)]; diff --git a/drivers/input/misc/winbond-cir.c b/drivers/input/misc/winbond-cir.c index 33309fe44e2..c8f5a9a3fa1 100644 --- a/drivers/input/misc/winbond-cir.c +++ b/drivers/input/misc/winbond-cir.c @@ -768,7 +768,7 @@ wbcir_parse_rc6(struct device *dev, struct wbcir_data *data)  		return;  	} -	dev_info(dev, "IR-RC6 ad 0x%02X cm 0x%02X cu 0x%04X " +	dev_dbg(dev, "IR-RC6 ad 0x%02X cm 0x%02X cu 0x%04X "  		"toggle %u mode %u scan 0x%08X\n",  		address,  		command, diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c index 6d7aa10d10f..7c1d7d420ae 100644 --- a/drivers/input/mouse/lifebook.c +++ b/drivers/input/mouse/lifebook.c @@ -53,6 +53,12 @@ static const struct dmi_system_id __initconst lifebook_dmi_table[] = {  	{  		/* LifeBook B */  		.matches = { +			DMI_MATCH(DMI_PRODUCT_NAME, "Lifebook B Series"), +		}, +	}, +	{ +		/* LifeBook B */ +		.matches = {  			DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook B Series"),  		},  	}, diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 9774bdfaa48..d8c0c8d6992 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c @@ -1141,7 +1141,14 @@ static void psmouse_cleanup(struct serio *serio)  		psmouse_deactivate(parent);  	} -	psmouse_deactivate(psmouse); +	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); + +	/* +	 * Disable stream mode so cleanup routine can proceed undisturbed. +	 */ +	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) +		printk(KERN_WARNING "psmouse.c: Failed to disable mouse on %s\n", +			psmouse->ps2dev.serio->phys);  	if (psmouse->cleanup)  		psmouse->cleanup(psmouse); diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c index c21e6d3a884..794d070c690 100644 --- a/drivers/input/touchscreen/ad7879.c +++ b/drivers/input/touchscreen/ad7879.c @@ -47,6 +47,7 @@  #include <linux/workqueue.h>  #include <linux/spi/spi.h>  #include <linux/i2c.h> +#include <linux/gpio.h>  #include <linux/spi/ad7879.h> @@ -132,7 +133,9 @@ struct ad7879 {  	struct input_dev	*input;  	struct work_struct	work;  	struct timer_list	timer; - +#ifdef CONFIG_GPIOLIB +	struct gpio_chip	gc; +#endif  	struct mutex		mutex;  	unsigned		disabled:1;	/* P: mutex */ @@ -150,11 +153,9 @@ struct ad7879 {  	u8			median;  	u16			x_plate_ohms;  	u16			pressure_max; -	u16			gpio_init;  	u16			cmd_crtl1;  	u16			cmd_crtl2;  	u16			cmd_crtl3; -	unsigned		gpio:1;  };  static int ad7879_read(bus_device *, u8); @@ -237,24 +238,6 @@ static irqreturn_t ad7879_irq(int irq, void *handle)  static void ad7879_setup(struct ad7879 *ts)  { -	ts->cmd_crtl3 = AD7879_YPLUS_BIT | -			AD7879_XPLUS_BIT | -			AD7879_Z2_BIT | -			AD7879_Z1_BIT | -			AD7879_TEMPMASK_BIT | -			AD7879_AUXVBATMASK_BIT | -			AD7879_GPIOALERTMASK_BIT; - -	ts->cmd_crtl2 = AD7879_PM(AD7879_PM_DYN) | AD7879_DFR | -			AD7879_AVG(ts->averaging) | -			AD7879_MFS(ts->median) | -			AD7879_FCD(ts->first_conversion_delay) | -			ts->gpio_init; - -	ts->cmd_crtl1 = AD7879_MODE_INT | AD7879_MODE_SEQ1 | -			AD7879_ACQ(ts->acquisition_time) | -			AD7879_TMR(ts->pen_down_acc_interval); -  	ad7879_write(ts->bus, AD7879_REG_CTRL2, ts->cmd_crtl2);  	ad7879_write(ts->bus, AD7879_REG_CTRL3, ts->cmd_crtl3);  	ad7879_write(ts->bus, AD7879_REG_CTRL1, ts->cmd_crtl1); @@ -324,48 +307,132 @@ static ssize_t ad7879_disable_store(struct device *dev,  static DEVICE_ATTR(disable, 0664, ad7879_disable_show, ad7879_disable_store); -static ssize_t ad7879_gpio_show(struct device *dev, -				     struct device_attribute *attr, char *buf) +static struct attribute *ad7879_attributes[] = { +	&dev_attr_disable.attr, +	NULL +}; + +static const struct attribute_group ad7879_attr_group = { +	.attrs = ad7879_attributes, +}; + +#ifdef CONFIG_GPIOLIB +static int ad7879_gpio_direction_input(struct gpio_chip *chip, +					unsigned gpio)  { -	struct ad7879 *ts = dev_get_drvdata(dev); +	struct ad7879 *ts = container_of(chip, struct ad7879, gc); +	int err; -	return sprintf(buf, "%u\n", ts->gpio); +	mutex_lock(&ts->mutex); +	ts->cmd_crtl2 |= AD7879_GPIO_EN | AD7879_GPIODIR | AD7879_GPIOPOL; +	err = ad7879_write(ts->bus, AD7879_REG_CTRL2, ts->cmd_crtl2); +	mutex_unlock(&ts->mutex); + +	return err;  } -static ssize_t ad7879_gpio_store(struct device *dev, -				     struct device_attribute *attr, -				     const char *buf, size_t count) +static int ad7879_gpio_direction_output(struct gpio_chip *chip, +					unsigned gpio, int level)  { -	struct ad7879 *ts = dev_get_drvdata(dev); -	unsigned long val; -	int error; +	struct ad7879 *ts = container_of(chip, struct ad7879, gc); +	int err; -	error = strict_strtoul(buf, 10, &val); -	if (error) -		return error; +	mutex_lock(&ts->mutex); +	ts->cmd_crtl2 &= ~AD7879_GPIODIR; +	ts->cmd_crtl2 |= AD7879_GPIO_EN | AD7879_GPIOPOL; +	if (level) +		ts->cmd_crtl2 |= AD7879_GPIO_DATA; +	else +		ts->cmd_crtl2 &= ~AD7879_GPIO_DATA; + +	err = ad7879_write(ts->bus, AD7879_REG_CTRL2, ts->cmd_crtl2); +	mutex_unlock(&ts->mutex); + +	return err; +} + +static int ad7879_gpio_get_value(struct gpio_chip *chip, unsigned gpio) +{ +	struct ad7879 *ts = container_of(chip, struct ad7879, gc); +	u16 val;  	mutex_lock(&ts->mutex); -	ts->gpio = !!val; -	error = ad7879_write(ts->bus, AD7879_REG_CTRL2, -			   ts->gpio ? -				ts->cmd_crtl2 & ~AD7879_GPIO_DATA : -				ts->cmd_crtl2 | AD7879_GPIO_DATA); +	val = ad7879_read(ts->bus, AD7879_REG_CTRL2);  	mutex_unlock(&ts->mutex); -	return error ? : count; +	return !!(val & AD7879_GPIO_DATA);  } -static DEVICE_ATTR(gpio, 0664, ad7879_gpio_show, ad7879_gpio_store); +static void ad7879_gpio_set_value(struct gpio_chip *chip, +				  unsigned gpio, int value) +{ +	struct ad7879 *ts = container_of(chip, struct ad7879, gc); -static struct attribute *ad7879_attributes[] = { -	&dev_attr_disable.attr, -	&dev_attr_gpio.attr, -	NULL -}; +	mutex_lock(&ts->mutex); +	if (value) +		ts->cmd_crtl2 |= AD7879_GPIO_DATA; +	else +		ts->cmd_crtl2 &= ~AD7879_GPIO_DATA; -static const struct attribute_group ad7879_attr_group = { -	.attrs = ad7879_attributes, -}; +	ad7879_write(ts->bus, AD7879_REG_CTRL2, ts->cmd_crtl2); +	mutex_unlock(&ts->mutex); +} + +static int __devinit ad7879_gpio_add(struct device *dev) +{ +	struct ad7879 *ts = dev_get_drvdata(dev); +	struct ad7879_platform_data *pdata = dev->platform_data; +	int ret = 0; + +	if (pdata->gpio_export) { +		ts->gc.direction_input = ad7879_gpio_direction_input; +		ts->gc.direction_output = ad7879_gpio_direction_output; +		ts->gc.get = ad7879_gpio_get_value; +		ts->gc.set = ad7879_gpio_set_value; +		ts->gc.can_sleep = 1; +		ts->gc.base = pdata->gpio_base; +		ts->gc.ngpio = 1; +		ts->gc.label = "AD7879-GPIO"; +		ts->gc.owner = THIS_MODULE; +		ts->gc.dev = dev; + +		ret = gpiochip_add(&ts->gc); +		if (ret) +			dev_err(dev, "failed to register gpio %d\n", +				ts->gc.base); +	} + +	return ret; +} + +/* + * We mark ad7879_gpio_remove inline so there is a chance the code + * gets discarded when not needed. We can't do __devinit/__devexit + * markup since it is used in both probe and remove methods. + */ +static inline void ad7879_gpio_remove(struct device *dev) +{ +	struct ad7879 *ts = dev_get_drvdata(dev); +	struct ad7879_platform_data *pdata = dev->platform_data; +	int ret; + +	if (pdata->gpio_export) { +		ret = gpiochip_remove(&ts->gc); +		if (ret) +			dev_err(dev, "failed to remove gpio %d\n", +				ts->gc.base); +	} +} +#else +static inline int ad7879_gpio_add(struct device *dev) +{ +	return 0; +} + +static inline void ad7879_gpio_remove(struct device *dev) +{ +} +#endif  static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts)  { @@ -403,12 +470,6 @@ static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts)  	ts->pen_down_acc_interval = pdata->pen_down_acc_interval;  	ts->median = pdata->median; -	if (pdata->gpio_output) -		ts->gpio_init = AD7879_GPIO_EN | -				(pdata->gpio_default ? 0 : AD7879_GPIO_DATA); -	else -		ts->gpio_init = AD7879_GPIO_EN | AD7879_GPIODIR; -  	snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&bus->dev));  	input_dev->name = "AD7879 Touchscreen"; @@ -446,6 +507,23 @@ static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts)  		goto err_free_mem;  	} +	ts->cmd_crtl3 = AD7879_YPLUS_BIT | +			AD7879_XPLUS_BIT | +			AD7879_Z2_BIT | +			AD7879_Z1_BIT | +			AD7879_TEMPMASK_BIT | +			AD7879_AUXVBATMASK_BIT | +			AD7879_GPIOALERTMASK_BIT; + +	ts->cmd_crtl2 = AD7879_PM(AD7879_PM_DYN) | AD7879_DFR | +			AD7879_AVG(ts->averaging) | +			AD7879_MFS(ts->median) | +			AD7879_FCD(ts->first_conversion_delay); + +	ts->cmd_crtl1 = AD7879_MODE_INT | AD7879_MODE_SEQ1 | +			AD7879_ACQ(ts->acquisition_time) | +			AD7879_TMR(ts->pen_down_acc_interval); +  	ad7879_setup(ts);  	err = request_irq(bus->irq, ad7879_irq, @@ -460,15 +538,21 @@ static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts)  	if (err)  		goto err_free_irq; -	err = input_register_device(input_dev); +	err = ad7879_gpio_add(&bus->dev);  	if (err)  		goto err_remove_attr; +	err = input_register_device(input_dev); +	if (err) +		goto err_remove_gpio; +  	dev_info(&bus->dev, "Rev.%d touchscreen, irq %d\n",  		 revid >> 8, bus->irq);  	return 0; +err_remove_gpio: +	ad7879_gpio_remove(&bus->dev);  err_remove_attr:  	sysfs_remove_group(&bus->dev.kobj, &ad7879_attr_group);  err_free_irq: @@ -481,6 +565,7 @@ err_free_mem:  static int __devexit ad7879_destroy(bus_device *bus, struct ad7879 *ts)  { +	ad7879_gpio_remove(&bus->dev);  	ad7879_disable(ts);  	sysfs_remove_group(&ts->bus->dev.kobj, &ad7879_attr_group);  	free_irq(ts->bus->irq, ts); diff --git a/drivers/md/dm-log-userspace-transfer.c b/drivers/md/dm-log-userspace-transfer.c index 54abf9e303b..f1c8cae70b4 100644 --- a/drivers/md/dm-log-userspace-transfer.c +++ b/drivers/md/dm-log-userspace-transfer.c @@ -172,11 +172,15 @@ int dm_consult_userspace(const char *uuid, uint64_t luid, int request_type,  {  	int r = 0;  	size_t dummy = 0; -	int overhead_size = -		sizeof(struct dm_ulog_request *) + sizeof(struct cn_msg); +	int overhead_size = sizeof(struct dm_ulog_request) + sizeof(struct cn_msg);  	struct dm_ulog_request *tfr = prealloced_ulog_tfr;  	struct receiving_pkg pkg; +	/* +	 * Given the space needed to hold the 'struct cn_msg' and +	 * 'struct dm_ulog_request' - do we have enough payload +	 * space remaining? +	 */  	if (data_size > (DM_ULOG_PREALLOCED_SIZE - overhead_size)) {  		DMINFO("Size of tfr exceeds preallocated size");  		return -EINVAL; @@ -191,7 +195,7 @@ resend:  	 */  	mutex_lock(&dm_ulog_lock); -	memset(tfr, 0, DM_ULOG_PREALLOCED_SIZE - overhead_size); +	memset(tfr, 0, DM_ULOG_PREALLOCED_SIZE - sizeof(struct cn_msg));  	memcpy(tfr->uuid, uuid, DM_UUID_LEN);  	tfr->luid = luid;  	tfr->seq = dm_ulog_seq++; diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index ad779bd13ae..6c1046df81f 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c @@ -724,7 +724,7 @@ static void do_writes(struct mirror_set *ms, struct bio_list *writes)  	/*  	 * Dispatch io.  	 */ -	if (unlikely(ms->log_failure)) { +	if (unlikely(ms->log_failure) && errors_handled(ms)) {  		spin_lock_irq(&ms->lock);  		bio_list_merge(&ms->failures, &sync);  		spin_unlock_irq(&ms->lock); diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c index 5f19ceb6fe9..168bd38f500 100644 --- a/drivers/md/dm-region-hash.c +++ b/drivers/md/dm-region-hash.c @@ -660,10 +660,9 @@ void dm_rh_recovery_end(struct dm_region *reg, int success)  	spin_lock_irq(&rh->region_lock);  	if (success)  		list_add(®->list, ®->rh->recovered_regions); -	else { -		reg->state = DM_RH_NOSYNC; +	else  		list_add(®->list, ®->rh->failed_recovered_regions); -	} +  	spin_unlock_irq(&rh->region_lock);  	rh->wakeup_workers(rh->context); diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c index 7d08879689a..c097d8a4823 100644 --- a/drivers/md/dm-snap-persistent.c +++ b/drivers/md/dm-snap-persistent.c @@ -254,7 +254,7 @@ static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, int rw,  	 * Issue the synchronous I/O from a different thread  	 * to avoid generic_make_request recursion.  	 */ -	INIT_WORK(&req.work, do_metadata); +	INIT_WORK_ON_STACK(&req.work, do_metadata);  	queue_work(ps->metadata_wq, &req.work);  	flush_workqueue(ps->metadata_wq); diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c index e0efc1adcaf..bd58703ee8f 100644 --- a/drivers/md/dm-stripe.c +++ b/drivers/md/dm-stripe.c @@ -110,7 +110,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)  	}  	stripes = simple_strtoul(argv[0], &end, 10); -	if (*end) { +	if (!stripes || *end) {  		ti->error = "Invalid stripe count";  		return -EINVAL;  	} diff --git a/drivers/md/dm-sysfs.c b/drivers/md/dm-sysfs.c index f53392df7b9..f91b40942e0 100644 --- a/drivers/md/dm-sysfs.c +++ b/drivers/md/dm-sysfs.c @@ -80,20 +80,12 @@ static struct sysfs_ops dm_sysfs_ops = {  };  /* - * The sysfs structure is embedded in md struct, nothing to do here - */ -static void dm_sysfs_release(struct kobject *kobj) -{ -} - -/*   * dm kobject is embedded in mapped_device structure   * no need to define release function here   */  static struct kobj_type dm_ktype = {  	.sysfs_ops	= &dm_sysfs_ops,  	.default_attrs	= dm_attrs, -	.release	= dm_sysfs_release  };  /* diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 3167480b532..aa4e2aa86d4 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1595,10 +1595,15 @@ static int dm_prep_fn(struct request_queue *q, struct request *rq)  	return BLKPREP_OK;  } -static void map_request(struct dm_target *ti, struct request *clone, -			struct mapped_device *md) +/* + * Returns: + * 0  : the request has been processed (not requeued) + * !0 : the request has been requeued + */ +static int map_request(struct dm_target *ti, struct request *clone, +		       struct mapped_device *md)  { -	int r; +	int r, requeued = 0;  	struct dm_rq_target_io *tio = clone->end_io_data;  	/* @@ -1625,6 +1630,7 @@ static void map_request(struct dm_target *ti, struct request *clone,  	case DM_MAPIO_REQUEUE:  		/* The target wants to requeue the I/O */  		dm_requeue_unmapped_request(clone); +		requeued = 1;  		break;  	default:  		if (r > 0) { @@ -1636,6 +1642,8 @@ static void map_request(struct dm_target *ti, struct request *clone,  		dm_kill_unmapped_request(clone, r);  		break;  	} + +	return requeued;  }  /* @@ -1677,12 +1685,17 @@ static void dm_request_fn(struct request_queue *q)  		atomic_inc(&md->pending[rq_data_dir(clone)]);  		spin_unlock(q->queue_lock); -		map_request(ti, clone, md); +		if (map_request(ti, clone, md)) +			goto requeued; +  		spin_lock_irq(q->queue_lock);  	}  	goto out; +requeued: +	spin_lock_irq(q->queue_lock); +  plug_and_out:  	if (!elv_queue_empty(q))  		/* Some requests still remain, retry later */ diff --git a/drivers/md/md.c b/drivers/md/md.c index dd3dfe42d5a..a20a71e5efd 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -4075,8 +4075,10 @@ static void mddev_delayed_delete(struct work_struct *ws)  {  	mddev_t *mddev = container_of(ws, mddev_t, del_work); -	if (mddev->private == &md_redundancy_group) { +	if (mddev->private) {  		sysfs_remove_group(&mddev->kobj, &md_redundancy_group); +		if (mddev->private != (void*)1) +			sysfs_remove_group(&mddev->kobj, mddev->private);  		if (mddev->sysfs_action)  			sysfs_put(mddev->sysfs_action);  		mddev->sysfs_action = NULL; @@ -4287,10 +4289,7 @@ static int do_md_run(mddev_t * mddev)  		sysfs_notify_dirent(rdev->sysfs_state);  	} -	md_probe(mddev->unit, NULL, NULL);  	disk = mddev->gendisk; -	if (!disk) -		return -ENOMEM;  	spin_lock(&pers_lock);  	pers = find_pers(mddev->level, mddev->clevel); @@ -4530,8 +4529,8 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)  			mddev->queue->unplug_fn = NULL;  			mddev->queue->backing_dev_info.congested_fn = NULL;  			module_put(mddev->pers->owner); -			if (mddev->pers->sync_request) -				mddev->private = &md_redundancy_group; +			if (mddev->pers->sync_request && mddev->private == NULL) +				mddev->private = (void*)1;  			mddev->pers = NULL;  			/* tell userspace to handle 'inactive' */  			sysfs_notify_dirent(mddev->sysfs_state); @@ -4578,9 +4577,6 @@ out:  		}  		mddev->bitmap_info.offset = 0; -		/* make sure all md_delayed_delete calls have finished */ -		flush_scheduled_work(); -  		export_array(mddev);  		mddev->array_sectors = 0; diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index e84204eb12d..ceb24afdc14 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -5136,9 +5136,8 @@ static int stop(mddev_t *mddev)  	mddev->thread = NULL;  	mddev->queue->backing_dev_info.congested_fn = NULL;  	blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ -	sysfs_remove_group(&mddev->kobj, &raid5_attrs_group);  	free_conf(conf); -	mddev->private = NULL; +	mddev->private = &raid5_attrs_group;  	return 0;  } @@ -5464,11 +5463,11 @@ static int raid5_start_reshape(mddev_t *mddev)  		    !test_bit(Faulty, &rdev->flags)) {  			if (raid5_add_disk(mddev, rdev) == 0) {  				char nm[20]; -				if (rdev->raid_disk >= conf->previous_raid_disks) +				if (rdev->raid_disk >= conf->previous_raid_disks) {  					set_bit(In_sync, &rdev->flags); -				else +					added_devices++; +				} else  					rdev->recovery_offset = 0; -				added_devices++;  				sprintf(nm, "rd%d", rdev->raid_disk);  				if (sysfs_create_link(&mddev->kobj,  						      &rdev->kobj, nm)) @@ -5480,9 +5479,12 @@ static int raid5_start_reshape(mddev_t *mddev)  				break;  		} +	/* When a reshape changes the number of devices, ->degraded +	 * is measured against the large of the pre and post number of +	 * devices.*/  	if (mddev->delta_disks > 0) {  		spin_lock_irqsave(&conf->device_lock, flags); -		mddev->degraded = (conf->raid_disks - conf->previous_raid_disks) +		mddev->degraded += (conf->raid_disks - conf->previous_raid_disks)  			- added_devices;  		spin_unlock_irqrestore(&conf->device_lock, flags);  	} diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c index becbaadb3b7..5ed75263340 100644 --- a/drivers/media/common/saa7146_video.c +++ b/drivers/media/common/saa7146_video.c @@ -1333,9 +1333,9 @@ static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb)  	DEB_CAP(("vbuf:%p\n",vb)); -	release_all_pagetables(dev, buf); -  	saa7146_dma_free(dev,q,buf); + +	release_all_pagetables(dev, buf);  }  static struct videobuf_queue_ops video_qops = { diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c index c37790ad92d..9ddc57909d4 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.c +++ b/drivers/media/dvb/dvb-core/dmxdev.c @@ -761,7 +761,6 @@ static int dvb_demux_open(struct inode *inode, struct file *file)  	dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192);  	dmxdevfilter->type = DMXDEV_TYPE_NONE;  	dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED); -	INIT_LIST_HEAD(&dmxdevfilter->feed.ts);  	init_timer(&dmxdevfilter->timer);  	dvbdev->users++; @@ -887,6 +886,7 @@ static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev,  	dmxdevfilter->type = DMXDEV_TYPE_PES;  	memcpy(&dmxdevfilter->params, params,  	       sizeof(struct dmx_pes_filter_params)); +	INIT_LIST_HEAD(&dmxdevfilter->feed.ts);  	dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); diff --git a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c index b78cfb7d189..67f189b7aa1 100644 --- a/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/drivers/media/dvb/dvb-core/dvb_demux.c @@ -426,16 +426,7 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)  		};  	}; -	if (dvb_demux_tscheck) { -		if (!demux->cnt_storage) -			demux->cnt_storage = vmalloc(MAX_PID + 1); - -		if (!demux->cnt_storage) { -			printk(KERN_WARNING "Couldn't allocate memory for TS/TEI check. Disabling it\n"); -			dvb_demux_tscheck = 0; -			goto no_dvb_demux_tscheck; -		} - +	if (demux->cnt_storage) {  		/* check pkt counter */  		if (pid < MAX_PID) {  			if (buf[1] & 0x80) @@ -454,7 +445,6 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)  		};  		/* end check */  	}; -no_dvb_demux_tscheck:  	list_for_each_entry(feed, &demux->feed_list, list_head) {  		if ((feed->pid != pid) && (feed->pid != 0x2000)) @@ -1246,6 +1236,7 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux)  	dvbdemux->feed = vmalloc(dvbdemux->feednum * sizeof(struct dvb_demux_feed));  	if (!dvbdemux->feed) {  		vfree(dvbdemux->filter); +		dvbdemux->filter = NULL;  		return -ENOMEM;  	}  	for (i = 0; i < dvbdemux->filternum; i++) { @@ -1257,6 +1248,13 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux)  		dvbdemux->feed[i].index = i;  	} +	if (dvb_demux_tscheck) { +		dvbdemux->cnt_storage = vmalloc(MAX_PID + 1); + +		if (!dvbdemux->cnt_storage) +			printk(KERN_WARNING "Couldn't allocate memory for TS/TEI check. Disabling it\n"); +	} +  	INIT_LIST_HEAD(&dvbdemux->frontend_list);  	for (i = 0; i < DMX_TS_PES_OTHER; i++) { diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c index 7dfecfc6017..ee5bff02a92 100644 --- a/drivers/media/video/saa7134/saa7134-empress.c +++ b/drivers/media/video/saa7134/saa7134-empress.c @@ -93,9 +93,9 @@ static int ts_open(struct file *file)  	dprintk("open dev=%s\n", video_device_node_name(vdev));  	err = -EBUSY;  	if (!mutex_trylock(&dev->empress_tsq.vb_lock)) -		goto done; +		return err;  	if (atomic_read(&dev->empress_users)) -		goto done_up; +		goto done;  	/* Unmute audio */  	saa_writeb(SAA7134_AUDIO_MUTE_CTRL, @@ -105,10 +105,8 @@ static int ts_open(struct file *file)  	file->private_data = dev;  	err = 0; -done_up: -	mutex_unlock(&dev->empress_tsq.vb_lock);  done: -	unlock_kernel(); +	mutex_unlock(&dev->empress_tsq.vb_lock);  	return err;  } diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 85bc6a685e3..44d2037e9e5 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c @@ -4330,6 +4330,8 @@ initChainBuffers(MPT_ADAPTER *ioc)  	if (ioc->bus_type == SPI)  		num_chain *= MPT_SCSI_CAN_QUEUE; +	else if (ioc->bus_type == SAS) +		num_chain *= MPT_SAS_CAN_QUEUE;  	else  		num_chain *= MPT_FC_CAN_QUEUE; diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 57752751712..81279b3d694 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c @@ -1796,7 +1796,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)  		dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: "  		   "Command not in the active list! (sc=%p)\n", ioc->name,  		   SCpnt)); -		retval = 0; +		retval = SUCCESS;  		goto out;  	} diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 8f0d18409ed..e09eb4870db 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -3,7 +3,7 @@  #  obj-$(CONFIG_MFD_SM501)		+= sm501.o -obj-$(CONFIG_MFD_ASIC3)		+= asic3.o +obj-$(CONFIG_MFD_ASIC3)		+= asic3.o tmio_core.o  obj-$(CONFIG_MFD_SH_MOBILE_SDHI)		+= sh_mobile_sdhi.o  obj-$(CONFIG_HTC_EGPIO)		+= htc-egpio.o diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c index b9f1e84897c..e7f8027165e 100644 --- a/drivers/mmc/card/mmc_test.c +++ b/drivers/mmc/card/mmc_test.c @@ -74,6 +74,9 @@ static void mmc_test_prepare_mrq(struct mmc_test_card *test,  	}  	mrq->cmd->arg = dev_addr; +	if (!mmc_card_blockaddr(test->card)) +		mrq->cmd->arg <<= 9; +  	mrq->cmd->flags = MMC_RSP_R1 | MMC_CMD_ADTC;  	if (blocks == 1) @@ -190,7 +193,7 @@ static int __mmc_test_prepare(struct mmc_test_card *test, int write)  	}  	for (i = 0;i < BUFFER_SIZE / 512;i++) { -		ret = mmc_test_buffer_transfer(test, test->buffer, i * 512, 512, 1); +		ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1);  		if (ret)  			return ret;  	} @@ -219,7 +222,7 @@ static int mmc_test_cleanup(struct mmc_test_card *test)  	memset(test->buffer, 0, 512);  	for (i = 0;i < BUFFER_SIZE / 512;i++) { -		ret = mmc_test_buffer_transfer(test, test->buffer, i * 512, 512, 1); +		ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1);  		if (ret)  			return ret;  	} @@ -426,7 +429,7 @@ static int mmc_test_transfer(struct mmc_test_card *test,  		for (i = 0;i < sectors;i++) {  			ret = mmc_test_buffer_transfer(test,  				test->buffer + i * 512, -				dev_addr + i * 512, 512, 0); +				dev_addr + i, 512, 0);  			if (ret)  				return ret;  		} diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 4c364d44ad5..2de0cc823d6 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig @@ -549,4 +549,21 @@ config MTD_VMU  	  To build this as a module select M here, the module will be called  	  vmu-flash. +config MTD_PISMO +	tristate "MTD discovery driver for PISMO modules" +	depends on I2C +	depends on ARCH_VERSATILE +	help +	  This driver allows for discovery of PISMO modules - see +	  <http://www.pismoworld.org/>.  These are small modules containing +	  up to five memory devices (eg, SRAM, flash, DOC) described by an +	  I2C EEPROM. + +	  This driver does not create any MTD maps itself; instead it +	  creates MTD physmap and MTD SRAM platform devices.  If you +	  enable this option, you should consider enabling MTD_PHYSMAP +	  and/or MTD_PLATRAM according to the devices on your module. + +	  When built as a module, it will be called pismo.ko +  endmenu diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c new file mode 100644 index 00000000000..c48cad271f5 --- /dev/null +++ b/drivers/mtd/maps/pismo.c @@ -0,0 +1,320 @@ +/* + * PISMO memory driver - http://www.pismoworld.org/ + * + * For ARM Realview and Versatile platforms + * + * 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. + */ +#include <linux/init.h> +#include <linux/module.h> +#include <linux/i2c.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> +#include <linux/mutex.h> +#include <linux/mtd/physmap.h> +#include <linux/mtd/plat-ram.h> +#include <linux/mtd/pismo.h> + +#define PISMO_NUM_CS	5 + +struct pismo_cs_block { +	u8	type; +	u8	width; +	__le16	access; +	__le32	size; +	u32	reserved[2]; +	char	device[32]; +} __packed; + +struct pismo_eeprom { +	struct pismo_cs_block cs[PISMO_NUM_CS]; +	char	board[15]; +	u8	sum; +} __packed; + +struct pismo_mem { +	phys_addr_t base; +	u32	size; +	u16	access; +	u8	width; +	u8	type; +}; + +struct pismo_data { +	struct i2c_client	*client; +	void			(*vpp)(void *, int); +	void			*vpp_data; +	struct platform_device	*dev[PISMO_NUM_CS]; +}; + +/* FIXME: set_vpp could do with a better calling convention */ +static struct pismo_data *vpp_pismo; +static DEFINE_MUTEX(pismo_mutex); + +static int pismo_setvpp_probe_fix(struct pismo_data *pismo) +{ +	mutex_lock(&pismo_mutex); +	if (vpp_pismo) { +		mutex_unlock(&pismo_mutex); +		kfree(pismo); +		return -EBUSY; +	} +	vpp_pismo = pismo; +	mutex_unlock(&pismo_mutex); +	return 0; +} + +static void pismo_setvpp_remove_fix(struct pismo_data *pismo) +{ +	mutex_lock(&pismo_mutex); +	if (vpp_pismo == pismo) +		vpp_pismo = NULL; +	mutex_unlock(&pismo_mutex); +} + +static void pismo_set_vpp(struct map_info *map, int on) +{ +	struct pismo_data *pismo = vpp_pismo; + +	pismo->vpp(pismo->vpp_data, on); +} +/* end of hack */ + + +static unsigned int __devinit pismo_width_to_bytes(unsigned int width) +{ +	width &= 15; +	if (width > 2) +		return 0; +	return 1 << width; +} + +static int __devinit pismo_eeprom_read(struct i2c_client *client, void *buf, +	u8 addr, size_t size) +{ +	int ret; +	struct i2c_msg msg[] = { +		{ +			.addr = client->addr, +			.len = sizeof(addr), +			.buf = &addr, +		}, { +			.addr = client->addr, +			.flags = I2C_M_RD, +			.len = size, +			.buf = buf, +		}, +	}; + +	ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); + +	return ret == ARRAY_SIZE(msg) ? size : -EIO; +} + +static int __devinit pismo_add_device(struct pismo_data *pismo, int i, +	struct pismo_mem *region, const char *name, void *pdata, size_t psize) +{ +	struct platform_device *dev; +	struct resource res = { }; +	phys_addr_t base = region.base; +	int ret; + +	if (base == ~0) +		return -ENXIO; + +	res.start = base; +	res.end = base + region->size - 1; +	res.flags = IORESOURCE_MEM; + +	dev = platform_device_alloc(name, i); +	if (!dev) +		return -ENOMEM; +	dev->dev.parent = &pismo->client->dev; + +	do { +		ret = platform_device_add_resources(dev, &res, 1); +		if (ret) +			break; + +		ret = platform_device_add_data(dev, pdata, psize); +		if (ret) +			break; + +		ret = platform_device_add(dev); +		if (ret) +			break; + +		pismo->dev[i] = dev; +		return 0; +	} while (0); + +	platform_device_put(dev); +	return ret; +} + +static int __devinit pismo_add_nor(struct pismo_data *pismo, int i, +	struct pismo_mem *region) +{ +	struct physmap_flash_data data = { +		.width = region->width, +	}; + +	if (pismo->vpp) +		data.set_vpp = pismo_set_vpp; + +	return pismo_add_device(pismo, i, region, "physmap-flash", +		&data, sizeof(data)); +} + +static int __devinit pismo_add_sram(struct pismo_data *pismo, int i, +	struct pismo_mem *region) +{ +	struct platdata_mtd_ram data = { +		.bankwidth = region->width, +	}; + +	return pismo_add_device(pismo, i, region, "mtd-ram", +		&data, sizeof(data)); +} + +static void __devinit pismo_add_one(struct pismo_data *pismo, int i, +	const struct pismo_cs_block *cs, phys_addr_t base) +{ +	struct device *dev = &pismo->client->dev; +	struct pismo_mem region; + +	region.base = base; +	region.type = cs->type; +	region.width = pismo_width_to_bytes(cs->width); +	region.access = le16_to_cpu(cs->access); +	region.size = le32_to_cpu(cs->size); + +	if (region.width == 0) { +		dev_err(dev, "cs%u: bad width: %02x, ignoring\n", i, cs->width); +		return; +	} + +	/* +	 * FIXME: may need to the platforms memory controller here, but at +	 * the moment we assume that it has already been correctly setup. +	 * The memory controller can also tell us the base address as well. +	 */ + +	dev_info(dev, "cs%u: %.32s: type %02x access %u00ps size %uK\n", +		i, cs->device, region.type, region.access, region.size / 1024); + +	switch (region.type) { +	case 0: +		break; +	case 1: +		/* static DOC */ +		break; +	case 2: +		/* static NOR */ +		pismo_add_nor(pismo, i, ®ion); +		break; +	case 3: +		/* static RAM */ +		pismo_add_sram(pismo, i, ®ion); +		break; +	} +} + +static int __devexit pismo_remove(struct i2c_client *client) +{ +	struct pismo_data *pismo = i2c_get_clientdata(client); +	int i; + +	for (i = 0; i < ARRAY_SIZE(pismo->dev); i++) +		platform_device_unregister(pismo->dev[i]); + +	/* FIXME: set_vpp needs saner arguments */ +	pismo_setvpp_remove_fix(pismo); + +	kfree(pismo); + +	return 0; +} + +static int __devinit pismo_probe(struct i2c_client *client, +				 const struct i2c_device_id *id) +{ +	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); +	struct pismo_pdata *pdata = client->dev.platform_data; +	struct pismo_eeprom eeprom; +	struct pismo_data *pismo; +	int ret, i; + +	if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) { +		dev_err(&client->dev, "functionality mismatch\n"); +		return -EIO; +	} + +	pismo = kzalloc(sizeof(*pismo), GFP_KERNEL); +	if (!pismo) +		return -ENOMEM; + +	/* FIXME: set_vpp needs saner arguments */ +	ret = pismo_setvpp_probe_fix(pismo); +	if (ret) +		return ret; + +	pismo->client = client; +	if (pdata) { +		pismo->vpp = pdata->set_vpp; +		pismo->vpp_data = pdata->vpp_data; +	} +	i2c_set_clientdata(client, pismo); + +	ret = pismo_eeprom_read(client, &eeprom, 0, sizeof(eeprom)); +	if (ret < 0) { +		dev_err(&client->dev, "error reading EEPROM: %d\n", ret); +		return ret; +	} + +	dev_info(&client->dev, "%.15s board found\n", eeprom.board); + +	for (i = 0; i < ARRAY_SIZE(eeprom.cs); i++) +		if (eeprom.cs[i].type != 0xff) +			pismo_add_one(pismo, i, &eeprom.cs[i], +				      pdata->cs_addrs[i]); + +	return 0; +} + +static const struct i2c_device_id pismo_id[] = { +	{ "pismo" }, +	{ }, +}; +MODULE_DEVICE_TABLE(i2c, pismo_id); + +static struct i2c_driver pismo_driver = { +	.driver	= { +		.name	= "pismo", +		.owner	= THIS_MODULE, +	}, +	.probe		= pismo_probe, +	.remove		= __devexit_p(pismo_remove), +	.id_table	= pismo_id, +}; + +static int __init pismo_init(void) +{ +	BUILD_BUG_ON(sizeof(struct pismo_cs_block) != 48); +	BUILD_BUG_ON(sizeof(struct pismo_eeprom) != 256); + +	return i2c_add_driver(&pismo_driver); +} +module_init(pismo_init); + +static void __exit pismo_exit(void) +{ +	i2c_del_driver(&pismo_driver); +} +module_exit(pismo_exit); + +MODULE_AUTHOR("Russell King <linux@arm.linux.org.uk>"); +MODULE_DESCRIPTION("PISMO memory driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c index a714ec48276..92e12df0917 100644 --- a/drivers/mtd/mtdoops.c +++ b/drivers/mtd/mtdoops.c @@ -322,7 +322,7 @@ static void mtdoops_do_dump(struct kmsg_dumper *dumper,  	memcpy(dst + l1_cpy, s2 + s2_start, l2_cpy);  	/* Panics must be written immediately */ -	if (reason == KMSG_DUMP_PANIC) { +	if (reason != KMSG_DUMP_OOPS) {  		if (!cxt->mtd->panic_write)  			printk(KERN_ERR "mtdoops: Cannot write from panic without panic_write\n");  		else diff --git a/drivers/mtd/tests/mtd_readtest.c b/drivers/mtd/tests/mtd_readtest.c index 79fc4530987..25c5dd03a83 100644 --- a/drivers/mtd/tests/mtd_readtest.c +++ b/drivers/mtd/tests/mtd_readtest.c @@ -147,6 +147,10 @@ static int scan_for_bad_eraseblocks(void)  	}  	memset(bbt, 0 , ebcnt); +	/* NOR flash does not implement block_isbad */ +	if (mtd->block_isbad == NULL) +		return 0; +  	printk(PRINT_PREF "scanning for bad eraseblocks\n");  	for (i = 0; i < ebcnt; ++i) {  		bbt[i] = is_block_bad(i) ? 1 : 0; @@ -184,7 +188,7 @@ static int __init mtd_readtest_init(void)  	tmp = mtd->size;  	do_div(tmp, mtd->erasesize);  	ebcnt = tmp; -	pgcnt = mtd->erasesize / mtd->writesize; +	pgcnt = mtd->erasesize / pgsize;  	printk(PRINT_PREF "MTD device size %llu, eraseblock size %u, "  	       "page size %u, count of eraseblocks %u, pages per " diff --git a/drivers/mtd/tests/mtd_speedtest.c b/drivers/mtd/tests/mtd_speedtest.c index 141363a7e80..7fbb51d4eab 100644 --- a/drivers/mtd/tests/mtd_speedtest.c +++ b/drivers/mtd/tests/mtd_speedtest.c @@ -301,6 +301,10 @@ static int scan_for_bad_eraseblocks(void)  	}  	memset(bbt, 0 , ebcnt); +	/* NOR flash does not implement block_isbad */ +	if (mtd->block_isbad == NULL) +		goto out; +  	printk(PRINT_PREF "scanning for bad eraseblocks\n");  	for (i = 0; i < ebcnt; ++i) {  		bbt[i] = is_block_bad(i) ? 1 : 0; @@ -309,6 +313,7 @@ static int scan_for_bad_eraseblocks(void)  		cond_resched();  	}  	printk(PRINT_PREF "scanned %d eraseblocks, %d are bad\n", i, bad); +out:  	goodebcnt = ebcnt - bad;  	return 0;  } @@ -340,7 +345,7 @@ static int __init mtd_speedtest_init(void)  	tmp = mtd->size;  	do_div(tmp, mtd->erasesize);  	ebcnt = tmp; -	pgcnt = mtd->erasesize / mtd->writesize; +	pgcnt = mtd->erasesize / pgsize;  	printk(PRINT_PREF "MTD device size %llu, eraseblock size %u, "  	       "page size %u, count of eraseblocks %u, pages per " diff --git a/drivers/mtd/tests/mtd_stresstest.c b/drivers/mtd/tests/mtd_stresstest.c index 63920476b57..a99d3cd737d 100644 --- a/drivers/mtd/tests/mtd_stresstest.c +++ b/drivers/mtd/tests/mtd_stresstest.c @@ -227,6 +227,10 @@ static int scan_for_bad_eraseblocks(void)  	}  	memset(bbt, 0 , ebcnt); +	/* NOR flash does not implement block_isbad */ +	if (mtd->block_isbad == NULL) +		return 0; +  	printk(PRINT_PREF "scanning for bad eraseblocks\n");  	for (i = 0; i < ebcnt; ++i) {  		bbt[i] = is_block_bad(i) ? 1 : 0; @@ -265,7 +269,7 @@ static int __init mtd_stresstest_init(void)  	tmp = mtd->size;  	do_div(tmp, mtd->erasesize);  	ebcnt = tmp; -	pgcnt = mtd->erasesize / mtd->writesize; +	pgcnt = mtd->erasesize / pgsize;  	printk(PRINT_PREF "MTD device size %llu, eraseblock size %u, "  	       "page size %u, count of eraseblocks %u, pages per " diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index f237ddbb271..111ea41c4ec 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c @@ -853,7 +853,6 @@ static long ubi_cdev_ioctl(struct file *file, unsigned int cmd,  			break;  		} -		req.name[req.name_len] = '\0';  		err = verify_mkvol_req(ubi, &req);  		if (err)  			break; diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c index 277786ebaa2..1361574e2b0 100644 --- a/drivers/mtd/ubi/kapi.c +++ b/drivers/mtd/ubi/kapi.c @@ -291,8 +291,7 @@ EXPORT_SYMBOL_GPL(ubi_open_volume_nm);   */  struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode)  { -	int error, ubi_num, vol_id; -	struct ubi_volume_desc *ret; +	int error, ubi_num, vol_id, mod;  	struct inode *inode;  	struct path path; @@ -306,16 +305,16 @@ struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode)  		return ERR_PTR(error);  	inode = path.dentry->d_inode; +	mod = inode->i_mode;  	ubi_num = ubi_major2num(imajor(inode));  	vol_id = iminor(inode) - 1; +	path_put(&path); +	if (!S_ISCHR(mod)) +		return ERR_PTR(-EINVAL);  	if (vol_id >= 0 && ubi_num >= 0) -		ret = ubi_open_volume(ubi_num, vol_id, mode); -	else -		ret = ERR_PTR(-ENODEV); - -	path_put(&path); -	return ret; +		return ubi_open_volume(ubi_num, vol_id, mode); +	return ERR_PTR(-ENODEV);  }  EXPORT_SYMBOL_GPL(ubi_open_volume_path); diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c index c1d7b880c79..425bf5a3edd 100644 --- a/drivers/mtd/ubi/upd.c +++ b/drivers/mtd/ubi/upd.c @@ -155,6 +155,7 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,  		if (err)  			return err;  		vol->updating = 0; +		return 0;  	}  	vol->upd_buf = vmalloc(ubi->leb_size); diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c index 1afc61e7455..40044028d68 100644 --- a/drivers/mtd/ubi/vtbl.c +++ b/drivers/mtd/ubi/vtbl.c @@ -566,6 +566,7 @@ static int init_volumes(struct ubi_device *ubi, const struct ubi_scan_info *si,  		vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs);  		vol->alignment = be32_to_cpu(vtbl[i].alignment);  		vol->data_pad = be32_to_cpu(vtbl[i].data_pad); +		vol->upd_marker = vtbl[i].upd_marker;  		vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ?  					UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME;  		vol->name_len = be16_to_cpu(vtbl[i].name_len); diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c index 3397ee327e1..477f82bc647 100644 --- a/drivers/net/benet/be_cmds.c +++ b/drivers/net/benet/be_cmds.c @@ -308,6 +308,7 @@ static void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr,  	req_hdr->opcode = opcode;  	req_hdr->subsystem = subsystem;  	req_hdr->request_length = cpu_to_le32(cmd_len - sizeof(*req_hdr)); +	req_hdr->version = 0;  }  static void be_cmd_page_addrs_prepare(struct phys_addr *pages, u32 max_pages, diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 3103f416531..35a06b47587 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c @@ -357,12 +357,34 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)  	u32 fctrl_reg;  	u32 rmcs_reg;  	u32 reg; +	u32 link_speed = 0; +	bool link_up;  #ifdef CONFIG_DCB  	if (hw->fc.requested_mode == ixgbe_fc_pfc)  		goto out;  #endif /* CONFIG_DCB */ +	/* +	 * On 82598 having Rx FC on causes resets while doing 1G +	 * so if it's on turn it off once we know link_speed. For +	 * more details see 82598 Specification update. +	 */ +	hw->mac.ops.check_link(hw, &link_speed, &link_up, false); +	if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) { +		switch (hw->fc.requested_mode) { +		case ixgbe_fc_full: +			hw->fc.requested_mode = ixgbe_fc_tx_pause; +			break; +		case ixgbe_fc_rx_pause: +			hw->fc.requested_mode = ixgbe_fc_none; +			break; +		default: +			/* no change */ +			break; +		} +	} +  	/* Negotiate the fc mode to use */  	ret_val = ixgbe_fc_autoneg(hw);  	if (ret_val) diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 0792f151de9..43a8de3dc4d 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c @@ -6088,6 +6088,10 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,  	if (err)  		goto err_sw_init; +	/* Make it possible the adapter to be woken up via WOL */ +	if (adapter->hw.mac.type == ixgbe_mac_82599EB) +		IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0); +  	/*  	 * If there is a fan on this device and it has failed log the  	 * failure. diff --git a/drivers/pci/pcie/aer/aer_inject.c b/drivers/pci/pcie/aer/aer_inject.c index 8c30a9544d6..223052b7356 100644 --- a/drivers/pci/pcie/aer/aer_inject.c +++ b/drivers/pci/pcie/aer/aer_inject.c @@ -321,7 +321,7 @@ static int aer_inject(struct aer_error_inj *einj)  	unsigned long flags;  	unsigned int devfn = PCI_DEVFN(einj->dev, einj->fn);  	int pos_cap_err, rp_pos_cap_err; -	u32 sever, mask; +	u32 sever, cor_mask, uncor_mask;  	int ret = 0;  	dev = pci_get_domain_bus_and_slot((int)einj->domain, einj->bus, devfn); @@ -339,6 +339,9 @@ static int aer_inject(struct aer_error_inj *einj)  		goto out_put;  	}  	pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_SEVER, &sever); +	pci_read_config_dword(dev, pos_cap_err + PCI_ERR_COR_MASK, &cor_mask); +	pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_MASK, +			      &uncor_mask);  	rp_pos_cap_err = pci_find_ext_capability(rpdev, PCI_EXT_CAP_ID_ERR);  	if (!rp_pos_cap_err) { @@ -374,17 +377,14 @@ static int aer_inject(struct aer_error_inj *einj)  	err->header_log2 = einj->header_log2;  	err->header_log3 = einj->header_log3; -	pci_read_config_dword(dev, pos_cap_err + PCI_ERR_COR_MASK, &mask); -	if (einj->cor_status && !(einj->cor_status & ~mask)) { +	if (einj->cor_status && !(einj->cor_status & ~cor_mask)) {  		ret = -EINVAL;  		printk(KERN_WARNING "The correctable error(s) is masked "  				"by device\n");  		spin_unlock_irqrestore(&inject_lock, flags);  		goto out_put;  	} - -	pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_MASK, &mask); -	if (einj->uncor_status && !(einj->uncor_status & ~mask)) { +	if (einj->uncor_status && !(einj->uncor_status & ~uncor_mask)) {  		ret = -EINVAL;  		printk(KERN_WARNING "The uncorrectable error(s) is masked "  				"by device\n"); diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 98ffb2de22e..446e4a94d7d 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -681,7 +681,7 @@ static void pci_read_irq(struct pci_dev *dev)  	dev->irq = irq;  } -static void set_pcie_port_type(struct pci_dev *pdev) +void set_pcie_port_type(struct pci_dev *pdev)  {  	int pos;  	u16 reg16; @@ -695,7 +695,7 @@ static void set_pcie_port_type(struct pci_dev *pdev)  	pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;  } -static void set_pcie_hotplug_bridge(struct pci_dev *pdev) +void set_pcie_hotplug_bridge(struct pci_dev *pdev)  {  	int pos;  	u16 reg16; diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index c74694345b6..d58b94030ef 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -338,6 +338,23 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev)  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3,	PCI_DEVICE_ID_S3_868,		quirk_s3_64M);  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3,	PCI_DEVICE_ID_S3_968,		quirk_s3_64M); +/* + * Some CS5536 BIOSes (for example, the Soekris NET5501 board w/ comBIOS + * ver. 1.33  20070103) don't set the correct ISA PCI region header info. + * BAR0 should be 8 bytes; instead, it may be set to something like 8k + * (which conflicts w/ BAR1's memory range). + */ +static void __devinit quirk_cs5536_vsa(struct pci_dev *dev) +{ +	if (pci_resource_len(dev, 0) != 8) { +		struct resource *res = &dev->resource[0]; +		res->end = res->start + 8 - 1; +		dev_info(&dev->dev, "CS5536 ISA bridge bug detected " +				"(incorrect header); workaround applied.\n"); +	} +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa); +  static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,  	unsigned size, int nr, const char *name)  { diff --git a/drivers/power/wm97xx_battery.c b/drivers/power/wm97xx_battery.c index fa39e759a27..6ea3cb5837c 100644 --- a/drivers/power/wm97xx_battery.c +++ b/drivers/power/wm97xx_battery.c @@ -175,8 +175,14 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)  		dev_err(&dev->dev, "Do not pass platform_data through "  			"wm97xx_bat_set_pdata!\n");  		return -EINVAL; -	} else -		pdata = wmdata->batt_pdata; +	} + +	if (!wmdata) { +		dev_err(&dev->dev, "No platform data supplied\n"); +		return -EINVAL; +	} + +	pdata = wmdata->batt_pdata;  	if (dev->id != -1)  		return -EINVAL; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 686ef270ecf..b60a4c9f8f1 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -661,7 +661,7 @@ static int suspend_prepare(struct regulator_dev *rdev, suspend_state_t state)  static void print_constraints(struct regulator_dev *rdev)  {  	struct regulation_constraints *constraints = rdev->constraints; -	char buf[80]; +	char buf[80] = "";  	int count = 0;  	int ret; diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c index 76d08c282f9..4f33a0f4a17 100644 --- a/drivers/regulator/lp3971.c +++ b/drivers/regulator/lp3971.c @@ -183,7 +183,7 @@ static int lp3971_ldo_set_voltage(struct regulator_dev *dev,  		if (vol_map[val] >= min_vol)  			break; -	if (vol_map[val] > max_vol) +	if (val > LDO_VOL_MAX_IDX || vol_map[val] > max_vol)  		return -EINVAL;  	return lp3971_set_bits(lp3971, LP3971_LDO_VOL_CONTR_REG(ldo), @@ -272,7 +272,7 @@ static int lp3971_dcdc_set_voltage(struct regulator_dev *dev,  		if (vol_map[val] >= min_vol)  			break; -	if (vol_map[val] > max_vol) +	if (val > BUCK_TARGET_VOL_MAX_IDX || vol_map[val] > max_vol)  		return -EINVAL;  	ret = lp3971_set_bits(lp3971, LP3971_BUCK_TARGET_VOL1_REG(buck), diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c index 1bbff099a54..e7b89e704af 100644 --- a/drivers/regulator/wm8350-regulator.c +++ b/drivers/regulator/wm8350-regulator.c @@ -1504,7 +1504,8 @@ int wm8350_register_led(struct wm8350 *wm8350, int lednum, int dcdc, int isink,  	led->isink_init.consumer_supplies = &led->isink_consumer;  	led->isink_init.constraints.min_uA = 0;  	led->isink_init.constraints.max_uA = pdata->max_uA; -	led->isink_init.constraints.valid_ops_mask = REGULATOR_CHANGE_CURRENT; +	led->isink_init.constraints.valid_ops_mask +		= REGULATOR_CHANGE_CURRENT | REGULATOR_CHANGE_STATUS;  	led->isink_init.constraints.valid_modes_mask = REGULATOR_MODE_NORMAL;  	ret = wm8350_register_regulator(wm8350, isink, &led->isink_init);  	if (ret != 0) { @@ -1517,6 +1518,7 @@ int wm8350_register_led(struct wm8350 *wm8350, int lednum, int dcdc, int isink,  	led->dcdc_init.num_consumer_supplies = 1;  	led->dcdc_init.consumer_supplies = &led->dcdc_consumer;  	led->dcdc_init.constraints.valid_modes_mask = REGULATOR_MODE_NORMAL; +	led->dcdc_init.constraints.valid_ops_mask =  REGULATOR_CHANGE_STATUS;  	ret = wm8350_register_regulator(wm8350, dcdc, &led->dcdc_init);  	if (ret != 0) {  		platform_device_put(pdev); diff --git a/drivers/rtc/rtc-fm3130.c b/drivers/rtc/rtc-fm3130.c index 3a7be11cc6b..812c6675508 100644 --- a/drivers/rtc/rtc-fm3130.c +++ b/drivers/rtc/rtc-fm3130.c @@ -376,20 +376,22 @@ static int __devinit fm3130_probe(struct i2c_client *client,  	}  	/* Disabling calibration mode */ -	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) +	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) {  		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,  			fm3130->regs[FM3130_RTC_CONTROL] &  				~(FM3130_RTC_CONTROL_BIT_CAL));  		dev_warn(&client->dev, "Disabling calibration mode!\n"); +	}  	/* Disabling read and write modes */  	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE || -	    fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) +	    fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) {  		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,  			fm3130->regs[FM3130_RTC_CONTROL] &  				~(FM3130_RTC_CONTROL_BIT_READ |  					FM3130_RTC_CONTROL_BIT_WRITE));  		dev_warn(&client->dev, "Disabling READ or WRITE mode!\n"); +	}  	/* oscillator off?  turn it on, so clock can tick. */  	if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN) diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index fdb2e7c1450..5905936c7c6 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -1004,8 +1004,8 @@ static void dasd_handle_killed_request(struct ccw_device *cdev,  	if (device == NULL ||  	    device != dasd_device_from_cdev_locked(cdev) ||  	    strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { -		DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " -			      "bus_id %s", dev_name(&cdev->dev)); +		DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", +				"invalid device in request");  		return;  	} @@ -1078,8 +1078,8 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,  	device = (struct dasd_device *) cqr->startdev;  	if (!device ||  	    strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { -		DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " -			      "bus_id %s", dev_name(&cdev->dev)); +		DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", +				"invalid device in request");  		return;  	} diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 1c500c46222..1cca21aafab 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c @@ -3033,7 +3033,7 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device,  	len += sprintf(page + len, KERN_ERR PRINTK_HEADER  		       " in req: %p CS: 0x%02X DS: 0x%02X CC: 0x%02X RC: %d\n",  		       req, scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), -		       scsw_cc(&irb->scsw), req->intrc); +		       scsw_cc(&irb->scsw), req ? req->intrc : 0);  	len += sprintf(page + len, KERN_ERR PRINTK_HEADER  		       " device %s: Failing CCW: %p\n",  		       dev_name(&device->cdev->dev), diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index fc7b30b4a25..7039d9cf0fb 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c @@ -260,7 +260,7 @@ static int dasd_ioctl_information(struct dasd_block *block,  	struct ccw_dev_id dev_id;  	base = block->base; -	if (!base->discipline->fill_info) +	if (!base->discipline || !base->discipline->fill_info)  		return -EINVAL;  	dasd_info = kzalloc(sizeof(struct dasd_information2_t), GFP_KERNEL); @@ -303,10 +303,7 @@ static int dasd_ioctl_information(struct dasd_block *block,  	dasd_info->features |=  		((base->features & DASD_FEATURE_READONLY) != 0); -	if (base->discipline) -		memcpy(dasd_info->type, base->discipline->name, 4); -	else -		memcpy(dasd_info->type, "none", 4); +	memcpy(dasd_info->type, base->discipline->name, 4);  	if (block->request_queue->request_fn) {  		struct list_head *l; diff --git a/drivers/s390/block/dasd_proc.c b/drivers/s390/block/dasd_proc.c index 6315fbd8e68..71f95f54866 100644 --- a/drivers/s390/block/dasd_proc.c +++ b/drivers/s390/block/dasd_proc.c @@ -72,7 +72,7 @@ dasd_devices_show(struct seq_file *m, void *v)  	/* Print device number. */  	seq_printf(m, "%s", dev_name(&device->cdev->dev));  	/* Print discipline string. */ -	if (device != NULL && device->discipline != NULL) +	if (device->discipline != NULL)  		seq_printf(m, "(%s)", device->discipline->name);  	else  		seq_printf(m, "(none)"); @@ -92,10 +92,7 @@ dasd_devices_show(struct seq_file *m, void *v)  	substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " ";  	seq_printf(m, "%4s: ", substr);  	/* Print device status information. */ -	switch ((device != NULL) ? device->state : -1) { -	case -1: -		seq_printf(m, "unknown"); -		break; +	switch (device->state) {  	case DASD_STATE_NEW:  		seq_printf(m, "new");  		break; diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index b9d2a007e93..3796ffdb847 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c @@ -495,6 +495,10 @@ sclp_vt220_open(struct tty_struct *tty, struct file *filp)  		if (tty->driver_data == NULL)  			return -ENOMEM;  		tty->low_latency = 0; +		if (!tty->winsize.ws_row && !tty->winsize.ws_col) { +			tty->winsize.ws_row = 24; +			tty->winsize.ws_col = 80; +		}  	}  	return 0;  } diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index 999fe80c405..62b654af923 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c @@ -531,7 +531,7 @@ static inline int qdio_inbound_q_done(struct qdio_q *q)  	qdio_siga_sync_q(q);  	get_buf_state(q, q->first_to_check, &state, 0); -	if (state == SLSB_P_INPUT_PRIMED) +	if (state == SLSB_P_INPUT_PRIMED || state == SLSB_P_INPUT_ERROR)  		/* more work coming */  		return 0; @@ -960,6 +960,8 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,  			qdio_handle_activate_check(cdev, intparm, cstat,  						   dstat);  		break; +	case QDIO_IRQ_STATE_STOPPED: +		break;  	default:  		WARN_ON(1);  	} diff --git a/drivers/s390/crypto/zcrypt_pcicc.c b/drivers/s390/crypto/zcrypt_pcicc.c index a23726a0735..142f72a2ca5 100644 --- a/drivers/s390/crypto/zcrypt_pcicc.c +++ b/drivers/s390/crypto/zcrypt_pcicc.c @@ -373,6 +373,8 @@ static int convert_type86(struct zcrypt_device *zdev,  			zdev->max_mod_size = PCICC_MAX_MOD_SIZE_OLD;  			return -EAGAIN;  		} +		if (service_rc == 8 && service_rs == 72) +			return -EINVAL;  		zdev->online = 0;  		return -EAGAIN;	/* repeat the request on a different device. */  	} diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c index 79c120578e6..68f3e6204db 100644 --- a/drivers/s390/crypto/zcrypt_pcixcc.c +++ b/drivers/s390/crypto/zcrypt_pcixcc.c @@ -470,6 +470,8 @@ static int convert_type86_ica(struct zcrypt_device *zdev,  		}  		if (service_rc == 12 && service_rs == 769)  			return -EINVAL; +		if (service_rc == 8 && service_rs == 72) +			return -EINVAL;  		zdev->online = 0;  		return -EAGAIN;	/* repeat the request on a different device. */  	} diff --git a/drivers/s390/scsi/zfcp_cfdc.c b/drivers/s390/scsi/zfcp_cfdc.c index f932400e980..0eb6eefd2c1 100644 --- a/drivers/s390/scsi/zfcp_cfdc.c +++ b/drivers/s390/scsi/zfcp_cfdc.c @@ -12,6 +12,7 @@  #include <linux/types.h>  #include <linux/miscdevice.h> +#include <asm/compat.h>  #include <asm/ccwdev.h>  #include "zfcp_def.h"  #include "zfcp_ext.h" @@ -163,7 +164,7 @@ static void zfcp_cfdc_req_to_sense(struct zfcp_cfdc_data *data,  }  static long zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command, -				unsigned long buffer) +				unsigned long arg)  {  	struct zfcp_cfdc_data *data;  	struct zfcp_cfdc_data __user *data_user; @@ -175,7 +176,11 @@ static long zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command,  	if (command != ZFCP_CFDC_IOC)  		return -ENOTTY; -	data_user = (void __user *) buffer; +	if (is_compat_task()) +		data_user = compat_ptr(arg); +	else +		data_user = (void __user *)arg; +  	if (!data_user)  		return -EINVAL; diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index 84450955ae1..7369c8911bc 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c @@ -327,7 +327,7 @@ static void zfcp_dbf_hba_view_response(char **p,  			break;  		zfcp_dbf_out(p, "scsi_cmnd", "0x%0Lx", r->u.fcp.cmnd);  		zfcp_dbf_out(p, "scsi_serial", "0x%016Lx", r->u.fcp.serial); -		p += sprintf(*p, "\n"); +		*p += sprintf(*p, "\n");  		break;  	case FSF_QTCB_OPEN_PORT_WITH_DID: diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h index 03dec832b46..66bdb34143c 100644 --- a/drivers/s390/scsi/zfcp_ext.h +++ b/drivers/s390/scsi/zfcp_ext.h @@ -108,6 +108,7 @@ extern void zfcp_fc_wka_ports_force_offline(struct zfcp_fc_wka_ports *);  extern int zfcp_fc_gs_setup(struct zfcp_adapter *);  extern void zfcp_fc_gs_destroy(struct zfcp_adapter *);  extern int zfcp_fc_exec_bsg_job(struct fc_bsg_job *); +extern int zfcp_fc_timeout_bsg_job(struct fc_bsg_job *);  /* zfcp_fsf.c */  extern int zfcp_fsf_open_port(struct zfcp_erp_action *); @@ -129,9 +130,9 @@ extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *);  extern int zfcp_fsf_status_read(struct zfcp_qdio *);  extern int zfcp_status_read_refill(struct zfcp_adapter *adapter);  extern int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *, struct zfcp_fsf_ct_els *, -			    mempool_t *); +			    mempool_t *, unsigned int);  extern int zfcp_fsf_send_els(struct zfcp_adapter *, u32, -			     struct zfcp_fsf_ct_els *); +			     struct zfcp_fsf_ct_els *, unsigned int);  extern int zfcp_fsf_send_fcp_command_task(struct zfcp_unit *,  					  struct scsi_cmnd *);  extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index ac5e3b7a357..271399f62f1 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c @@ -258,7 +258,8 @@ static int zfcp_fc_ns_gid_pn_request(struct zfcp_port *port,  	gid_pn->gid_pn_req.gid_pn.fn_wwpn = port->wwpn;  	ret = zfcp_fsf_send_ct(&adapter->gs->ds, &gid_pn->ct, -			       adapter->pool.gid_pn_req); +			       adapter->pool.gid_pn_req, +			       ZFCP_FC_CTELS_TMO);  	if (!ret) {  		wait_for_completion(&completion);  		zfcp_fc_ns_gid_pn_eval(gid_pn); @@ -421,7 +422,8 @@ static int zfcp_fc_adisc(struct zfcp_port *port)  	hton24(adisc->adisc_req.adisc_port_id,  	       fc_host_port_id(adapter->scsi_host)); -	ret = zfcp_fsf_send_els(adapter, port->d_id, &adisc->els); +	ret = zfcp_fsf_send_els(adapter, port->d_id, &adisc->els, +				ZFCP_FC_CTELS_TMO);  	if (ret)  		kmem_cache_free(zfcp_data.adisc_cache, adisc); @@ -532,7 +534,8 @@ static int zfcp_fc_send_gpn_ft(struct zfcp_fc_gpn_ft *gpn_ft,  	ct->req = &gpn_ft->sg_req;  	ct->resp = gpn_ft->sg_resp; -	ret = zfcp_fsf_send_ct(&adapter->gs->ds, ct, NULL); +	ret = zfcp_fsf_send_ct(&adapter->gs->ds, ct, NULL, +			       ZFCP_FC_CTELS_TMO);  	if (!ret)  		wait_for_completion(&completion);  	return ret; @@ -668,15 +671,52 @@ static void zfcp_fc_ct_els_job_handler(void *data)  {  	struct fc_bsg_job *job = data;  	struct zfcp_fsf_ct_els *zfcp_ct_els = job->dd_data; -	int status = zfcp_ct_els->status; -	int reply_status; +	struct fc_bsg_reply *jr = job->reply; -	reply_status = status ? FC_CTELS_STATUS_REJECT : FC_CTELS_STATUS_OK; -	job->reply->reply_data.ctels_reply.status = reply_status; -	job->reply->reply_payload_rcv_len = job->reply_payload.payload_len; +	jr->reply_payload_rcv_len = job->reply_payload.payload_len; +	jr->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK; +	jr->result = zfcp_ct_els->status ? -EIO : 0;  	job->job_done(job);  } +static struct zfcp_fc_wka_port *zfcp_fc_job_wka_port(struct fc_bsg_job *job) +{ +	u32 preamble_word1; +	u8 gs_type; +	struct zfcp_adapter *adapter; + +	preamble_word1 = job->request->rqst_data.r_ct.preamble_word1; +	gs_type = (preamble_word1 & 0xff000000) >> 24; + +	adapter = (struct zfcp_adapter *) job->shost->hostdata[0]; + +	switch (gs_type) { +	case FC_FST_ALIAS: +		return &adapter->gs->as; +	case FC_FST_MGMT: +		return &adapter->gs->ms; +	case FC_FST_TIME: +		return &adapter->gs->ts; +		break; +	case FC_FST_DIR: +		return &adapter->gs->ds; +		break; +	default: +		return NULL; +	} +} + +static void zfcp_fc_ct_job_handler(void *data) +{ +	struct fc_bsg_job *job = data; +	struct zfcp_fc_wka_port *wka_port; + +	wka_port = zfcp_fc_job_wka_port(job); +	zfcp_fc_wka_port_put(wka_port); + +	zfcp_fc_ct_els_job_handler(data); +} +  static int zfcp_fc_exec_els_job(struct fc_bsg_job *job,  				struct zfcp_adapter *adapter)  { @@ -695,43 +735,27 @@ static int zfcp_fc_exec_els_job(struct fc_bsg_job *job,  	} else  		d_id = ntoh24(job->request->rqst_data.h_els.port_id); -	return zfcp_fsf_send_els(adapter, d_id, els); +	els->handler = zfcp_fc_ct_els_job_handler; +	return zfcp_fsf_send_els(adapter, d_id, els, job->req->timeout / HZ);  }  static int zfcp_fc_exec_ct_job(struct fc_bsg_job *job,  			       struct zfcp_adapter *adapter)  {  	int ret; -	u8 gs_type;  	struct zfcp_fsf_ct_els *ct = job->dd_data;  	struct zfcp_fc_wka_port *wka_port; -	u32 preamble_word1; -	preamble_word1 = job->request->rqst_data.r_ct.preamble_word1; -	gs_type = (preamble_word1 & 0xff000000) >> 24; - -	switch (gs_type) { -	case FC_FST_ALIAS: -		wka_port = &adapter->gs->as; -		break; -	case FC_FST_MGMT: -		wka_port = &adapter->gs->ms; -		break; -	case FC_FST_TIME: -		wka_port = &adapter->gs->ts; -		break; -	case FC_FST_DIR: -		wka_port = &adapter->gs->ds; -		break; -	default: -		return -EINVAL; /* no such service */ -	} +	wka_port = zfcp_fc_job_wka_port(job); +	if (!wka_port) +		return -EINVAL;  	ret = zfcp_fc_wka_port_get(wka_port);  	if (ret)  		return ret; -	ret = zfcp_fsf_send_ct(wka_port, ct, NULL); +	ct->handler = zfcp_fc_ct_job_handler; +	ret = zfcp_fsf_send_ct(wka_port, ct, NULL, job->req->timeout / HZ);  	if (ret)  		zfcp_fc_wka_port_put(wka_port); @@ -752,7 +776,6 @@ int zfcp_fc_exec_bsg_job(struct fc_bsg_job *job)  	ct_els->req = job->request_payload.sg_list;  	ct_els->resp = job->reply_payload.sg_list; -	ct_els->handler = zfcp_fc_ct_els_job_handler;  	ct_els->handler_data = job;  	switch (job->request->msgcode) { @@ -767,6 +790,12 @@ int zfcp_fc_exec_bsg_job(struct fc_bsg_job *job)  	}  } +int zfcp_fc_timeout_bsg_job(struct fc_bsg_job *job) +{ +	/* hardware tracks timeout, reset bsg timeout to not interfere */ +	return -EAGAIN; +} +  int zfcp_fc_gs_setup(struct zfcp_adapter *adapter)  {  	struct zfcp_fc_wka_ports *wka_ports; diff --git a/drivers/s390/scsi/zfcp_fc.h b/drivers/s390/scsi/zfcp_fc.h index cb2a3669a38..0747b087390 100644 --- a/drivers/s390/scsi/zfcp_fc.h +++ b/drivers/s390/scsi/zfcp_fc.h @@ -27,6 +27,8 @@  #define ZFCP_FC_GPN_FT_MAX_ENT	  (ZFCP_FC_GPN_FT_NUM_BUFS * \  					(ZFCP_FC_GPN_FT_ENT_PAGE + 1)) +#define ZFCP_FC_CTELS_TMO	(2 * FC_DEF_R_A_TOV / 1000) +  /**   * struct zfcp_fc_gid_pn_req - container for ct header plus gid_pn request   * @ct_hdr: FC GS common transport header diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 482dcd97aa5..e8fb4d9baa8 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c @@ -1068,20 +1068,20 @@ static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,  static int zfcp_fsf_setup_ct_els(struct zfcp_fsf_req *req,  				 struct scatterlist *sg_req,  				 struct scatterlist *sg_resp, -				 int max_sbals) +				 int max_sbals, unsigned int timeout)  {  	int ret; -	unsigned int fcp_chan_timeout;  	ret = zfcp_fsf_setup_ct_els_sbals(req, sg_req, sg_resp, max_sbals);  	if (ret)  		return ret;  	/* common settings for ct/gs and els requests */ -	fcp_chan_timeout = 2 * FC_DEF_R_A_TOV / 1000; +	if (timeout > 255) +		timeout = 255; /* max value accepted by hardware */  	req->qtcb->bottom.support.service_class = FSF_CLASS_3; -	req->qtcb->bottom.support.timeout = fcp_chan_timeout; -	zfcp_fsf_start_timer(req, (fcp_chan_timeout + 10) * HZ); +	req->qtcb->bottom.support.timeout = timeout; +	zfcp_fsf_start_timer(req, (timeout + 10) * HZ);  	return 0;  } @@ -1092,7 +1092,8 @@ static int zfcp_fsf_setup_ct_els(struct zfcp_fsf_req *req,   * @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req   */  int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port, -		     struct zfcp_fsf_ct_els *ct, mempool_t *pool) +		     struct zfcp_fsf_ct_els *ct, mempool_t *pool, +		     unsigned int timeout)  {  	struct zfcp_qdio *qdio = wka_port->adapter->qdio;  	struct zfcp_fsf_req *req; @@ -1111,7 +1112,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,  	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;  	ret = zfcp_fsf_setup_ct_els(req, ct->req, ct->resp, -				    FSF_MAX_SBALS_PER_REQ); +				    FSF_MAX_SBALS_PER_REQ, timeout);  	if (ret)  		goto failed_send; @@ -1188,7 +1189,7 @@ skip_fsfstatus:   * @els: pointer to struct zfcp_send_els with data for the command   */  int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id, -		      struct zfcp_fsf_ct_els *els) +		      struct zfcp_fsf_ct_els *els, unsigned int timeout)  {  	struct zfcp_fsf_req *req;  	struct zfcp_qdio *qdio = adapter->qdio; @@ -1206,7 +1207,7 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,  	}  	req->status |= ZFCP_STATUS_FSFREQ_CLEANUP; -	ret = zfcp_fsf_setup_ct_els(req, els->req, els->resp, 2); +	ret = zfcp_fsf_setup_ct_els(req, els->req, els->resp, 2, timeout);  	if (ret)  		goto failed_send; diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 771cc536a98..8e6fc68d6bd 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c @@ -652,6 +652,7 @@ struct fc_function_template zfcp_transport_functions = {  	.show_host_port_state = 1,  	.show_host_active_fc4s = 1,  	.bsg_request = zfcp_fc_exec_bsg_job, +	.bsg_timeout = zfcp_fc_timeout_bsg_job,  	/* no functions registered for following dynamic attributes but  	   directly set by LLDD */  	.show_host_port_type = 1, diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 2a889853a10..7e26ebc2666 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c @@ -293,7 +293,10 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag)  			status = -EINVAL;  		}  	} -	aac_fib_complete(fibptr); +	/* Do not set XferState to zero unless receives a response from F/W */ +	if (status >= 0) +		aac_fib_complete(fibptr); +  	/* Send a CT_COMMIT_CONFIG to enable discovery of devices */  	if (status >= 0) {  		if ((aac_commit == 1) || commit_flag) { @@ -310,13 +313,18 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag)  				    FsaNormal,  				    1, 1,  				    NULL, NULL); -			aac_fib_complete(fibptr); +			/* Do not set XferState to zero unless +			 * receives a response from F/W */ +			if (status >= 0) +				aac_fib_complete(fibptr);  		} else if (aac_commit == 0) {  			printk(KERN_WARNING  			  "aac_get_config_status: Foreign device configurations are being ignored\n");  		}  	} -	aac_fib_free(fibptr); +	/* FIB should be freed only after getting the response from the F/W */ +	if (status != -ERESTARTSYS) +		aac_fib_free(fibptr);  	return status;  } @@ -355,7 +363,9 @@ int aac_get_containers(struct aac_dev *dev)  		maximum_num_containers = le32_to_cpu(dresp->ContainerSwitchEntries);  		aac_fib_complete(fibptr);  	} -	aac_fib_free(fibptr); +	/* FIB should be freed only after getting the response from the F/W */ +	if (status != -ERESTARTSYS) +		aac_fib_free(fibptr);  	if (maximum_num_containers < MAXIMUM_NUM_CONTAINERS)  		maximum_num_containers = MAXIMUM_NUM_CONTAINERS; @@ -1245,8 +1255,12 @@ int aac_get_adapter_info(struct aac_dev* dev)  			 NULL);  	if (rcode < 0) { -		aac_fib_complete(fibptr); -		aac_fib_free(fibptr); +		/* FIB should be freed only after +		 * getting the response from the F/W */ +		if (rcode != -ERESTARTSYS) { +			aac_fib_complete(fibptr); +			aac_fib_free(fibptr); +		}  		return rcode;  	}  	memcpy(&dev->adapter_info, info, sizeof(*info)); @@ -1270,6 +1284,12 @@ int aac_get_adapter_info(struct aac_dev* dev)  		if (rcode >= 0)  			memcpy(&dev->supplement_adapter_info, sinfo, sizeof(*sinfo)); +		if (rcode == -ERESTARTSYS) { +			fibptr = aac_fib_alloc(dev); +			if (!fibptr) +				return -ENOMEM; +		} +  	} @@ -1470,9 +1490,11 @@ int aac_get_adapter_info(struct aac_dev* dev)  			  (dev->scsi_host_ptr->sg_tablesize * 8) + 112;  		}  	} - -	aac_fib_complete(fibptr); -	aac_fib_free(fibptr); +	/* FIB should be freed only after getting the response from the F/W */ +	if (rcode != -ERESTARTSYS) { +		aac_fib_complete(fibptr); +		aac_fib_free(fibptr); +	}  	return rcode;  } @@ -1633,6 +1655,7 @@ static int aac_read(struct scsi_cmnd * scsicmd)  	 *	Alocate and initialize a Fib  	 */  	if (!(cmd_fibcontext = aac_fib_alloc(dev))) { +		printk(KERN_WARNING "aac_read: fib allocation failed\n");  		return -1;  	} @@ -1712,9 +1735,14 @@ static int aac_write(struct scsi_cmnd * scsicmd)  	 *	Allocate and initialize a Fib then setup a BlockWrite command  	 */  	if (!(cmd_fibcontext = aac_fib_alloc(dev))) { -		scsicmd->result = DID_ERROR << 16; -		scsicmd->scsi_done(scsicmd); -		return 0; +		/* FIB temporarily unavailable,not catastrophic failure */ + +		/* scsicmd->result = DID_ERROR << 16; +		 * scsicmd->scsi_done(scsicmd); +		 * return 0; +		 */ +		printk(KERN_WARNING "aac_write: fib allocation failed\n"); +		return -1;  	}  	status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua); diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 83986ed8655..619c02d9c86 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h @@ -12,7 +12,7 @@   *----------------------------------------------------------------------------*/  #ifndef AAC_DRIVER_BUILD -# define AAC_DRIVER_BUILD 2461 +# define AAC_DRIVER_BUILD 24702  # define AAC_DRIVER_BRANCH "-ms"  #endif  #define MAXIMUM_NUM_CONTAINERS	32 @@ -1036,6 +1036,9 @@ struct aac_dev  	u8			printf_enabled;  	u8			in_reset;  	u8			msi; +	int			management_fib_count; +	spinlock_t		manage_lock; +  };  #define aac_adapter_interrupt(dev) \ diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index 0391d759dfd..9c0c9117853 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c @@ -153,7 +153,7 @@ cleanup:  		fibptr->hw_fib_pa = hw_fib_pa;  		fibptr->hw_fib_va = hw_fib;  	} -	if (retval != -EINTR) +	if (retval != -ERESTARTSYS)  		aac_fib_free(fibptr);  	return retval;  } @@ -322,7 +322,7 @@ return_fib:  		}  		if (f.wait) {  			if(down_interruptible(&fibctx->wait_sem) < 0) { -				status = -EINTR; +				status = -ERESTARTSYS;  			} else {  				/* Lock again and retry */  				spin_lock_irqsave(&dev->fib_lock, flags); @@ -593,10 +593,10 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  				u64 addr;  				void* p;  				if (upsg->sg[i].count > -				    (dev->adapter_info.options & +				    ((dev->adapter_info.options &  				     AAC_OPT_NEW_COMM) ?  				      (dev->scsi_host_ptr->max_sectors << 9) : -				      65536) { +				      65536)) {  					rcode = -EINVAL;  					goto cleanup;  				} @@ -645,10 +645,10 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  				u64 addr;  				void* p;  				if (usg->sg[i].count > -				    (dev->adapter_info.options & +				    ((dev->adapter_info.options &  				     AAC_OPT_NEW_COMM) ?  				      (dev->scsi_host_ptr->max_sectors << 9) : -				      65536) { +				      65536)) {  					rcode = -EINVAL;  					goto cleanup;  				} @@ -695,10 +695,10 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  				uintptr_t addr;  				void* p;  				if (usg->sg[i].count > -				    (dev->adapter_info.options & +				    ((dev->adapter_info.options &  				     AAC_OPT_NEW_COMM) ?  				      (dev->scsi_host_ptr->max_sectors << 9) : -				      65536) { +				      65536)) {  					rcode = -EINVAL;  					goto cleanup;  				} @@ -734,10 +734,10 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  				dma_addr_t addr;  				void* p;  				if (upsg->sg[i].count > -				    (dev->adapter_info.options & +				    ((dev->adapter_info.options &  				     AAC_OPT_NEW_COMM) ?  				      (dev->scsi_host_ptr->max_sectors << 9) : -				      65536) { +				      65536)) {  					rcode = -EINVAL;  					goto cleanup;  				} @@ -772,8 +772,8 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  		psg->count = cpu_to_le32(sg_indx+1);  		status = aac_fib_send(ScsiPortCommand, srbfib, actual_fibsize, FsaNormal, 1, 1, NULL, NULL);  	} -	if (status == -EINTR) { -		rcode = -EINTR; +	if (status == -ERESTARTSYS) { +		rcode = -ERESTARTSYS;  		goto cleanup;  	} @@ -810,7 +810,7 @@ cleanup:  	for(i=0; i <= sg_indx; i++){  		kfree(sg_list[i]);  	} -	if (rcode != -EINTR) { +	if (rcode != -ERESTARTSYS) {  		aac_fib_complete(srbfib);  		aac_fib_free(srbfib);  	} @@ -848,7 +848,7 @@ int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg)  	 */  	status = aac_dev_ioctl(dev, cmd, arg); -	if(status != -ENOTTY) +	if (status != -ENOTTY)  		return status;  	switch (cmd) { diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c index 666d5151d62..a7261486ccd 100644 --- a/drivers/scsi/aacraid/comminit.c +++ b/drivers/scsi/aacraid/comminit.c @@ -194,7 +194,9 @@ int aac_send_shutdown(struct aac_dev * dev)  	if (status >= 0)  		aac_fib_complete(fibctx); -	aac_fib_free(fibctx); +	/* FIB should be freed only after getting the response from the F/W */ +	if (status != -ERESTARTSYS) +		aac_fib_free(fibctx);  	return status;  } @@ -304,6 +306,8 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)  	/*  	 *	Check the preferred comm settings, defaults from template.  	 */ +	dev->management_fib_count = 0; +	spin_lock_init(&dev->manage_lock);  	dev->max_fib_size = sizeof(struct hw_fib);  	dev->sg_tablesize = host->sg_tablesize = (dev->max_fib_size  		- sizeof(struct aac_fibhdr) diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 956261f2518..94d2954d79a 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c @@ -189,7 +189,14 @@ struct fib *aac_fib_alloc(struct aac_dev *dev)  void aac_fib_free(struct fib *fibptr)  { -	unsigned long flags; +	unsigned long flags, flagsv; + +	spin_lock_irqsave(&fibptr->event_lock, flagsv); +	if (fibptr->done == 2) { +		spin_unlock_irqrestore(&fibptr->event_lock, flagsv); +		return; +	} +	spin_unlock_irqrestore(&fibptr->event_lock, flagsv);  	spin_lock_irqsave(&fibptr->dev->fib_lock, flags);  	if (unlikely(fibptr->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) @@ -390,6 +397,8 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,  	struct hw_fib * hw_fib = fibptr->hw_fib_va;  	unsigned long flags = 0;  	unsigned long qflags; +	unsigned long mflags = 0; +  	if (!(hw_fib->header.XferState & cpu_to_le32(HostOwned)))  		return -EBUSY; @@ -471,9 +480,31 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,  	if (!dev->queues)  		return -EBUSY; -	if(wait) +	if (wait) { + +		spin_lock_irqsave(&dev->manage_lock, mflags); +		if (dev->management_fib_count >= AAC_NUM_MGT_FIB) { +			printk(KERN_INFO "No management Fibs Available:%d\n", +						dev->management_fib_count); +			spin_unlock_irqrestore(&dev->manage_lock, mflags); +			return -EBUSY; +		} +		dev->management_fib_count++; +		spin_unlock_irqrestore(&dev->manage_lock, mflags);  		spin_lock_irqsave(&fibptr->event_lock, flags); -	aac_adapter_deliver(fibptr); +	} + +	if (aac_adapter_deliver(fibptr) != 0) { +		printk(KERN_ERR "aac_fib_send: returned -EBUSY\n"); +		if (wait) { +			spin_unlock_irqrestore(&fibptr->event_lock, flags); +			spin_lock_irqsave(&dev->manage_lock, mflags); +			dev->management_fib_count--; +			spin_unlock_irqrestore(&dev->manage_lock, mflags); +		} +		return -EBUSY; +	} +  	/*  	 *	If the caller wanted us to wait for response wait now. @@ -516,14 +547,15 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,  				udelay(5);  			}  		} else if (down_interruptible(&fibptr->event_wait)) { -			fibptr->done = 2; -			up(&fibptr->event_wait); +			/* Do nothing ... satisfy +			 * down_interruptible must_check */  		} +  		spin_lock_irqsave(&fibptr->event_lock, flags); -		if ((fibptr->done == 0) || (fibptr->done == 2)) { +		if (fibptr->done == 0) {  			fibptr->done = 2; /* Tell interrupt we aborted */  			spin_unlock_irqrestore(&fibptr->event_lock, flags); -			return -EINTR; +			return -ERESTARTSYS;  		}  		spin_unlock_irqrestore(&fibptr->event_lock, flags);  		BUG_ON(fibptr->done == 0); @@ -689,6 +721,7 @@ int aac_fib_adapter_complete(struct fib *fibptr, unsigned short size)  int aac_fib_complete(struct fib *fibptr)  { +	unsigned long flags;  	struct hw_fib * hw_fib = fibptr->hw_fib_va;  	/* @@ -709,6 +742,13 @@ int aac_fib_complete(struct fib *fibptr)  	 *	command is complete that we had sent to the adapter and this  	 *	cdb could be reused.  	 */ +	spin_lock_irqsave(&fibptr->event_lock, flags); +	if (fibptr->done == 2) { +		spin_unlock_irqrestore(&fibptr->event_lock, flags); +		return 0; +	} +	spin_unlock_irqrestore(&fibptr->event_lock, flags); +  	if((hw_fib->header.XferState & cpu_to_le32(SentFromHost)) &&  		(hw_fib->header.XferState & cpu_to_le32(AdapterProcessed)))  	{ @@ -1355,7 +1395,10 @@ int aac_reset_adapter(struct aac_dev * aac, int forced)  			if (status >= 0)  				aac_fib_complete(fibctx); -			aac_fib_free(fibctx); +			/* FIB should be freed only after getting +			 * the response from the F/W */ +			if (status != -ERESTARTSYS) +				aac_fib_free(fibctx);  		}  	} @@ -1759,6 +1802,7 @@ int aac_command_thread(void *data)  				struct fib *fibptr;  				if ((fibptr = aac_fib_alloc(dev))) { +					int status;  					__le32 *info;  					aac_fib_init(fibptr); @@ -1769,15 +1813,21 @@ int aac_command_thread(void *data)  					*info = cpu_to_le32(now.tv_sec); -					(void)aac_fib_send(SendHostTime, +					status = aac_fib_send(SendHostTime,  						fibptr,  						sizeof(*info),  						FsaNormal,  						1, 1,  						NULL,  						NULL); -					aac_fib_complete(fibptr); -					aac_fib_free(fibptr); +					/* Do not set XferState to zero unless +					 * receives a response from F/W */ +					if (status >= 0) +						aac_fib_complete(fibptr); +					/* FIB should be freed only after +					 * getting the response from the F/W */ +					if (status != -ERESTARTSYS) +						aac_fib_free(fibptr);  				}  				difference = (long)(unsigned)update_interval*HZ;  			} else { diff --git a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c index abc9ef5d1b1..9c7408fe8c7 100644 --- a/drivers/scsi/aacraid/dpcsup.c +++ b/drivers/scsi/aacraid/dpcsup.c @@ -57,9 +57,9 @@ unsigned int aac_response_normal(struct aac_queue * q)  	struct hw_fib * hwfib;  	struct fib * fib;  	int consumed = 0; -	unsigned long flags; +	unsigned long flags, mflags; -	spin_lock_irqsave(q->lock, flags);	 +	spin_lock_irqsave(q->lock, flags);  	/*  	 *	Keep pulling response QEs off the response queue and waking  	 *	up the waiters until there are no more QEs. We then return @@ -125,12 +125,21 @@ unsigned int aac_response_normal(struct aac_queue * q)  		} else {  			unsigned long flagv;  			spin_lock_irqsave(&fib->event_lock, flagv); -			if (!fib->done) +			if (!fib->done) {  				fib->done = 1; -			up(&fib->event_wait); +				up(&fib->event_wait); +			}  			spin_unlock_irqrestore(&fib->event_lock, flagv); + +			spin_lock_irqsave(&dev->manage_lock, mflags); +			dev->management_fib_count--; +			spin_unlock_irqrestore(&dev->manage_lock, mflags); +  			FIB_COUNTER_INCREMENT(aac_config.NormalRecved);  			if (fib->done == 2) { +				spin_lock_irqsave(&fib->event_lock, flagv); +				fib->done = 0; +				spin_unlock_irqrestore(&fib->event_lock, flagv);  				aac_fib_complete(fib);  				aac_fib_free(fib);  			} @@ -232,6 +241,7 @@ unsigned int aac_command_normal(struct aac_queue *q)  unsigned int aac_intr_normal(struct aac_dev * dev, u32 index)  { +	unsigned long mflags;  	dprintk((KERN_INFO "aac_intr_normal(%p,%x)\n", dev, index));  	if ((index & 0x00000002L)) {  		struct hw_fib * hw_fib; @@ -320,11 +330,25 @@ unsigned int aac_intr_normal(struct aac_dev * dev, u32 index)  			unsigned long flagv;  	  		dprintk((KERN_INFO "event_wait up\n"));  			spin_lock_irqsave(&fib->event_lock, flagv); -			if (!fib->done) +			if (!fib->done) {  				fib->done = 1; -			up(&fib->event_wait); +				up(&fib->event_wait); +			}  			spin_unlock_irqrestore(&fib->event_lock, flagv); + +			spin_lock_irqsave(&dev->manage_lock, mflags); +			dev->management_fib_count--; +			spin_unlock_irqrestore(&dev->manage_lock, mflags); +  			FIB_COUNTER_INCREMENT(aac_config.NormalRecved); +			if (fib->done == 2) { +				spin_lock_irqsave(&fib->event_lock, flagv); +				fib->done = 0; +				spin_unlock_irqrestore(&fib->event_lock, flagv); +				aac_fib_complete(fib); +				aac_fib_free(fib); +			} +  		}  		return 0;  	} diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c index 4d419c155ce..78971db5b60 100644 --- a/drivers/scsi/aic7xxx/aic79xx_core.c +++ b/drivers/scsi/aic7xxx/aic79xx_core.c @@ -3171,13 +3171,16 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)  				tinfo->curr.transport_version = 2;  				tinfo->goal.transport_version = 2;  				tinfo->goal.ppr_options = 0; -				/* -				 * Remove any SCBs in the waiting for selection -				 * queue that may also be for this target so -				 * that command ordering is preserved. -				 */ -				ahd_freeze_devq(ahd, scb); -				ahd_qinfifo_requeue_tail(ahd, scb); +				if (scb != NULL) { +					/* +					 * Remove any SCBs in the waiting +					 * for selection queue that may +					 * also be for this target so that +					 * command ordering is preserved. +					 */ +					ahd_freeze_devq(ahd, scb); +					ahd_qinfifo_requeue_tail(ahd, scb); +				}  				printerror = 0;  			}  		} else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_WDTR, FALSE) @@ -3194,13 +3197,16 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)  				      MSG_EXT_WDTR_BUS_8_BIT,  				      AHD_TRANS_CUR|AHD_TRANS_GOAL,  				      /*paused*/TRUE); -			/* -			 * Remove any SCBs in the waiting for selection -			 * queue that may also be for this target so that -			 * command ordering is preserved. -			 */ -			ahd_freeze_devq(ahd, scb); -			ahd_qinfifo_requeue_tail(ahd, scb); +			if (scb != NULL) { +				/* +				 * Remove any SCBs in the waiting for +				 * selection queue that may also be for +				 * this target so that command ordering +				 * is preserved. +				 */ +				ahd_freeze_devq(ahd, scb); +				ahd_qinfifo_requeue_tail(ahd, scb); +			}  			printerror = 0;  		} else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_SDTR, FALSE)  			&& ppr_busfree == 0) { @@ -3217,13 +3223,16 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)  					/*ppr_options*/0,  					AHD_TRANS_CUR|AHD_TRANS_GOAL,  					/*paused*/TRUE); -			/* -			 * Remove any SCBs in the waiting for selection -			 * queue that may also be for this target so that -			 * command ordering is preserved. -			 */ -			ahd_freeze_devq(ahd, scb); -			ahd_qinfifo_requeue_tail(ahd, scb); +			if (scb != NULL) { +				/* +				 * Remove any SCBs in the waiting for +				 * selection queue that may also be for +				 * this target so that command ordering +				 * is preserved. +				 */ +				ahd_freeze_devq(ahd, scb); +				ahd_qinfifo_requeue_tail(ahd, scb); +			}  			printerror = 0;  		} else if ((ahd->msg_flags & MSG_FLAG_EXPECT_IDE_BUSFREE) != 0  			&& ahd_sent_msg(ahd, AHDMSG_1B, @@ -3251,7 +3260,7 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)  	 * the message phases.  We check it last in case we  	 * had to send some other message that caused a busfree.  	 */ -	if (printerror != 0 +	if (scb != NULL && printerror != 0  	 && (lastphase == P_MESGIN || lastphase == P_MESGOUT)  	 && ((ahd->msg_flags & MSG_FLAG_EXPECT_PPR_BUSFREE) != 0)) { diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 2445e399fd6..2445e399fd6 100755..100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h index 8a2a1c5935c..8a2a1c5935c 100755..100644 --- a/drivers/scsi/lpfc/lpfc_hw4.h +++ b/drivers/scsi/lpfc/lpfc_hw4.h diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 608e675f68c..1263d9796e8 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -1586,8 +1586,7 @@ typedef struct fc_port {   */  #define FCF_FABRIC_DEVICE	BIT_0  #define FCF_LOGIN_NEEDED	BIT_1 -#define FCF_TAPE_PRESENT	BIT_2 -#define FCF_FCP2_DEVICE		BIT_3 +#define FCF_FCP2_DEVICE		BIT_2  /* No loop ID flag. */  #define FC_NO_LOOP_ID		0x1000 diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index f61fb8d0133..8bc6f53691e 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -453,6 +453,5 @@ extern void qla24xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla25xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla25xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla24xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); -extern struct scsi_qla_host * qla25xx_get_host(struct rsp_que *);  #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index b4a0eac8f96..3f8e8495b74 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -205,7 +205,7 @@ qla2x00_async_login_done(struct scsi_qla_host *vha, fc_port_t *fcport,  	switch (data[0]) {  	case MBS_COMMAND_COMPLETE: -		if (fcport->flags & FCF_TAPE_PRESENT) +		if (fcport->flags & FCF_FCP2_DEVICE)  			opts |= BIT_1;  		rval = qla2x00_get_port_database(vha, fcport, opts);  		if (rval != QLA_SUCCESS) @@ -2726,7 +2726,7 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)  		/*  		 * Logout all previous fabric devices marked lost, except -		 * tape devices. +		 * FCP2 devices.  		 */  		list_for_each_entry(fcport, &vha->vp_fcports, list) {  			if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) @@ -2739,7 +2739,7 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)  				qla2x00_mark_device_lost(vha, fcport,  				    ql2xplogiabsentdevice, 0);  				if (fcport->loop_id != FC_NO_LOOP_ID && -				    (fcport->flags & FCF_TAPE_PRESENT) == 0 && +				    (fcport->flags & FCF_FCP2_DEVICE) == 0 &&  				    fcport->port_type != FCT_INITIATOR &&  				    fcport->port_type != FCT_BROADCAST) {  					ha->isp_ops->fabric_logout(vha, @@ -3018,7 +3018,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,  			fcport->d_id.b24 = new_fcport->d_id.b24;  			fcport->flags |= FCF_LOGIN_NEEDED;  			if (fcport->loop_id != FC_NO_LOOP_ID && -			    (fcport->flags & FCF_TAPE_PRESENT) == 0 && +			    (fcport->flags & FCF_FCP2_DEVICE) == 0 &&  			    fcport->port_type != FCT_INITIATOR &&  			    fcport->port_type != FCT_BROADCAST) {  				ha->isp_ops->fabric_logout(vha, fcport->loop_id, @@ -3272,9 +3272,9 @@ qla2x00_fabric_dev_login(scsi_qla_host_t *vha, fc_port_t *fcport,  	rval = qla2x00_fabric_login(vha, fcport, next_loopid);  	if (rval == QLA_SUCCESS) { -		/* Send an ADISC to tape devices.*/ +		/* Send an ADISC to FCP2 devices.*/  		opts = 0; -		if (fcport->flags & FCF_TAPE_PRESENT) +		if (fcport->flags & FCF_FCP2_DEVICE)  			opts |= BIT_1;  		rval = qla2x00_get_port_database(vha, fcport, opts);  		if (rval != QLA_SUCCESS) { diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index ffd0efdff40..6fc63b98818 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1917,6 +1917,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)  	struct rsp_que *rsp;  	struct device_reg_24xx __iomem *reg;  	struct scsi_qla_host *vha; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1927,15 +1928,15 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)  	ha = rsp->hw;  	reg = &ha->iobase->isp24; -	spin_lock_irq(&ha->hardware_lock); +	spin_lock_irqsave(&ha->hardware_lock, flags); -	vha = qla25xx_get_host(rsp); +	vha = pci_get_drvdata(ha->pdev);  	qla24xx_process_response_queue(vha, rsp);  	if (!ha->flags.disable_msix_handshake) {  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  		RD_REG_DWORD_RELAXED(®->hccr);  	} -	spin_unlock_irq(&ha->hardware_lock); +	spin_unlock_irqrestore(&ha->hardware_lock, flags);  	return IRQ_HANDLED;  } @@ -1946,6 +1947,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)  	struct qla_hw_data *ha;  	struct rsp_que *rsp;  	struct device_reg_24xx __iomem *reg; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1958,10 +1960,10 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)  	/* Clear the interrupt, if enabled, for this response queue */  	if (rsp->options & ~BIT_6) {  		reg = &ha->iobase->isp24; -		spin_lock_irq(&ha->hardware_lock); +		spin_lock_irqsave(&ha->hardware_lock, flags);  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  		RD_REG_DWORD_RELAXED(®->hccr); -		spin_unlock_irq(&ha->hardware_lock); +		spin_unlock_irqrestore(&ha->hardware_lock, flags);  	}  	queue_work_on((int) (rsp->id - 1), ha->wq, &rsp->q_work); @@ -1979,6 +1981,7 @@ qla24xx_msix_default(int irq, void *dev_id)  	uint32_t	stat;  	uint32_t	hccr;  	uint16_t	mb[4]; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1990,7 +1993,7 @@ qla24xx_msix_default(int irq, void *dev_id)  	reg = &ha->iobase->isp24;  	status = 0; -	spin_lock_irq(&ha->hardware_lock); +	spin_lock_irqsave(&ha->hardware_lock, flags);  	vha = pci_get_drvdata(ha->pdev);  	do {  		stat = RD_REG_DWORD(®->host_status); @@ -2039,7 +2042,7 @@ qla24xx_msix_default(int irq, void *dev_id)  		}  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  	} while (0); -	spin_unlock_irq(&ha->hardware_lock); +	spin_unlock_irqrestore(&ha->hardware_lock, flags);  	if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&  	    (status & MBX_INTERRUPT) && ha->flags.mbox_int) { @@ -2277,30 +2280,3 @@ int qla25xx_request_irq(struct rsp_que *rsp)  	msix->rsp = rsp;  	return ret;  } - -struct scsi_qla_host * -qla25xx_get_host(struct rsp_que *rsp) -{ -	srb_t *sp; -	struct qla_hw_data *ha = rsp->hw; -	struct scsi_qla_host *vha = NULL; -	struct sts_entry_24xx *pkt; -	struct req_que *req; -	uint16_t que; -	uint32_t handle; - -	pkt = (struct sts_entry_24xx *) rsp->ring_ptr; -	que = MSW(pkt->handle); -	handle = (uint32_t) LSW(pkt->handle); -	req = ha->req_q_map[que]; -	if (handle < MAX_OUTSTANDING_COMMANDS) { -		sp = req->outstanding_cmds[handle]; -		if (sp) -			return  sp->fcport->vha; -		else -			goto base_que; -	} -base_que: -	vha = pci_get_drvdata(ha->pdev); -	return vha; -} diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index b901aa267e7..ff17dee2861 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -636,13 +636,15 @@ failed:  static void qla_do_work(struct work_struct *work)  { +	unsigned long flags;  	struct rsp_que *rsp = container_of(work, struct rsp_que, q_work);  	struct scsi_qla_host *vha; +	struct qla_hw_data *ha = rsp->hw; -	spin_lock_irq(&rsp->hw->hardware_lock); -	vha = qla25xx_get_host(rsp); +	spin_lock_irqsave(&rsp->hw->hardware_lock, flags); +	vha = pci_get_drvdata(ha->pdev);  	qla24xx_process_response_queue(vha, rsp); -	spin_unlock_irq(&rsp->hw->hardware_lock); +	spin_unlock_irqrestore(&rsp->hw->hardware_lock, flags);  }  /* create response queue */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 209f50e788a..8529eb1f3cd 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1188,7 +1188,6 @@ qla2xxx_slave_configure(struct scsi_device *sdev)  	scsi_qla_host_t *vha = shost_priv(sdev->host);  	struct qla_hw_data *ha = vha->hw;  	struct fc_rport *rport = starget_to_rport(sdev->sdev_target); -	fc_port_t *fcport = *(fc_port_t **)rport->dd_data;  	struct req_que *req = vha->req;  	if (sdev->tagged_supported) @@ -1197,8 +1196,6 @@ qla2xxx_slave_configure(struct scsi_device *sdev)  		scsi_deactivate_tcq(sdev, req->max_q_depth);  	rport->dev_loss_tmo = ha->port_down_retry_count; -	if (sdev->type == TYPE_TAPE) -		fcport->flags |= FCF_TAPE_PRESENT;  	return 0;  } @@ -2805,7 +2802,7 @@ void qla2x00_relogin(struct scsi_qla_host *vha)  			fcport->login_retry--;  			if (fcport->flags & FCF_FABRIC_DEVICE) { -				if (fcport->flags & FCF_TAPE_PRESENT) +				if (fcport->flags & FCF_FCP2_DEVICE)  					ha->isp_ops->fabric_logout(vha,  							fcport->loop_id,  							fcport->d_id.b.domain, @@ -3141,7 +3138,10 @@ qla2x00_timer(scsi_qla_host_t *vha)  			if (!IS_QLA2100(ha) && vha->link_down_timeout)  				atomic_set(&vha->loop_state, LOOP_DEAD); -			/* Schedule an ISP abort to return any tape commands. */ +			/* +			 * Schedule an ISP abort to return any FCP2-device +			 * commands. +			 */  			/* NPIV - scan physical port only */  			if (!vha->vp_idx) {  				spin_lock_irqsave(&ha->hardware_lock, @@ -3158,7 +3158,7 @@ qla2x00_timer(scsi_qla_host_t *vha)  					if (sp->ctx)  						continue;  					sfcp = sp->fcport; -					if (!(sfcp->flags & FCF_TAPE_PRESENT)) +					if (!(sfcp->flags & FCF_FCP2_DEVICE))  						continue;  					set_bit(ISP_ABORT_NEEDED, diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 010e69b29af..371dc895972 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -2292,11 +2292,14 @@ qla25xx_read_optrom_data(struct scsi_qla_host *vha, uint8_t *buf,  	uint32_t faddr, left, burst;  	struct qla_hw_data *ha = vha->hw; +	if (IS_QLA25XX(ha) || IS_QLA81XX(ha)) +		goto try_fast;  	if (offset & 0xfff)  		goto slow_read;  	if (length < OPTROM_BURST_SIZE)  		goto slow_read; +try_fast:  	optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE,  	    &optrom_dma, GFP_KERNEL);  	if (!optrom) { diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index a65dd95507c..ed36279a33c 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h @@ -7,7 +7,7 @@  /*   * Driver version   */ -#define QLA2XXX_VERSION      "8.03.01-k9" +#define QLA2XXX_VERSION      "8.03.01-k10"  #define QLA_DRIVER_MAJOR_VER	8  #define QLA_DRIVER_MINOR_VER	3 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index d8927681ec8..c6642423cc6 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -749,9 +749,9 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)  			 */  			req->next_rq->resid_len = scsi_in(cmd)->resid; +			scsi_release_buffers(cmd);  			blk_end_request_all(req, 0); -			scsi_release_buffers(cmd);  			scsi_next_command(cmd);  			return;  		} diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index ddfcecd5099..653f22a8deb 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c @@ -3527,7 +3527,10 @@ fc_bsg_job_timeout(struct request *req)  	if (!done && i->f->bsg_timeout) {  		/* call LLDD to abort the i/o as it has timed out */  		err = i->f->bsg_timeout(job); -		if (err) +		if (err == -EAGAIN) { +			job->ref_cnt--; +			return BLK_EH_RESET_TIMER; +		} else if (err)  			printk(KERN_ERR "ERROR: FC BSG request timeout - LLD "  				"abort failed with status %d\n", err);  	} diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index c3e37c8e7e2..e9b15c3746f 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -83,6 +83,9 @@ static unsigned int skip_txen_test; /* force skip of txen test at init time */  #define PASS_LIMIT	256 +#define BOTH_EMPTY 	(UART_LSR_TEMT | UART_LSR_THRE) + +  /*   * We default to IRQ0 for the "no irq" hack.   Some   * machine types want others as well - they're free @@ -1792,7 +1795,7 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)  	up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;  	spin_unlock_irqrestore(&up->port.lock, flags); -	return lsr & UART_LSR_TEMT ? TIOCSER_TEMT : 0; +	return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0;  }  static unsigned int serial8250_get_mctrl(struct uart_port *port) @@ -1850,8 +1853,6 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state)  	spin_unlock_irqrestore(&up->port.lock, flags);  } -#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) -  /*   *	Wait for transmitter & holding register to empty   */ diff --git a/drivers/serial/uartlite.c b/drivers/serial/uartlite.c index 377f2712289..ab2ab3c8183 100644 --- a/drivers/serial/uartlite.c +++ b/drivers/serial/uartlite.c @@ -394,7 +394,7 @@ static void ulite_console_write(struct console *co, const char *s,  		spin_unlock_irqrestore(&port->lock, flags);  } -static int __init ulite_console_setup(struct console *co, char *options) +static int __devinit ulite_console_setup(struct console *co, char *options)  {  	struct uart_port *port;  	int baud = 9600; diff --git a/drivers/spi/spi_sh_msiof.c b/drivers/spi/spi_sh_msiof.c index 51e5e1dfa6e..30973ec16a9 100644 --- a/drivers/spi/spi_sh_msiof.c +++ b/drivers/spi/spi_sh_msiof.c @@ -173,15 +173,12 @@ static void sh_msiof_spi_set_pin_regs(struct sh_msiof_spi_priv *p,  	int edge;  	/* -	 * CPOL CPHA     TSCKIZ RSCKIZ TEDG REDG(!) -	 *    0    0         10     10    1    0 -	 *    0    1         10     10    0    1 -	 *    1    0         11     11    0    1 -	 *    1    1         11     11    1    0 -	 * -	 * (!) Note: REDG is inverted recommended data sheet setting +	 * CPOL CPHA     TSCKIZ RSCKIZ TEDG REDG +	 *    0    0         10     10    1    1 +	 *    0    1         10     10    0    0 +	 *    1    0         11     11    0    0 +	 *    1    1         11     11    1    1  	 */ -  	sh_msiof_write(p, FCTR, 0);  	sh_msiof_write(p, TMDR1, 0xe2000005 | (lsb_first << 24));  	sh_msiof_write(p, RMDR1, 0x22000005 | (lsb_first << 24)); @@ -193,7 +190,7 @@ static void sh_msiof_spi_set_pin_regs(struct sh_msiof_spi_priv *p,  	edge = cpol ? cpha : !cpha;  	tmp |= edge << 27; /* TEDG */ -	tmp |= !edge << 26; /* REDG */ +	tmp |= edge << 26; /* REDG */  	tmp |= (tx_hi_z ? 2 : 0) << 22; /* TXDIZ */  	sh_msiof_write(p, CTR, tmp);  } diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 94eb86319ff..fc2e963e65e 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -99,8 +99,6 @@ source "drivers/staging/line6/Kconfig"  source "drivers/gpu/drm/vmwgfx/Kconfig" -source "drivers/gpu/drm/radeon/Kconfig" -  source "drivers/gpu/drm/nouveau/Kconfig"  source "drivers/staging/octeon/Kconfig" diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 6e8bcdfd23b..a678186f218 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -1312,9 +1312,9 @@ static int processcompl(struct async *as, void __user * __user *arg)  	void __user *addr = as->userurb;  	unsigned int i; -	if (as->userbuffer) +	if (as->userbuffer && urb->actual_length)  		if (copy_to_user(as->userbuffer, urb->transfer_buffer, -				 urb->transfer_buffer_length)) +				 urb->actual_length))  			goto err_out;  	if (put_user(as->status, &userurb->status))  		goto err_out; @@ -1334,14 +1334,11 @@ static int processcompl(struct async *as, void __user * __user *arg)  		}  	} -	free_async(as); -  	if (put_user(addr, (void __user * __user *)arg))  		return -EFAULT;  	return 0;  err_out: -	free_async(as);  	return -EFAULT;  } @@ -1371,8 +1368,11 @@ static struct async *reap_as(struct dev_state *ps)  static int proc_reapurb(struct dev_state *ps, void __user *arg)  {  	struct async *as = reap_as(ps); -	if (as) -		return processcompl(as, (void __user * __user *)arg); +	if (as) { +		int retval = processcompl(as, (void __user * __user *)arg); +		free_async(as); +		return retval; +	}  	if (signal_pending(current))  		return -EINTR;  	return -EIO; @@ -1380,11 +1380,16 @@ static int proc_reapurb(struct dev_state *ps, void __user *arg)  static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg)  { +	int retval;  	struct async *as; -	if (!(as = async_getcompleted(ps))) -		return -EAGAIN; -	return processcompl(as, (void __user * __user *)arg); +	as = async_getcompleted(ps); +	retval = -EAGAIN; +	if (as) { +		retval = processcompl(as, (void __user * __user *)arg); +		free_async(as); +	} +	return retval;  }  #ifdef CONFIG_COMPAT @@ -1475,9 +1480,9 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)  	void __user *addr = as->userurb;  	unsigned int i; -	if (as->userbuffer) +	if (as->userbuffer && urb->actual_length)  		if (copy_to_user(as->userbuffer, urb->transfer_buffer, -				 urb->transfer_buffer_length)) +				 urb->actual_length))  			return -EFAULT;  	if (put_user(as->status, &userurb->status))  		return -EFAULT; @@ -1497,7 +1502,6 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)  		}  	} -	free_async(as);  	if (put_user(ptr_to_compat(addr), (u32 __user *)arg))  		return -EFAULT;  	return 0; @@ -1506,8 +1510,11 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)  static int proc_reapurb_compat(struct dev_state *ps, void __user *arg)  {  	struct async *as = reap_as(ps); -	if (as) -		return processcompl_compat(as, (void __user * __user *)arg); +	if (as) { +		int retval = processcompl_compat(as, (void __user * __user *)arg); +		free_async(as); +		return retval; +	}  	if (signal_pending(current))  		return -EINTR;  	return -EIO; @@ -1515,11 +1522,16 @@ static int proc_reapurb_compat(struct dev_state *ps, void __user *arg)  static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg)  { +	int retval;  	struct async *as; -	if (!(as = async_getcompleted(ps))) -		return -EAGAIN; -	return processcompl_compat(as, (void __user * __user *)arg); +	retval = -EAGAIN; +	as = async_getcompleted(ps); +	if (as) { +		retval = processcompl_compat(as, (void __user * __user *)arg); +		free_async(as); +	} +	return retval;  } diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 0a577d5694f..d4f0db58a8a 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c @@ -358,7 +358,7 @@ done:  	 * b15:		bmType (0 == data)  	 */  	len = skb->len; -	put_unaligned_le16((len & 0x3FFF) | BIT(14), skb_push(skb, 2)); +	put_unaligned_le16(len & 0x3FFF, skb_push(skb, 2));  	/* add a zero-length EEM packet, if needed */  	if (padlen) @@ -464,7 +464,6 @@ static int eem_unwrap(struct gether *port,  			}  			/* validate CRC */ -			crc = get_unaligned_le32(skb->data + len - ETH_FCS_LEN);  			if (header & BIT(14)) {  				crc = get_unaligned_le32(skb->data + len  							- ETH_FCS_LEN); diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c index 429560100b1..76496f5d272 100644 --- a/drivers/usb/gadget/multi.c +++ b/drivers/usb/gadget/multi.c @@ -29,7 +29,7 @@  #if defined USB_ETH_RNDIS  #  undef USB_ETH_RNDIS  #endif -#ifdef CONFIG_USB_ETH_RNDIS +#ifdef CONFIG_USB_G_MULTI_RNDIS  #  define USB_ETH_RNDIS y  #endif diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c index e220fb8091a..8b45145b913 100644 --- a/drivers/usb/gadget/r8a66597-udc.c +++ b/drivers/usb/gadget/r8a66597-udc.c @@ -26,6 +26,7 @@  #include <linux/io.h>  #include <linux/platform_device.h>  #include <linux/clk.h> +#include <linux/err.h>  #include <linux/usb/ch9.h>  #include <linux/usb/gadget.h> diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c index 4b5dbd0127f..5fc80a10415 100644 --- a/drivers/usb/gadget/s3c-hsotg.c +++ b/drivers/usb/gadget/s3c-hsotg.c @@ -2582,6 +2582,7 @@ err:  	hsotg->gadget.dev.driver = NULL;  	return ret;  } +EXPORT_SYMBOL(usb_gadget_register_driver);  int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)  { diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index c75d9270c75..19372673bf0 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -196,7 +196,9 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)  			if (hostpc_reg) {  				u32	t3; +				spin_unlock_irq(&ehci->lock);  				msleep(5);/* 5ms for HCD enter low pwr mode */ +				spin_lock_irq(&ehci->lock);  				t3 = ehci_readl(ehci, hostpc_reg);  				ehci_writel(ehci, t3 | HOSTPC_PHCD, hostpc_reg);  				t3 = ehci_readl(ehci, hostpc_reg); @@ -904,17 +906,18 @@ static int ehci_hub_control (  			if ((temp & PORT_PE) == 0  					|| (temp & PORT_RESET) != 0)  				goto error; -			ehci_writel(ehci, temp | PORT_SUSPEND, status_reg); +  			/* After above check the port must be connected.  			 * Set appropriate bit thus could put phy into low power  			 * mode if we have hostpc feature  			 */ +			temp &= ~PORT_WKCONN_E; +			temp |= PORT_WKDISC_E | PORT_WKOC_E; +			ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);  			if (hostpc_reg) { -				temp &= ~PORT_WKCONN_E; -				temp |= (PORT_WKDISC_E | PORT_WKOC_E); -				ehci_writel(ehci, temp | PORT_SUSPEND, -							status_reg); +				spin_unlock_irqrestore(&ehci->lock, flags);  				msleep(5);/* 5ms for HCD enter low pwr mode */ +				spin_lock_irqsave(&ehci->lock, flags);  				temp1 = ehci_readl(ehci, hostpc_reg);  				ehci_writel(ehci, temp1 | HOSTPC_PHCD,  					hostpc_reg); diff --git a/drivers/usb/host/fhci-tds.c b/drivers/usb/host/fhci-tds.c index d224ab467a4..e1232890c78 100644 --- a/drivers/usb/host/fhci-tds.c +++ b/drivers/usb/host/fhci-tds.c @@ -105,7 +105,7 @@ void fhci_ep0_free(struct fhci_usb *usb)  		if (ep->td_base)  			cpm_muram_free(cpm_muram_offset(ep->td_base)); -		if (ep->conf_frame_Q) { +		if (kfifo_initialized(&ep->conf_frame_Q)) {  			size = cq_howmany(&ep->conf_frame_Q);  			for (; size; size--) {  				struct packet *pkt = cq_get(&ep->conf_frame_Q); @@ -115,7 +115,7 @@ void fhci_ep0_free(struct fhci_usb *usb)  			cq_delete(&ep->conf_frame_Q);  		} -		if (ep->empty_frame_Q) { +		if (kfifo_initialized(&ep->empty_frame_Q)) {  			size = cq_howmany(&ep->empty_frame_Q);  			for (; size; size--) {  				struct packet *pkt = cq_get(&ep->empty_frame_Q); @@ -125,7 +125,7 @@ void fhci_ep0_free(struct fhci_usb *usb)  			cq_delete(&ep->empty_frame_Q);  		} -		if (ep->dummy_packets_Q) { +		if (kfifo_initialized(&ep->dummy_packets_Q)) {  			size = cq_howmany(&ep->dummy_packets_Q);  			for (; size; size--) {  				u8 *buff = cq_get(&ep->dummy_packets_Q); diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c index b7a661c02bc..bee558aed42 100644 --- a/drivers/usb/host/r8a66597-hcd.c +++ b/drivers/usb/host/r8a66597-hcd.c @@ -35,7 +35,9 @@  #include <linux/usb.h>  #include <linux/platform_device.h>  #include <linux/io.h> +#include <linux/mm.h>  #include <linux/irq.h> +#include <asm/cacheflush.h>  #include "../core/hcd.h"  #include "r8a66597.h" @@ -216,8 +218,17 @@ static void disable_controller(struct r8a66597 *r8a66597)  {  	int port; +	/* disable interrupts */  	r8a66597_write(r8a66597, 0, INTENB0); -	r8a66597_write(r8a66597, 0, INTSTS0); +	r8a66597_write(r8a66597, 0, INTENB1); +	r8a66597_write(r8a66597, 0, BRDYENB); +	r8a66597_write(r8a66597, 0, BEMPENB); +	r8a66597_write(r8a66597, 0, NRDYENB); + +	/* clear status */ +	r8a66597_write(r8a66597, 0, BRDYSTS); +	r8a66597_write(r8a66597, 0, NRDYSTS); +	r8a66597_write(r8a66597, 0, BEMPSTS);  	for (port = 0; port < r8a66597->max_root_hub; port++)  		r8a66597_disable_port(r8a66597, port); @@ -811,6 +822,26 @@ static void enable_r8a66597_pipe(struct r8a66597 *r8a66597, struct urb *urb,  	enable_r8a66597_pipe_dma(r8a66597, dev, pipe, urb);  } +static void r8a66597_urb_done(struct r8a66597 *r8a66597, struct urb *urb, +			      int status) +__releases(r8a66597->lock) +__acquires(r8a66597->lock) +{ +	if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) { +		void *ptr; + +		for (ptr = urb->transfer_buffer; +		     ptr < urb->transfer_buffer + urb->transfer_buffer_length; +		     ptr += PAGE_SIZE) +			flush_dcache_page(virt_to_page(ptr)); +	} + +	usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), urb); +	spin_unlock(&r8a66597->lock); +	usb_hcd_giveback_urb(r8a66597_to_hcd(r8a66597), urb, status); +	spin_lock(&r8a66597->lock); +} +  /* this function must be called with interrupt disabled */  static void force_dequeue(struct r8a66597 *r8a66597, u16 pipenum, u16 address)  { @@ -829,15 +860,9 @@ static void force_dequeue(struct r8a66597 *r8a66597, u16 pipenum, u16 address)  		list_del(&td->queue);  		kfree(td); -		if (urb) { -			usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), -					urb); +		if (urb) +			r8a66597_urb_done(r8a66597, urb, -ENODEV); -			spin_unlock(&r8a66597->lock); -			usb_hcd_giveback_urb(r8a66597_to_hcd(r8a66597), urb, -					-ENODEV); -			spin_lock(&r8a66597->lock); -		}  		break;  	}  } @@ -997,6 +1022,8 @@ static void start_root_hub_sampling(struct r8a66597 *r8a66597, int port,  /* this function must be called with interrupt disabled */  static void r8a66597_check_syssts(struct r8a66597 *r8a66597, int port,  					u16 syssts) +__releases(r8a66597->lock) +__acquires(r8a66597->lock)  {  	if (syssts == SE0) {  		r8a66597_write(r8a66597, ~ATTCH, get_intsts_reg(port)); @@ -1014,7 +1041,9 @@ static void r8a66597_check_syssts(struct r8a66597 *r8a66597, int port,  			usb_hcd_resume_root_hub(r8a66597_to_hcd(r8a66597));  	} +	spin_unlock(&r8a66597->lock);  	usb_hcd_poll_rh_status(r8a66597_to_hcd(r8a66597)); +	spin_lock(&r8a66597->lock);  }  /* this function must be called with interrupt disabled */ @@ -1274,10 +1303,7 @@ __releases(r8a66597->lock) __acquires(r8a66597->lock)  		if (usb_pipeisoc(urb->pipe))  			urb->start_frame = r8a66597_get_frame(hcd); -		usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), urb); -		spin_unlock(&r8a66597->lock); -		usb_hcd_giveback_urb(hcd, urb, status); -		spin_lock(&r8a66597->lock); +		r8a66597_urb_done(r8a66597, urb, status);  	}  	if (restart) { @@ -2466,6 +2492,12 @@ static int __devinit r8a66597_probe(struct platform_device *pdev)  	r8a66597->rh_timer.data = (unsigned long)r8a66597;  	r8a66597->reg = (unsigned long)reg; +	/* make sure no interrupts are pending */ +	ret = r8a66597_clock_enable(r8a66597); +	if (ret < 0) +		goto clean_up3; +	disable_controller(r8a66597); +  	for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) {  		INIT_LIST_HEAD(&r8a66597->pipe_queue[i]);  		init_timer(&r8a66597->td_timer[i]); diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c index 0025847743f..8b37a4b9839 100644 --- a/drivers/usb/misc/sisusbvga/sisusb.c +++ b/drivers/usb/misc/sisusbvga/sisusb.c @@ -3245,6 +3245,7 @@ static struct usb_device_id sisusb_table [] = {  	{ USB_DEVICE(0x0711, 0x0902) },  	{ USB_DEVICE(0x0711, 0x0903) },  	{ USB_DEVICE(0x0711, 0x0918) }, +	{ USB_DEVICE(0x0711, 0x0920) },  	{ USB_DEVICE(0x182d, 0x021c) },  	{ USB_DEVICE(0x182d, 0x0269) },  	{ } diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig index de56b3d743d..3d2d3e549bd 100644 --- a/drivers/usb/otg/Kconfig +++ b/drivers/usb/otg/Kconfig @@ -44,6 +44,7 @@ config ISP1301_OMAP  config USB_ULPI  	bool "Generic ULPI Transceiver Driver"  	depends on ARM +	select USB_OTG_UTILS  	help  	  Enable this to support ULPI connected USB OTG transceivers which  	  are likely found on embedded boards. diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 216f187582a..7638828e731 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -50,7 +50,7 @@   * Version Information   */  #define DRIVER_VERSION "v1.5.0" -#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>" +#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>, Andreas Mohr"  #define DRIVER_DESC "USB FTDI Serial Converters Driver"  static int debug; @@ -145,10 +145,15 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { +/* + * Device ID not listed? Test via module params product/vendor or + * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! + */  static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, @@ -552,9 +557,16 @@ static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },  	/* -	 * Due to many user requests for multiple ELV devices we enable -	 * them by default. +	 * ELV devices:  	 */ +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS550_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_EC3000_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS888_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_TWS550_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_FEM_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, @@ -571,11 +583,17 @@ static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_UTP8_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS444PC_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_UMS100_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_TFD128_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_FM3RX_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS777_PID) },  	{ USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) },  	{ USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) },  	{ USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) }, @@ -697,6 +715,7 @@ static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },  	{ USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },  	{ USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, +	{ USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },  	{ USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index da92b4952ff..c8951aeed98 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h @@ -38,6 +38,8 @@  /* www.candapter.com Ewert Energy Systems CANdapter device */  #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ +#define FTDI_NXTCAM_PID		0xABB8 /* NXTCam for Mindstorms NXT */ +  /* OOCDlink by Joern Kaipf <joernk@web.de>   * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */  #define FTDI_OOCDLINK_PID	0xbaf8	/* Amontec JTAGkey */ @@ -161,22 +163,37 @@  /*   * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).   * All of these devices use FTDI's vendor ID (0x0403). + * Further IDs taken from ELV Windows .inf file.   *   * The previously included PID for the UO 100 module was incorrect.   * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58).   *   * Armin Laeuger originally sent the PID for the UM 100 module.   */ +#define FTDI_ELV_USR_PID	0xE000	/* ELV Universal-Sound-Recorder */ +#define FTDI_ELV_MSM1_PID	0xE001	/* ELV Mini-Sound-Modul */ +#define FTDI_ELV_KL100_PID	0xE002	/* ELV Kfz-Leistungsmesser KL 100 */ +#define FTDI_ELV_WS550_PID	0xE004	/* WS 550 */ +#define FTDI_ELV_EC3000_PID	0xE006	/* ENERGY CONTROL 3000 USB */ +#define FTDI_ELV_WS888_PID	0xE008	/* WS 888 */ +#define FTDI_ELV_TWS550_PID	0xE009	/* Technoline WS 550 */ +#define FTDI_ELV_FEM_PID	0xE00A	/* Funk Energie Monitor */  #define FTDI_ELV_FHZ1300PC_PID	0xE0E8	/* FHZ 1300 PC */  #define FTDI_ELV_WS500_PID	0xE0E9	/* PC-Wetterstation (WS 500) */  #define FTDI_ELV_HS485_PID	0xE0EA	/* USB to RS-485 adapter */ +#define FTDI_ELV_UMS100_PID	0xE0EB	/* ELV USB Master-Slave Schaltsteckdose UMS 100 */ +#define FTDI_ELV_TFD128_PID	0xE0EC	/* ELV Temperatur-Feuchte-Datenlogger TFD 128 */ +#define FTDI_ELV_FM3RX_PID	0xE0ED	/* ELV Messwertuebertragung FM3 RX */ +#define FTDI_ELV_WS777_PID	0xE0EE	/* Conrad WS 777 */  #define FTDI_ELV_EM1010PC_PID	0xE0EF	/* Engery monitor EM 1010 PC */  #define FTDI_ELV_CSI8_PID	0xE0F0	/* Computer-Schalt-Interface (CSI 8) */  #define FTDI_ELV_EM1000DL_PID	0xE0F1	/* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */  #define FTDI_ELV_PCK100_PID	0xE0F2	/* PC-Kabeltester (PCK 100) */  #define FTDI_ELV_RFP500_PID	0xE0F3	/* HF-Leistungsmesser (RFP 500) */  #define FTDI_ELV_FS20SIG_PID	0xE0F4	/* Signalgeber (FS 20 SIG) */ +#define FTDI_ELV_UTP8_PID	0xE0F5	/* ELV UTP 8 */  #define FTDI_ELV_WS300PC_PID	0xE0F6	/* PC-Wetterstation (WS 300 PC) */ +#define FTDI_ELV_WS444PC_PID	0xE0F7	/* Conrad WS 444 PC */  #define FTDI_PHI_FISCO_PID      0xE40B  /* PHI Fisco USB to Serial cable */  #define FTDI_ELV_UAD8_PID	0xF068	/* USB-AD-Wandler (UAD 8) */  #define FTDI_ELV_UDA7_PID	0xF069	/* USB-DA-Wandler (UDA 7) */ @@ -968,6 +985,7 @@  #define PAPOUCH_VID			0x5050	/* Vendor ID */  #define PAPOUCH_TMU_PID			0x0400	/* TMU USB Thermometer */  #define PAPOUCH_QUIDO4x4_PID		0x0900	/* Quido 4/4 Module */ +#define PAPOUCH_AD4USB_PID		0x8003	/* AD4USB Measurement Module */  /*   * Marvell SheevaPlug diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index ac1b6449fb6..3eb6143bb64 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c @@ -298,6 +298,7 @@ static struct usb_device_id id_table [] = {  	{ USB_DEVICE(0x1199, 0x68A3), 	/* Sierra Wireless Direct IP modems */  	  .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist  	}, +       { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */  	{ }  }; diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index c932f905318..49575fba375 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h @@ -941,7 +941,7 @@ UNUSUAL_DEV(  0x07ab, 0xfccd, 0x0000, 0x9999,  UNUSUAL_DEV(  0x07af, 0x0004, 0x0100, 0x0133,  		"Microtech",  		"USB-SCSI-DB25", -		US_SC_SCSI, US_PR_BULK, usb_stor_euscsi_init, +		US_SC_DEVICE, US_PR_DEVICE, usb_stor_euscsi_init,  		US_FL_SCM_MULT_TARG ),   UNUSUAL_DEV(  0x07af, 0x0005, 0x0100, 0x0100, diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 66358fa825f..b4b6deceed1 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -593,7 +593,8 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf   */  static int imxfb_suspend(struct platform_device *dev, pm_message_t state)  { -	struct imxfb_info *fbi = platform_get_drvdata(dev); +	struct fb_info *info = platform_get_drvdata(dev); +	struct imxfb_info *fbi = info->par;  	pr_debug("%s\n", __func__); @@ -603,7 +604,8 @@ static int imxfb_suspend(struct platform_device *dev, pm_message_t state)  static int imxfb_resume(struct platform_device *dev)  { -	struct imxfb_info *fbi = platform_get_drvdata(dev); +	struct fb_info *info = platform_get_drvdata(dev); +	struct imxfb_info *fbi = info->par;  	pr_debug("%s\n", __func__); diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index 054ef29be47..772ba3f45e6 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c @@ -324,8 +324,11 @@ static void sdc_enable_channel(struct mx3fb_info *mx3_fbi)  	unsigned long flags;  	dma_cookie_t cookie; -	dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, -		to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg); +	if (mx3_fbi->txd) +		dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, +			to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg); +	else +		dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi);  	/* This enables the channel */  	if (mx3_fbi->cookie < 0) { @@ -646,6 +649,7 @@ static int sdc_set_global_alpha(struct mx3fb_data *mx3fb, bool enable, uint8_t a  static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value)  { +	dev_dbg(mx3fb->dev, "%s: value = %d\n", __func__, value);  	/* This might be board-specific */  	mx3fb_write_reg(mx3fb, 0x03000000UL | value << 16, SDC_PWM_CTRL);  	return; @@ -1486,12 +1490,12 @@ static int mx3fb_probe(struct platform_device *pdev)  		goto ersdc0;  	} +	mx3fb->backlight_level = 255; +  	ret = init_fb_chan(mx3fb, to_idmac_chan(chan));  	if (ret < 0)  		goto eisdc0; -	mx3fb->backlight_level = 255; -  	return 0;  eisdc0: diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 088f32f29a6..050ee147592 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -396,8 +396,8 @@ config SBC_FITPC2_WATCHDOG  	tristate "Compulab SBC-FITPC2 watchdog"  	depends on X86  	---help--- -	  This is the driver for the built-in watchdog timer on the fit-PC2 -	  Single-board computer made by Compulab. +	  This is the driver for the built-in watchdog timer on the fit-PC2, +	  fit-PC2i, CM-iAM single-board computers made by Compulab.  	  It`s possible to enable watchdog timer either from BIOS (F2) or from booted Linux.  	  When "Watchdog Timer Value" enabled one can set 31-255 s operational range. diff --git a/drivers/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c index 4f4b35a20d8..3c79dc58795 100644 --- a/drivers/watchdog/ixp2000_wdt.c +++ b/drivers/watchdog/ixp2000_wdt.c @@ -19,6 +19,7 @@  #include <linux/module.h>  #include <linux/moduleparam.h>  #include <linux/types.h> +#include <linux/timer.h>  #include <linux/kernel.h>  #include <linux/fs.h>  #include <linux/miscdevice.h> diff --git a/drivers/watchdog/sbc_fitpc2_wdt.c b/drivers/watchdog/sbc_fitpc2_wdt.c index 91430a89107..e6763d2a567 100644 --- a/drivers/watchdog/sbc_fitpc2_wdt.c +++ b/drivers/watchdog/sbc_fitpc2_wdt.c @@ -46,9 +46,9 @@ static DEFINE_SPINLOCK(wdt_lock);  static void wdt_send_data(unsigned char command, unsigned char data)  {  	outb(command, COMMAND_PORT); -	mdelay(100); +	msleep(100);  	outb(data, DATA_PORT); -	mdelay(200); +	msleep(200);  }  static void wdt_enable(void) @@ -202,11 +202,10 @@ static int __init fitpc2_wdt_init(void)  {  	int err; -	if (strcmp("SBC-FITPC2", dmi_get_system_info(DMI_BOARD_NAME))) { -		pr_info("board name is: %s. Should be SBC-FITPC2\n", -			dmi_get_system_info(DMI_BOARD_NAME)); +	if (!strstr(dmi_get_system_info(DMI_BOARD_NAME), "SBC-FITPC2"))  		return -ENODEV; -	} + +	pr_info("%s found\n", dmi_get_system_info(DMI_BOARD_NAME));  	if (!request_region(COMMAND_PORT, 1, WATCHDOG_NAME)) {  		pr_err("I/O address 0x%04x already in use\n", COMMAND_PORT); diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index cf62b05e296..7d6c2139891 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -84,7 +84,7 @@ static const match_table_t tokens = {  static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)  { -	char *options; +	char *options, *tmp_options;  	substring_t args[MAX_OPT_ARGS];  	char *p;  	int option = 0; @@ -102,9 +102,12 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)  	if (!opts)  		return 0; -	options = kstrdup(opts, GFP_KERNEL); -	if (!options) +	tmp_options = kstrdup(opts, GFP_KERNEL); +	if (!tmp_options) { +		ret = -ENOMEM;  		goto fail_option_alloc; +	} +	options = tmp_options;  	while ((p = strsep(&options, ",")) != NULL) {  		int token; @@ -159,8 +162,12 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)  			break;  		case Opt_cache:  			s = match_strdup(&args[0]); -			if (!s) -				goto fail_option_alloc; +			if (!s) { +				ret = -ENOMEM; +				P9_DPRINTK(P9_DEBUG_ERROR, +				  "problem allocating copy of cache arg\n"); +				goto free_and_return; +			}  			if (strcmp(s, "loose") == 0)  				v9ses->cache = CACHE_LOOSE; @@ -173,8 +180,12 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)  		case Opt_access:  			s = match_strdup(&args[0]); -			if (!s) -				goto fail_option_alloc; +			if (!s) { +				ret = -ENOMEM; +				P9_DPRINTK(P9_DEBUG_ERROR, +				  "problem allocating copy of access arg\n"); +				goto free_and_return; +			}  			v9ses->flags &= ~V9FS_ACCESS_MASK;  			if (strcmp(s, "user") == 0) @@ -194,13 +205,11 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)  			continue;  		}  	} -	kfree(options); -	return ret; +free_and_return: +	kfree(tmp_options);  fail_option_alloc: -	P9_DPRINTK(P9_DEBUG_ERROR, -		   "failed to allocate copy of option argument\n"); -	return -ENOMEM; +	return ret;  }  /** diff --git a/fs/9p/v9fs_vfs.h b/fs/9p/v9fs_vfs.h index 3a7560e3586..ed835836e0d 100644 --- a/fs/9p/v9fs_vfs.h +++ b/fs/9p/v9fs_vfs.h @@ -60,3 +60,4 @@ void v9fs_dentry_release(struct dentry *);  int v9fs_uflags2omode(int uflags, int extended);  ssize_t v9fs_file_readn(struct file *, char *, char __user *, u32, u64); +void v9fs_blank_wstat(struct p9_wstat *wstat); diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 3902bf43a08..74a0461a9ac 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c @@ -257,6 +257,23 @@ v9fs_file_write(struct file *filp, const char __user * data,  	return total;  } +static int v9fs_file_fsync(struct file *filp, struct dentry *dentry, +					int datasync) +{ +	struct p9_fid *fid; +	struct p9_wstat wstat; +	int retval; + +	P9_DPRINTK(P9_DEBUG_VFS, "filp %p dentry %p datasync %x\n", filp, +						dentry, datasync); + +	fid = filp->private_data; +	v9fs_blank_wstat(&wstat); + +	retval = p9_client_wstat(fid, &wstat); +	return retval; +} +  static const struct file_operations v9fs_cached_file_operations = {  	.llseek = generic_file_llseek,  	.read = do_sync_read, @@ -266,6 +283,7 @@ static const struct file_operations v9fs_cached_file_operations = {  	.release = v9fs_dir_release,  	.lock = v9fs_file_lock,  	.mmap = generic_file_readonly_mmap, +	.fsync = v9fs_file_fsync,  };  const struct file_operations v9fs_file_operations = { @@ -276,4 +294,5 @@ const struct file_operations v9fs_file_operations = {  	.release = v9fs_dir_release,  	.lock = v9fs_file_lock,  	.mmap = generic_file_readonly_mmap, +	.fsync = v9fs_file_fsync,  }; diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index 9d03d1ebca6..a407fa3388c 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -176,7 +176,7 @@ int v9fs_uflags2omode(int uflags, int extended)   *   */ -static void +void  v9fs_blank_wstat(struct p9_wstat *wstat)  {  	wstat->type = ~0; diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c index 14a86448572..69357c0d989 100644 --- a/fs/9p/vfs_super.c +++ b/fs/9p/vfs_super.c @@ -188,7 +188,8 @@ static void v9fs_kill_super(struct super_block *s)  	P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s); -	v9fs_dentry_release(s->s_root);	/* clunk root */ +	if (s->s_root) +		v9fs_dentry_release(s->s_root);	/* clunk root */  	kill_anon_super(s); diff --git a/fs/affs/affs.h b/fs/affs/affs.h index e511dc621a2..0e40caaba45 100644 --- a/fs/affs/affs.h +++ b/fs/affs/affs.h @@ -106,8 +106,8 @@ struct affs_sb_info {  	u32 s_last_bmap;  	struct buffer_head *s_bmap_bh;  	char *s_prefix;			/* Prefix for volumes and assigns. */ -	int s_prefix_len;		/* Length of prefix. */  	char s_volume[32];		/* Volume prefix for absolute symlinks. */ +	spinlock_t symlink_lock;	/* protects the previous two */  };  #define SF_INTL		0x0001		/* International filesystem. */ diff --git a/fs/affs/namei.c b/fs/affs/namei.c index 960d336ec69..d70bbbac6b7 100644 --- a/fs/affs/namei.c +++ b/fs/affs/namei.c @@ -341,10 +341,13 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)  	p  = (char *)AFFS_HEAD(bh)->table;  	lc = '/';  	if (*symname == '/') { +		struct affs_sb_info *sbi = AFFS_SB(sb);  		while (*symname == '/')  			symname++; -		while (AFFS_SB(sb)->s_volume[i])	/* Cannot overflow */ -			*p++ = AFFS_SB(sb)->s_volume[i++]; +		spin_lock(&sbi->symlink_lock); +		while (sbi->s_volume[i])	/* Cannot overflow */ +			*p++ = sbi->s_volume[i++]; +		spin_unlock(&sbi->symlink_lock);  	}  	while (i < maxlen && (c = *symname++)) {  		if (c == '.' && lc == '/' && *symname == '.' && symname[1] == '/') { diff --git a/fs/affs/super.c b/fs/affs/super.c index 104fdcb3a7f..d41e9673cd9 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c @@ -203,7 +203,7 @@ parse_options(char *options, uid_t *uid, gid_t *gid, int *mode, int *reserved, s  		switch (token) {  		case Opt_bs:  			if (match_int(&args[0], &n)) -				return -EINVAL; +				return 0;  			if (n != 512 && n != 1024 && n != 2048  			    && n != 4096) {  				printk ("AFFS: Invalid blocksize (512, 1024, 2048, 4096 allowed)\n"); @@ -213,7 +213,7 @@ parse_options(char *options, uid_t *uid, gid_t *gid, int *mode, int *reserved, s  			break;  		case Opt_mode:  			if (match_octal(&args[0], &option)) -				return 1; +				return 0;  			*mode = option & 0777;  			*mount_opts |= SF_SETMODE;  			break; @@ -221,8 +221,6 @@ parse_options(char *options, uid_t *uid, gid_t *gid, int *mode, int *reserved, s  			*mount_opts |= SF_MUFS;  			break;  		case Opt_prefix: -			/* Free any previous prefix */ -			kfree(*prefix);  			*prefix = match_strdup(&args[0]);  			if (!*prefix)  				return 0; @@ -233,21 +231,21 @@ parse_options(char *options, uid_t *uid, gid_t *gid, int *mode, int *reserved, s  			break;  		case Opt_reserved:  			if (match_int(&args[0], reserved)) -				return 1; +				return 0;  			break;  		case Opt_root:  			if (match_int(&args[0], root)) -				return 1; +				return 0;  			break;  		case Opt_setgid:  			if (match_int(&args[0], &option)) -				return 1; +				return 0;  			*gid = option;  			*mount_opts |= SF_SETGID;  			break;  		case Opt_setuid:  			if (match_int(&args[0], &option)) -				return -EINVAL; +				return 0;  			*uid = option;  			*mount_opts |= SF_SETUID;  			break; @@ -311,11 +309,14 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent)  		return -ENOMEM;  	sb->s_fs_info = sbi;  	mutex_init(&sbi->s_bmlock); +	spin_lock_init(&sbi->symlink_lock);  	if (!parse_options(data,&uid,&gid,&i,&reserved,&root_block,  				&blocksize,&sbi->s_prefix,  				sbi->s_volume, &mount_flags)) {  		printk(KERN_ERR "AFFS: Error parsing options\n"); +		kfree(sbi->s_prefix); +		kfree(sbi);  		return -EINVAL;  	}  	/* N.B. after this point s_prefix must be released */ @@ -516,14 +517,18 @@ affs_remount(struct super_block *sb, int *flags, char *data)  	unsigned long		 mount_flags;  	int			 res = 0;  	char			*new_opts = kstrdup(data, GFP_KERNEL); +	char			 volume[32]; +	char			*prefix = NULL;  	pr_debug("AFFS: remount(flags=0x%x,opts=\"%s\")\n",*flags,data);  	*flags |= MS_NODIRATIME; +	memcpy(volume, sbi->s_volume, 32);  	if (!parse_options(data, &uid, &gid, &mode, &reserved, &root_block, -			   &blocksize, &sbi->s_prefix, sbi->s_volume, +			   &blocksize, &prefix, volume,  			   &mount_flags)) { +		kfree(prefix);  		kfree(new_opts);  		return -EINVAL;  	} @@ -534,6 +539,14 @@ affs_remount(struct super_block *sb, int *flags, char *data)  	sbi->s_mode  = mode;  	sbi->s_uid   = uid;  	sbi->s_gid   = gid; +	/* protect against readers */ +	spin_lock(&sbi->symlink_lock); +	if (prefix) { +		kfree(sbi->s_prefix); +		sbi->s_prefix = prefix; +	} +	memcpy(sbi->s_volume, volume, 32); +	spin_unlock(&sbi->symlink_lock);  	if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) {  		unlock_kernel(); diff --git a/fs/affs/symlink.c b/fs/affs/symlink.c index 41782539c90..ee00f08c4f5 100644 --- a/fs/affs/symlink.c +++ b/fs/affs/symlink.c @@ -20,7 +20,6 @@ static int affs_symlink_readpage(struct file *file, struct page *page)  	int			 i, j;  	char			 c;  	char			 lc; -	char			*pf;  	pr_debug("AFFS: follow_link(ino=%lu)\n",inode->i_ino); @@ -32,11 +31,15 @@ static int affs_symlink_readpage(struct file *file, struct page *page)  	j  = 0;  	lf = (struct slink_front *)bh->b_data;  	lc = 0; -	pf = AFFS_SB(inode->i_sb)->s_prefix ? AFFS_SB(inode->i_sb)->s_prefix : "/";  	if (strchr(lf->symname,':')) {	/* Handle assign or volume name */ +		struct affs_sb_info *sbi = AFFS_SB(inode->i_sb); +		char *pf; +		spin_lock(&sbi->symlink_lock); +		pf = sbi->s_prefix ? sbi->s_prefix : "/";  		while (i < 1023 && (c = pf[i]))  			link[i++] = c; +		spin_unlock(&sbi->symlink_lock);  		while (i < 1023 && lf->symname[j] != ':')  			link[i++] = lf->symname[j++];  		if (i < 1023) diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index 33baf27fac7..34ddda888e6 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c @@ -873,6 +873,7 @@ befs_fill_super(struct super_block *sb, void *data, int silent)  	brelse(bh);        unacquire_priv_sbp: +	kfree(befs_sb->mount_opts.iocharset);  	kfree(sb->s_fs_info);        unacquire_none: diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 6f60336c662..8f3d9fd8960 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c @@ -353,35 +353,35 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  	struct inode *inode;  	unsigned i, imap_len;  	struct bfs_sb_info *info; -	long ret = -EINVAL; +	int ret = -EINVAL;  	unsigned long i_sblock, i_eblock, i_eoff, s_size;  	info = kzalloc(sizeof(*info), GFP_KERNEL);  	if (!info)  		return -ENOMEM; +	mutex_init(&info->bfs_lock);  	s->s_fs_info = info;  	sb_set_blocksize(s, BFS_BSIZE); -	bh = sb_bread(s, 0); -	if(!bh) +	info->si_sbh = sb_bread(s, 0); +	if (!info->si_sbh)  		goto out; -	bfs_sb = (struct bfs_super_block *)bh->b_data; +	bfs_sb = (struct bfs_super_block *)info->si_sbh->b_data;  	if (le32_to_cpu(bfs_sb->s_magic) != BFS_MAGIC) {  		if (!silent)  			printf("No BFS filesystem on %s (magic=%08x)\n",   				s->s_id,  le32_to_cpu(bfs_sb->s_magic)); -		goto out; +		goto out1;  	}  	if (BFS_UNCLEAN(bfs_sb, s) && !silent)  		printf("%s is unclean, continuing\n", s->s_id);  	s->s_magic = BFS_MAGIC; -	info->si_sbh = bh;  	if (le32_to_cpu(bfs_sb->s_start) > le32_to_cpu(bfs_sb->s_end)) {  		printf("Superblock is corrupted\n"); -		goto out; +		goto out1;  	}  	info->si_lasti = (le32_to_cpu(bfs_sb->s_start) - BFS_BSIZE) / @@ -390,7 +390,7 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  	imap_len = (info->si_lasti / 8) + 1;  	info->si_imap = kzalloc(imap_len, GFP_KERNEL);  	if (!info->si_imap) -		goto out; +		goto out1;  	for (i = 0; i < BFS_ROOT_INO; i++)  		set_bit(i, info->si_imap); @@ -398,15 +398,13 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  	inode = bfs_iget(s, BFS_ROOT_INO);  	if (IS_ERR(inode)) {  		ret = PTR_ERR(inode); -		kfree(info->si_imap); -		goto out; +		goto out2;  	}  	s->s_root = d_alloc_root(inode);  	if (!s->s_root) {  		iput(inode);  		ret = -ENOMEM; -		kfree(info->si_imap); -		goto out; +		goto out2;  	}  	info->si_blocks = (le32_to_cpu(bfs_sb->s_end) + 1) >> BFS_BSIZE_BITS; @@ -419,10 +417,8 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  	bh = sb_bread(s, info->si_blocks - 1);  	if (!bh) {  		printf("Last block not available: %lu\n", info->si_blocks - 1); -		iput(inode);  		ret = -EIO; -		kfree(info->si_imap); -		goto out; +		goto out3;  	}  	brelse(bh); @@ -459,11 +455,8 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  			printf("Inode 0x%08x corrupted\n", i);  			brelse(bh); -			s->s_root = NULL; -			kfree(info->si_imap); -			kfree(info); -			s->s_fs_info = NULL; -			return -EIO; +			ret = -EIO; +			goto out3;  		}  		if (!di->i_ino) { @@ -483,11 +476,17 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)  		s->s_dirt = 1;  	}   	dump_imap("read_super", s); -	mutex_init(&info->bfs_lock);  	return 0; +out3: +	dput(s->s_root); +	s->s_root = NULL; +out2: +	kfree(info->si_imap); +out1: +	brelse(info->si_sbh);  out: -	brelse(bh); +	mutex_destroy(&info->bfs_lock);  	kfree(info);  	s->s_fs_info = NULL;  	return ret; diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index 346b6940536..fdd39709917 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -264,6 +264,7 @@ static int load_aout_binary(struct linux_binprm * bprm, struct pt_regs * regs)  #else  	set_personality(PER_LINUX);  #endif +	setup_new_exec(bprm);  	current->mm->end_code = ex.a_text +  		(current->mm->start_code = N_TXTADDR(ex)); diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index edd90c49003..fd5b2ea5d29 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -662,27 +662,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)  			if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0')  				goto out_free_interp; -			/* -			 * The early SET_PERSONALITY here is so that the lookup -			 * for the interpreter happens in the namespace of the  -			 * to-be-execed image.  SET_PERSONALITY can select an -			 * alternate root. -			 * -			 * However, SET_PERSONALITY is NOT allowed to switch -			 * this task into the new images's memory mapping -			 * policy - that is, TASK_SIZE must still evaluate to -			 * that which is appropriate to the execing application. -			 * This is because exit_mmap() needs to have TASK_SIZE -			 * evaluate to the size of the old image. -			 * -			 * So if (say) a 64-bit application is execing a 32-bit -			 * application it is the architecture's responsibility -			 * to defer changing the value of TASK_SIZE until the -			 * switch really is going to happen - do this in -			 * flush_thread().	- akpm -			 */ -			SET_PERSONALITY(loc->elf_ex); -  			interpreter = open_exec(elf_interpreter);  			retval = PTR_ERR(interpreter);  			if (IS_ERR(interpreter)) @@ -730,9 +709,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)  		/* Verify the interpreter has a valid arch */  		if (!elf_check_arch(&loc->interp_elf_ex))  			goto out_free_dentry; -	} else { -		/* Executables without an interpreter also need a personality  */ -		SET_PERSONALITY(loc->elf_ex);  	}  	/* Flush all traces of the currently running executable */ @@ -752,7 +728,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)  	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)  		current->flags |= PF_RANDOMIZE; -	arch_pick_mmap_layout(current->mm); + +	setup_new_exec(bprm);  	/* Do this so that we can load the interpreter, if need be.  We will  	   change some of these later */ diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index c57d9ce5ff7..18d77297ccc 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c @@ -321,6 +321,9 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm,  	set_personality(PER_LINUX_FDPIC);  	if (elf_read_implies_exec(&exec_params.hdr, executable_stack))  		current->personality |= READ_IMPLIES_EXEC; + +	setup_new_exec(bprm); +  	set_binfmt(&elf_fdpic_format);  	current->mm->start_code = 0; diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c index d4a00ea1054..42c6b4a5444 100644 --- a/fs/binfmt_flat.c +++ b/fs/binfmt_flat.c @@ -519,6 +519,7 @@ static int load_flat_file(struct linux_binprm * bprm,  		/* OK, This is the point of no return */  		set_personality(PER_LINUX_32BIT); +		setup_new_exec(bprm);  	}  	/* diff --git a/fs/binfmt_som.c b/fs/binfmt_som.c index 2a9b5330cc5..cc8560f6c9b 100644 --- a/fs/binfmt_som.c +++ b/fs/binfmt_som.c @@ -227,6 +227,7 @@ load_som_binary(struct linux_binprm * bprm, struct pt_regs * regs)  	/* OK, This is the point of no return */  	current->flags &= ~PF_FORKNOEXEC;  	current->personality = PER_HPUX; +	setup_new_exec(bprm);  	/* Set the task size for HP-UX processes such that  	 * the gateway page is outside the address space. diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 49a34e7f730..a16f29e888c 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c @@ -61,7 +61,7 @@ static inline unsigned int vecs_to_idx(unsigned int nr)  static inline int use_bip_pool(unsigned int idx)  { -	if (idx == BIOVEC_NR_POOLS) +	if (idx == BIOVEC_MAX_IDX)  		return 1;  	return 0; @@ -95,6 +95,7 @@ struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio,  	/* Use mempool if lower order alloc failed or max vecs were requested */  	if (bip == NULL) { +		idx = BIOVEC_MAX_IDX;  /* so we free the payload properly later */  		bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask);  		if (unlikely(bip == NULL)) { @@ -542,13 +542,18 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page  		if (page == prev->bv_page &&  		    offset == prev->bv_offset + prev->bv_len) { +			unsigned int prev_bv_len = prev->bv_len;  			prev->bv_len += len;  			if (q->merge_bvec_fn) {  				struct bvec_merge_data bvm = { +					/* prev_bvec is already charged in +					   bi_size, discharge it in order to +					   simulate merging updated prev_bvec +					   as new bvec. */  					.bi_bdev = bio->bi_bdev,  					.bi_sector = bio->bi_sector, -					.bi_size = bio->bi_size, +					.bi_size = bio->bi_size - prev_bv_len,  					.bi_rw = bio->bi_rw,  				}; diff --git a/fs/block_dev.c b/fs/block_dev.c index 73d6a735b8f..d11d0289f3d 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -246,7 +246,8 @@ struct super_block *freeze_bdev(struct block_device *bdev)  	if (!sb)  		goto out;  	if (sb->s_flags & MS_RDONLY) { -		deactivate_locked_super(sb); +		sb->s_frozen = SB_FREEZE_TRANS; +		up_write(&sb->s_umount);  		mutex_unlock(&bdev->bd_fsfreeze_mutex);  		return sb;  	} @@ -307,7 +308,7 @@ int thaw_bdev(struct block_device *bdev, struct super_block *sb)  	BUG_ON(sb->s_bdev != bdev);  	down_write(&sb->s_umount);  	if (sb->s_flags & MS_RDONLY) -		goto out_deactivate; +		goto out_unfrozen;  	if (sb->s_op->unfreeze_fs) {  		error = sb->s_op->unfreeze_fs(sb); @@ -321,11 +322,11 @@ int thaw_bdev(struct block_device *bdev, struct super_block *sb)  		}  	} +out_unfrozen:  	sb->s_frozen = SB_UNFROZEN;  	smp_wmb();  	wake_up(&sb->s_wait_unfrozen); -out_deactivate:  	if (sb)  		deactivate_locked_super(sb);  out_unlock: diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index 54f4798ab46..6df6d6ed74f 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c @@ -244,6 +244,7 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans,  						    ACL_TYPE_ACCESS);  			}  		} +		posix_acl_release(clone);  	}  failed:  	posix_acl_release(acl); diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 9f806dd04c2..2aa8ec6a098 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -1161,6 +1161,7 @@ struct btrfs_root {  #define BTRFS_MOUNT_SSD_SPREAD		(1 << 8)  #define BTRFS_MOUNT_NOSSD		(1 << 9)  #define BTRFS_MOUNT_DISCARD		(1 << 10) +#define BTRFS_MOUNT_FORCE_COMPRESS      (1 << 11)  #define btrfs_clear_opt(o, opt)		((o) &= ~BTRFS_MOUNT_##opt)  #define btrfs_set_opt(o, opt)		((o) |= BTRFS_MOUNT_##opt) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 009e3bd18f2..2b59201b955 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1982,7 +1982,12 @@ struct btrfs_root *open_ctree(struct super_block *sb,  	if (!(sb->s_flags & MS_RDONLY)) {  		ret = btrfs_recover_relocation(tree_root); -		BUG_ON(ret); +		if (ret < 0) { +			printk(KERN_WARNING +			       "btrfs: failed to recover relocation\n"); +			err = -EINVAL; +			goto fail_trans_kthread; +		}  	}  	location.objectid = BTRFS_FS_TREE_OBJECTID; @@ -1993,6 +1998,12 @@ struct btrfs_root *open_ctree(struct super_block *sb,  	if (!fs_info->fs_root)  		goto fail_trans_kthread; +	if (!(sb->s_flags & MS_RDONLY)) { +		down_read(&fs_info->cleanup_work_sem); +		btrfs_orphan_cleanup(fs_info->fs_root); +		up_read(&fs_info->cleanup_work_sem); +	} +  	return tree_root;  fail_trans_kthread: diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 432a2da4641..559f72489b3 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5402,10 +5402,6 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,  	int ret;  	while (level >= 0) { -		if (path->slots[level] >= -		    btrfs_header_nritems(path->nodes[level])) -			break; -  		ret = walk_down_proc(trans, root, path, wc, lookup_info);  		if (ret > 0)  			break; @@ -5413,6 +5409,10 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,  		if (level == 0)  			break; +		if (path->slots[level] >= +		    btrfs_header_nritems(path->nodes[level])) +			break; +  		ret = do_walk_down(trans, root, path, wc, &lookup_info);  		if (ret > 0) {  			path->slots[level]++; diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 96577e8bf9f..b177ed31961 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3165,10 +3165,9 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,  		spin_unlock(&tree->buffer_lock);  		goto free_eb;  	} -	spin_unlock(&tree->buffer_lock); -  	/* add one reference for the tree */  	atomic_inc(&eb->refs); +	spin_unlock(&tree->buffer_lock);  	return eb;  free_eb: diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c index 46bea0f4dc7..428fcac45f9 100644 --- a/fs/btrfs/extent_map.c +++ b/fs/btrfs/extent_map.c @@ -155,20 +155,6 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset,  	return NULL;  } -/* - * look for an offset in the tree, and if it can't be found, return - * the first offset we can find smaller than 'offset'. - */ -static inline struct rb_node *tree_search(struct rb_root *root, u64 offset) -{ -	struct rb_node *prev; -	struct rb_node *ret; -	ret = __tree_search(root, offset, &prev, NULL); -	if (!ret) -		return prev; -	return ret; -} -  /* check to see if two extent_map structs are adjacent and safe to merge */  static int mergable_maps(struct extent_map *prev, struct extent_map *next)  { diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index c02033596f0..6ed434ac037 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -720,13 +720,15 @@ again:  					inode->i_ino, orig_offset);  		BUG_ON(ret);  	} -	fi = btrfs_item_ptr(leaf, path->slots[0], -			   struct btrfs_file_extent_item);  	if (del_nr == 0) { +		fi = btrfs_item_ptr(leaf, path->slots[0], +			   struct btrfs_file_extent_item);  		btrfs_set_file_extent_type(leaf, fi,  					   BTRFS_FILE_EXTENT_REG);  		btrfs_mark_buffer_dirty(leaf);  	} else { +		fi = btrfs_item_ptr(leaf, del_slot - 1, +			   struct btrfs_file_extent_item);  		btrfs_set_file_extent_type(leaf, fi,  					   BTRFS_FILE_EXTENT_REG);  		btrfs_set_file_extent_num_bytes(leaf, fi, @@ -1133,7 +1135,7 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync)  	}  	mutex_lock(&dentry->d_inode->i_mutex);  out: -	return ret > 0 ? EIO : ret; +	return ret > 0 ? -EIO : ret;  }  static const struct vm_operations_struct btrfs_file_vm_ops = { diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b330e27c2d8..4deb280f896 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -483,7 +483,8 @@ again:  		nr_pages_ret = 0;  		/* flag the file so we don't compress in the future */ -		BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; +		if (!btrfs_test_opt(root, FORCE_COMPRESS)) +			BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;  	}  	if (will_compress) {  		*num_added += 1; @@ -1680,24 +1681,6 @@ static int insert_reserved_file_extent(struct btrfs_trans_handle *trans,   * before we start the transaction.  It limits the amount of btree   * reads required while inside the transaction.   */ -static noinline void reada_csum(struct btrfs_root *root, -				struct btrfs_path *path, -				struct btrfs_ordered_extent *ordered_extent) -{ -	struct btrfs_ordered_sum *sum; -	u64 bytenr; - -	sum = list_entry(ordered_extent->list.next, struct btrfs_ordered_sum, -			 list); -	bytenr = sum->sums[0].bytenr; - -	/* -	 * we don't care about the results, the point of this search is -	 * just to get the btree leaves into ram -	 */ -	btrfs_lookup_csum(NULL, root->fs_info->csum_root, path, bytenr, 0); -} -  /* as ordered data IO finishes, this gets called so we can finish   * an ordered extent if the range of bytes in the file it covers are   * fully written. @@ -1708,7 +1691,6 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)  	struct btrfs_trans_handle *trans;  	struct btrfs_ordered_extent *ordered_extent = NULL;  	struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; -	struct btrfs_path *path;  	int compressed = 0;  	int ret; @@ -1716,32 +1698,9 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)  	if (!ret)  		return 0; -	/* -	 * before we join the transaction, try to do some of our IO. -	 * This will limit the amount of IO that we have to do with -	 * the transaction running.  We're unlikely to need to do any -	 * IO if the file extents are new, the disk_i_size checks -	 * covers the most common case. -	 */ -	if (start < BTRFS_I(inode)->disk_i_size) { -		path = btrfs_alloc_path(); -		if (path) { -			ret = btrfs_lookup_file_extent(NULL, root, path, -						       inode->i_ino, -						       start, 0); -			ordered_extent = btrfs_lookup_ordered_extent(inode, -								     start); -			if (!list_empty(&ordered_extent->list)) { -				btrfs_release_path(root, path); -				reada_csum(root, path, ordered_extent); -			} -			btrfs_free_path(path); -		} -	} - -	if (!ordered_extent) -		ordered_extent = btrfs_lookup_ordered_extent(inode, start); +	ordered_extent = btrfs_lookup_ordered_extent(inode, start);  	BUG_ON(!ordered_extent); +  	if (test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags)) {  		BUG_ON(!list_empty(&ordered_extent->list));  		ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent); @@ -3796,12 +3755,6 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)  	if (location.type == BTRFS_INODE_ITEM_KEY) {  		inode = btrfs_iget(dir->i_sb, &location, root); -		if (unlikely(root->clean_orphans) && -		    !(inode->i_sb->s_flags & MS_RDONLY)) { -			down_read(&root->fs_info->cleanup_work_sem); -			btrfs_orphan_cleanup(root); -			up_read(&root->fs_info->cleanup_work_sem); -		}  		return inode;  	} @@ -5799,7 +5752,7 @@ out_fail:  }  static int prealloc_file_range(struct inode *inode, u64 start, u64 end, -			       u64 alloc_hint, int mode) +			u64 alloc_hint, int mode, loff_t actual_len)  {  	struct btrfs_trans_handle *trans;  	struct btrfs_root *root = BTRFS_I(inode)->root; @@ -5808,6 +5761,7 @@ static int prealloc_file_range(struct inode *inode, u64 start, u64 end,  	u64 cur_offset = start;  	u64 num_bytes = end - start;  	int ret = 0; +	u64 i_size;  	while (num_bytes > 0) {  		alloc_size = min(num_bytes, root->fs_info->max_extent); @@ -5845,9 +5799,15 @@ static int prealloc_file_range(struct inode *inode, u64 start, u64 end,  		inode->i_ctime = CURRENT_TIME;  		BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC;  		if (!(mode & FALLOC_FL_KEEP_SIZE) && -		    cur_offset > inode->i_size) { -			i_size_write(inode, cur_offset); -			btrfs_ordered_update_i_size(inode, cur_offset, NULL); +			(actual_len > inode->i_size) && +			(cur_offset > inode->i_size)) { + +			if (cur_offset > actual_len) +				i_size  = actual_len; +			else +				i_size = cur_offset; +			i_size_write(inode, i_size); +			btrfs_ordered_update_i_size(inode, i_size, NULL);  		}  		ret = btrfs_update_inode(trans, root, inode); @@ -5940,7 +5900,7 @@ static long btrfs_fallocate(struct inode *inode, int mode,  		     !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {  			ret = prealloc_file_range(inode,  						  cur_offset, last_byte, -						  alloc_hint, mode); +						alloc_hint, mode, offset+len);  			if (ret < 0) {  				free_extent_map(em);  				break; diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index ed3e4a2ec2c..ab7ab531874 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3764,7 +3764,8 @@ out:  				       BTRFS_DATA_RELOC_TREE_OBJECTID);  		if (IS_ERR(fs_root))  			err = PTR_ERR(fs_root); -		btrfs_orphan_cleanup(fs_root); +		else +			btrfs_orphan_cleanup(fs_root);  	}  	return err;  } diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 3f9b45704fc..8a1ea6e6457 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -66,7 +66,8 @@ enum {  	Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow,  	Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier,  	Opt_ssd, Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl, -	Opt_compress, Opt_notreelog, Opt_ratio, Opt_flushoncommit, +	Opt_compress, Opt_compress_force, Opt_notreelog, Opt_ratio, +	Opt_flushoncommit,  	Opt_discard, Opt_err,  }; @@ -82,6 +83,7 @@ static match_table_t tokens = {  	{Opt_alloc_start, "alloc_start=%s"},  	{Opt_thread_pool, "thread_pool=%d"},  	{Opt_compress, "compress"}, +	{Opt_compress_force, "compress-force"},  	{Opt_ssd, "ssd"},  	{Opt_ssd_spread, "ssd_spread"},  	{Opt_nossd, "nossd"}, @@ -173,6 +175,11 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)  			printk(KERN_INFO "btrfs: use compression\n");  			btrfs_set_opt(info->mount_opt, COMPRESS);  			break; +		case Opt_compress_force: +			printk(KERN_INFO "btrfs: forcing compression\n"); +			btrfs_set_opt(info->mount_opt, FORCE_COMPRESS); +			btrfs_set_opt(info->mount_opt, COMPRESS); +			break;  		case Opt_ssd:  			printk(KERN_INFO "btrfs: use ssd allocation scheme\n");  			btrfs_set_opt(info->mount_opt, SSD); diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 220dad5db01..41ecbb2347f 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1135,7 +1135,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path)  		root->fs_info->avail_metadata_alloc_bits;  	if ((all_avail & BTRFS_BLOCK_GROUP_RAID10) && -	    root->fs_info->fs_devices->rw_devices <= 4) { +	    root->fs_info->fs_devices->num_devices <= 4) {  		printk(KERN_ERR "btrfs: unable to go below four devices "  		       "on raid10\n");  		ret = -EINVAL; @@ -1143,7 +1143,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path)  	}  	if ((all_avail & BTRFS_BLOCK_GROUP_RAID1) && -	    root->fs_info->fs_devices->rw_devices <= 2) { +	    root->fs_info->fs_devices->num_devices <= 2) {  		printk(KERN_ERR "btrfs: unable to go below two "  		       "devices on raid1\n");  		ret = -EINVAL; @@ -1434,8 +1434,8 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)  		return -EINVAL;  	bdev = open_bdev_exclusive(device_path, 0, root->fs_info->bdev_holder); -	if (!bdev) -		return -EIO; +	if (IS_ERR(bdev)) +		return PTR_ERR(bdev);  	if (root->fs_info->fs_devices->seeding) {  		seeding_dev = 1; @@ -2538,6 +2538,11 @@ int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset)  	if (!em)  		return 1; +	if (btrfs_test_opt(root, DEGRADED)) { +		free_extent_map(em); +		return 0; +	} +  	map = (struct map_lookup *)em->bdev;  	for (i = 0; i < map->num_stripes; i++) {  		if (!map->stripes[i].dev->writeable) { diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES index 7b2600b380d..49503d2edc7 100644 --- a/fs/cifs/CHANGES +++ b/fs/cifs/CHANGES @@ -1,3 +1,7 @@ +Version 1.62 +------------ +Add sockopt=TCP_NODELAY mount option. +  Version 1.61  ------------  Fix append problem to Samba servers (files opened with O_APPEND could diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index ac2b24c192f..78c1b86d55f 100644 --- a/fs/cifs/cifsfs.h +++ b/fs/cifs/cifsfs.h @@ -113,5 +113,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);  extern const struct export_operations cifs_export_ops;  #endif /* EXPERIMENTAL */ -#define CIFS_VERSION   "1.61" +#define CIFS_VERSION   "1.62"  #endif				/* _CIFSFS_H */ diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 4b35f7ec058..ed751bb657d 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -149,6 +149,7 @@ struct TCP_Server_Info {  	bool svlocal:1;			/* local server or remote */  	bool noblocksnd;		/* use blocking sendmsg */  	bool noautotune;		/* do not autotune send buf sizes */ +	bool tcp_nodelay;  	atomic_t inFlight;  /* number of requests on the wire to server */  #ifdef CONFIG_CIFS_STATS2  	atomic_t inSend; /* requests trying to send */ diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 3bbcaa716b3..2e9e09ca0e3 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -98,7 +98,7 @@ struct smb_vol {  	bool nostrictsync:1; /* do not force expensive SMBflush on every sync */  	unsigned int rsize;  	unsigned int wsize; -	unsigned int sockopt; +	bool sockopt_tcp_nodelay:1;  	unsigned short int port;  	char *prepath;  }; @@ -1142,9 +1142,11 @@ cifs_parse_mount_options(char *options, const char *devname,  					simple_strtoul(value, &value, 0);  			}  		} else if (strnicmp(data, "sockopt", 5) == 0) { -			if (value && *value) { -				vol->sockopt = -					simple_strtoul(value, &value, 0); +			if (!value || !*value) { +				cERROR(1, ("no socket option specified")); +				continue; +			} else if (strnicmp(value, "TCP_NODELAY", 11) == 0) { +				vol->sockopt_tcp_nodelay = 1;  			}  		} else if (strnicmp(data, "netbiosname", 4) == 0) {  			if (!value || !*value || (*value == ' ')) { @@ -1514,6 +1516,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)  	tcp_ses->noblocksnd = volume_info->noblocksnd;  	tcp_ses->noautotune = volume_info->noautotune; +	tcp_ses->tcp_nodelay = volume_info->sockopt_tcp_nodelay;  	atomic_set(&tcp_ses->inFlight, 0);  	init_waitqueue_head(&tcp_ses->response_q);  	init_waitqueue_head(&tcp_ses->request_q); @@ -1764,6 +1767,7 @@ static int  ipv4_connect(struct TCP_Server_Info *server)  {  	int rc = 0; +	int val;  	bool connected = false;  	__be16 orig_port = 0;  	struct socket *socket = server->ssocket; @@ -1845,6 +1849,14 @@ ipv4_connect(struct TCP_Server_Info *server)  			socket->sk->sk_rcvbuf = 140 * 1024;  	} +	if (server->tcp_nodelay) { +		val = 1; +		rc = kernel_setsockopt(socket, SOL_TCP, TCP_NODELAY, +				(char *)&val, sizeof(val)); +		if (rc) +			cFYI(1, ("set TCP_NODELAY socket option error %d", rc)); +	} +  	 cFYI(1, ("sndbuf %d rcvbuf %d rcvtimeo 0x%lx",  		 socket->sk->sk_sndbuf,  		 socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo)); @@ -1916,6 +1928,7 @@ static int  ipv6_connect(struct TCP_Server_Info *server)  {  	int rc = 0; +	int val;  	bool connected = false;  	__be16 orig_port = 0;  	struct socket *socket = server->ssocket; @@ -1987,6 +2000,15 @@ ipv6_connect(struct TCP_Server_Info *server)  	 */  	socket->sk->sk_rcvtimeo = 7 * HZ;  	socket->sk->sk_sndtimeo = 5 * HZ; + +	if (server->tcp_nodelay) { +		val = 1; +		rc = kernel_setsockopt(socket, SOL_TCP, TCP_NODELAY, +				(char *)&val, sizeof(val)); +		if (rc) +			cFYI(1, ("set TCP_NODELAY socket option error %d", rc)); +	} +  	server->ssocket = socket;  	return rc; diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index cf18ee76559..e3fda978f48 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -1762,8 +1762,18 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)  					CIFS_MOUNT_MAP_SPECIAL_CHR);  	} -	if (!rc) +	if (!rc) {  		rc = inode_setattr(inode, attrs); + +		/* force revalidate when any of these times are set since some +		   of the fs types (eg ext3, fat) do not have fine enough +		   time granularity to match protocol, and we do not have a +		   a way (yet) to query the server fs's time granularity (and +		   whether it rounds times down). +		*/ +		if (!rc && (attrs->ia_valid & (ATTR_MTIME | ATTR_CTIME))) +			cifsInode->time = 0; +	}  out:  	kfree(args);  	kfree(full_path); diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index f84062f9a98..c343b14ba2d 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c @@ -77,6 +77,11 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,  	cFYI(1, ("For %s", name->name)); +	if (parent->d_op && parent->d_op->d_hash) +		parent->d_op->d_hash(parent, name); +	else +		name->hash = full_name_hash(name->name, name->len); +  	dentry = d_lookup(parent, name);  	if (dentry) {  		/* FIXME: check for inode number changes? */ @@ -666,12 +671,11 @@ static int cifs_get_name_from_search_buf(struct qstr *pqst,  					   min(len, max_len), nlt,  					   cifs_sb->mnt_cifs_flags &  						CIFS_MOUNT_MAP_SPECIAL_CHR); +		pqst->len -= nls_nullsize(nlt);  	} else {  		pqst->name = filename;  		pqst->len = len;  	} -	pqst->hash = full_name_hash(pqst->name, pqst->len); -/*	cFYI(1, ("filldir on %s",pqst->name));  */  	return rc;  } diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index 7085a6275c4..aaa9c1c5a5b 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c @@ -223,9 +223,9 @@ static void unicode_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses,  		/* null user mount */  		*bcc_ptr = 0;  		*(bcc_ptr+1) = 0; -	} else { /* 300 should be long enough for any conceivable user name */ +	} else {  		bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->userName, -					  300, nls_cp); +					  MAX_USERNAME_SIZE, nls_cp);  	}  	bcc_ptr += 2 * bytes_ret;  	bcc_ptr += 2; /* account for null termination */ @@ -246,11 +246,10 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses,  	/* copy user */  	if (ses->userName == NULL) {  		/* BB what about null user mounts - check that we do this BB */ -	} else { /* 300 should be long enough for any conceivable user name */ -		strncpy(bcc_ptr, ses->userName, 300); +	} else { +		strncpy(bcc_ptr, ses->userName, MAX_USERNAME_SIZE);  	} -	/* BB improve check for overflow */ -	bcc_ptr += strnlen(ses->userName, 300); +	bcc_ptr += strnlen(ses->userName, MAX_USERNAME_SIZE);  	*bcc_ptr = 0;  	bcc_ptr++; /* account for null termination */ diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index c5c45de1a2e..0ca9ec4a79c 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -301,6 +301,12 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,  	u32 data;  	void __user *dxferp;  	int err; +	int interface_id; + +	if (get_user(interface_id, &sgio32->interface_id)) +		return -EFAULT; +	if (interface_id != 'S') +		return sys_ioctl(fd, cmd, (unsigned long)sgio32);  	if (get_user(iovec_count, &sgio32->iovec_count))  		return -EFAULT; @@ -936,6 +942,7 @@ COMPATIBLE_IOCTL(TCSETSF)  COMPATIBLE_IOCTL(TIOCLINUX)  COMPATIBLE_IOCTL(TIOCSBRK)  COMPATIBLE_IOCTL(TIOCCBRK) +COMPATIBLE_IOCTL(TIOCGSID)  COMPATIBLE_IOCTL(TIOCGICOUNT)  /* Little t */  COMPATIBLE_IOCTL(TIOCGETD) @@ -1038,6 +1045,8 @@ COMPATIBLE_IOCTL(FIOQSIZE)  #ifdef CONFIG_BLOCK  /* loop */  IGNORE_IOCTL(LOOP_CLR_FD) +/* md calls this on random blockdevs */ +IGNORE_IOCTL(RAID_VERSION)  /* SG stuff */  COMPATIBLE_IOCTL(SG_SET_TIMEOUT)  COMPATIBLE_IOCTL(SG_GET_TIMEOUT) diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c index b486169f42b..274ac865bae 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c @@ -160,15 +160,8 @@ static int debugfs_create_by_name(const char *name, mode_t mode,  	 * block. A pointer to that is in the struct vfsmount that we  	 * have around.  	 */ -	if (!parent) { -		if (debugfs_mount && debugfs_mount->mnt_sb) { -			parent = debugfs_mount->mnt_sb->s_root; -		} -	} -	if (!parent) { -		pr_debug("debugfs: Ah! can not find a parent!\n"); -		return -EFAULT; -	} +	if (!parent) +		parent = debugfs_mount->mnt_sb->s_root;  	*dentry = NULL;  	mutex_lock(&parent->d_inode->i_mutex); diff --git a/fs/eventfd.c b/fs/eventfd.c index d26402ff06e..7758cc382ef 100644 --- a/fs/eventfd.c +++ b/fs/eventfd.c @@ -135,26 +135,71 @@ static unsigned int eventfd_poll(struct file *file, poll_table *wait)  	return events;  } -static ssize_t eventfd_read(struct file *file, char __user *buf, size_t count, -			    loff_t *ppos) +static void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt) +{ +	*cnt = (ctx->flags & EFD_SEMAPHORE) ? 1 : ctx->count; +	ctx->count -= *cnt; +} + +/** + * eventfd_ctx_remove_wait_queue - Read the current counter and removes wait queue. + * @ctx: [in] Pointer to eventfd context. + * @wait: [in] Wait queue to be removed. + * @cnt: [out] Pointer to the 64bit conter value. + * + * Returns zero if successful, or the following error codes: + * + * -EAGAIN      : The operation would have blocked. + * + * This is used to atomically remove a wait queue entry from the eventfd wait + * queue head, and read/reset the counter value. + */ +int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait, +				  __u64 *cnt) +{ +	unsigned long flags; + +	spin_lock_irqsave(&ctx->wqh.lock, flags); +	eventfd_ctx_do_read(ctx, cnt); +	__remove_wait_queue(&ctx->wqh, wait); +	if (*cnt != 0 && waitqueue_active(&ctx->wqh)) +		wake_up_locked_poll(&ctx->wqh, POLLOUT); +	spin_unlock_irqrestore(&ctx->wqh.lock, flags); + +	return *cnt != 0 ? 0 : -EAGAIN; +} +EXPORT_SYMBOL_GPL(eventfd_ctx_remove_wait_queue); + +/** + * eventfd_ctx_read - Reads the eventfd counter or wait if it is zero. + * @ctx: [in] Pointer to eventfd context. + * @no_wait: [in] Different from zero if the operation should not block. + * @cnt: [out] Pointer to the 64bit conter value. + * + * Returns zero if successful, or the following error codes: + * + * -EAGAIN      : The operation would have blocked but @no_wait was nonzero. + * -ERESTARTSYS : A signal interrupted the wait operation. + * + * If @no_wait is zero, the function might sleep until the eventfd internal + * counter becomes greater than zero. + */ +ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt)  { -	struct eventfd_ctx *ctx = file->private_data;  	ssize_t res; -	__u64 ucnt = 0;  	DECLARE_WAITQUEUE(wait, current); -	if (count < sizeof(ucnt)) -		return -EINVAL;  	spin_lock_irq(&ctx->wqh.lock); +	*cnt = 0;  	res = -EAGAIN;  	if (ctx->count > 0) -		res = sizeof(ucnt); -	else if (!(file->f_flags & O_NONBLOCK)) { +		res = 0; +	else if (!no_wait) {  		__add_wait_queue(&ctx->wqh, &wait); -		for (res = 0;;) { +		for (;;) {  			set_current_state(TASK_INTERRUPTIBLE);  			if (ctx->count > 0) { -				res = sizeof(ucnt); +				res = 0;  				break;  			}  			if (signal_pending(current)) { @@ -168,18 +213,32 @@ static ssize_t eventfd_read(struct file *file, char __user *buf, size_t count,  		__remove_wait_queue(&ctx->wqh, &wait);  		__set_current_state(TASK_RUNNING);  	} -	if (likely(res > 0)) { -		ucnt = (ctx->flags & EFD_SEMAPHORE) ? 1 : ctx->count; -		ctx->count -= ucnt; +	if (likely(res == 0)) { +		eventfd_ctx_do_read(ctx, cnt);  		if (waitqueue_active(&ctx->wqh))  			wake_up_locked_poll(&ctx->wqh, POLLOUT);  	}  	spin_unlock_irq(&ctx->wqh.lock); -	if (res > 0 && put_user(ucnt, (__u64 __user *) buf)) -		return -EFAULT;  	return res;  } +EXPORT_SYMBOL_GPL(eventfd_ctx_read); + +static ssize_t eventfd_read(struct file *file, char __user *buf, size_t count, +			    loff_t *ppos) +{ +	struct eventfd_ctx *ctx = file->private_data; +	ssize_t res; +	__u64 cnt; + +	if (count < sizeof(cnt)) +		return -EINVAL; +	res = eventfd_ctx_read(ctx, file->f_flags & O_NONBLOCK, &cnt); +	if (res < 0) +		return res; + +	return put_user(cnt, (__u64 __user *) buf) ? -EFAULT : sizeof(cnt); +}  static ssize_t eventfd_write(struct file *file, const char __user *buf, size_t count,  			     loff_t *ppos) diff --git a/fs/exec.c b/fs/exec.c index 632b02e34ec..e95c692ef0e 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -571,6 +571,9 @@ int setup_arg_pages(struct linux_binprm *bprm,  	struct vm_area_struct *prev = NULL;  	unsigned long vm_flags;  	unsigned long stack_base; +	unsigned long stack_size; +	unsigned long stack_expand; +	unsigned long rlim_stack;  #ifdef CONFIG_STACK_GROWSUP  	/* Limit stack size to 1GB */ @@ -627,10 +630,24 @@ int setup_arg_pages(struct linux_binprm *bprm,  			goto out_unlock;  	} +	stack_expand = EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	stack_size = vma->vm_end - vma->vm_start; +	/* +	 * Align this down to a page boundary as expand_stack +	 * will align it up. +	 */ +	rlim_stack = rlimit(RLIMIT_STACK) & PAGE_MASK; +	rlim_stack = min(rlim_stack, stack_size);  #ifdef CONFIG_STACK_GROWSUP -	stack_base = vma->vm_end + EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	if (stack_size + stack_expand > rlim_stack) +		stack_base = vma->vm_start + rlim_stack; +	else +		stack_base = vma->vm_end + stack_expand;  #else -	stack_base = vma->vm_start - EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	if (stack_size + stack_expand > rlim_stack) +		stack_base = vma->vm_end - rlim_stack; +	else +		stack_base = vma->vm_start - stack_expand;  #endif  	ret = expand_stack(vma, stack_base);  	if (ret) @@ -941,9 +958,7 @@ void set_task_comm(struct task_struct *tsk, char *buf)  int flush_old_exec(struct linux_binprm * bprm)  { -	char * name; -	int i, ch, retval; -	char tcomm[sizeof(current->comm)]; +	int retval;  	/*  	 * Make sure we have a private signal table and that @@ -964,6 +979,25 @@ int flush_old_exec(struct linux_binprm * bprm)  	bprm->mm = NULL;		/* We're using it now */ +	current->flags &= ~PF_RANDOMIZE; +	flush_thread(); +	current->personality &= ~bprm->per_clear; + +	return 0; + +out: +	return retval; +} +EXPORT_SYMBOL(flush_old_exec); + +void setup_new_exec(struct linux_binprm * bprm) +{ +	int i, ch; +	char * name; +	char tcomm[sizeof(current->comm)]; + +	arch_pick_mmap_layout(current->mm); +  	/* This is the point of no return */  	current->sas_ss_sp = current->sas_ss_size = 0; @@ -985,9 +1019,6 @@ int flush_old_exec(struct linux_binprm * bprm)  	tcomm[i] = '\0';  	set_task_comm(current, tcomm); -	current->flags &= ~PF_RANDOMIZE; -	flush_thread(); -  	/* Set the new mm task size. We have to do that late because it may  	 * depend on TIF_32BIT which is only updated in flush_thread() on  	 * some architectures like powerpc @@ -1003,8 +1034,6 @@ int flush_old_exec(struct linux_binprm * bprm)  		set_dumpable(current->mm, suid_dumpable);  	} -	current->personality &= ~bprm->per_clear; -  	/*  	 * Flush performance counters when crossing a  	 * security domain: @@ -1019,14 +1048,8 @@ int flush_old_exec(struct linux_binprm * bprm)  	flush_signal_handlers(current, 0);  	flush_old_files(current->files); - -	return 0; - -out: -	return retval;  } - -EXPORT_SYMBOL(flush_old_exec); +EXPORT_SYMBOL(setup_new_exec);  /*   * Prepare credentials and lock ->cred_guard_mutex. diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index af7b62699ea..874d169a193 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -361,14 +361,11 @@ struct ext4_new_group_data {  	   so set the magic i_delalloc_reserve_flag after taking the   	   inode allocation semaphore for */  #define EXT4_GET_BLOCKS_DELALLOC_RESERVE	0x0004 -	/* Call ext4_da_update_reserve_space() after successfully  -	   allocating the blocks */ -#define EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE	0x0008  	/* caller is from the direct IO path, request to creation of an  	unitialized extents if not allocated, split the uninitialized  	extent if blocks has been preallocated already*/ -#define EXT4_GET_BLOCKS_DIO			0x0010 -#define EXT4_GET_BLOCKS_CONVERT			0x0020 +#define EXT4_GET_BLOCKS_DIO			0x0008 +#define EXT4_GET_BLOCKS_CONVERT			0x0010  #define EXT4_GET_BLOCKS_DIO_CREATE_EXT		(EXT4_GET_BLOCKS_DIO|\  					 EXT4_GET_BLOCKS_CREATE_UNINIT_EXT)  	/* Convert extent to initialized after direct IO complete */ @@ -1443,6 +1440,8 @@ extern int ext4_block_truncate_page(handle_t *handle,  extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);  extern qsize_t *ext4_get_reserved_space(struct inode *inode);  extern int flush_aio_dio_completed_IO(struct inode *inode); +extern void ext4_da_update_reserve_space(struct inode *inode, +					int used, int quota_claim);  /* ioctl.c */  extern long ext4_ioctl(struct file *, unsigned int, unsigned long);  extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long); diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 7d7b74e9468..765a4826b11 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3132,7 +3132,19 @@ out:  		unmap_underlying_metadata_blocks(inode->i_sb->s_bdev,  					newblock + max_blocks,  					allocated - max_blocks); +		allocated = max_blocks;  	} + +	/* +	 * If we have done fallocate with the offset that is already +	 * delayed allocated, we would have block reservation +	 * and quota reservation done in the delayed write path. +	 * But fallocate would have already updated quota and block +	 * count for this offset. So cancel these reservation +	 */ +	if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) +		ext4_da_update_reserve_space(inode, allocated, 0); +  map_out:  	set_buffer_mapped(bh_result);  out1: @@ -3368,9 +3380,18 @@ int ext4_ext_get_blocks(handle_t *handle, struct inode *inode,  	/* previous routine could use block we allocated */  	newblock = ext_pblock(&newex);  	allocated = ext4_ext_get_actual_len(&newex); +	if (allocated > max_blocks) +		allocated = max_blocks;  	set_buffer_new(bh_result);  	/* +	 * Update reserved blocks/metadata blocks after successful +	 * block allocation which had been deferred till now. +	 */ +	if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) +		ext4_da_update_reserve_space(inode, allocated, 1); + +	/*  	 * Cache the extent and update transaction to commit on fdatasync only  	 * when it is _not_ an uninitialized extent.  	 */ diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index c818972c830..e11952404e0 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1053,11 +1053,12 @@ static int ext4_calc_metadata_amount(struct inode *inode, sector_t lblock)   * Called with i_data_sem down, which is important since we can call   * ext4_discard_preallocations() from here.   */ -static void ext4_da_update_reserve_space(struct inode *inode, int used) +void ext4_da_update_reserve_space(struct inode *inode, +					int used, int quota_claim)  {  	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);  	struct ext4_inode_info *ei = EXT4_I(inode); -	int mdb_free = 0; +	int mdb_free = 0, allocated_meta_blocks = 0;  	spin_lock(&ei->i_block_reservation_lock);  	if (unlikely(used > ei->i_reserved_data_blocks)) { @@ -1073,6 +1074,7 @@ static void ext4_da_update_reserve_space(struct inode *inode, int used)  	ei->i_reserved_data_blocks -= used;  	used += ei->i_allocated_meta_blocks;  	ei->i_reserved_meta_blocks -= ei->i_allocated_meta_blocks; +	allocated_meta_blocks = ei->i_allocated_meta_blocks;  	ei->i_allocated_meta_blocks = 0;  	percpu_counter_sub(&sbi->s_dirtyblocks_counter, used); @@ -1090,9 +1092,23 @@ static void ext4_da_update_reserve_space(struct inode *inode, int used)  	spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);  	/* Update quota subsystem */ -	vfs_dq_claim_block(inode, used); -	if (mdb_free) -		vfs_dq_release_reservation_block(inode, mdb_free); +	if (quota_claim) { +		vfs_dq_claim_block(inode, used); +		if (mdb_free) +			vfs_dq_release_reservation_block(inode, mdb_free); +	} else { +		/* +		 * We did fallocate with an offset that is already delayed +		 * allocated. So on delayed allocated writeback we should +		 * not update the quota for allocated blocks. But then +		 * converting an fallocate region to initialized region would +		 * have caused a metadata allocation. So claim quota for +		 * that +		 */ +		if (allocated_meta_blocks) +			vfs_dq_claim_block(inode, allocated_meta_blocks); +		vfs_dq_release_reservation_block(inode, mdb_free + used); +	}  	/*  	 * If we have done all the pending block allocations and if @@ -1292,18 +1308,20 @@ int ext4_get_blocks(handle_t *handle, struct inode *inode, sector_t block,  			 */  			EXT4_I(inode)->i_state &= ~EXT4_STATE_EXT_MIGRATE;  		} -	} +		/* +		 * Update reserved blocks/metadata blocks after successful +		 * block allocation which had been deferred till now. We don't +		 * support fallocate for non extent files. So we can update +		 * reserve space here. +		 */ +		if ((retval > 0) && +			(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE)) +			ext4_da_update_reserve_space(inode, retval, 1); +	}  	if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE)  		EXT4_I(inode)->i_delalloc_reserved_flag = 0; -	/* -	 * Update reserved blocks/metadata blocks after successful -	 * block allocation which had been deferred till now. -	 */ -	if ((retval > 0) && (flags & EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE)) -		ext4_da_update_reserve_space(inode, retval); -  	up_write((&EXT4_I(inode)->i_data_sem));  	if (retval > 0 && buffer_mapped(bh)) {  		int ret = check_block_validity(inode, "file system " @@ -1835,24 +1853,12 @@ repeat:  	 * later. Real quota accounting is done at pages writeout  	 * time.  	 */ -	if (vfs_dq_reserve_block(inode, md_needed + 1)) { -		/*  -		 * We tend to badly over-estimate the amount of -		 * metadata blocks which are needed, so if we have -		 * reserved any metadata blocks, try to force out the -		 * inode and see if we have any better luck. -		 */ -		if (md_reserved && retries++ <= 3) -			goto retry; +	if (vfs_dq_reserve_block(inode, md_needed + 1))  		return -EDQUOT; -	}  	if (ext4_claim_free_blocks(sbi, md_needed + 1)) {  		vfs_dq_release_reservation_block(inode, md_needed + 1);  		if (ext4_should_retry_alloc(inode->i_sb, &retries)) { -		retry: -			if (md_reserved) -				write_inode_now(inode, (retries == 3));  			yield();  			goto repeat;  		} @@ -2213,10 +2219,10 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd)  	 * variables are updated after the blocks have been allocated.  	 */  	new.b_state = 0; -	get_blocks_flags = (EXT4_GET_BLOCKS_CREATE | -			    EXT4_GET_BLOCKS_DELALLOC_RESERVE); +	get_blocks_flags = EXT4_GET_BLOCKS_CREATE;  	if (mpd->b_state & (1 << BH_Delay)) -		get_blocks_flags |= EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE; +		get_blocks_flags |= EXT4_GET_BLOCKS_DELALLOC_RESERVE; +  	blks = ext4_get_blocks(handle, mpd->inode, next, max_blocks,  			       &new, get_blocks_flags);  	if (blks < 0) { @@ -3032,7 +3038,7 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,  			       loff_t pos, unsigned len, unsigned flags,  			       struct page **pagep, void **fsdata)  { -	int ret, retries = 0; +	int ret, retries = 0, quota_retries = 0;  	struct page *page;  	pgoff_t index;  	unsigned from, to; @@ -3091,6 +3097,22 @@ retry:  	if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))  		goto retry; + +	if ((ret == -EDQUOT) && +	    EXT4_I(inode)->i_reserved_meta_blocks && +	    (quota_retries++ < 3)) { +		/* +		 * Since we often over-estimate the number of meta +		 * data blocks required, we may sometimes get a +		 * spurios out of quota error even though there would +		 * be enough space once we write the data blocks and +		 * find out how many meta data blocks were _really_ +		 * required.  So try forcing the inode write to see if +		 * that helps. +		 */ +		write_inode_now(inode, (quota_retries == 3)); +		goto retry; +	}  out:  	return ret;  } diff --git a/fs/file_table.c b/fs/file_table.c index 69652c5bd5f..b98404b5438 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -253,6 +253,7 @@ void __fput(struct file *file)  	if (file->f_op && file->f_op->release)  		file->f_op->release(inode, file);  	security_file_free(file); +	ima_file_free(file);  	if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL))  		cdev_put(inode->i_cdev);  	fops_put(file->f_op); diff --git a/fs/fuse/file.c b/fs/fuse/file.c index c18913a777a..a9f5e137f1d 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -828,6 +828,9 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req,  		if (!page)  			break; +		if (mapping_writably_mapped(mapping)) +			flush_dcache_page(page); +  		pagefault_disable();  		tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes);  		pagefault_enable(); diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 6d47379e794..583e823307a 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -541,7 +541,7 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock,  				*ptr++ = cpu_to_be64(bn++);  			break;  		} -	} while (state != ALLOC_DATA); +	} while ((state != ALLOC_DATA) || !dblock);  	ip->i_height = height;  	gfs2_add_inode_blocks(&ip->i_inode, alloced); diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index f455a03a09e..f4266332593 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -769,6 +769,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,  	if (!gl)  		return -ENOMEM; +	atomic_inc(&sdp->sd_glock_disposal);  	gl->gl_flags = 0;  	gl->gl_name = name;  	atomic_set(&gl->gl_ref, 1); @@ -1538,6 +1539,9 @@ void gfs2_gl_hash_clear(struct gfs2_sbd *sdp)  		up_write(&gfs2_umount_flush_sem);  		msleep(10);  	} +	flush_workqueue(glock_workqueue); +	wait_event(sdp->sd_glock_wait, atomic_read(&sdp->sd_glock_disposal) == 0); +	gfs2_dump_lockstate(sdp);  }  void gfs2_glock_finish_truncate(struct gfs2_inode *ip) diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h index 13f0bd22813..c0262faf472 100644 --- a/fs/gfs2/glock.h +++ b/fs/gfs2/glock.h @@ -123,7 +123,7 @@ struct lm_lockops {  	int (*lm_mount) (struct gfs2_sbd *sdp, const char *fsname);   	void (*lm_unmount) (struct gfs2_sbd *sdp);  	void (*lm_withdraw) (struct gfs2_sbd *sdp); -	void (*lm_put_lock) (struct kmem_cache *cachep, void *gl); +	void (*lm_put_lock) (struct kmem_cache *cachep, struct gfs2_glock *gl);  	unsigned int (*lm_lock) (struct gfs2_glock *gl,  				 unsigned int req_state, unsigned int flags);  	void (*lm_cancel) (struct gfs2_glock *gl); diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 4792200978c..bc0ad158e6b 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -544,6 +544,8 @@ struct gfs2_sbd {  	struct gfs2_holder sd_live_gh;  	struct gfs2_glock *sd_rename_gl;  	struct gfs2_glock *sd_trans_gl; +	wait_queue_head_t sd_glock_wait; +	atomic_t sd_glock_disposal;  	/* Inode Stuff */ diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c index 46df988323b..0e5e0e7022e 100644 --- a/fs/gfs2/lock_dlm.c +++ b/fs/gfs2/lock_dlm.c @@ -21,6 +21,7 @@ static void gdlm_ast(void *arg)  {  	struct gfs2_glock *gl = arg;  	unsigned ret = gl->gl_state; +	struct gfs2_sbd *sdp = gl->gl_sbd;  	BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED); @@ -30,6 +31,8 @@ static void gdlm_ast(void *arg)  	switch (gl->gl_lksb.sb_status) {  	case -DLM_EUNLOCK: /* Unlocked, so glock can be freed */  		kmem_cache_free(gfs2_glock_cachep, gl); +		if (atomic_dec_and_test(&sdp->sd_glock_disposal)) +			wake_up(&sdp->sd_glock_wait);  		return;  	case -DLM_ECANCEL: /* Cancel while getting lock */  		ret |= LM_OUT_CANCELED; @@ -164,14 +167,16 @@ static unsigned int gdlm_lock(struct gfs2_glock *gl,  	return LM_OUT_ASYNC;  } -static void gdlm_put_lock(struct kmem_cache *cachep, void *ptr) +static void gdlm_put_lock(struct kmem_cache *cachep, struct gfs2_glock *gl)  { -	struct gfs2_glock *gl = ptr; -	struct lm_lockstruct *ls = &gl->gl_sbd->sd_lockstruct; +	struct gfs2_sbd *sdp = gl->gl_sbd; +	struct lm_lockstruct *ls = &sdp->sd_lockstruct;  	int error;  	if (gl->gl_lksb.sb_lkid == 0) {  		kmem_cache_free(cachep, gl); +		if (atomic_dec_and_test(&sdp->sd_glock_disposal)) +			wake_up(&sdp->sd_glock_wait);  		return;  	} diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index edfee24f363..a86ed638156 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c @@ -82,6 +82,8 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb)  	gfs2_tune_init(&sdp->sd_tune); +	init_waitqueue_head(&sdp->sd_glock_wait); +	atomic_set(&sdp->sd_glock_disposal, 0);  	spin_lock_init(&sdp->sd_statfs_spin);  	spin_lock_init(&sdp->sd_rindex_spin); @@ -723,7 +725,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)  		goto fail;  	} -	error = -EINVAL; +	error = -EUSERS;  	if (!gfs2_jindex_size(sdp)) {  		fs_err(sdp, "no journals!\n");  		goto fail_jindex; @@ -983,9 +985,17 @@ static const match_table_t nolock_tokens = {  	{ Opt_err, NULL },  }; +static void nolock_put_lock(struct kmem_cache *cachep, struct gfs2_glock *gl) +{ +	struct gfs2_sbd *sdp = gl->gl_sbd; +	kmem_cache_free(cachep, gl); +	if (atomic_dec_and_test(&sdp->sd_glock_disposal)) +		wake_up(&sdp->sd_glock_wait); +} +  static const struct lm_lockops nolock_ops = {  	.lm_proto_name = "lock_nolock", -	.lm_put_lock = kmem_cache_free, +	.lm_put_lock = nolock_put_lock,  	.lm_tokens = &nolock_tokens,  }; diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 78f73ca1ef3..84350e1be66 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c @@ -1088,7 +1088,8 @@ static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd)  		error = vfs_follow_link(nd, buf);  		if (buf != array)  			kfree(buf); -	} +	} else +		path_put(&nd->path);  	return ERR_PTR(error);  } diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 0608f490c29..503b842f3ba 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -591,11 +591,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip)  	u64 rgrp_count = ip->i_disksize;  	int error; -	if (do_div(rgrp_count, sizeof(struct gfs2_rindex))) { -		gfs2_consist_inode(ip); -		return -EIO; -	} - +	do_div(rgrp_count, sizeof(struct gfs2_rindex));  	clear_rgrpdi(sdp);  	file_ra_state_init(&ra_state, inode->i_mapping); @@ -915,7 +911,7 @@ void gfs2_rgrp_repolish_clones(struct gfs2_rgrpd *rgd)  struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip)  {  	BUG_ON(ip->i_alloc != NULL); -	ip->i_alloc = kzalloc(sizeof(struct gfs2_alloc), GFP_KERNEL); +	ip->i_alloc = kzalloc(sizeof(struct gfs2_alloc), GFP_NOFS);  	return ip->i_alloc;  } diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index c282ad41f3d..b9dd3da22c0 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c @@ -21,6 +21,7 @@  #include <linux/gfs2_ondisk.h>  #include <linux/crc32.h>  #include <linux/time.h> +#include <linux/wait.h>  #include "gfs2.h"  #include "incore.h" diff --git a/fs/namei.c b/fs/namei.c index 94a5e60779f..d62fdc875f2 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1736,8 +1736,7 @@ do_last:  		if (nd.root.mnt)  			path_put(&nd.root);  		if (!IS_ERR(filp)) { -			error = ima_path_check(&filp->f_path, filp->f_mode & -				       (MAY_READ | MAY_WRITE | MAY_EXEC)); +			error = ima_file_check(filp, acc_mode);  			if (error) {  				fput(filp);  				filp = ERR_PTR(error); @@ -1797,8 +1796,7 @@ ok:  	}  	filp = nameidata_to_filp(&nd);  	if (!IS_ERR(filp)) { -		error = ima_path_check(&filp->f_path, filp->f_mode & -			       (MAY_READ | MAY_WRITE | MAY_EXEC)); +		error = ima_file_check(filp, acc_mode);  		if (error) {  			fput(filp);  			filp = ERR_PTR(error); diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index e1d415e9784..0d289823e85 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -342,6 +342,7 @@ static ssize_t nfs_direct_read_schedule_segment(struct nfs_direct_req *dreq,  		data->res.fattr = &data->fattr;  		data->res.eof = 0;  		data->res.count = bytes; +		nfs_fattr_init(&data->fattr);  		msg.rpc_argp = &data->args;  		msg.rpc_resp = &data->res; @@ -575,6 +576,7 @@ static void nfs_direct_commit_schedule(struct nfs_direct_req *dreq)  	data->res.count = 0;  	data->res.fattr = &data->fattr;  	data->res.verf = &data->verf; +	nfs_fattr_init(&data->fattr);  	NFS_PROTO(data->inode)->commit_setup(data, &msg); @@ -766,6 +768,7 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_direct_req *dreq,  		data->res.fattr = &data->fattr;  		data->res.count = bytes;  		data->res.verf = &data->verf; +		nfs_fattr_init(&data->fattr);  		task_setup_data.task = &data->task;  		task_setup_data.callback_data = data; diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 6b891328f33..63f2071d644 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -486,6 +486,8 @@ static int nfs_release_page(struct page *page, gfp_t gfp)  {  	dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page); +	if (gfp & __GFP_WAIT) +		nfs_wb_page(page->mapping->host, page);  	/* If PagePrivate() is set, then the page is not freeable */  	if (PagePrivate(page))  		return 0; diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c index fa588006588..237874f1af2 100644 --- a/fs/nfs/fscache.c +++ b/fs/nfs/fscache.c @@ -354,12 +354,11 @@ void nfs_fscache_reset_inode_cookie(struct inode *inode)   */  int nfs_fscache_release_page(struct page *page, gfp_t gfp)  { -	struct nfs_inode *nfsi = NFS_I(page->mapping->host); -	struct fscache_cookie *cookie = nfsi->fscache; - -	BUG_ON(!cookie); -  	if (PageFsCache(page)) { +		struct nfs_inode *nfsi = NFS_I(page->mapping->host); +		struct fscache_cookie *cookie = nfsi->fscache; + +		BUG_ON(!cookie);  		dfprintk(FSCACHE, "NFS: fscache releasepage (0x%p/0x%p/0x%p)\n",  			 cookie, page, nfsi); diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index faa091865ad..f141bde7756 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -1261,8 +1261,10 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)  	if (fattr->valid & NFS_ATTR_FATTR_MODE) {  		if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) { +			umode_t newmode = inode->i_mode & S_IFMT; +			newmode |= fattr->mode & S_IALLUGO; +			inode->i_mode = newmode;  			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; -			inode->i_mode = fattr->mode;  		}  	} else if (server->caps & NFS_CAP_MODE)  		invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index 0adefc40cc8..59047f8d7d7 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c @@ -120,7 +120,7 @@ static struct {  	{ .status = MNT3ERR_INVAL,		.errno = -EINVAL,	},  	{ .status = MNT3ERR_NAMETOOLONG,	.errno = -ENAMETOOLONG,	},  	{ .status = MNT3ERR_NOTSUPP,		.errno = -ENOTSUPP,	}, -	{ .status = MNT3ERR_SERVERFAULT,	.errno = -ESERVERFAULT,	}, +	{ .status = MNT3ERR_SERVERFAULT,	.errno = -EREMOTEIO,	},  };  struct mountres { diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index 5e078b222b4..7bc2da8efd4 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -699,7 +699,7 @@ static struct {  	{ NFSERR_BAD_COOKIE,	-EBADCOOKIE	},  	{ NFSERR_NOTSUPP,	-ENOTSUPP	},  	{ NFSERR_TOOSMALL,	-ETOOSMALL	}, -	{ NFSERR_SERVERFAULT,	-ESERVERFAULT	}, +	{ NFSERR_SERVERFAULT,	-EREMOTEIO	},  	{ NFSERR_BADTYPE,	-EBADTYPE	},  	{ NFSERR_JUKEBOX,	-EJUKEBOX	},  	{ -1,			-EIO		} diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 865265bdca0..0c6fda33d66 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -146,6 +146,7 @@ enum {  	NFS_O_RDWR_STATE,		/* OPEN stateid has read/write state */  	NFS_STATE_RECLAIM_REBOOT,	/* OPEN stateid server rebooted */  	NFS_STATE_RECLAIM_NOGRACE,	/* OPEN stateid needs to recover state */ +	NFS_STATE_POSIX_LOCKS,		/* Posix locks are supported */  };  struct nfs4_state { @@ -277,6 +278,7 @@ extern void nfs4_state_set_mode_locked(struct nfs4_state *, fmode_t);  extern void nfs4_schedule_state_recovery(struct nfs_client *);  extern void nfs4_schedule_state_manager(struct nfs_client *);  extern int nfs4_state_mark_reclaim_nograce(struct nfs_client *clp, struct nfs4_state *state); +extern int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state);  extern void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags);  extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp);  extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl); diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 198d51d17c1..375f0fae2c6 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -249,19 +249,15 @@ static int nfs4_handle_exception(const struct nfs_server *server, int errorcode,  			if (state == NULL)  				break;  			nfs4_state_mark_reclaim_nograce(clp, state); -		case -NFS4ERR_STALE_CLIENTID: +			goto do_state_recovery;  		case -NFS4ERR_STALE_STATEID: -		case -NFS4ERR_EXPIRED: -			nfs4_schedule_state_recovery(clp); -			ret = nfs4_wait_clnt_recover(clp); -			if (ret == 0) -				exception->retry = 1; -#if !defined(CONFIG_NFS_V4_1) -			break; -#else /* !defined(CONFIG_NFS_V4_1) */ -			if (!nfs4_has_session(server->nfs_client)) +			if (state == NULL)  				break; -			/* FALLTHROUGH */ +			nfs4_state_mark_reclaim_reboot(clp, state); +		case -NFS4ERR_STALE_CLIENTID: +		case -NFS4ERR_EXPIRED: +			goto do_state_recovery; +#if defined(CONFIG_NFS_V4_1)  		case -NFS4ERR_BADSESSION:  		case -NFS4ERR_BADSLOT:  		case -NFS4ERR_BAD_HIGH_SLOT: @@ -274,7 +270,7 @@ static int nfs4_handle_exception(const struct nfs_server *server, int errorcode,  			nfs4_schedule_state_recovery(clp);  			exception->retry = 1;  			break; -#endif /* !defined(CONFIG_NFS_V4_1) */ +#endif /* defined(CONFIG_NFS_V4_1) */  		case -NFS4ERR_FILE_OPEN:  			if (exception->timeout > HZ) {  				/* We have retried a decent amount, time to @@ -293,6 +289,12 @@ static int nfs4_handle_exception(const struct nfs_server *server, int errorcode,  	}  	/* We failed to handle the error */  	return nfs4_map_errors(ret); +do_state_recovery: +	nfs4_schedule_state_recovery(clp); +	ret = nfs4_wait_clnt_recover(clp); +	if (ret == 0) +		exception->retry = 1; +	return ret;  } @@ -1658,6 +1660,8 @@ static int _nfs4_do_open(struct inode *dir, struct path *path, fmode_t fmode, in  	status = PTR_ERR(state);  	if (IS_ERR(state))  		goto err_opendata_put; +	if ((opendata->o_res.rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) != 0) +		set_bit(NFS_STATE_POSIX_LOCKS, &state->flags);  	nfs4_opendata_put(opendata);  	nfs4_put_state_owner(sp);  	*res = state; @@ -3422,15 +3426,14 @@ _nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,  			if (state == NULL)  				break;  			nfs4_state_mark_reclaim_nograce(clp, state); -		case -NFS4ERR_STALE_CLIENTID: +			goto do_state_recovery;  		case -NFS4ERR_STALE_STATEID: +			if (state == NULL) +				break; +			nfs4_state_mark_reclaim_reboot(clp, state); +		case -NFS4ERR_STALE_CLIENTID:  		case -NFS4ERR_EXPIRED: -			rpc_sleep_on(&clp->cl_rpcwaitq, task, NULL); -			nfs4_schedule_state_recovery(clp); -			if (test_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) == 0) -				rpc_wake_up_queued_task(&clp->cl_rpcwaitq, task); -			task->tk_status = 0; -			return -EAGAIN; +			goto do_state_recovery;  #if defined(CONFIG_NFS_V4_1)  		case -NFS4ERR_BADSESSION:  		case -NFS4ERR_BADSLOT: @@ -3458,6 +3461,13 @@ _nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,  	}  	task->tk_status = nfs4_map_errors(task->tk_status);  	return 0; +do_state_recovery: +	rpc_sleep_on(&clp->cl_rpcwaitq, task, NULL); +	nfs4_schedule_state_recovery(clp); +	if (test_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) == 0) +		rpc_wake_up_queued_task(&clp->cl_rpcwaitq, task); +	task->tk_status = 0; +	return -EAGAIN;  }  static int @@ -4088,6 +4098,28 @@ static const struct rpc_call_ops nfs4_recover_lock_ops = {  	.rpc_release = nfs4_lock_release,  }; +static void nfs4_handle_setlk_error(struct nfs_server *server, struct nfs4_lock_state *lsp, int new_lock_owner, int error) +{ +	struct nfs_client *clp = server->nfs_client; +	struct nfs4_state *state = lsp->ls_state; + +	switch (error) { +	case -NFS4ERR_ADMIN_REVOKED: +	case -NFS4ERR_BAD_STATEID: +	case -NFS4ERR_EXPIRED: +		if (new_lock_owner != 0 || +		   (lsp->ls_flags & NFS_LOCK_INITIALIZED) != 0) +			nfs4_state_mark_reclaim_nograce(clp, state); +		lsp->ls_seqid.flags &= ~NFS_SEQID_CONFIRMED; +		break; +	case -NFS4ERR_STALE_STATEID: +		if (new_lock_owner != 0 || +		    (lsp->ls_flags & NFS_LOCK_INITIALIZED) != 0) +			nfs4_state_mark_reclaim_reboot(clp, state); +		lsp->ls_seqid.flags &= ~NFS_SEQID_CONFIRMED; +	}; +} +  static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *fl, int recovery_type)  {  	struct nfs4_lockdata *data; @@ -4126,6 +4158,9 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f  	ret = nfs4_wait_for_completion_rpc_task(task);  	if (ret == 0) {  		ret = data->rpc_status; +		if (ret) +			nfs4_handle_setlk_error(data->server, data->lsp, +					data->arg.new_lock_owner, ret);  	} else  		data->cancelled = 1;  	rpc_put_task(task); @@ -4181,8 +4216,11 @@ static int _nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock  {  	struct nfs_inode *nfsi = NFS_I(state->inode);  	unsigned char fl_flags = request->fl_flags; -	int status; +	int status = -ENOLCK; +	if ((fl_flags & FL_POSIX) && +			!test_bit(NFS_STATE_POSIX_LOCKS, &state->flags)) +		goto out;  	/* Is this a delegated open? */  	status = nfs4_set_lock_state(state, request);  	if (status != 0) diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 6d263ed79e9..c1e2733f4fa 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -901,7 +901,7 @@ void nfs4_schedule_state_recovery(struct nfs_client *clp)  	nfs4_schedule_state_manager(clp);  } -static int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state) +int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state)  {  	set_bit(NFS_STATE_RECLAIM_REBOOT, &state->flags); diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index e437fd6a819..5cd5184b56d 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -4631,7 +4631,7 @@ static int decode_sequence(struct xdr_stream *xdr,  	 * If the server returns different values for sessionID, slotID or  	 * sequence number, the server is looney tunes.  	 */ -	status = -ESERVERFAULT; +	status = -EREMOTEIO;  	if (memcmp(id.data, res->sr_session->sess_id.data,  		   NFS4_MAX_SESSIONID_LEN)) { @@ -5774,7 +5774,7 @@ static struct {  	{ NFS4ERR_BAD_COOKIE,	-EBADCOOKIE	},  	{ NFS4ERR_NOTSUPP,	-ENOTSUPP	},  	{ NFS4ERR_TOOSMALL,	-ETOOSMALL	}, -	{ NFS4ERR_SERVERFAULT,	-ESERVERFAULT	}, +	{ NFS4ERR_SERVERFAULT,	-EREMOTEIO	},  	{ NFS4ERR_BADTYPE,	-EBADTYPE	},  	{ NFS4ERR_LOCKED,	-EAGAIN		},  	{ NFS4ERR_SYMLINK,	-ELOOP		}, @@ -5801,7 +5801,7 @@ nfs4_stat_to_errno(int stat)  	}  	if (stat <= 10000 || stat > 10100) {  		/* The server is looney tunes. */ -		return -ESERVERFAULT; +		return -EREMOTEIO;  	}  	/* If we cannot translate the error, the recovery routines should  	 * handle it. diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index e2975939126..a12c45b65dd 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c @@ -176,6 +176,12 @@ void nfs_release_request(struct nfs_page *req)  	kref_put(&req->wb_kref, nfs_free_request);  } +static int nfs_wait_bit_uninterruptible(void *word) +{ +	io_schedule(); +	return 0; +} +  /**   * nfs_wait_on_request - Wait for a request to complete.   * @req: request to wait upon. @@ -186,14 +192,9 @@ void nfs_release_request(struct nfs_page *req)  int  nfs_wait_on_request(struct nfs_page *req)  { -	int ret = 0; - -	if (!test_bit(PG_BUSY, &req->wb_flags)) -		goto out; -	ret = out_of_line_wait_on_bit(&req->wb_flags, PG_BUSY, -			nfs_wait_bit_killable, TASK_KILLABLE); -out: -	return ret; +	return wait_on_bit(&req->wb_flags, PG_BUSY, +			nfs_wait_bit_uninterruptible, +			TASK_UNINTERRUPTIBLE);  }  /** diff --git a/fs/nfs/super.c b/fs/nfs/super.c index ce907efc550..f1afee4eea7 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -243,6 +243,7 @@ static int  nfs_show_stats(struct seq_file *, struct vfsmount *);  static int nfs_get_sb(struct file_system_type *, int, const char *, void *, struct vfsmount *);  static int nfs_xdev_get_sb(struct file_system_type *fs_type,  		int flags, const char *dev_name, void *raw_data, struct vfsmount *mnt); +static void nfs_put_super(struct super_block *);  static void nfs_kill_super(struct super_block *);  static int nfs_remount(struct super_block *sb, int *flags, char *raw_data); @@ -266,6 +267,7 @@ static const struct super_operations nfs_sops = {  	.alloc_inode	= nfs_alloc_inode,  	.destroy_inode	= nfs_destroy_inode,  	.write_inode	= nfs_write_inode, +	.put_super	= nfs_put_super,  	.statfs		= nfs_statfs,  	.clear_inode	= nfs_clear_inode,  	.umount_begin	= nfs_umount_begin, @@ -335,6 +337,7 @@ static const struct super_operations nfs4_sops = {  	.alloc_inode	= nfs_alloc_inode,  	.destroy_inode	= nfs_destroy_inode,  	.write_inode	= nfs_write_inode, +	.put_super	= nfs_put_super,  	.statfs		= nfs_statfs,  	.clear_inode	= nfs4_clear_inode,  	.umount_begin	= nfs_umount_begin, @@ -2258,6 +2261,17 @@ error_splat_super:  }  /* + * Ensure that we unregister the bdi before kill_anon_super + * releases the device name + */ +static void nfs_put_super(struct super_block *s) +{ +	struct nfs_server *server = NFS_SB(s); + +	bdi_unregister(&server->backing_dev_info); +} + +/*   * Destroy an NFS2/3 superblock   */  static void nfs_kill_super(struct super_block *s) @@ -2265,7 +2279,6 @@ static void nfs_kill_super(struct super_block *s)  	struct nfs_server *server = NFS_SB(s);  	kill_anon_super(s); -	bdi_unregister(&server->backing_dev_info);  	nfs_fscache_release_super_cookie(s);  	nfs_free_server(server);  } diff --git a/fs/nfs/sysctl.c b/fs/nfs/sysctl.c index 70e1fbbaaea..ad4d2e787b2 100644 --- a/fs/nfs/sysctl.c +++ b/fs/nfs/sysctl.c @@ -15,8 +15,10 @@  #include "callback.h" +#ifdef CONFIG_NFS_V4  static const int nfs_set_port_min = 0;  static const int nfs_set_port_max = 65535; +#endif  static struct ctl_table_header *nfs_callback_sysctl_table;  static ctl_table nfs_cb_sysctls[] = { diff --git a/fs/nfs/write.c b/fs/nfs/write.c index d171696017f..d63d964a039 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1233,7 +1233,7 @@ int nfs_writeback_done(struct rpc_task *task, struct nfs_write_data *data)  #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) -void nfs_commitdata_release(void *data) +static void nfs_commitdata_release(void *data)  {  	struct nfs_write_data *wdata = data; @@ -1541,6 +1541,7 @@ int nfs_wb_page_cancel(struct inode *inode, struct page *page)  			break;  		}  		ret = nfs_wait_on_request(req); +		nfs_release_request(req);  		if (ret < 0)  			goto out;  	} @@ -1597,8 +1598,7 @@ int nfs_migrate_page(struct address_space *mapping, struct page *newpage,  	struct nfs_page *req;  	int ret; -	if (PageFsCache(page)) -		nfs_fscache_release_page(page, GFP_KERNEL); +	nfs_fscache_release_page(page, GFP_KERNEL);  	req = nfs_find_and_lock_request(page);  	ret = PTR_ERR(req); diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index c487810a236..a0c4016413f 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -1316,19 +1316,11 @@ rqst_exp_parent(struct svc_rqst *rqstp, struct path *path)  static struct svc_export *find_fsidzero_export(struct svc_rqst *rqstp)  { -	struct svc_export *exp;  	u32 fsidv[2];  	mk_fsid(FSID_NUM, fsidv, 0, 0, 0, NULL); -	exp = rqst_exp_find(rqstp, FSID_NUM, fsidv); -	/* -	 * We shouldn't have accepting an nfsv4 request at all if we -	 * don't have a pseudoexport!: -	 */ -	if (IS_ERR(exp) && PTR_ERR(exp) == -ENOENT) -		exp = ERR_PTR(-ESERVERFAULT); -	return exp; +	return rqst_exp_find(rqstp, FSID_NUM, fsidv);  }  /* diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index c194793b642..97d79eff6b7 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -752,6 +752,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,  			    flags, current_cred());  	if (IS_ERR(*filp))  		host_err = PTR_ERR(*filp); +	host_err = ima_file_check(*filp, access);  out_nfserr:  	err = nfserrno(host_err);  out: @@ -2127,7 +2128,6 @@ nfsd_permission(struct svc_rqst *rqstp, struct svc_export *exp,  	 */  	path.mnt = exp->ex_path.mnt;  	path.dentry = dentry; -	err = ima_path_check(&path, acc & (MAY_READ | MAY_WRITE | MAY_EXEC));  nfsd_out:  	return err? nfserrno(err) : 0;  } diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 17584c52448..105b508b47a 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -2829,7 +2829,7 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)  		|| sci->sc_seq_request != sci->sc_seq_done);  	spin_unlock(&sci->sc_state_lock); -	if (flag || nilfs_segctor_confirm(sci)) +	if (flag || !nilfs_segctor_confirm(sci))  		nilfs_segctor_write_out(sci);  	WARN_ON(!list_empty(&sci->sc_copied_buffers)); diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 3dae4a13f6e..7e9df11260f 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -599,7 +599,7 @@ bail:  	return ret;  } -/*  +/*   * ocfs2_dio_end_io is called by the dio core when a dio is finished.  We're   * particularly interested in the aio/dio case.  Like the core uses   * i_alloc_sem, we use the rw_lock DLM lock to protect io on one node from @@ -670,7 +670,7 @@ static ssize_t ocfs2_direct_IO(int rw,  	ret = blockdev_direct_IO_no_locking(rw, iocb, inode,  					    inode->i_sb->s_bdev, iov, offset, -					    nr_segs,  +					    nr_segs,  					    ocfs2_direct_IO_get_blocks,  					    ocfs2_dio_end_io); diff --git a/fs/ocfs2/buffer_head_io.c b/fs/ocfs2/buffer_head_io.c index d43d34a1dd3..21c808f752d 100644 --- a/fs/ocfs2/buffer_head_io.c +++ b/fs/ocfs2/buffer_head_io.c @@ -368,7 +368,7 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr,  	}  	ocfs2_metadata_cache_io_unlock(ci); -	mlog(ML_BH_IO, "block=(%llu), nr=(%d), cached=%s, flags=0x%x\n",  +	mlog(ML_BH_IO, "block=(%llu), nr=(%d), cached=%s, flags=0x%x\n",  	     (unsigned long long)block, nr,  	     ((flags & OCFS2_BH_IGNORE_CACHE) || ignore_cache) ? "no" : "yes",  	     flags); diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c index eda5b8bcddd..5c989000670 100644 --- a/fs/ocfs2/cluster/heartbeat.c +++ b/fs/ocfs2/cluster/heartbeat.c @@ -78,7 +78,7 @@ static struct o2hb_callback *hbcall_from_type(enum o2hb_callback_type type);  unsigned int o2hb_dead_threshold = O2HB_DEFAULT_DEAD_THRESHOLD; -/* Only sets a new threshold if there are no active regions.  +/* Only sets a new threshold if there are no active regions.   *   * No locking or otherwise interesting code is required for reading   * o2hb_dead_threshold as it can't change once regions are active and @@ -170,7 +170,7 @@ static void o2hb_write_timeout(struct work_struct *work)  	mlog(ML_ERROR, "Heartbeat write timeout to device %s after %u "  	     "milliseconds\n", reg->hr_dev_name, -	     jiffies_to_msecs(jiffies - reg->hr_last_timeout_start));  +	     jiffies_to_msecs(jiffies - reg->hr_last_timeout_start));  	o2quo_disk_timeout();  } @@ -624,7 +624,7 @@ static int o2hb_check_slot(struct o2hb_region *reg,  	     "seq %llu last %llu changed %u equal %u\n",  	     slot->ds_node_num, (long long)slot->ds_last_generation,  	     le32_to_cpu(hb_block->hb_cksum), -	     (unsigned long long)le64_to_cpu(hb_block->hb_seq),  +	     (unsigned long long)le64_to_cpu(hb_block->hb_seq),  	     (unsigned long long)slot->ds_last_time, slot->ds_changed_samples,  	     slot->ds_equal_samples); diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index 334f231a422..d8d0c65ac03 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c @@ -485,7 +485,7 @@ static void o2net_set_nn_state(struct o2net_node *nn,  	}  	if (was_valid && !valid) { -		printk(KERN_INFO "o2net: no longer connected to " +		printk(KERN_NOTICE "o2net: no longer connected to "  		       SC_NODEF_FMT "\n", SC_NODEF_ARGS(old_sc));  		o2net_complete_nodes_nsw(nn);  	} @@ -493,7 +493,7 @@ static void o2net_set_nn_state(struct o2net_node *nn,  	if (!was_valid && valid) {  		o2quo_conn_up(o2net_num_from_nn(nn));  		cancel_delayed_work(&nn->nn_connect_expired); -		printk(KERN_INFO "o2net: %s " SC_NODEF_FMT "\n", +		printk(KERN_NOTICE "o2net: %s " SC_NODEF_FMT "\n",  		       o2nm_this_node() > sc->sc_node->nd_num ?  		       		"connected to" : "accepted connection from",  		       SC_NODEF_ARGS(sc)); @@ -930,7 +930,7 @@ static void o2net_sendpage(struct o2net_sock_container *sc,  			cond_resched();  			continue;  		} -		mlog(ML_ERROR, "sendpage of size %zu to " SC_NODEF_FMT  +		mlog(ML_ERROR, "sendpage of size %zu to " SC_NODEF_FMT  		     " failed with %zd\n", size, SC_NODEF_ARGS(sc), ret);  		o2net_ensure_shutdown(nn, sc, 0);  		break; @@ -1476,14 +1476,14 @@ static void o2net_idle_timer(unsigned long data)  	do_gettimeofday(&now); -	printk(KERN_INFO "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u " +	printk(KERN_NOTICE "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u "  	     "seconds, shutting it down.\n", SC_NODEF_ARGS(sc),  		     o2net_idle_timeout() / 1000,  		     o2net_idle_timeout() % 1000);  	mlog(ML_NOTICE, "here are some times that might help debug the "  	     "situation: (tmr %ld.%ld now %ld.%ld dr %ld.%ld adv "  	     "%ld.%ld:%ld.%ld func (%08x:%u) %ld.%ld:%ld.%ld)\n", -	     sc->sc_tv_timer.tv_sec, (long) sc->sc_tv_timer.tv_usec,  +	     sc->sc_tv_timer.tv_sec, (long) sc->sc_tv_timer.tv_usec,  	     now.tv_sec, (long) now.tv_usec,  	     sc->sc_tv_data_ready.tv_sec, (long) sc->sc_tv_data_ready.tv_usec,  	     sc->sc_tv_advance_start.tv_sec, diff --git a/fs/ocfs2/cluster/tcp_internal.h b/fs/ocfs2/cluster/tcp_internal.h index 8d58cfe410b..96fa7ebc530 100644 --- a/fs/ocfs2/cluster/tcp_internal.h +++ b/fs/ocfs2/cluster/tcp_internal.h @@ -32,10 +32,10 @@   * on their number */  #define O2NET_QUORUM_DELAY_MS	((o2hb_dead_threshold + 2) * O2HB_REGION_TIMEOUT_MS) -/*  +/*   * This version number represents quite a lot, unfortunately.  It not   * only represents the raw network message protocol on the wire but also - * locking semantics of the file system using the protocol.  It should  + * locking semantics of the file system using the protocol.  It should   * be somewhere else, I'm sure, but right now it isn't.   *   * With version 11, we separate out the filesystem locking portion.  The diff --git a/fs/ocfs2/dlm/dlmapi.h b/fs/ocfs2/dlm/dlmapi.h index b5786a787fa..3cfa114aa39 100644 --- a/fs/ocfs2/dlm/dlmapi.h +++ b/fs/ocfs2/dlm/dlmapi.h @@ -95,7 +95,7 @@ const char *dlm_errname(enum dlm_status err);  		mlog(ML_ERROR, "dlm status = %s\n", dlm_errname((st)));	\  } while (0) -#define DLM_LKSB_UNUSED1           0x01   +#define DLM_LKSB_UNUSED1           0x01  #define DLM_LKSB_PUT_LVB           0x02  #define DLM_LKSB_GET_LVB           0x04  #define DLM_LKSB_UNUSED2           0x08 diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c index 01cf8cc3d28..dccc439fa08 100644 --- a/fs/ocfs2/dlm/dlmast.c +++ b/fs/ocfs2/dlm/dlmast.c @@ -123,7 +123,7 @@ static void __dlm_queue_ast(struct dlm_ctxt *dlm, struct dlm_lock *lock)  		dlm_lock_put(lock);  		/* free up the reserved bast that we are cancelling.  		 * guaranteed that this will not be the last reserved -		 * ast because *both* an ast and a bast were reserved  +		 * ast because *both* an ast and a bast were reserved  		 * to get to this point.  the res->spinlock will not be  		 * taken here */  		dlm_lockres_release_ast(dlm, res); diff --git a/fs/ocfs2/dlm/dlmconvert.c b/fs/ocfs2/dlm/dlmconvert.c index ca96bce50e1..f283bce776b 100644 --- a/fs/ocfs2/dlm/dlmconvert.c +++ b/fs/ocfs2/dlm/dlmconvert.c @@ -396,7 +396,7 @@ static enum dlm_status dlm_send_remote_convert_request(struct dlm_ctxt *dlm,  			/* instead of logging the same network error over  			 * and over, sleep here and wait for the heartbeat  			 * to notice the node is dead.  times out after 5s. */ -			dlm_wait_for_node_death(dlm, res->owner,  +			dlm_wait_for_node_death(dlm, res->owner,  						DLM_NODE_DEATH_WAIT_MAX);  			ret = DLM_RECOVERING;  			mlog(0, "node %u died so returning DLM_RECOVERING " diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index 42b0bad7a61..0cd24cf5439 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c @@ -102,7 +102,7 @@ void __dlm_print_one_lock_resource(struct dlm_lock_resource *res)  	assert_spin_locked(&res->spinlock);  	stringify_lockname(res->lockname.name, res->lockname.len, -			   buf, sizeof(buf) - 1); +			   buf, sizeof(buf));  	printk("lockres: %s, owner=%u, state=%u\n",  	       buf, res->owner, res->state);  	printk("  last used: %lu, refcnt: %u, on purge list: %s\n", diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index 0334000676d..988c9055fd4 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c @@ -816,7 +816,7 @@ static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data,  	}  	/* Once the dlm ctxt is marked as leaving then we don't want -	 * to be put in someone's domain map.  +	 * to be put in someone's domain map.  	 * Also, explicitly disallow joining at certain troublesome  	 * times (ie. during recovery). */  	if (dlm && dlm->dlm_state != DLM_CTXT_LEAVING) { diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c index 437698e9465..73333777267 100644 --- a/fs/ocfs2/dlm/dlmlock.c +++ b/fs/ocfs2/dlm/dlmlock.c @@ -269,7 +269,7 @@ static enum dlm_status dlmlock_remote(struct dlm_ctxt *dlm,  		}  		dlm_revert_pending_lock(res, lock);  		dlm_lock_put(lock); -	} else if (dlm_is_recovery_lock(res->lockname.name,  +	} else if (dlm_is_recovery_lock(res->lockname.name,  					res->lockname.len)) {  		/* special case for the $RECOVERY lock.  		 * there will never be an AST delivered to put diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index 03ccf9a7b1f..a659606dcb9 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -366,7 +366,7 @@ void dlm_hb_event_notify_attached(struct dlm_ctxt *dlm, int idx, int node_up)  	struct dlm_master_list_entry *mle;  	assert_spin_locked(&dlm->spinlock); -	 +  	list_for_each_entry(mle, &dlm->mle_hb_events, hb_events) {  		if (node_up)  			dlm_mle_node_up(dlm, mle, NULL, idx); @@ -833,7 +833,7 @@ lookup:  		__dlm_insert_mle(dlm, mle);  		/* still holding the dlm spinlock, check the recovery map -		 * to see if there are any nodes that still need to be  +		 * to see if there are any nodes that still need to be  		 * considered.  these will not appear in the mle nodemap  		 * but they might own this lockres.  wait on them. */  		bit = find_next_bit(dlm->recovery_map, O2NM_MAX_NODES, 0); @@ -883,7 +883,7 @@ redo_request:  				msleep(500);  			}  			continue; -		}  +		}  		dlm_kick_recovery_thread(dlm);  		msleep(1000); @@ -939,8 +939,8 @@ wait:  		     res->lockname.name, blocked);  		if (++tries > 20) {  			mlog(ML_ERROR, "%s:%.*s: spinning on " -			     "dlm_wait_for_lock_mastery, blocked=%d\n",  -			     dlm->name, res->lockname.len,  +			     "dlm_wait_for_lock_mastery, blocked=%d\n", +			     dlm->name, res->lockname.len,  			     res->lockname.name, blocked);  			dlm_print_one_lock_resource(res);  			dlm_print_one_mle(mle); @@ -1029,7 +1029,7 @@ recheck:  		ret = dlm_restart_lock_mastery(dlm, res, mle, *blocked);  		b = (mle->type == DLM_MLE_BLOCK);  		if ((*blocked && !b) || (!*blocked && b)) { -			mlog(0, "%s:%.*s: status change: old=%d new=%d\n",  +			mlog(0, "%s:%.*s: status change: old=%d new=%d\n",  			     dlm->name, res->lockname.len, res->lockname.name,  			     *blocked, b);  			*blocked = b; @@ -1602,7 +1602,7 @@ send_response:  		}  		mlog(0, "%u is the owner of %.*s, cleaning everyone else\n",  			     dlm->node_num, res->lockname.len, res->lockname.name); -		ret = dlm_dispatch_assert_master(dlm, res, 0, request->node_idx,  +		ret = dlm_dispatch_assert_master(dlm, res, 0, request->node_idx,  						 DLM_ASSERT_MASTER_MLE_CLEANUP);  		if (ret < 0) {  			mlog(ML_ERROR, "failed to dispatch assert master work\n"); @@ -1701,7 +1701,7 @@ again:  		if (r & DLM_ASSERT_RESPONSE_REASSERT) {  			mlog(0, "%.*s: node %u create mles on other " -			     "nodes and requests a re-assert\n",  +			     "nodes and requests a re-assert\n",  			     namelen, lockname, to);  			reassert = 1;  		} @@ -1812,7 +1812,7 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data,  				spin_unlock(&dlm->master_lock);  				spin_unlock(&dlm->spinlock);  				goto done; -			}	 +			}  		}  	}  	spin_unlock(&dlm->master_lock); @@ -1883,7 +1883,7 @@ ok:  		int extra_ref = 0;  		int nn = -1;  		int rr, err = 0; -		 +  		spin_lock(&mle->spinlock);  		if (mle->type == DLM_MLE_BLOCK || mle->type == DLM_MLE_MIGRATION)  			extra_ref = 1; @@ -1891,7 +1891,7 @@ ok:  			/* MASTER mle: if any bits set in the response map  			 * then the calling node needs to re-assert to clear  			 * up nodes that this node contacted */ -			while ((nn = find_next_bit (mle->response_map, O2NM_MAX_NODES,  +			while ((nn = find_next_bit (mle->response_map, O2NM_MAX_NODES,  						    nn+1)) < O2NM_MAX_NODES) {  				if (nn != dlm->node_num && nn != assert->node_idx)  					master_request = 1; @@ -2002,7 +2002,7 @@ kill:  	__dlm_print_one_lock_resource(res);  	spin_unlock(&res->spinlock);  	spin_unlock(&dlm->spinlock); -	*ret_data = (void *)res;  +	*ret_data = (void *)res;  	dlm_put(dlm);  	return -EINVAL;  } @@ -2040,10 +2040,10 @@ int dlm_dispatch_assert_master(struct dlm_ctxt *dlm,  	item->u.am.request_from = request_from;  	item->u.am.flags = flags; -	if (ignore_higher)  -		mlog(0, "IGNORE HIGHER: %.*s\n", res->lockname.len,  +	if (ignore_higher) +		mlog(0, "IGNORE HIGHER: %.*s\n", res->lockname.len,  		     res->lockname.name); -		 +  	spin_lock(&dlm->work_lock);  	list_add_tail(&item->list, &dlm->work_list);  	spin_unlock(&dlm->work_lock); @@ -2133,7 +2133,7 @@ put:   * think that $RECOVERY is currently mastered by a dead node.  If so,   * we wait a short time to allow that node to get notified by its own   * heartbeat stack, then check again.  All $RECOVERY lock resources - * mastered by dead nodes are purged when the hearbeat callback is  + * mastered by dead nodes are purged when the hearbeat callback is   * fired, so we can know for sure that it is safe to continue once   * the node returns a live node or no node.  */  static int dlm_pre_master_reco_lockres(struct dlm_ctxt *dlm, @@ -2174,7 +2174,7 @@ static int dlm_pre_master_reco_lockres(struct dlm_ctxt *dlm,  				ret = -EAGAIN;  			}  			spin_unlock(&dlm->spinlock); -			mlog(0, "%s: reco lock master is %u\n", dlm->name,  +			mlog(0, "%s: reco lock master is %u\n", dlm->name,  			     master);  			break;  		} @@ -2602,7 +2602,7 @@ fail:  			mlog(0, "%s:%.*s: timed out during migration\n",  			     dlm->name, res->lockname.len, res->lockname.name); -			/* avoid hang during shutdown when migrating lockres  +			/* avoid hang during shutdown when migrating lockres  			 * to a node which also goes down */  			if (dlm_is_node_dead(dlm, target)) {  				mlog(0, "%s:%.*s: expected migration " @@ -2738,7 +2738,7 @@ static int dlm_migration_can_proceed(struct dlm_ctxt *dlm,  	can_proceed = !!(res->state & DLM_LOCK_RES_MIGRATING);  	spin_unlock(&res->spinlock); -	/* target has died, so make the caller break out of the  +	/* target has died, so make the caller break out of the  	 * wait_event, but caller must recheck the domain_map */  	spin_lock(&dlm->spinlock);  	if (!test_bit(mig_target, dlm->domain_map)) diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index 2f9e4e19a4f..344bcf90cbf 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c @@ -1050,7 +1050,7 @@ static void dlm_move_reco_locks_to_list(struct dlm_ctxt *dlm,  				if (lock->ml.node == dead_node) {  					mlog(0, "AHA! there was "  					     "a $RECOVERY lock for dead " -					     "node %u (%s)!\n",  +					     "node %u (%s)!\n",  					     dead_node, dlm->name);  					list_del_init(&lock->list);  					dlm_lock_put(lock); @@ -1164,6 +1164,39 @@ static void dlm_init_migratable_lockres(struct dlm_migratable_lockres *mres,  	mres->master = master;  } +static void dlm_prepare_lvb_for_migration(struct dlm_lock *lock, +					  struct dlm_migratable_lockres *mres, +					  int queue) +{ +	if (!lock->lksb) +	       return; + +	/* Ignore lvb in all locks in the blocked list */ +	if (queue == DLM_BLOCKED_LIST) +		return; + +	/* Only consider lvbs in locks with granted EX or PR lock levels */ +	if (lock->ml.type != LKM_EXMODE && lock->ml.type != LKM_PRMODE) +		return; + +	if (dlm_lvb_is_empty(mres->lvb)) { +		memcpy(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN); +		return; +	} + +	/* Ensure the lvb copied for migration matches in other valid locks */ +	if (!memcmp(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN)) +		return; + +	mlog(ML_ERROR, "Mismatched lvb in lock cookie=%u:%llu, name=%.*s, " +	     "node=%u\n", +	     dlm_get_lock_cookie_node(be64_to_cpu(lock->ml.cookie)), +	     dlm_get_lock_cookie_seq(be64_to_cpu(lock->ml.cookie)), +	     lock->lockres->lockname.len, lock->lockres->lockname.name, +	     lock->ml.node); +	dlm_print_one_lock_resource(lock->lockres); +	BUG(); +}  /* returns 1 if this lock fills the network structure,   * 0 otherwise */ @@ -1181,20 +1214,7 @@ static int dlm_add_lock_to_array(struct dlm_lock *lock,  	ml->list = queue;  	if (lock->lksb) {  		ml->flags = lock->lksb->flags; -		/* send our current lvb */ -		if (ml->type == LKM_EXMODE || -		    ml->type == LKM_PRMODE) { -			/* if it is already set, this had better be a PR -			 * and it has to match */ -			if (!dlm_lvb_is_empty(mres->lvb) && -			    (ml->type == LKM_EXMODE || -			     memcmp(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN))) { -				mlog(ML_ERROR, "mismatched lvbs!\n"); -				dlm_print_one_lock_resource(lock->lockres); -				BUG(); -			} -			memcpy(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN); -		} +		dlm_prepare_lvb_for_migration(lock, mres, queue);  	}  	ml->node = lock->ml.node;  	mres->num_locks++; @@ -1730,6 +1750,7 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  	struct dlm_lock *lock = NULL;  	u8 from = O2NM_MAX_NODES;  	unsigned int added = 0; +	__be64 c;  	mlog(0, "running %d locks for this lockres\n", mres->num_locks);  	for (i=0; i<mres->num_locks; i++) { @@ -1777,19 +1798,48 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  			/* lock is always created locally first, and  			 * destroyed locally last.  it must be on the list */  			if (!lock) { -				__be64 c = ml->cookie; -				mlog(ML_ERROR, "could not find local lock " -					       "with cookie %u:%llu!\n", +				c = ml->cookie; +				mlog(ML_ERROR, "Could not find local lock " +					       "with cookie %u:%llu, node %u, " +					       "list %u, flags 0x%x, type %d, " +					       "conv %d, highest blocked %d\n",  				     dlm_get_lock_cookie_node(be64_to_cpu(c)), -				     dlm_get_lock_cookie_seq(be64_to_cpu(c))); +				     dlm_get_lock_cookie_seq(be64_to_cpu(c)), +				     ml->node, ml->list, ml->flags, ml->type, +				     ml->convert_type, ml->highest_blocked); +				__dlm_print_one_lock_resource(res); +				BUG(); +			} + +			if (lock->ml.node != ml->node) { +				c = lock->ml.cookie; +				mlog(ML_ERROR, "Mismatched node# in lock " +				     "cookie %u:%llu, name %.*s, node %u\n", +				     dlm_get_lock_cookie_node(be64_to_cpu(c)), +				     dlm_get_lock_cookie_seq(be64_to_cpu(c)), +				     res->lockname.len, res->lockname.name, +				     lock->ml.node); +				c = ml->cookie; +				mlog(ML_ERROR, "Migrate lock cookie %u:%llu, " +				     "node %u, list %u, flags 0x%x, type %d, " +				     "conv %d, highest blocked %d\n", +				     dlm_get_lock_cookie_node(be64_to_cpu(c)), +				     dlm_get_lock_cookie_seq(be64_to_cpu(c)), +				     ml->node, ml->list, ml->flags, ml->type, +				     ml->convert_type, ml->highest_blocked);  				__dlm_print_one_lock_resource(res);  				BUG();  			} -			BUG_ON(lock->ml.node != ml->node);  			if (tmpq != queue) { -				mlog(0, "lock was on %u instead of %u for %.*s\n", -				     j, ml->list, res->lockname.len, res->lockname.name); +				c = ml->cookie; +				mlog(0, "Lock cookie %u:%llu was on list %u " +				     "instead of list %u for %.*s\n", +				     dlm_get_lock_cookie_node(be64_to_cpu(c)), +				     dlm_get_lock_cookie_seq(be64_to_cpu(c)), +				     j, ml->list, res->lockname.len, +				     res->lockname.name); +				__dlm_print_one_lock_resource(res);  				spin_unlock(&res->spinlock);  				continue;  			} @@ -1839,7 +1889,7 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  				 * the lvb. */  				memcpy(res->lvb, mres->lvb, DLM_LVB_LEN);  			} else { -				/* otherwise, the node is sending its  +				/* otherwise, the node is sending its  				 * most recent valid lvb info */  				BUG_ON(ml->type != LKM_EXMODE &&  				       ml->type != LKM_PRMODE); @@ -1886,7 +1936,7 @@ skip_lvb:  		spin_lock(&res->spinlock);  		list_for_each_entry(lock, queue, list) {  			if (lock->ml.cookie == ml->cookie) { -				__be64 c = lock->ml.cookie; +				c = lock->ml.cookie;  				mlog(ML_ERROR, "%s:%.*s: %u:%llu: lock already "  				     "exists on this lockres!\n", dlm->name,  				     res->lockname.len, res->lockname.name, @@ -2114,7 +2164,7 @@ static void dlm_revalidate_lvb(struct dlm_ctxt *dlm,  	assert_spin_locked(&res->spinlock);  	if (res->owner == dlm->node_num) -		/* if this node owned the lockres, and if the dead node  +		/* if this node owned the lockres, and if the dead node  		 * had an EX when he died, blank out the lvb */  		search_node = dead_node;  	else { @@ -2152,7 +2202,7 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm,  	/* this node is the lockres master:  	 * 1) remove any stale locks for the dead node -	 * 2) if the dead node had an EX when he died, blank out the lvb  +	 * 2) if the dead node had an EX when he died, blank out the lvb  	 */  	assert_spin_locked(&dlm->spinlock);  	assert_spin_locked(&res->spinlock); @@ -2193,7 +2243,12 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm,  		mlog(0, "%s:%.*s: freed %u locks for dead node %u, "  		     "dropping ref from lockres\n", dlm->name,  		     res->lockname.len, res->lockname.name, freed, dead_node); -		BUG_ON(!test_bit(dead_node, res->refmap)); +		if(!test_bit(dead_node, res->refmap)) { +			mlog(ML_ERROR, "%s:%.*s: freed %u locks for dead node %u, " +			     "but ref was not set\n", dlm->name, +			     res->lockname.len, res->lockname.name, freed, dead_node); +			__dlm_print_one_lock_resource(res); +		}  		dlm_lockres_clear_refmap_bit(dead_node, res);  	} else if (test_bit(dead_node, res->refmap)) {  		mlog(0, "%s:%.*s: dead node %u had a ref, but had " @@ -2260,7 +2315,7 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node)  				}  				spin_unlock(&res->spinlock);  				continue; -			}			 +			}  			spin_lock(&res->spinlock);  			/* zero the lvb if necessary */  			dlm_revalidate_lvb(dlm, res, dead_node); @@ -2411,7 +2466,7 @@ static void dlm_reco_unlock_ast(void *astdata, enum dlm_status st)   * this function on each node racing to become the recovery   * master will not stop attempting this until either:   * a) this node gets the EX (and becomes the recovery master), - * or b) dlm->reco.new_master gets set to some nodenum  + * or b) dlm->reco.new_master gets set to some nodenum   * != O2NM_INVALID_NODE_NUM (another node will do the reco).   * so each time a recovery master is needed, the entire cluster   * will sync at this point.  if the new master dies, that will @@ -2424,7 +2479,7 @@ static int dlm_pick_recovery_master(struct dlm_ctxt *dlm)  	mlog(0, "starting recovery of %s at %lu, dead=%u, this=%u\n",  	     dlm->name, jiffies, dlm->reco.dead_node, dlm->node_num); -again:	 +again:  	memset(&lksb, 0, sizeof(lksb));  	ret = dlmlock(dlm, LKM_EXMODE, &lksb, LKM_NOQUEUE|LKM_RECOVERY, @@ -2437,8 +2492,8 @@ again:  	if (ret == DLM_NORMAL) {  		mlog(0, "dlm=%s dlmlock says I got it (this=%u)\n",  		     dlm->name, dlm->node_num); -		 -		/* got the EX lock.  check to see if another node  + +		/* got the EX lock.  check to see if another node  		 * just became the reco master */  		if (dlm_reco_master_ready(dlm)) {  			mlog(0, "%s: got reco EX lock, but %u will " @@ -2451,12 +2506,12 @@ again:  			/* see if recovery was already finished elsewhere */  			spin_lock(&dlm->spinlock);  			if (dlm->reco.dead_node == O2NM_INVALID_NODE_NUM) { -				status = -EINVAL;	 +				status = -EINVAL;  				mlog(0, "%s: got reco EX lock, but "  				     "node got recovered already\n", dlm->name);  				if (dlm->reco.new_master != O2NM_INVALID_NODE_NUM) {  					mlog(ML_ERROR, "%s: new master is %u " -					     "but no dead node!\n",  +					     "but no dead node!\n",  					     dlm->name, dlm->reco.new_master);  					BUG();  				} @@ -2468,7 +2523,7 @@ again:  		 * set the master and send the messages to begin recovery */  		if (!status) {  			mlog(0, "%s: dead=%u, this=%u, sending " -			     "begin_reco now\n", dlm->name,  +			     "begin_reco now\n", dlm->name,  			     dlm->reco.dead_node, dlm->node_num);  			status = dlm_send_begin_reco_message(dlm,  				      dlm->reco.dead_node); @@ -2501,7 +2556,7 @@ again:  		mlog(0, "dlm=%s dlmlock says another node got it (this=%u)\n",  		     dlm->name, dlm->node_num);  		/* another node is master. wait on -		 * reco.new_master != O2NM_INVALID_NODE_NUM  +		 * reco.new_master != O2NM_INVALID_NODE_NUM  		 * for at most one second */  		wait_event_timeout(dlm->dlm_reco_thread_wq,  					 dlm_reco_master_ready(dlm), @@ -2589,7 +2644,13 @@ retry:  			     "begin reco msg (%d)\n", dlm->name, nodenum, ret);  			ret = 0;  		} -		if (ret == -EAGAIN) { + +		/* +		 * Prior to commit aad1b15310b9bcd59fa81ab8f2b1513b59553ea8, +		 * dlm_begin_reco_handler() returned EAGAIN and not -EAGAIN. +		 * We are handling both for compatibility reasons. +		 */ +		if (ret == -EAGAIN || ret == EAGAIN) {  			mlog(0, "%s: trying to start recovery of node "  			     "%u, but node %u is waiting for last recovery "  			     "to complete, backoff for a bit\n", dlm->name, @@ -2599,7 +2660,7 @@ retry:  		}  		if (ret < 0) {  			struct dlm_lock_resource *res; -			/* this is now a serious problem, possibly ENOMEM  +			/* this is now a serious problem, possibly ENOMEM  			 * in the network stack.  must retry */  			mlog_errno(ret);  			mlog(ML_ERROR, "begin reco of dlm %s to node %u " @@ -2612,7 +2673,7 @@ retry:  			} else {  				mlog(ML_ERROR, "recovery lock not found\n");  			} -			/* sleep for a bit in hopes that we can avoid  +			/* sleep for a bit in hopes that we can avoid  			 * another ENOMEM */  			msleep(100);  			goto retry; @@ -2664,7 +2725,7 @@ int dlm_begin_reco_handler(struct o2net_msg *msg, u32 len, void *data,  	}  	if (dlm->reco.dead_node != O2NM_INVALID_NODE_NUM) {  		mlog(ML_NOTICE, "%s: dead_node previously set to %u, " -		     "node %u changing it to %u\n", dlm->name,  +		     "node %u changing it to %u\n", dlm->name,  		     dlm->reco.dead_node, br->node_idx, br->dead_node);  	}  	dlm_set_reco_master(dlm, br->node_idx); @@ -2730,8 +2791,8 @@ stage2:  		if (ret < 0) {  			mlog_errno(ret);  			if (dlm_is_host_down(ret)) { -				/* this has no effect on this recovery  -				 * session, so set the status to zero to  +				/* this has no effect on this recovery +				 * session, so set the status to zero to  				 * finish out the last recovery */  				mlog(ML_ERROR, "node %u went down after this "  				     "node finished recovery.\n", nodenum); @@ -2768,7 +2829,7 @@ int dlm_finalize_reco_handler(struct o2net_msg *msg, u32 len, void *data,  	mlog(0, "%s: node %u finalizing recovery stage%d of "  	     "node %u (%u:%u)\n", dlm->name, fr->node_idx, stage,  	     fr->dead_node, dlm->reco.dead_node, dlm->reco.new_master); -  +  	spin_lock(&dlm->spinlock);  	if (dlm->reco.new_master != fr->node_idx) { diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c index 00f53b2aea7..49e29ecd020 100644 --- a/fs/ocfs2/dlm/dlmunlock.c +++ b/fs/ocfs2/dlm/dlmunlock.c @@ -190,8 +190,8 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,  			actions &= ~(DLM_UNLOCK_REMOVE_LOCK|  				     DLM_UNLOCK_REGRANT_LOCK|  				     DLM_UNLOCK_CLEAR_CONVERT_TYPE); -		} else if (status == DLM_RECOVERING ||  -			   status == DLM_MIGRATING ||  +		} else if (status == DLM_RECOVERING || +			   status == DLM_MIGRATING ||  			   status == DLM_FORWARD) {  			/* must clear the actions because this unlock  			 * is about to be retried.  cannot free or do @@ -661,14 +661,14 @@ retry:  	if (call_ast) {  		mlog(0, "calling unlockast(%p, %d)\n", data, status);  		if (is_master) { -			/* it is possible that there is one last bast  +			/* it is possible that there is one last bast  			 * pending.  make sure it is flushed, then  			 * call the unlockast.  			 * not an issue if this is a mastered remotely,  			 * since this lock has been removed from the  			 * lockres queues and cannot be found. */  			dlm_kick_thread(dlm, NULL); -			wait_event(dlm->ast_wq,  +			wait_event(dlm->ast_wq,  				   dlm_lock_basts_flushed(dlm, lock));  		}  		(*unlockast)(data, status); diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index c5e4a49e3a1..e044019cb3b 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c @@ -875,6 +875,14 @@ static inline void ocfs2_generic_handle_convert_action(struct ocfs2_lock_res *lo  		lockres_or_flags(lockres, OCFS2_LOCK_NEEDS_REFRESH);  	lockres->l_level = lockres->l_requested; + +	/* +	 * We set the OCFS2_LOCK_UPCONVERT_FINISHING flag before clearing +	 * the OCFS2_LOCK_BUSY flag to prevent the dc thread from +	 * downconverting the lock before the upconvert has fully completed. +	 */ +	lockres_or_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING); +  	lockres_clear_flags(lockres, OCFS2_LOCK_BUSY);  	mlog_exit_void(); @@ -907,8 +915,6 @@ static int ocfs2_generic_handle_bast(struct ocfs2_lock_res *lockres,  	assert_spin_locked(&lockres->l_lock); -	lockres_or_flags(lockres, OCFS2_LOCK_BLOCKED); -  	if (level > lockres->l_blocking) {  		/* only schedule a downconvert if we haven't already scheduled  		 * one that goes low enough to satisfy the level we're @@ -921,6 +927,9 @@ static int ocfs2_generic_handle_bast(struct ocfs2_lock_res *lockres,  		lockres->l_blocking = level;  	} +	if (needs_downconvert) +		lockres_or_flags(lockres, OCFS2_LOCK_BLOCKED); +  	mlog_exit(needs_downconvert);  	return needs_downconvert;  } @@ -1133,6 +1142,7 @@ static inline void ocfs2_recover_from_dlm_error(struct ocfs2_lock_res *lockres,  	mlog_entry_void();  	spin_lock_irqsave(&lockres->l_lock, flags);  	lockres_clear_flags(lockres, OCFS2_LOCK_BUSY); +	lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING);  	if (convert)  		lockres->l_action = OCFS2_AST_INVALID;  	else @@ -1323,13 +1333,13 @@ static int __ocfs2_cluster_lock(struct ocfs2_super *osb,  again:  	wait = 0; +	spin_lock_irqsave(&lockres->l_lock, flags); +  	if (catch_signals && signal_pending(current)) {  		ret = -ERESTARTSYS; -		goto out; +		goto unlock;  	} -	spin_lock_irqsave(&lockres->l_lock, flags); -  	mlog_bug_on_msg(lockres->l_flags & OCFS2_LOCK_FREEING,  			"Cluster lock called on freeing lockres %s! flags "  			"0x%lx\n", lockres->l_name, lockres->l_flags); @@ -1346,6 +1356,25 @@ again:  		goto unlock;  	} +	if (lockres->l_flags & OCFS2_LOCK_UPCONVERT_FINISHING) { +		/* +		 * We've upconverted. If the lock now has a level we can +		 * work with, we take it. If, however, the lock is not at the +		 * required level, we go thru the full cycle. One way this could +		 * happen is if a process requesting an upconvert to PR is +		 * closely followed by another requesting upconvert to an EX. +		 * If the process requesting EX lands here, we want it to +		 * continue attempting to upconvert and let the process +		 * requesting PR take the lock. +		 * If multiple processes request upconvert to PR, the first one +		 * here will take the lock. The others will have to go thru the +		 * OCFS2_LOCK_BLOCKED check to ensure that there is no pending +		 * downconvert request. +		 */ +		if (level <= lockres->l_level) +			goto update_holders; +	} +  	if (lockres->l_flags & OCFS2_LOCK_BLOCKED &&  	    !ocfs2_may_continue_on_blocked_lock(lockres, level)) {  		/* is the lock is currently blocked on behalf of @@ -1416,11 +1445,14 @@ again:  		goto again;  	} +update_holders:  	/* Ok, if we get here then we're good to go. */  	ocfs2_inc_holders(lockres, level);  	ret = 0;  unlock: +	lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING); +  	spin_unlock_irqrestore(&lockres->l_lock, flags);  out:  	/* @@ -3155,7 +3187,7 @@ out:  /* Mark the lockres as being dropped. It will no longer be   * queued if blocking, but we still may have to wait on it   * being dequeued from the downconvert thread before we can consider - * it safe to drop.  + * it safe to drop.   *   * You can *not* attempt to call cluster_lock on this lockres anymore. */  void ocfs2_mark_lockres_freeing(struct ocfs2_lock_res *lockres) @@ -3352,6 +3384,7 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb,  	unsigned long flags;  	int blocking;  	int new_level; +	int level;  	int ret = 0;  	int set_lvb = 0;  	unsigned int gen; @@ -3360,9 +3393,17 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb,  	spin_lock_irqsave(&lockres->l_lock, flags); -	BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED)); -  recheck: +	/* +	 * Is it still blocking? If not, we have no more work to do. +	 */ +	if (!(lockres->l_flags & OCFS2_LOCK_BLOCKED)) { +		BUG_ON(lockres->l_blocking != DLM_LOCK_NL); +		spin_unlock_irqrestore(&lockres->l_lock, flags); +		ret = 0; +		goto leave; +	} +  	if (lockres->l_flags & OCFS2_LOCK_BUSY) {  		/* XXX  		 * This is a *big* race.  The OCFS2_LOCK_PENDING flag @@ -3401,6 +3442,31 @@ recheck:  		goto leave;  	} +	/* +	 * This prevents livelocks. OCFS2_LOCK_UPCONVERT_FINISHING flag is +	 * set when the ast is received for an upconvert just before the +	 * OCFS2_LOCK_BUSY flag is cleared. Now if the fs received a bast +	 * on the heels of the ast, we want to delay the downconvert just +	 * enough to allow the up requestor to do its task. Because this +	 * lock is in the blocked queue, the lock will be downconverted +	 * as soon as the requestor is done with the lock. +	 */ +	if (lockres->l_flags & OCFS2_LOCK_UPCONVERT_FINISHING) +		goto leave_requeue; + +	/* +	 * How can we block and yet be at NL?  We were trying to upconvert +	 * from NL and got canceled.  The code comes back here, and now +	 * we notice and clear BLOCKING. +	 */ +	if (lockres->l_level == DLM_LOCK_NL) { +		BUG_ON(lockres->l_ex_holders || lockres->l_ro_holders); +		lockres->l_blocking = DLM_LOCK_NL; +		lockres_clear_flags(lockres, OCFS2_LOCK_BLOCKED); +		spin_unlock_irqrestore(&lockres->l_lock, flags); +		goto leave; +	} +  	/* if we're blocking an exclusive and we have *any* holders,  	 * then requeue. */  	if ((lockres->l_blocking == DLM_LOCK_EX) @@ -3438,6 +3504,7 @@ recheck:  	 * may sleep, so we save off a copy of what we're blocking as  	 * it may change while we're not holding the spin lock. */  	blocking = lockres->l_blocking; +	level = lockres->l_level;  	spin_unlock_irqrestore(&lockres->l_lock, flags);  	ctl->unblock_action = lockres->l_ops->downconvert_worker(lockres, blocking); @@ -3446,7 +3513,7 @@ recheck:  		goto leave;  	spin_lock_irqsave(&lockres->l_lock, flags); -	if (blocking != lockres->l_blocking) { +	if ((blocking != lockres->l_blocking) || (level != lockres->l_level)) {  		/* If this changed underneath us, then we can't drop  		 * it just yet. */  		goto recheck; diff --git a/fs/ocfs2/export.c b/fs/ocfs2/export.c index 15713cbb865..19ad145d2af 100644 --- a/fs/ocfs2/export.c +++ b/fs/ocfs2/export.c @@ -239,7 +239,7 @@ static int ocfs2_encode_fh(struct dentry *dentry, u32 *fh_in, int *max_len,  		mlog(0, "Encoding parent: blkno: %llu, generation: %u\n",  		     (unsigned long long)blkno, generation);  	} -	 +  	*max_len = len;  bail: diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c index d35a27f4523..5328529e7fd 100644 --- a/fs/ocfs2/extent_map.c +++ b/fs/ocfs2/extent_map.c @@ -192,7 +192,7 @@ static int ocfs2_try_to_merge_extent_map(struct ocfs2_extent_map_item *emi,  		emi->ei_clusters += ins->ei_clusters;  		return 1;  	} else if ((ins->ei_phys + ins->ei_clusters) == emi->ei_phys && -		   (ins->ei_cpos + ins->ei_clusters) == emi->ei_phys && +		   (ins->ei_cpos + ins->ei_clusters) == emi->ei_cpos &&  		   ins->ei_flags == emi->ei_flags) {  		emi->ei_phys = ins->ei_phys;  		emi->ei_cpos = ins->ei_cpos; diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 06ccf6a86d3..558ce031242 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -749,7 +749,7 @@ static int ocfs2_write_zero_page(struct inode *inode,  	int ret;  	offset = (size & (PAGE_CACHE_SIZE-1)); /* Within page */ -	/* ugh.  in prepare/commit_write, if from==to==start of block, we  +	/* ugh.  in prepare/commit_write, if from==to==start of block, we  	** skip the prepare.  make sure we never send an offset for the start  	** of a block  	*/ @@ -1779,7 +1779,7 @@ static int ocfs2_prepare_inode_for_write(struct dentry *dentry,  	struct inode *inode = dentry->d_inode;  	loff_t saved_pos, end; -	/*  +	/*  	 * We start with a read level meta lock and only jump to an ex  	 * if we need to make modifications here.  	 */ @@ -2013,8 +2013,8 @@ out_dio:  	/* buffered aio wouldn't have proper lock coverage today */  	BUG_ON(ret == -EIOCBQUEUED && !(file->f_flags & O_DIRECT)); -	if ((file->f_flags & O_DSYNC && !direct_io) || IS_SYNC(inode) || -	    (file->f_flags & O_DIRECT && has_refcount)) { +	if (((file->f_flags & O_DSYNC) && !direct_io) || IS_SYNC(inode) || +	    ((file->f_flags & O_DIRECT) && has_refcount)) {  		ret = filemap_fdatawrite_range(file->f_mapping, pos,  					       pos + count - 1);  		if (ret < 0) @@ -2033,7 +2033,7 @@ out_dio:  						      pos + count - 1);  	} -	/*  +	/*  	 * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io  	 * function pointer which is called when o_direct io completes so that  	 * it can unlock our rw lock.  (it's the clustered equivalent of @@ -2198,7 +2198,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,  		goto bail;  	} -	/*  +	/*  	 * buffered reads protect themselves in ->readpage().  O_DIRECT reads  	 * need locks to protect pending reads from racing with truncate.  	 */ @@ -2220,10 +2220,10 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,  	 * We're fine letting folks race truncates and extending  	 * writes with read across the cluster, just like they can  	 * locally. Hence no rw_lock during read. -	 *  +	 *  	 * Take and drop the meta data lock to update inode fields  	 * like i_size. This allows the checks down below -	 * generic_file_aio_read() a chance of actually working.  +	 * generic_file_aio_read() a chance of actually working.  	 */  	ret = ocfs2_inode_lock_atime(inode, filp->f_vfsmnt, &lock_level);  	if (ret < 0) { @@ -2248,7 +2248,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,  bail:  	if (have_alloc_sem)  		up_read(&inode->i_alloc_sem); -	if (rw_level != -1)  +	if (rw_level != -1)  		ocfs2_rw_unlock(inode, rw_level);  	mlog_exit(ret); diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index 0297fb8982b..88459bdd1ff 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c @@ -475,7 +475,7 @@ static int ocfs2_read_locked_inode(struct inode *inode,  	if (args->fi_flags & OCFS2_FI_FLAG_ORPHAN_RECOVERY) {  		status = ocfs2_try_open_lock(inode, 0);  		if (status) { -			make_bad_inode(inode);	 +			make_bad_inode(inode);  			return status;  		}  	} @@ -684,7 +684,7 @@ bail:  	return status;  } -/*  +/*   * Serialize with orphan dir recovery. If the process doing   * recovery on this orphan dir does an iget() with the dir   * i_mutex held, we'll deadlock here. Instead we detect this diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c index 31fbb061951..7d9d9c132ce 100644 --- a/fs/ocfs2/ioctl.c +++ b/fs/ocfs2/ioctl.c @@ -7,6 +7,7 @@  #include <linux/fs.h>  #include <linux/mount.h> +#include <linux/compat.h>  #define MLOG_MASK_PREFIX ML_INODE  #include <cluster/masklog.h> @@ -181,6 +182,10 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)  #ifdef CONFIG_COMPAT  long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg)  { +	bool preserve; +	struct reflink_arguments args; +	struct inode *inode = file->f_path.dentry->d_inode; +  	switch (cmd) {  	case OCFS2_IOC32_GETFLAGS:  		cmd = OCFS2_IOC_GETFLAGS; @@ -195,8 +200,15 @@ long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg)  	case OCFS2_IOC_GROUP_EXTEND:  	case OCFS2_IOC_GROUP_ADD:  	case OCFS2_IOC_GROUP_ADD64: -	case OCFS2_IOC_REFLINK:  		break; +	case OCFS2_IOC_REFLINK: +		if (copy_from_user(&args, (struct reflink_arguments *)arg, +				   sizeof(args))) +			return -EFAULT; +		preserve = (args.preserve != 0); + +		return ocfs2_reflink_ioctl(inode, compat_ptr(args.old_path), +					   compat_ptr(args.new_path), preserve);  	default:  		return -ENOIOCTLCMD;  	} diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index bf34c491ae9..9336c60e3a3 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c @@ -2034,7 +2034,7 @@ static int ocfs2_queue_orphans(struct ocfs2_super *osb,  		status = -ENOENT;  		mlog_errno(status);  		return status; -	}	 +	}  	mutex_lock(&orphan_dir_inode->i_mutex);  	status = ocfs2_inode_lock(orphan_dir_inode, NULL, 0); diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 9362eea7424..740f448041e 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h @@ -136,6 +136,10 @@ enum ocfs2_unlock_action {  #define OCFS2_LOCK_PENDING       (0x00000400) /* This lockres is pending a  						 call to dlm_lock.  Only  						 exists with BUSY set. */ +#define OCFS2_LOCK_UPCONVERT_FINISHING (0x00000800) /* blocks the dc thread +						     * from downconverting +						     * before the upconvert +						     * has completed */  struct ocfs2_lock_res_ops; diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h index 1a1a679e51b..7638a38c32b 100644 --- a/fs/ocfs2/ocfs2_fs.h +++ b/fs/ocfs2/ocfs2_fs.h @@ -1417,9 +1417,16 @@ static inline int ocfs2_fast_symlink_chars(int blocksize)  	return blocksize - offsetof(struct ocfs2_dinode, id2.i_symlink);  } -static inline int ocfs2_max_inline_data(int blocksize) +static inline int ocfs2_max_inline_data_with_xattr(int blocksize, +						   struct ocfs2_dinode *di)  { -	return blocksize - offsetof(struct ocfs2_dinode, id2.i_data.id_data); +	if (di && (di->i_dyn_features & OCFS2_INLINE_XATTR_FL)) +		return blocksize - +			offsetof(struct ocfs2_dinode, id2.i_data.id_data) - +			di->i_xattr_inline_size; +	else +		return blocksize - +			offsetof(struct ocfs2_dinode, id2.i_data.id_data);  }  static inline int ocfs2_extent_recs_per_inode(int blocksize) diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 74db2be75dd..8ae65c9c020 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c @@ -2945,7 +2945,7 @@ static int ocfs2_duplicate_clusters_by_page(handle_t *handle,  	while (offset < end) {  		page_index = offset >> PAGE_CACHE_SHIFT; -		map_end = (page_index + 1) << PAGE_CACHE_SHIFT; +		map_end = ((loff_t)page_index + 1) << PAGE_CACHE_SHIFT;  		if (map_end > end)  			map_end = end; @@ -2957,8 +2957,12 @@ static int ocfs2_duplicate_clusters_by_page(handle_t *handle,  		page = grab_cache_page(mapping, page_index); -		/* This page can't be dirtied before we CoW it out. */ -		BUG_ON(PageDirty(page)); +		/* +		 * In case PAGE_CACHE_SIZE <= CLUSTER_SIZE, This page +		 * can't be dirtied before we CoW it out. +		 */ +		if (PAGE_CACHE_SIZE <= OCFS2_SB(sb)->s_clustersize) +			BUG_ON(PageDirty(page));  		if (!PageUptodate(page)) {  			ret = block_read_full_page(page, ocfs2_get_block); @@ -3170,7 +3174,7 @@ static int ocfs2_cow_sync_writeback(struct super_block *sb,  	while (offset < end) {  		page_index = offset >> PAGE_CACHE_SHIFT; -		map_end = (page_index + 1) << PAGE_CACHE_SHIFT; +		map_end = ((loff_t)page_index + 1) << PAGE_CACHE_SHIFT;  		if (map_end > end)  			map_end = end; diff --git a/fs/ocfs2/stack_o2cb.c b/fs/ocfs2/stack_o2cb.c index e49c4105026..3038c92af49 100644 --- a/fs/ocfs2/stack_o2cb.c +++ b/fs/ocfs2/stack_o2cb.c @@ -277,7 +277,7 @@ static int o2cb_cluster_connect(struct ocfs2_cluster_connection *conn)  	u32 dlm_key;  	struct dlm_ctxt *dlm;  	struct o2dlm_private *priv; -	struct dlm_protocol_version dlm_version; +	struct dlm_protocol_version fs_version;  	BUG_ON(conn == NULL);  	BUG_ON(o2cb_stack.sp_proto == NULL); @@ -304,18 +304,18 @@ static int o2cb_cluster_connect(struct ocfs2_cluster_connection *conn)  	/* used by the dlm code to make message headers unique, each  	 * node in this domain must agree on this. */  	dlm_key = crc32_le(0, conn->cc_name, conn->cc_namelen); -	dlm_version.pv_major = conn->cc_version.pv_major; -	dlm_version.pv_minor = conn->cc_version.pv_minor; +	fs_version.pv_major = conn->cc_version.pv_major; +	fs_version.pv_minor = conn->cc_version.pv_minor; -	dlm = dlm_register_domain(conn->cc_name, dlm_key, &dlm_version); +	dlm = dlm_register_domain(conn->cc_name, dlm_key, &fs_version);  	if (IS_ERR(dlm)) {  		rc = PTR_ERR(dlm);  		mlog_errno(rc);  		goto out_free;  	} -	conn->cc_version.pv_major = dlm_version.pv_major; -	conn->cc_version.pv_minor = dlm_version.pv_minor; +	conn->cc_version.pv_major = fs_version.pv_major; +	conn->cc_version.pv_minor = fs_version.pv_minor;  	conn->cc_lockspace = dlm;  	dlm_register_eviction_cb(dlm, &priv->op_eviction_cb); diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 26069917a9f..755cd49a5ef 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -1062,7 +1062,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)  				     "file system, but write access is "  				     "unavailable.\n");  			else -				mlog_errno(status);			 +				mlog_errno(status);  			goto read_super_error;  		} diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c index 49b133ccbf1..32499d213fc 100644 --- a/fs/ocfs2/symlink.c +++ b/fs/ocfs2/symlink.c @@ -137,20 +137,20 @@ static void *ocfs2_fast_follow_link(struct dentry *dentry,  	}  	memcpy(link, target, len); -	nd_set_link(nd, link);  bail: +	nd_set_link(nd, status ? ERR_PTR(status) : link);  	brelse(bh);  	mlog_exit(status); -	return status ? ERR_PTR(status) : link; +	return NULL;  }  static void ocfs2_fast_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)  { -	char *link = cookie; - -	kfree(link); +	char *link = nd_get_link(nd); +	if (!IS_ERR(link)) +		kfree(link);  }  const struct inode_operations ocfs2_symlink_inode_operations = { diff --git a/fs/ocfs2/uptodate.c b/fs/ocfs2/uptodate.c index c61369342a2..a0a120e82b9 100644 --- a/fs/ocfs2/uptodate.c +++ b/fs/ocfs2/uptodate.c @@ -267,8 +267,8 @@ static int ocfs2_buffer_cached(struct ocfs2_caching_info *ci,  }  /* Warning: even if it returns true, this does *not* guarantee that - * the block is stored in our inode metadata cache.  - *  + * the block is stored in our inode metadata cache. + *   * This can be called under lock_buffer()   */  int ocfs2_buffer_uptodate(struct ocfs2_caching_info *ci, diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 9087b10209e..2df0f5c7c60 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -1497,9 +1497,11 @@ struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key)  	args.objectid = key->on_disk_key.k_objectid;  	args.dirid = key->on_disk_key.k_dir_id; +	reiserfs_write_unlock(s);  	inode = iget5_locked(s, key->on_disk_key.k_objectid,  			     reiserfs_find_actor, reiserfs_init_locked_inode,  			     (void *)(&args)); +	reiserfs_write_lock(s);  	if (!inode)  		return ERR_PTR(-ENOMEM); diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index 83ac4d3b3cb..ba98546fabb 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c @@ -2913,7 +2913,9 @@ int journal_init(struct super_block *sb, const char *j_dev_name,  	journal->j_mount_id = 10;  	journal->j_state = 0;  	atomic_set(&(journal->j_jlock), 0); +	reiserfs_write_unlock(sb);  	journal->j_cnode_free_list = allocate_cnodes(num_cnodes); +	reiserfs_write_lock(sb);  	journal->j_cnode_free_orig = journal->j_cnode_free_list;  	journal->j_cnode_free = journal->j_cnode_free_list ? num_cnodes : 0;  	journal->j_cnode_used = 0; diff --git a/fs/romfs/super.c b/fs/romfs/super.c index c117fa80d1e..42d21354689 100644 --- a/fs/romfs/super.c +++ b/fs/romfs/super.c @@ -544,6 +544,7 @@ error:  error_rsb_inval:  	ret = -EINVAL;  error_rsb: +	kfree(rsb);  	return ret;  } diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index 220b758523a..6a06a1d1ea7 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c @@ -81,24 +81,23 @@ int sysfs_sd_setattr(struct sysfs_dirent *sd, struct iattr * iattr)  		if (!sd_attrs)  			return -ENOMEM;  		sd->s_iattr = sd_attrs; -	} else { -		/* attributes were changed at least once in past */ -		iattrs = &sd_attrs->ia_iattr; +	} +	/* attributes were changed at least once in past */ +	iattrs = &sd_attrs->ia_iattr; -		if (ia_valid & ATTR_UID) -			iattrs->ia_uid = iattr->ia_uid; -		if (ia_valid & ATTR_GID) -			iattrs->ia_gid = iattr->ia_gid; -		if (ia_valid & ATTR_ATIME) -			iattrs->ia_atime = iattr->ia_atime; -		if (ia_valid & ATTR_MTIME) -			iattrs->ia_mtime = iattr->ia_mtime; -		if (ia_valid & ATTR_CTIME) -			iattrs->ia_ctime = iattr->ia_ctime; -		if (ia_valid & ATTR_MODE) { -			umode_t mode = iattr->ia_mode; -			iattrs->ia_mode = sd->s_mode = mode; -		} +	if (ia_valid & ATTR_UID) +		iattrs->ia_uid = iattr->ia_uid; +	if (ia_valid & ATTR_GID) +		iattrs->ia_gid = iattr->ia_gid; +	if (ia_valid & ATTR_ATIME) +		iattrs->ia_atime = iattr->ia_atime; +	if (ia_valid & ATTR_MTIME) +		iattrs->ia_mtime = iattr->ia_mtime; +	if (ia_valid & ATTR_CTIME) +		iattrs->ia_ctime = iattr->ia_ctime; +	if (ia_valid & ATTR_MODE) { +		umode_t mode = iattr->ia_mode; +		iattrs->ia_mode = sd->s_mode = mode;  	}  	return 0;  } diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index bc4fdf27bd2..c5ba1636613 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h @@ -85,7 +85,7 @@ struct drm_mode_modeinfo {  	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;  	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan; -	__u32 vrefresh; /* vertical refresh * 1000 */ +	__u32 vrefresh;  	__u32 flags;  	__u32 type; diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h index 1e67c441ea8..f745948b61e 100644 --- a/include/drm/nouveau_drm.h +++ b/include/drm/nouveau_drm.h @@ -77,6 +77,7 @@ struct drm_nouveau_gpuobj_free {  #define NOUVEAU_GETPARAM_PCI_PHYSICAL    10  #define NOUVEAU_GETPARAM_CHIPSET_ID      11  #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12 +#define NOUVEAU_GETPARAM_GRAPH_UNITS     13  struct drm_nouveau_getparam {  	uint64_t param;  	uint64_t value; diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index ff7664e0c3c..4c4e0f8375b 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h @@ -353,6 +353,11 @@ struct ttm_bo_driver {  	/* notify the driver we are taking a fault on this BO  	 * and have reserved it */  	void (*fault_reserve_notify)(struct ttm_buffer_object *bo); + +	/** +	 * notify the driver that we're about to swap out this bo +	 */ +	void (*swap_notify) (struct ttm_buffer_object *bo);  };  /** diff --git a/include/drm/vmwgfx_drm.h b/include/drm/vmwgfx_drm.h index 2be7e1249b6..c7645f480d1 100644 --- a/include/drm/vmwgfx_drm.h +++ b/include/drm/vmwgfx_drm.h @@ -68,7 +68,8 @@  #define DRM_VMW_PARAM_NUM_FREE_STREAMS 1  #define DRM_VMW_PARAM_3D               2  #define DRM_VMW_PARAM_FIFO_OFFSET      3 - +#define DRM_VMW_PARAM_HW_CAPS          4 +#define DRM_VMW_PARAM_FIFO_CAPS        5  /**   * struct drm_vmw_getparam_arg @@ -181,6 +182,8 @@ struct drm_vmw_context_arg {   * The size of the array should equal the total number of mipmap levels.   * @shareable: Boolean whether other clients (as identified by file descriptors)   * may reference this surface. + * @scanout: Boolean whether the surface is intended to be used as a + * scanout.   *   * Input data to the DRM_VMW_CREATE_SURFACE Ioctl.   * Output data from the DRM_VMW_REF_SURFACE Ioctl. @@ -192,7 +195,7 @@ struct drm_vmw_surface_create_req {  	uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES];  	uint64_t size_addr;  	int32_t shareable; -	uint32_t pad64; +	int32_t scanout;  };  /** @@ -295,17 +298,28 @@ union drm_vmw_surface_reference_arg {   *   * @commands: User-space address of a command buffer cast to an uint64_t.   * @command-size: Size in bytes of the command buffer. + * @throttle-us: Sleep until software is less than @throttle_us + * microseconds ahead of hardware. The driver may round this value + * to the nearest kernel tick.   * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an   * uint64_t. + * @version: Allows expanding the execbuf ioctl parameters without breaking + * backwards compatibility, since user-space will always tell the kernel + * which version it uses. + * @flags: Execbuf flags. None currently.   *   * Argument to the DRM_VMW_EXECBUF Ioctl.   */ +#define DRM_VMW_EXECBUF_VERSION 0 +  struct drm_vmw_execbuf_arg {  	uint64_t commands;  	uint32_t command_size; -	uint32_t pad64; +	uint32_t throttle_us;  	uint64_t fence_rep; +	 uint32_t version; +	 uint32_t flags;  };  /** diff --git a/include/linux/ata.h b/include/linux/ata.h index 38a6948ce0c..20f31567cce 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h @@ -647,9 +647,9 @@ static inline int ata_id_has_large_logical_sectors(const u16 *id)  	return id[ATA_ID_SECTOR_SIZE] & (1 << 13);  } -static inline u8 ata_id_logical_per_physical_sectors(const u16 *id) +static inline u16 ata_id_logical_per_physical_sectors(const u16 *id)  { -	return id[ATA_ID_SECTOR_SIZE] & 0xf; +	return 1 << (id[ATA_ID_SECTOR_SIZE] & 0xf);  }  static inline int ata_id_has_lba48(const u16 *id) diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index cd4349bdc34..89c6249fc56 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h @@ -109,6 +109,7 @@ extern int prepare_binprm(struct linux_binprm *);  extern int __must_check remove_arg_zero(struct linux_binprm *);  extern int search_binary_handler(struct linux_binprm *,struct pt_regs *);  extern int flush_old_exec(struct linux_binprm * bprm); +extern void setup_new_exec(struct linux_binprm * bprm);  extern int suid_dumpable;  #define SUID_DUMP_DISABLE	0	/* No setuid dumping */ diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 5be3dab4a69..188fcae10a9 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -15,6 +15,7 @@  # define __acquire(x)	__context__(x,1)  # define __release(x)	__context__(x,-1)  # define __cond_lock(x,c)	((c) ? ({ __acquire(x); 1; }) : 0) +# define __percpu	__attribute__((noderef, address_space(3)))  extern void __chk_user_ptr(const volatile void __user *);  extern void __chk_io_ptr(const volatile void __iomem *);  #else @@ -32,6 +33,7 @@ extern void __chk_io_ptr(const volatile void __iomem *);  # define __acquire(x) (void)0  # define __release(x) (void)0  # define __cond_lock(x,c) (c) +# define __percpu  #endif  #ifdef __KERNEL__ diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index 94dd10366a7..91bb4f27238 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h @@ -10,6 +10,7 @@  #include <linux/fcntl.h>  #include <linux/file.h> +#include <linux/wait.h>  /*   * CAREFUL: Check include/asm-generic/fcntl.h when defining @@ -34,6 +35,9 @@ struct file *eventfd_fget(int fd);  struct eventfd_ctx *eventfd_ctx_fdget(int fd);  struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);  int eventfd_signal(struct eventfd_ctx *ctx, int n); +ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt); +int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait, +				  __u64 *cnt);  #else /* CONFIG_EVENTFD */ @@ -61,6 +65,18 @@ static inline void eventfd_ctx_put(struct eventfd_ctx *ctx)  } +static inline ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, +				       __u64 *cnt) +{ +	return -ENOSYS; +} + +static inline int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, +						wait_queue_t *wait, __u64 *cnt) +{ +	return -ENOSYS; +} +  #endif  #endif /* _LINUX_EVENTFD_H */ diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h index 1f716d9f714..520ecf86cbb 100644 --- a/include/linux/firewire-cdev.h +++ b/include/linux/firewire-cdev.h @@ -380,7 +380,7 @@ struct fw_cdev_initiate_bus_reset {   * @immediate:	If non-zero, immediate key to insert before pointer   * @key:	Upper 8 bits of root directory pointer   * @data:	Userspace pointer to contents of descriptor block - * @length:	Length of descriptor block data, in bytes + * @length:	Length of descriptor block data, in quadlets   * @handle:	Handle to the descriptor, written by the kernel   *   * Add a descriptor block and optionally a preceding immediate key to the local @@ -394,6 +394,8 @@ struct fw_cdev_initiate_bus_reset {   * If not 0, the @immediate field specifies an immediate key which will be   * inserted before the root directory pointer.   * + * @immediate, @key, and @data array elements are CPU-endian quadlets. + *   * If successful, the kernel adds the descriptor and writes back a handle to the   * kernel-side object to be used for later removal of the descriptor block and   * immediate key. diff --git a/include/linux/hw_breakpoint.h b/include/linux/hw_breakpoint.h index 41235c93e4e..5977b724f7c 100644 --- a/include/linux/hw_breakpoint.h +++ b/include/linux/hw_breakpoint.h @@ -44,7 +44,7 @@ static inline int hw_breakpoint_type(struct perf_event *bp)  	return bp->attr.bp_type;  } -static inline int hw_breakpoint_len(struct perf_event *bp) +static inline unsigned long hw_breakpoint_len(struct perf_event *bp)  {  	return bp->attr.bp_len;  } @@ -75,6 +75,8 @@ extern int __register_perf_hw_breakpoint(struct perf_event *bp);  extern void unregister_hw_breakpoint(struct perf_event *bp);  extern void unregister_wide_hw_breakpoint(struct perf_event **cpu_events); +extern int dbg_reserve_bp_slot(struct perf_event *bp); +extern int dbg_release_bp_slot(struct perf_event *bp);  extern int reserve_bp_slot(struct perf_event *bp);  extern void release_bp_slot(struct perf_event *bp); diff --git a/include/linux/ima.h b/include/linux/ima.h index 99dc6d5cf7e..975837e7d6c 100644 --- a/include/linux/ima.h +++ b/include/linux/ima.h @@ -17,7 +17,7 @@ struct linux_binprm;  extern int ima_bprm_check(struct linux_binprm *bprm);  extern int ima_inode_alloc(struct inode *inode);  extern void ima_inode_free(struct inode *inode); -extern int ima_path_check(struct path *path, int mask); +extern int ima_file_check(struct file *file, int mask);  extern void ima_file_free(struct file *file);  extern int ima_file_mmap(struct file *file, unsigned long prot);  extern void ima_counts_get(struct file *file); @@ -38,7 +38,7 @@ static inline void ima_inode_free(struct inode *inode)  	return;  } -static inline int ima_path_check(struct path *path, int mask) +static inline int ima_file_check(struct file *file, int mask)  {  	return 0;  } diff --git a/include/linux/input.h b/include/linux/input.h index 7be8a6537b5..735ceaf1bc2 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -660,6 +660,7 @@ struct input_absinfo {  #define ABS_MT_TOOL_TYPE	0x37	/* Type of touching device */  #define ABS_MT_BLOB_ID		0x38	/* Group a set of packets as a blob */  #define ABS_MT_TRACKING_ID	0x39	/* Unique ID of initiated contact */ +#define ABS_MT_PRESSURE		0x3a	/* Pressure on contact area */  #define ABS_MAX			0x3f  #define ABS_CNT			(ABS_MAX+1) diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index 6f6c5f300af..bc0fc795bd3 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h @@ -124,7 +124,7 @@ extern __must_check unsigned int kfifo_out_peek(struct kfifo *fifo,   */  static inline bool kfifo_initialized(struct kfifo *fifo)  { -	return fifo->buffer != 0; +	return fifo->buffer != NULL;  }  /** diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h index e32aa268efa..24b44145a88 100644 --- a/include/linux/kmsg_dump.h +++ b/include/linux/kmsg_dump.h @@ -17,6 +17,7 @@  enum kmsg_dump_reason {  	KMSG_DUMP_OOPS,  	KMSG_DUMP_PANIC, +	KMSG_DUMP_KEXEC,  };  /** diff --git a/include/linux/mtd/pismo.h b/include/linux/mtd/pismo.h new file mode 100644 index 00000000000..8dfb7e1421c --- /dev/null +++ b/include/linux/mtd/pismo.h @@ -0,0 +1,17 @@ +/* + * PISMO memory driver - http://www.pismoworld.org/ + * + * 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. + */ +#ifndef __LINUX_MTD_PISMO_H +#define __LINUX_MTD_PISMO_H + +struct pismo_pdata { +	void			(*set_vpp)(void *, int); +	void			*vpp_data; +	phys_addr_t		cs_addrs[5]; +}; + +#endif diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index ed5d7501e18..3c62ed40849 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -253,6 +253,8 @@ extern struct page * read_cache_page_async(struct address_space *mapping,  extern struct page * read_cache_page(struct address_space *mapping,  				pgoff_t index, filler_t *filler,  				void *data); +extern struct page * read_cache_page_gfp(struct address_space *mapping, +				pgoff_t index, gfp_t gfp_mask);  extern int read_cache_pages(struct address_space *mapping,  		struct list_head *pages, filler_t *filler, void *data); diff --git a/include/linux/pci.h b/include/linux/pci.h index 59a98e2ee2c..e2575f86133 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -759,6 +759,10 @@ pci_power_t pci_target_state(struct pci_dev *dev);  int pci_prepare_to_sleep(struct pci_dev *dev);  int pci_back_from_sleep(struct pci_dev *dev); +/* For use by arch with custom probe code */ +void set_pcie_port_type(struct pci_dev *pdev); +void set_pcie_hotplug_bridge(struct pci_dev *pdev); +  /* Functions for PCI Hotplug drivers to use */  int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);  #ifdef CONFIG_HOTPLUG diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 8fa71874113..a177698d95e 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -211,11 +211,9 @@ struct perf_event_attr {  		__u32		wakeup_watermark; /* bytes before wakeup   */  	}; -	__u32			__reserved_2; - -	__u64			bp_addr;  	__u32			bp_type; -	__u32			bp_len; +	__u64			bp_addr; +	__u64			bp_len;  };  /* diff --git a/include/linux/sched.h b/include/linux/sched.h index 6f7bba93929..78efe7c485a 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -310,6 +310,7 @@ extern void sched_show_task(struct task_struct *p);  #ifdef CONFIG_DETECT_SOFTLOCKUP  extern void softlockup_tick(void);  extern void touch_softlockup_watchdog(void); +extern void touch_softlockup_watchdog_sync(void);  extern void touch_all_softlockup_watchdogs(void);  extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write,  				    void __user *buffer, @@ -323,6 +324,9 @@ static inline void softlockup_tick(void)  static inline void touch_softlockup_watchdog(void)  {  } +static inline void touch_softlockup_watchdog_sync(void) +{ +}  static inline void touch_all_softlockup_watchdogs(void)  {  } @@ -1369,7 +1373,7 @@ struct task_struct {  	char comm[TASK_COMM_LEN]; /* executable name excluding path  				     - access with [gs]et_task_comm (which lock  				       it with task_lock()) -				     - initialized normally by flush_old_exec */ +				     - initialized normally by setup_new_exec */  /* file system info */  	int link_count, total_link_count;  #ifdef CONFIG_SYSVIPC diff --git a/include/linux/spi/ad7879.h b/include/linux/spi/ad7879.h index 4231104c9af..6334cee1a3b 100644 --- a/include/linux/spi/ad7879.h +++ b/include/linux/spi/ad7879.h @@ -28,8 +28,12 @@ struct ad7879_platform_data {  	 * 1 = 4, 2 = 8, 3 = 16 (median > averaging)  	 */  	u8	median; -	/* 1 = AUX/VBAT/GPIO set to GPIO Output */ -	u8	gpio_output; -	/* Initial GPIO pin state (valid if gpio_output = 1) */ -	u8	gpio_default; +	/* 1 = AUX/VBAT/GPIO export GPIO to gpiolib +	 * requires CONFIG_GPIOLIB +	 */ +	bool	gpio_export; +	/* identifies the first GPIO number handled by this chip; +	 * or, if negative, requests dynamic ID allocation. +	 */ +	s32	gpio_base;  }; diff --git a/include/scsi/scsi_bsg_fc.h b/include/scsi/scsi_bsg_fc.h index a4b23331817..91a4e4ff9a9 100644 --- a/include/scsi/scsi_bsg_fc.h +++ b/include/scsi/scsi_bsg_fc.h @@ -292,7 +292,7 @@ struct fc_bsg_request {  		struct fc_bsg_rport_els		r_els;  		struct fc_bsg_rport_ct		r_ct;  	} rqst_data; -}; +} __attribute__((packed));  /* response (request sense data) structure of the sg_io_v4 */ diff --git a/init/main.c b/init/main.c index dac44a9356a..4cb47a159f0 100644 --- a/init/main.c +++ b/init/main.c @@ -657,9 +657,9 @@ asmlinkage void __init start_kernel(void)  	proc_caches_init();  	buffer_init();  	key_init(); +	radix_tree_init();  	security_init();  	vfs_caches_init(totalram_pages); -	radix_tree_init();  	signals_init();  	/* rootfs populating might need page-writeback */  	page_writeback_init(); diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 1fbcc748044..aa3bee56644 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2936,14 +2936,17 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,  	for_each_subsys(root, ss) {  		struct cgroup_subsys_state *css = ss->create(ss, cgrp); +  		if (IS_ERR(css)) {  			err = PTR_ERR(css);  			goto err_destroy;  		}  		init_cgroup_css(css, ss, cgrp); -		if (ss->use_id) -			if (alloc_css_id(ss, parent, cgrp)) +		if (ss->use_id) { +			err = alloc_css_id(ss, parent, cgrp); +			if (err)  				goto err_destroy; +		}  		/* At error, ->destroy() callback has to free assigned ID. */  	} diff --git a/kernel/cpu.c b/kernel/cpu.c index 1c8ddd6ee94..677f25376a3 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -151,13 +151,13 @@ static inline void check_for_tasks(int cpu)  	write_lock_irq(&tasklist_lock);  	for_each_process(p) { -		if (task_cpu(p) == cpu && +		if (task_cpu(p) == cpu && p->state == TASK_RUNNING &&  		    (!cputime_eq(p->utime, cputime_zero) ||  		     !cputime_eq(p->stime, cputime_zero))) -			printk(KERN_WARNING "Task %s (pid = %d) is on cpu %d\ -				(state = %ld, flags = %x) \n", -				 p->comm, task_pid_nr(p), cpu, -				 p->state, p->flags); +			printk(KERN_WARNING "Task %s (pid = %d) is on cpu %d " +				"(state = %ld, flags = %x)\n", +				p->comm, task_pid_nr(p), cpu, +				p->state, p->flags);  	}  	write_unlock_irq(&tasklist_lock);  } diff --git a/kernel/cred.c b/kernel/cred.c index dd76cfe5f5b..1ed8ca18790 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -224,7 +224,7 @@ struct cred *cred_alloc_blank(void)  #ifdef CONFIG_KEYS  	new->tgcred = kzalloc(sizeof(*new->tgcred), GFP_KERNEL);  	if (!new->tgcred) { -		kfree(new); +		kmem_cache_free(cred_jar, new);  		return NULL;  	}  	atomic_set(&new->tgcred->usage, 1); diff --git a/kernel/fork.c b/kernel/fork.c index 5b2959b3ffc..f88bd984df3 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1241,21 +1241,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,  	/* Need tasklist lock for parent etc handling! */  	write_lock_irq(&tasklist_lock); -	/* -	 * The task hasn't been attached yet, so its cpus_allowed mask will -	 * not be changed, nor will its assigned CPU. -	 * -	 * The cpus_allowed mask of the parent may have changed after it was -	 * copied first time - so re-copy it here, then check the child's CPU -	 * to ensure it is on a valid CPU (and if not, just force it back to -	 * parent's CPU). This avoids alot of nasty races. -	 */ -	p->cpus_allowed = current->cpus_allowed; -	p->rt.nr_cpus_allowed = current->rt.nr_cpus_allowed; -	if (unlikely(!cpu_isset(task_cpu(p), p->cpus_allowed) || -			!cpu_online(task_cpu(p)))) -		set_task_cpu(p, smp_processor_id()); -  	/* CLONE_PARENT re-uses the old parent */  	if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) {  		p->real_parent = current->real_parent; diff --git a/kernel/futex.c b/kernel/futex.c index d9b3a2228f9..e7a35f1039e 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -530,8 +530,25 @@ lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,  				return -EINVAL;  			WARN_ON(!atomic_read(&pi_state->refcount)); -			WARN_ON(pid && pi_state->owner && -				pi_state->owner->pid != pid); + +			/* +			 * When pi_state->owner is NULL then the owner died +			 * and another waiter is on the fly. pi_state->owner +			 * is fixed up by the task which acquires +			 * pi_state->rt_mutex. +			 * +			 * We do not check for pid == 0 which can happen when +			 * the owner died and robust_list_exit() cleared the +			 * TID. +			 */ +			if (pid && pi_state->owner) { +				/* +				 * Bail out if user space manipulated the +				 * futex value. +				 */ +				if (pid != task_pid_vnr(pi_state->owner)) +					return -EINVAL; +			}  			atomic_inc(&pi_state->refcount);  			*ps = pi_state; @@ -758,6 +775,13 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this)  	if (!pi_state)  		return -EINVAL; +	/* +	 * If current does not own the pi_state then the futex is +	 * inconsistent and user space fiddled with the futex value. +	 */ +	if (pi_state->owner != current) +		return -EINVAL; +  	raw_spin_lock(&pi_state->pi_mutex.wait_lock);  	new_owner = rt_mutex_next_owner(&pi_state->pi_mutex); @@ -1971,7 +1995,7 @@ retry_private:  	/* Unqueue and drop the lock */  	unqueue_me_pi(&q); -	goto out; +	goto out_put_key;  out_unlock_put_key:  	queue_unlock(&q, hb); diff --git a/kernel/hw_breakpoint.c b/kernel/hw_breakpoint.c index 50dbd599958..967e66143e1 100644 --- a/kernel/hw_breakpoint.c +++ b/kernel/hw_breakpoint.c @@ -243,38 +243,70 @@ static void toggle_bp_slot(struct perf_event *bp, bool enable)   *       ((per_cpu(nr_bp_flexible, *) > 1) + max(per_cpu(nr_cpu_bp_pinned, *))   *            + max(per_cpu(nr_task_bp_pinned, *))) < HBP_NUM   */ -int reserve_bp_slot(struct perf_event *bp) +static int __reserve_bp_slot(struct perf_event *bp)  {  	struct bp_busy_slots slots = {0}; -	int ret = 0; - -	mutex_lock(&nr_bp_mutex);  	fetch_bp_busy_slots(&slots, bp);  	/* Flexible counters need to keep at least one slot */ -	if (slots.pinned + (!!slots.flexible) == HBP_NUM) { -		ret = -ENOSPC; -		goto end; -	} +	if (slots.pinned + (!!slots.flexible) == HBP_NUM) +		return -ENOSPC;  	toggle_bp_slot(bp, true); -end: +	return 0; +} + +int reserve_bp_slot(struct perf_event *bp) +{ +	int ret; + +	mutex_lock(&nr_bp_mutex); + +	ret = __reserve_bp_slot(bp); +  	mutex_unlock(&nr_bp_mutex);  	return ret;  } +static void __release_bp_slot(struct perf_event *bp) +{ +	toggle_bp_slot(bp, false); +} +  void release_bp_slot(struct perf_event *bp)  {  	mutex_lock(&nr_bp_mutex); -	toggle_bp_slot(bp, false); +	__release_bp_slot(bp);  	mutex_unlock(&nr_bp_mutex);  } +/* + * Allow the kernel debugger to reserve breakpoint slots without + * taking a lock using the dbg_* variant of for the reserve and + * release breakpoint slots. + */ +int dbg_reserve_bp_slot(struct perf_event *bp) +{ +	if (mutex_is_locked(&nr_bp_mutex)) +		return -1; + +	return __reserve_bp_slot(bp); +} + +int dbg_release_bp_slot(struct perf_event *bp) +{ +	if (mutex_is_locked(&nr_bp_mutex)) +		return -1; + +	__release_bp_slot(bp); + +	return 0; +}  int register_perf_hw_breakpoint(struct perf_event *bp)  { @@ -296,6 +328,10 @@ int register_perf_hw_breakpoint(struct perf_event *bp)  	if (!bp->attr.disabled || !bp->overflow_handler)  		ret = arch_validate_hwbkpt_settings(bp, bp->ctx->task); +	/* if arch_validate_hwbkpt_settings() fails then release bp slot */ +	if (ret) +		release_bp_slot(bp); +  	return ret;  } @@ -324,8 +360,8 @@ EXPORT_SYMBOL_GPL(register_user_hw_breakpoint);  int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr)  {  	u64 old_addr = bp->attr.bp_addr; +	u64 old_len = bp->attr.bp_len;  	int old_type = bp->attr.bp_type; -	int old_len = bp->attr.bp_len;  	int err = 0;  	perf_event_disable(bp); diff --git a/kernel/kexec.c b/kernel/kexec.c index a9a93d9ee7a..ef077fb7315 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -32,6 +32,7 @@  #include <linux/console.h>  #include <linux/vmalloc.h>  #include <linux/swap.h> +#include <linux/kmsg_dump.h>  #include <asm/page.h>  #include <asm/uaccess.h> @@ -1074,6 +1075,9 @@ void crash_kexec(struct pt_regs *regs)  	if (mutex_trylock(&kexec_mutex)) {  		if (kexec_crash_image) {  			struct pt_regs fixed_regs; + +			kmsg_dump(KMSG_DUMP_KEXEC); +  			crash_setup_regs(&fixed_regs, regs);  			crash_save_vmcoreinfo();  			machine_crash_shutdown(&fixed_regs); diff --git a/kernel/kfifo.c b/kernel/kfifo.c index 32c5c15d750..35edbe22e9a 100644 --- a/kernel/kfifo.c +++ b/kernel/kfifo.c @@ -80,7 +80,7 @@ int kfifo_alloc(struct kfifo *fifo, unsigned int size, gfp_t gfp_mask)  	buffer = kmalloc(size, gfp_mask);  	if (!buffer) { -		_kfifo_init(fifo, 0, 0); +		_kfifo_init(fifo, NULL, 0);  		return -ENOMEM;  	} @@ -97,6 +97,7 @@ EXPORT_SYMBOL(kfifo_alloc);  void kfifo_free(struct kfifo *fifo)  {  	kfree(fifo->buffer); +	_kfifo_init(fifo, NULL, 0);  }  EXPORT_SYMBOL(kfifo_free); @@ -349,6 +350,7 @@ EXPORT_SYMBOL(__kfifo_from_user_n);   * @fifo: the fifo to be used.   * @from: pointer to the data to be added.   * @len: the length of the data to be added. + * @total: the actual returned data length.   *   * This function copies at most @len bytes from the @from into the   * FIFO depending and returns -EFAULT/0. @@ -399,7 +401,7 @@ EXPORT_SYMBOL(__kfifo_to_user_n);   * @fifo: the fifo to be used.   * @to: where the data must be copied.   * @len: the size of the destination buffer. - @ @lenout: pointer to output variable with copied data + * @lenout: pointer to output variable with copied data   *   * This function copies at most @len bytes from the FIFO into the   * @to buffer and 0 or -EFAULT. diff --git a/kernel/kgdb.c b/kernel/kgdb.c index 2eb517e2351..761fdd2b303 100644 --- a/kernel/kgdb.c +++ b/kernel/kgdb.c @@ -583,6 +583,9 @@ static void kgdb_wait(struct pt_regs *regs)  	smp_wmb();  	atomic_set(&cpu_in_kgdb[cpu], 1); +	/* Disable any cpu specific hw breakpoints */ +	kgdb_disable_hw_debug(regs); +  	/* Wait till primary CPU is done with debugging */  	while (atomic_read(&passive_cpu_wait[cpu]))  		cpu_relax(); @@ -596,7 +599,7 @@ static void kgdb_wait(struct pt_regs *regs)  	/* Signal the primary CPU that we are done: */  	atomic_set(&cpu_in_kgdb[cpu], 0); -	touch_softlockup_watchdog(); +	touch_softlockup_watchdog_sync();  	clocksource_touch_watchdog();  	local_irq_restore(flags);  } @@ -1450,7 +1453,7 @@ acquirelock:  	    (kgdb_info[cpu].task &&  	     kgdb_info[cpu].task->pid != kgdb_sstep_pid) && --sstep_tries) {  		atomic_set(&kgdb_active, -1); -		touch_softlockup_watchdog(); +		touch_softlockup_watchdog_sync();  		clocksource_touch_watchdog();  		local_irq_restore(flags); @@ -1550,7 +1553,7 @@ kgdb_restore:  	}  	/* Free kgdb_active */  	atomic_set(&kgdb_active, -1); -	touch_softlockup_watchdog(); +	touch_softlockup_watchdog_sync();  	clocksource_touch_watchdog();  	local_irq_restore(flags); diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 5feaddcdbe4..c62ec14609b 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c @@ -2147,7 +2147,7 @@ check_usage_backwards(struct task_struct *curr, struct held_lock *this,  		return ret;  	return print_irq_inversion_bug(curr, &root, target_entry, -					this, 1, irqclass); +					this, 0, irqclass);  }  void print_irqtrace_events(struct task_struct *curr) diff --git a/kernel/panic.c b/kernel/panic.c index 5827f7b9725..c787333282b 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -75,7 +75,6 @@ NORET_TYPE void panic(const char * fmt, ...)  	dump_stack();  #endif -	kmsg_dump(KMSG_DUMP_PANIC);  	/*  	 * If we have crashed and we have a crash kernel loaded let it handle  	 * everything else. @@ -83,6 +82,8 @@ NORET_TYPE void panic(const char * fmt, ...)  	 */  	crash_kexec(NULL); +	kmsg_dump(KMSG_DUMP_PANIC); +  	/*  	 * Note smp_send_stop is the usual smp shutdown function, which  	 * unfortunately means it may not be hardened to work in a panic diff --git a/kernel/perf_event.c b/kernel/perf_event.c index d27746bd3a0..2b19297742c 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -4580,7 +4580,7 @@ static int perf_copy_attr(struct perf_event_attr __user *uattr,  	if (attr->type >= PERF_TYPE_MAX)  		return -EINVAL; -	if (attr->__reserved_1 || attr->__reserved_2) +	if (attr->__reserved_1)  		return -EINVAL;  	if (attr->sample_type & ~(PERF_SAMPLE_MAX-1)) diff --git a/kernel/printk.c b/kernel/printk.c index 17463ca2e22..1751c456b71 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -1467,6 +1467,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_unregister);  static const char const *kmsg_reasons[] = {  	[KMSG_DUMP_OOPS]	= "oops",  	[KMSG_DUMP_PANIC]	= "panic", +	[KMSG_DUMP_KEXEC]	= "kexec",  };  static const char *kmsg_to_str(enum kmsg_dump_reason reason) diff --git a/kernel/sched.c b/kernel/sched.c index 4508fe7048b..3a8fb30a91b 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2320,14 +2320,12 @@ static int select_fallback_rq(int cpu, struct task_struct *p)  }  /* - * Called from: + * Gets called from 3 sites (exec, fork, wakeup), since it is called without + * holding rq->lock we need to ensure ->cpus_allowed is stable, this is done + * by:   * - *  - fork, @p is stable because it isn't on the tasklist yet - * - *  - exec, @p is unstable, retry loop - * - *  - wake-up, we serialize ->cpus_allowed against TASK_WAKING so - *             we should be good. + *  exec:           is unstable, retry loop + *  fork & wake-up: serialize ->cpus_allowed against TASK_WAKING   */  static inline  int select_task_rq(struct task_struct *p, int sd_flags, int wake_flags) @@ -2620,9 +2618,6 @@ void sched_fork(struct task_struct *p, int clone_flags)  	if (p->sched_class->task_fork)  		p->sched_class->task_fork(p); -#ifdef CONFIG_SMP -	cpu = select_task_rq(p, SD_BALANCE_FORK, 0); -#endif  	set_task_cpu(p, cpu);  #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) @@ -2652,6 +2647,21 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)  {  	unsigned long flags;  	struct rq *rq; +	int cpu = get_cpu(); + +#ifdef CONFIG_SMP +	/* +	 * Fork balancing, do it here and not earlier because: +	 *  - cpus_allowed can change in the fork path +	 *  - any previously selected cpu might disappear through hotplug +	 * +	 * We still have TASK_WAKING but PF_STARTING is gone now, meaning +	 * ->cpus_allowed is stable, we have preemption disabled, meaning +	 * cpu_online_mask is stable. +	 */ +	cpu = select_task_rq(p, SD_BALANCE_FORK, 0); +	set_task_cpu(p, cpu); +#endif  	rq = task_rq_lock(p, &flags);  	BUG_ON(p->state != TASK_WAKING); @@ -2665,6 +2675,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)  		p->sched_class->task_woken(rq, p);  #endif  	task_rq_unlock(rq, &flags); +	put_cpu();  }  #ifdef CONFIG_PREEMPT_NOTIFIERS @@ -7139,14 +7150,18 @@ int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)  	 * the ->cpus_allowed mask from under waking tasks, which would be  	 * possible when we change rq->lock in ttwu(), so synchronize against  	 * TASK_WAKING to avoid that. +	 * +	 * Make an exception for freshly cloned tasks, since cpuset namespaces +	 * might move the task about, we have to validate the target in +	 * wake_up_new_task() anyway since the cpu might have gone away.  	 */  again: -	while (p->state == TASK_WAKING) +	while (p->state == TASK_WAKING && !(p->flags & PF_STARTING))  		cpu_relax();  	rq = task_rq_lock(p, &flags); -	if (p->state == TASK_WAKING) { +	if (p->state == TASK_WAKING && !(p->flags & PF_STARTING)) {  		task_rq_unlock(rq, &flags);  		goto again;  	} diff --git a/kernel/softirq.c b/kernel/softirq.c index a09502e2ef7..7c1a67ef027 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -500,22 +500,17 @@ EXPORT_SYMBOL(tasklet_kill);   */  /* - * The trampoline is called when the hrtimer expires. If this is - * called from the hrtimer interrupt then we schedule the tasklet as - * the timer callback function expects to run in softirq context. If - * it's called in softirq context anyway (i.e. high resolution timers - * disabled) then the hrtimer callback is called right away. + * The trampoline is called when the hrtimer expires. It schedules a tasklet + * to run __tasklet_hrtimer_trampoline() which in turn will call the intended + * hrtimer callback, but from softirq context.   */  static enum hrtimer_restart __hrtimer_tasklet_trampoline(struct hrtimer *timer)  {  	struct tasklet_hrtimer *ttimer =  		container_of(timer, struct tasklet_hrtimer, timer); -	if (hrtimer_is_hres_active(timer)) { -		tasklet_hi_schedule(&ttimer->tasklet); -		return HRTIMER_NORESTART; -	} -	return ttimer->function(timer); +	tasklet_hi_schedule(&ttimer->tasklet); +	return HRTIMER_NORESTART;  }  /* diff --git a/kernel/softlockup.c b/kernel/softlockup.c index d22579087e2..0d4c7898ab8 100644 --- a/kernel/softlockup.c +++ b/kernel/softlockup.c @@ -25,6 +25,7 @@ static DEFINE_SPINLOCK(print_lock);  static DEFINE_PER_CPU(unsigned long, softlockup_touch_ts); /* touch timestamp */  static DEFINE_PER_CPU(unsigned long, softlockup_print_ts); /* print timestamp */  static DEFINE_PER_CPU(struct task_struct *, softlockup_watchdog); +static DEFINE_PER_CPU(bool, softlock_touch_sync);  static int __read_mostly did_panic;  int __read_mostly softlockup_thresh = 60; @@ -79,6 +80,12 @@ void touch_softlockup_watchdog(void)  }  EXPORT_SYMBOL(touch_softlockup_watchdog); +void touch_softlockup_watchdog_sync(void) +{ +	__raw_get_cpu_var(softlock_touch_sync) = true; +	__raw_get_cpu_var(softlockup_touch_ts) = 0; +} +  void touch_all_softlockup_watchdogs(void)  {  	int cpu; @@ -118,6 +125,14 @@ void softlockup_tick(void)  	}  	if (touch_ts == 0) { +		if (unlikely(per_cpu(softlock_touch_sync, this_cpu))) { +			/* +			 * If the time stamp was touched atomically +			 * make sure the scheduler tick is up to date. +			 */ +			per_cpu(softlock_touch_sync, this_cpu) = false; +			sched_clock_tick(); +		}  		__touch_softlockup_watchdog();  		return;  	} diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 6f740d9f094..d7395fdfb9f 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -259,7 +259,8 @@ void clockevents_notify(unsigned long reason, void *arg)  		cpu = *((int *)arg);  		list_for_each_entry_safe(dev, tmp, &clockevent_devices, list) {  			if (cpumask_test_cpu(cpu, dev->cpumask) && -			    cpumask_weight(dev->cpumask) == 1) { +			    cpumask_weight(dev->cpumask) == 1 && +			    !tick_is_broadcast_device(dev)) {  				BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED);  				list_del(&dev->list);  			} diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index e85c23404d3..13700833c18 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c @@ -343,7 +343,19 @@ static void clocksource_resume_watchdog(void)  {  	unsigned long flags; -	spin_lock_irqsave(&watchdog_lock, flags); +	/* +	 * We use trylock here to avoid a potential dead lock when +	 * kgdb calls this code after the kernel has been stopped with +	 * watchdog_lock held. When watchdog_lock is held we just +	 * return and accept, that the watchdog might trigger and mark +	 * the monitored clock source (usually TSC) unstable. +	 * +	 * This does not affect the other caller clocksource_resume() +	 * because at this point the kernel is UP, interrupts are +	 * disabled and nothing can hold watchdog_lock. +	 */ +	if (!spin_trylock_irqsave(&watchdog_lock, flags)) +		return;  	clocksource_reset_watchdog();  	spin_unlock_irqrestore(&watchdog_lock, flags);  } @@ -458,8 +470,8 @@ void clocksource_resume(void)   * clocksource_touch_watchdog - Update watchdog   *   * Update the watchdog after exception contexts such as kgdb so as not - * to incorrectly trip the watchdog. - * + * to incorrectly trip the watchdog. This might fail when the kernel + * was stopped in code which holds watchdog_lock.   */  void clocksource_touch_watchdog(void)  { diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 7faaa32fbf4..e2ab064c6d4 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -880,6 +880,7 @@ void getboottime(struct timespec *ts)  	set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec);  } +EXPORT_SYMBOL_GPL(getboottime);  /**   * monotonic_to_bootbased - Convert the monotonic time to boot based. @@ -889,6 +890,7 @@ void monotonic_to_bootbased(struct timespec *ts)  {  	*ts = timespec_add_safe(*ts, total_sleep_time);  } +EXPORT_SYMBOL_GPL(monotonic_to_bootbased);  unsigned long get_seconds(void)  { diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index 6c22d8a2f28..60e2ce0181e 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -27,9 +27,7 @@ config HAVE_FUNCTION_GRAPH_TRACER  config HAVE_FUNCTION_GRAPH_FP_TEST  	bool  	help -	 An arch may pass in a unique value (frame pointer) to both the -	 entering and exiting of a function. On exit, the value is compared -	 and if it does not match, then it will panic the kernel. +	  See Documentation/trace/ftrace-design.txt  config HAVE_FUNCTION_TRACE_MCOUNT_TEST  	bool diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index edefe3b2801..8c1b2d29071 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -464,6 +464,8 @@ struct ring_buffer_iter {  	struct ring_buffer_per_cpu	*cpu_buffer;  	unsigned long			head;  	struct buffer_page		*head_page; +	struct buffer_page		*cache_reader_page; +	unsigned long			cache_read;  	u64				read_stamp;  }; @@ -2716,6 +2718,8 @@ static void rb_iter_reset(struct ring_buffer_iter *iter)  		iter->read_stamp = cpu_buffer->read_stamp;  	else  		iter->read_stamp = iter->head_page->page->time_stamp; +	iter->cache_reader_page = cpu_buffer->reader_page; +	iter->cache_read = cpu_buffer->read;  }  /** @@ -3060,13 +3064,22 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)  	struct ring_buffer_event *event;  	int nr_loops = 0; -	if (ring_buffer_iter_empty(iter)) -		return NULL; -  	cpu_buffer = iter->cpu_buffer;  	buffer = cpu_buffer->buffer; +	/* +	 * Check if someone performed a consuming read to +	 * the buffer. A consuming read invalidates the iterator +	 * and we need to reset the iterator in this case. +	 */ +	if (unlikely(iter->cache_read != cpu_buffer->read || +		     iter->cache_reader_page != cpu_buffer->reader_page)) +		rb_iter_reset(iter); +   again: +	if (ring_buffer_iter_empty(iter)) +		return NULL; +  	/*  	 * We repeat when a timestamp is encountered.  	 * We can get multiple timestamps by nested interrupts or also @@ -3081,6 +3094,11 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)  	if (rb_per_cpu_empty(cpu_buffer))  		return NULL; +	if (iter->head >= local_read(&iter->head_page->page->commit)) { +		rb_inc_iter(iter); +		goto again; +	} +  	event = rb_iter_head_event(iter);  	switch (event->type_len) { diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 0df1b0f2cb9..eac6875cb99 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -951,6 +951,11 @@ void trace_find_cmdline(int pid, char comm[])  		return;  	} +	if (WARN_ON_ONCE(pid < 0)) { +		strcpy(comm, "<XXX>"); +		return; +	} +  	if (pid > PID_MAX_DEFAULT) {  		strcpy(comm, "<...>");  		return; diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 6ea90c0e2c9..50b1b823980 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -689,7 +689,7 @@ static int create_trace_probe(int argc, char **argv)  			return -EINVAL;  		}  		/* an address specified */ -		ret = strict_strtoul(&argv[0][2], 0, (unsigned long *)&addr); +		ret = strict_strtoul(&argv[1][0], 0, (unsigned long *)&addr);  		if (ret) {  			pr_info("Failed to parse address.\n");  			return ret; diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c index 678a5120ee3..f4bc9b27de5 100644 --- a/kernel/trace/trace_stack.c +++ b/kernel/trace/trace_stack.c @@ -157,6 +157,7 @@ stack_max_size_write(struct file *filp, const char __user *ubuf,  	unsigned long val, flags;  	char buf[64];  	int ret; +	int cpu;  	if (count >= sizeof(buf))  		return -EINVAL; @@ -171,9 +172,20 @@ stack_max_size_write(struct file *filp, const char __user *ubuf,  		return ret;  	local_irq_save(flags); + +	/* +	 * In case we trace inside arch_spin_lock() or after (NMI), +	 * we will cause circular lock, so we also need to increase +	 * the percpu trace_active here. +	 */ +	cpu = smp_processor_id(); +	per_cpu(trace_active, cpu)++; +  	arch_spin_lock(&max_stack_lock);  	*ptr = val;  	arch_spin_unlock(&max_stack_lock); + +	per_cpu(trace_active, cpu)--;  	local_irq_restore(flags);  	return count; @@ -206,7 +218,13 @@ t_next(struct seq_file *m, void *v, loff_t *pos)  static void *t_start(struct seq_file *m, loff_t *pos)  { +	int cpu; +  	local_irq_disable(); + +	cpu = smp_processor_id(); +	per_cpu(trace_active, cpu)++; +  	arch_spin_lock(&max_stack_lock);  	if (*pos == 0) @@ -217,7 +235,13 @@ static void *t_start(struct seq_file *m, loff_t *pos)  static void t_stop(struct seq_file *m, void *p)  { +	int cpu; +  	arch_spin_unlock(&max_stack_lock); + +	cpu = smp_processor_id(); +	per_cpu(trace_active, cpu)--; +  	local_irq_enable();  } diff --git a/lib/dma-debug.c b/lib/dma-debug.c index 7d2f0b33e5a..ba8b67039d1 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c @@ -587,7 +587,7 @@ out_unlock:  	return count;  } -const struct file_operations filter_fops = { +static const struct file_operations filter_fops = {  	.read  = filter_read,  	.write = filter_write,  }; diff --git a/mm/filemap.c b/mm/filemap.c index 96ac6b0eb6c..698ea80f210 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1634,14 +1634,15 @@ EXPORT_SYMBOL(generic_file_readonly_mmap);  static struct page *__read_cache_page(struct address_space *mapping,  				pgoff_t index,  				int (*filler)(void *,struct page*), -				void *data) +				void *data, +				gfp_t gfp)  {  	struct page *page;  	int err;  repeat:  	page = find_get_page(mapping, index);  	if (!page) { -		page = page_cache_alloc_cold(mapping); +		page = __page_cache_alloc(gfp | __GFP_COLD);  		if (!page)  			return ERR_PTR(-ENOMEM);  		err = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL); @@ -1661,31 +1662,18 @@ repeat:  	return page;  } -/** - * read_cache_page_async - read into page cache, fill it if needed - * @mapping:	the page's address_space - * @index:	the page index - * @filler:	function to perform the read - * @data:	destination for read data - * - * Same as read_cache_page, but don't wait for page to become unlocked - * after submitting it to the filler. - * - * Read into the page cache. If a page already exists, and PageUptodate() is - * not set, try to fill the page but don't wait for it to become unlocked. - * - * If the page does not get brought uptodate, return -EIO. - */ -struct page *read_cache_page_async(struct address_space *mapping, +static struct page *do_read_cache_page(struct address_space *mapping,  				pgoff_t index,  				int (*filler)(void *,struct page*), -				void *data) +				void *data, +				gfp_t gfp) +  {  	struct page *page;  	int err;  retry: -	page = __read_cache_page(mapping, index, filler, data); +	page = __read_cache_page(mapping, index, filler, data, gfp);  	if (IS_ERR(page))  		return page;  	if (PageUptodate(page)) @@ -1710,8 +1698,67 @@ out:  	mark_page_accessed(page);  	return page;  } + +/** + * read_cache_page_async - read into page cache, fill it if needed + * @mapping:	the page's address_space + * @index:	the page index + * @filler:	function to perform the read + * @data:	destination for read data + * + * Same as read_cache_page, but don't wait for page to become unlocked + * after submitting it to the filler. + * + * Read into the page cache. If a page already exists, and PageUptodate() is + * not set, try to fill the page but don't wait for it to become unlocked. + * + * If the page does not get brought uptodate, return -EIO. + */ +struct page *read_cache_page_async(struct address_space *mapping, +				pgoff_t index, +				int (*filler)(void *,struct page*), +				void *data) +{ +	return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping)); +}  EXPORT_SYMBOL(read_cache_page_async); +static struct page *wait_on_page_read(struct page *page) +{ +	if (!IS_ERR(page)) { +		wait_on_page_locked(page); +		if (!PageUptodate(page)) { +			page_cache_release(page); +			page = ERR_PTR(-EIO); +		} +	} +	return page; +} + +/** + * read_cache_page_gfp - read into page cache, using specified page allocation flags. + * @mapping:	the page's address_space + * @index:	the page index + * @gfp:	the page allocator flags to use if allocating + * + * This is the same as "read_mapping_page(mapping, index, NULL)", but with + * any new page allocations done using the specified allocation flags. Note + * that the Radix tree operations will still use GFP_KERNEL, so you can't + * expect to do this atomically or anything like that - but you can pass in + * other page requirements. + * + * If the page does not get brought uptodate, return -EIO. + */ +struct page *read_cache_page_gfp(struct address_space *mapping, +				pgoff_t index, +				gfp_t gfp) +{ +	filler_t *filler = (filler_t *)mapping->a_ops->readpage; + +	return wait_on_page_read(do_read_cache_page(mapping, index, filler, NULL, gfp)); +} +EXPORT_SYMBOL(read_cache_page_gfp); +  /**   * read_cache_page - read into page cache, fill it if needed   * @mapping:	the page's address_space @@ -1729,18 +1776,7 @@ struct page *read_cache_page(struct address_space *mapping,  				int (*filler)(void *,struct page*),  				void *data)  { -	struct page *page; - -	page = read_cache_page_async(mapping, index, filler, data); -	if (IS_ERR(page)) -		goto out; -	wait_on_page_locked(page); -	if (!PageUptodate(page)) { -		page_cache_release(page); -		page = ERR_PTR(-EIO); -	} - out: -	return page; +	return wait_on_page_read(read_cache_page_async(mapping, index, filler, data));  }  EXPORT_SYMBOL(read_cache_page); @@ -2196,6 +2232,9 @@ again:  		if (unlikely(status))  			break; +		if (mapping_writably_mapped(mapping)) +			flush_dcache_page(page); +  		pagefault_disable();  		copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes);  		pagefault_enable(); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index e91b81b6367..2d16fa6b8c2 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1515,10 +1515,9 @@ static struct attribute_group hstate_attr_group = {  	.attrs = hstate_attrs,  }; -static int __init hugetlb_sysfs_add_hstate(struct hstate *h, -				struct kobject *parent, -				struct kobject **hstate_kobjs, -				struct attribute_group *hstate_attr_group) +static int hugetlb_sysfs_add_hstate(struct hstate *h, struct kobject *parent, +				    struct kobject **hstate_kobjs, +				    struct attribute_group *hstate_attr_group)  {  	int retval;  	int hi = h - hstates; diff --git a/mm/migrate.c b/mm/migrate.c index efddbf0926b..9a0db5bbabe 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -912,6 +912,9 @@ static int do_pages_move(struct mm_struct *mm, struct task_struct *task,  				goto out_pm;  			err = -ENODEV; +			if (node < 0 || node >= MAX_NUMNODES) +				goto out_pm; +  			if (!node_state(node, N_HIGH_MEMORY))  				goto out_pm; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d2a8889b4c5..8deb9d0fd5b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -556,8 +556,9 @@ static void free_pcppages_bulk(struct zone *zone, int count,  			page = list_entry(list->prev, struct page, lru);  			/* must delete as __free_one_page list manipulates */  			list_del(&page->lru); -			__free_one_page(page, zone, 0, migratetype); -			trace_mm_page_pcpu_drain(page, 0, migratetype); +			/* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */ +			__free_one_page(page, zone, 0, page_private(page)); +			trace_mm_page_pcpu_drain(page, 0, page_private(page));  		} while (--count && --batch_free && !list_empty(list));  	}  	spin_unlock(&zone->lock); diff --git a/mm/vmalloc.c b/mm/vmalloc.c index d55d905463e..ae007462b7f 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -509,6 +509,9 @@ static unsigned long lazy_max_pages(void)  static atomic_t vmap_lazy_nr = ATOMIC_INIT(0); +/* for per-CPU blocks */ +static void purge_fragmented_blocks_allcpus(void); +  /*   * Purges all lazily-freed vmap areas.   * @@ -539,6 +542,9 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end,  	} else  		spin_lock(&purge_lock); +	if (sync) +		purge_fragmented_blocks_allcpus(); +  	rcu_read_lock();  	list_for_each_entry_rcu(va, &vmap_area_list, list) {  		if (va->flags & VM_LAZY_FREE) { @@ -667,8 +673,6 @@ static bool vmap_initialized __read_mostly = false;  struct vmap_block_queue {  	spinlock_t lock;  	struct list_head free; -	struct list_head dirty; -	unsigned int nr_dirty;  };  struct vmap_block { @@ -678,10 +682,9 @@ struct vmap_block {  	unsigned long free, dirty;  	DECLARE_BITMAP(alloc_map, VMAP_BBMAP_BITS);  	DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS); -	union { -		struct list_head free_list; -		struct rcu_head rcu_head; -	}; +	struct list_head free_list; +	struct rcu_head rcu_head; +	struct list_head purge;  };  /* Queue of free and dirty vmap blocks, for allocation and flushing purposes */ @@ -757,7 +760,7 @@ static struct vmap_block *new_vmap_block(gfp_t gfp_mask)  	vbq = &get_cpu_var(vmap_block_queue);  	vb->vbq = vbq;  	spin_lock(&vbq->lock); -	list_add(&vb->free_list, &vbq->free); +	list_add_rcu(&vb->free_list, &vbq->free);  	spin_unlock(&vbq->lock);  	put_cpu_var(vmap_block_queue); @@ -776,8 +779,6 @@ static void free_vmap_block(struct vmap_block *vb)  	struct vmap_block *tmp;  	unsigned long vb_idx; -	BUG_ON(!list_empty(&vb->free_list)); -  	vb_idx = addr_to_vb_idx(vb->va->va_start);  	spin_lock(&vmap_block_tree_lock);  	tmp = radix_tree_delete(&vmap_block_tree, vb_idx); @@ -788,12 +789,61 @@ static void free_vmap_block(struct vmap_block *vb)  	call_rcu(&vb->rcu_head, rcu_free_vb);  } +static void purge_fragmented_blocks(int cpu) +{ +	LIST_HEAD(purge); +	struct vmap_block *vb; +	struct vmap_block *n_vb; +	struct vmap_block_queue *vbq = &per_cpu(vmap_block_queue, cpu); + +	rcu_read_lock(); +	list_for_each_entry_rcu(vb, &vbq->free, free_list) { + +		if (!(vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS)) +			continue; + +		spin_lock(&vb->lock); +		if (vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS) { +			vb->free = 0; /* prevent further allocs after releasing lock */ +			vb->dirty = VMAP_BBMAP_BITS; /* prevent purging it again */ +			bitmap_fill(vb->alloc_map, VMAP_BBMAP_BITS); +			bitmap_fill(vb->dirty_map, VMAP_BBMAP_BITS); +			spin_lock(&vbq->lock); +			list_del_rcu(&vb->free_list); +			spin_unlock(&vbq->lock); +			spin_unlock(&vb->lock); +			list_add_tail(&vb->purge, &purge); +		} else +			spin_unlock(&vb->lock); +	} +	rcu_read_unlock(); + +	list_for_each_entry_safe(vb, n_vb, &purge, purge) { +		list_del(&vb->purge); +		free_vmap_block(vb); +	} +} + +static void purge_fragmented_blocks_thiscpu(void) +{ +	purge_fragmented_blocks(smp_processor_id()); +} + +static void purge_fragmented_blocks_allcpus(void) +{ +	int cpu; + +	for_each_possible_cpu(cpu) +		purge_fragmented_blocks(cpu); +} +  static void *vb_alloc(unsigned long size, gfp_t gfp_mask)  {  	struct vmap_block_queue *vbq;  	struct vmap_block *vb;  	unsigned long addr = 0;  	unsigned int order; +	int purge = 0;  	BUG_ON(size & ~PAGE_MASK);  	BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC); @@ -806,24 +856,38 @@ again:  		int i;  		spin_lock(&vb->lock); +		if (vb->free < 1UL << order) +			goto next; +  		i = bitmap_find_free_region(vb->alloc_map,  						VMAP_BBMAP_BITS, order); -		if (i >= 0) { -			addr = vb->va->va_start + (i << PAGE_SHIFT); -			BUG_ON(addr_to_vb_idx(addr) != -					addr_to_vb_idx(vb->va->va_start)); -			vb->free -= 1UL << order; -			if (vb->free == 0) { -				spin_lock(&vbq->lock); -				list_del_init(&vb->free_list); -				spin_unlock(&vbq->lock); +		if (i < 0) { +			if (vb->free + vb->dirty == VMAP_BBMAP_BITS) { +				/* fragmented and no outstanding allocations */ +				BUG_ON(vb->dirty != VMAP_BBMAP_BITS); +				purge = 1;  			} -			spin_unlock(&vb->lock); -			break; +			goto next;  		} +		addr = vb->va->va_start + (i << PAGE_SHIFT); +		BUG_ON(addr_to_vb_idx(addr) != +				addr_to_vb_idx(vb->va->va_start)); +		vb->free -= 1UL << order; +		if (vb->free == 0) { +			spin_lock(&vbq->lock); +			list_del_rcu(&vb->free_list); +			spin_unlock(&vbq->lock); +		} +		spin_unlock(&vb->lock); +		break; +next:  		spin_unlock(&vb->lock);  	} + +	if (purge) +		purge_fragmented_blocks_thiscpu(); +  	put_cpu_var(vmap_block_queue);  	rcu_read_unlock(); @@ -860,11 +924,11 @@ static void vb_free(const void *addr, unsigned long size)  	BUG_ON(!vb);  	spin_lock(&vb->lock); -	bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order); +	BUG_ON(bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order));  	vb->dirty += 1UL << order;  	if (vb->dirty == VMAP_BBMAP_BITS) { -		BUG_ON(vb->free || !list_empty(&vb->free_list)); +		BUG_ON(vb->free);  		spin_unlock(&vb->lock);  		free_vmap_block(vb);  	} else @@ -1033,8 +1097,6 @@ void __init vmalloc_init(void)  		vbq = &per_cpu(vmap_block_queue, i);  		spin_lock_init(&vbq->lock);  		INIT_LIST_HEAD(&vbq->free); -		INIT_LIST_HEAD(&vbq->dirty); -		vbq->nr_dirty = 0;  	}  	/* Import existing vmlist entries. */ diff --git a/net/9p/client.c b/net/9p/client.c index 8af95b2dddd..09d4f1e2e4a 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -69,7 +69,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...);  static int parse_opts(char *opts, struct p9_client *clnt)  { -	char *options; +	char *options, *tmp_options;  	char *p;  	substring_t args[MAX_OPT_ARGS];  	int option; @@ -81,12 +81,13 @@ static int parse_opts(char *opts, struct p9_client *clnt)  	if (!opts)  		return 0; -	options = kstrdup(opts, GFP_KERNEL); -	if (!options) { +	tmp_options = kstrdup(opts, GFP_KERNEL); +	if (!tmp_options) {  		P9_DPRINTK(P9_DEBUG_ERROR,  				"failed to allocate copy of option string\n");  		return -ENOMEM;  	} +	options = tmp_options;  	while ((p = strsep(&options, ",")) != NULL) {  		int token; @@ -108,6 +109,13 @@ static int parse_opts(char *opts, struct p9_client *clnt)  			break;  		case Opt_trans:  			clnt->trans_mod = v9fs_get_trans_by_name(&args[0]); +			if(clnt->trans_mod == NULL) { +				P9_DPRINTK(P9_DEBUG_ERROR, +				   "Could not find request transport: %s\n", +				   (char *) &args[0]); +				ret = -EINVAL; +				goto free_and_return; +			}  			break;  		case Opt_legacy:  			clnt->dotu = 0; @@ -117,7 +125,8 @@ static int parse_opts(char *opts, struct p9_client *clnt)  		}  	} -	kfree(options); +free_and_return: +	kfree(tmp_options);  	return ret;  } @@ -667,18 +676,12 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)  	clnt->trans = NULL;  	spin_lock_init(&clnt->lock);  	INIT_LIST_HEAD(&clnt->fidlist); -	clnt->fidpool = p9_idpool_create(); -	if (IS_ERR(clnt->fidpool)) { -		err = PTR_ERR(clnt->fidpool); -		clnt->fidpool = NULL; -		goto error; -	}  	p9_tag_init(clnt);  	err = parse_opts(options, clnt);  	if (err < 0) -		goto error; +		goto free_client;  	if (!clnt->trans_mod)  		clnt->trans_mod = v9fs_get_default_trans(); @@ -687,7 +690,14 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)  		err = -EPROTONOSUPPORT;  		P9_DPRINTK(P9_DEBUG_ERROR,  				"No transport defined or default transport\n"); -		goto error; +		goto free_client; +	} + +	clnt->fidpool = p9_idpool_create(); +	if (IS_ERR(clnt->fidpool)) { +		err = PTR_ERR(clnt->fidpool); +		clnt->fidpool = NULL; +		goto put_trans;  	}  	P9_DPRINTK(P9_DEBUG_MUX, "clnt %p trans %p msize %d dotu %d\n", @@ -695,19 +705,25 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)  	err = clnt->trans_mod->create(clnt, dev_name, options);  	if (err) -		goto error; +		goto destroy_fidpool;  	if ((clnt->msize+P9_IOHDRSZ) > clnt->trans_mod->maxsize)  		clnt->msize = clnt->trans_mod->maxsize-P9_IOHDRSZ;  	err = p9_client_version(clnt);  	if (err) -		goto error; +		goto close_trans;  	return clnt; -error: -	p9_client_destroy(clnt); +close_trans: +	clnt->trans_mod->close(clnt); +destroy_fidpool: +	p9_idpool_destroy(clnt->fidpool); +put_trans: +	v9fs_put_trans(clnt->trans_mod); +free_client: +	kfree(clnt);  	return ERR_PTR(err);  }  EXPORT_SYMBOL(p9_client_create); @@ -1214,10 +1230,11 @@ static int p9_client_statsize(struct p9_wstat *wst, int optional)  {  	int ret; +	/* NOTE: size shouldn't include its own length */  	/* size[2] type[2] dev[4] qid[13] */  	/* mode[4] atime[4] mtime[4] length[8]*/  	/* name[s] uid[s] gid[s] muid[s] */ -	ret = 2+2+4+13+4+4+4+8+2+2+2+2; +	ret = 2+4+13+4+4+4+8+2+2+2+2;  	if (wst->name)  		ret += strlen(wst->name); @@ -1258,7 +1275,7 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst)  		wst->name, wst->uid, wst->gid, wst->muid, wst->extension,  		wst->n_uid, wst->n_gid, wst->n_muid); -	req = p9_client_rpc(clnt, P9_TWSTAT, "dwS", fid->fid, wst->size, wst); +	req = p9_client_rpc(clnt, P9_TWSTAT, "dwS", fid->fid, wst->size+2, wst);  	if (IS_ERR(req)) {  		err = PTR_ERR(req);  		goto error; diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index be1cb909d8c..31d0b05582a 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -714,7 +714,7 @@ static int parse_opts(char *params, struct p9_fd_opts *opts)  	char *p;  	substring_t args[MAX_OPT_ARGS];  	int option; -	char *options; +	char *options, *tmp_options;  	int ret;  	opts->port = P9_PORT; @@ -724,12 +724,13 @@ static int parse_opts(char *params, struct p9_fd_opts *opts)  	if (!params)  		return 0; -	options = kstrdup(params, GFP_KERNEL); -	if (!options) { +	tmp_options = kstrdup(params, GFP_KERNEL); +	if (!tmp_options) {  		P9_DPRINTK(P9_DEBUG_ERROR,  				"failed to allocate copy of option string\n");  		return -ENOMEM;  	} +	options = tmp_options;  	while ((p = strsep(&options, ",")) != NULL) {  		int token; @@ -760,7 +761,8 @@ static int parse_opts(char *params, struct p9_fd_opts *opts)  			continue;  		}  	} -	kfree(options); + +	kfree(tmp_options);  	return 0;  } diff --git a/net/9p/trans_rdma.c b/net/9p/trans_rdma.c index 65cb29db03f..2c95a89c0f4 100644 --- a/net/9p/trans_rdma.c +++ b/net/9p/trans_rdma.c @@ -166,7 +166,7 @@ static int parse_opts(char *params, struct p9_rdma_opts *opts)  	char *p;  	substring_t args[MAX_OPT_ARGS];  	int option; -	char *options; +	char *options, *tmp_options;  	int ret;  	opts->port = P9_PORT; @@ -177,12 +177,13 @@ static int parse_opts(char *params, struct p9_rdma_opts *opts)  	if (!params)  		return 0; -	options = kstrdup(params, GFP_KERNEL); -	if (!options) { +	tmp_options = kstrdup(params, GFP_KERNEL); +	if (!tmp_options) {  		P9_DPRINTK(P9_DEBUG_ERROR,  			   "failed to allocate copy of option string\n");  		return -ENOMEM;  	} +	options = tmp_options;  	while ((p = strsep(&options, ",")) != NULL) {  		int token; @@ -216,7 +217,7 @@ static int parse_opts(char *params, struct p9_rdma_opts *opts)  	}  	/* RQ must be at least as large as the SQ */  	opts->rq_depth = max(opts->rq_depth, opts->sq_depth); -	kfree(options); +	kfree(tmp_options);  	return 0;  } diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index ea1e3daabef..cb50f4ae5ee 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c @@ -102,7 +102,8 @@ static void p9_virtio_close(struct p9_client *client)  	struct virtio_chan *chan = client->trans;  	mutex_lock(&virtio_9p_lock); -	chan->inuse = false; +	if (chan) +		chan->inuse = false;  	mutex_unlock(&virtio_9p_lock);  } @@ -311,6 +312,7 @@ p9_virtio_create(struct p9_client *client, const char *devname, char *args)  	}  	client->trans = (void *)chan; +	client->status = Connected;  	chan->client = client;  	return 0; diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 82cae3bca78..d08a0c7675b 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -1280,6 +1280,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)  	case ETHTOOL_GPERMADDR:  	case ETHTOOL_GUFO:  	case ETHTOOL_GGSO: +	case ETHTOOL_GGRO:  	case ETHTOOL_GFLAGS:  	case ETHTOOL_GPFLAGS:  	case ETHTOOL_GRXFH: diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index b55a0c3df82..83ed7150089 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c @@ -127,16 +127,12 @@ static int ipcomp4_init_state(struct xfrm_state *x)  	if (x->props.mode == XFRM_MODE_TUNNEL) {  		err = ipcomp_tunnel_attach(x);  		if (err) -			goto error_tunnel; +			goto out;  	}  	err = 0;  out:  	return err; - -error_tunnel: -	ipcomp_destroy(x); -	goto out;  }  static const struct xfrm_type ipcomp_type = { diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c index a9fbb151bb7..bb42f39c1db 100644 --- a/net/ipv6/ipcomp6.c +++ b/net/ipv6/ipcomp6.c @@ -157,16 +157,12 @@ static int ipcomp6_init_state(struct xfrm_state *x)  	if (x->props.mode == XFRM_MODE_TUNNEL) {  		err = ipcomp6_tunnel_attach(x);  		if (err) -			goto error_tunnel; +			goto out;  	}  	err = 0;  out:  	return err; -error_tunnel: -	ipcomp_destroy(x); - -	goto out;  }  static const struct xfrm_type ipcomp6_type = diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 96f2088e744..9fa3322b2a7 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -1106,7 +1106,7 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp)  	int err = -ENOMEM;  	struct xfrm_state *x = xfrm_state_alloc(net);  	if (!x) -		goto error; +		goto out;  	memcpy(&x->id, &orig->id, sizeof(x->id));  	memcpy(&x->sel, &orig->sel, sizeof(x->sel)); @@ -1164,16 +1164,10 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig, int *errp)  	return x;   error: +	xfrm_state_put(x); +out:  	if (errp)  		*errp = err; -	if (x) { -		kfree(x->aalg); -		kfree(x->ealg); -		kfree(x->calg); -		kfree(x->encap); -		kfree(x->coaddr); -	} -	kfree(x);  	return NULL;  } diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl index 090f2483970..2f3230db7ff 100755 --- a/scripts/get_maintainer.pl +++ b/scripts/get_maintainer.pl @@ -74,8 +74,8 @@ my %VCS_cmds;  my %VCS_cmds_git = (      "execute_cmd" => \&git_execute_cmd,      "available" => '(which("git") ne "") && (-d ".git")', -    "find_signers_cmd" => "git log --since=\$email_git_since -- \$file", -    "find_commit_signers_cmd" => "git log -1 \$commit", +    "find_signers_cmd" => "git log --no-color --since=\$email_git_since -- \$file", +    "find_commit_signers_cmd" => "git log --no-color -1 \$commit",      "blame_range_cmd" => "git blame -l -L \$diff_start,+\$diff_length \$file",      "blame_file_cmd" => "git blame -l \$file",      "commit_pattern" => "^commit [0-9a-f]{40,40}", diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl index ce3e40b01e4..e950f9cde01 100644 --- a/scripts/markup_oops.pl +++ b/scripts/markup_oops.pl @@ -158,7 +158,7 @@ while (<STDIN>) {  		$function = $1;  		$func_offset = $2;  	} -	if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\]  \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { +	if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\]  \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+0x([0-9a-f]+)\/0x[a-f0-9]/) {  		$function = $1;  		$func_offset = $2;  	} diff --git a/security/inode.c b/security/inode.c index f7496c6a022..c3a793881d0 100644 --- a/security/inode.c +++ b/security/inode.c @@ -156,15 +156,8 @@ static int create_by_name(const char *name, mode_t mode,  	 * block. A pointer to that is in the struct vfsmount that we  	 * have around.  	 */ -	if (!parent ) { -		if (mount && mount->mnt_sb) { -			parent = mount->mnt_sb->s_root; -		} -	} -	if (!parent) { -		pr_debug("securityfs: Ah! can not find a parent!\n"); -		return -EFAULT; -	} +	if (!parent) +		parent = mount->mnt_sb->s_root;  	mutex_lock(&parent->d_inode->i_mutex);  	*dentry = lookup_one_len(name, parent, strlen(name)); diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h index c41afe6639a..47fb65d1fcb 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h @@ -65,7 +65,6 @@ void integrity_audit_msg(int audit_msgno, struct inode *inode,  			 const char *cause, int result, int info);  /* Internal IMA function definitions */ -void ima_iintcache_init(void);  int ima_init(void);  void ima_cleanup(void);  int ima_fs_init(void); @@ -131,7 +130,7 @@ void iint_free(struct kref *kref);  void iint_rcu_free(struct rcu_head *rcu);  /* IMA policy related functions */ -enum ima_hooks { PATH_CHECK = 1, FILE_MMAP, BPRM_CHECK }; +enum ima_hooks { FILE_CHECK = 1, FILE_MMAP, BPRM_CHECK };  int ima_match_policy(struct inode *inode, enum ima_hooks func, int mask);  void ima_init_policy(void); diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index 3cd58b60afd..2a5e0bcf388 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c @@ -95,12 +95,12 @@ err_out:   * ima_must_measure - measure decision based on policy.   * @inode: pointer to inode to measure   * @mask: contains the permission mask (MAY_READ, MAY_WRITE, MAY_EXECUTE) - * @function: calling function (PATH_CHECK, BPRM_CHECK, FILE_MMAP) + * @function: calling function (FILE_CHECK, BPRM_CHECK, FILE_MMAP)   *   * The policy is defined in terms of keypairs:   * 		subj=, obj=, type=, func=, mask=, fsmagic=   *	subj,obj, and type: are LSM specific. - * 	func: PATH_CHECK | BPRM_CHECK | FILE_MMAP + * 	func: FILE_CHECK | BPRM_CHECK | FILE_MMAP   * 	mask: contains the permission mask   *	fsmagic: hex value   * diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c index fa592ff1ac1..0d83edcfc40 100644 --- a/security/integrity/ima/ima_iint.c +++ b/security/integrity/ima/ima_iint.c @@ -52,9 +52,6 @@ int ima_inode_alloc(struct inode *inode)  	struct ima_iint_cache *iint = NULL;  	int rc = 0; -	if (!ima_initialized) -		return 0; -  	iint = kmem_cache_alloc(iint_cache, GFP_NOFS);  	if (!iint)  		return -ENOMEM; @@ -118,8 +115,6 @@ void ima_inode_free(struct inode *inode)  {  	struct ima_iint_cache *iint; -	if (!ima_initialized) -		return;  	spin_lock(&ima_iint_lock);  	iint = radix_tree_delete(&ima_iint_store, (unsigned long)inode);  	spin_unlock(&ima_iint_lock); @@ -141,9 +136,11 @@ static void init_once(void *foo)  	kref_set(&iint->refcount, 1);  } -void __init ima_iintcache_init(void) +static int __init ima_iintcache_init(void)  {  	iint_cache =  	    kmem_cache_create("iint_cache", sizeof(struct ima_iint_cache), 0,  			      SLAB_PANIC, init_once); +	return 0;  } +security_initcall(ima_iintcache_init); diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index a89f44d5e03..294b005d652 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -14,7 +14,7 @@   *   * File: ima_main.c   *	implements the IMA hooks: ima_bprm_check, ima_file_mmap, - *	and ima_path_check. + *	and ima_file_check.   */  #include <linux/module.h>  #include <linux/file.h> @@ -84,6 +84,36 @@ out:  	return found;  } +/* ima_read_write_check - reflect possible reading/writing errors in the PCR. + * + * When opening a file for read, if the file is already open for write, + * the file could change, resulting in a file measurement error. + * + * Opening a file for write, if the file is already open for read, results + * in a time of measure, time of use (ToMToU) error. + * + * In either case invalidate the PCR. + */ +enum iint_pcr_error { TOMTOU, OPEN_WRITERS }; +static void ima_read_write_check(enum iint_pcr_error error, +				 struct ima_iint_cache *iint, +				 struct inode *inode, +				 const unsigned char *filename) +{ +	switch (error) { +	case TOMTOU: +		if (iint->readcount > 0) +			ima_add_violation(inode, filename, "invalid_pcr", +					  "ToMToU"); +		break; +	case OPEN_WRITERS: +		if (iint->writecount > 0) +			ima_add_violation(inode, filename, "invalid_pcr", +					  "open_writers"); +		break; +	} +} +  /*   * Update the counts given an fmode_t   */ @@ -99,6 +129,47 @@ static void ima_inc_counts(struct ima_iint_cache *iint, fmode_t mode)  }  /* + * ima_counts_get - increment file counts + * + * Maintain read/write counters for all files, but only + * invalidate the PCR for measured files: + * 	- Opening a file for write when already open for read, + *	  results in a time of measure, time of use (ToMToU) error. + *	- Opening a file for read when already open for write, + * 	  could result in a file measurement error. + * + */ +void ima_counts_get(struct file *file) +{ +	struct dentry *dentry = file->f_path.dentry; +	struct inode *inode = dentry->d_inode; +	fmode_t mode = file->f_mode; +	struct ima_iint_cache *iint; +	int rc; + +	if (!ima_initialized || !S_ISREG(inode->i_mode)) +		return; +	iint = ima_iint_find_get(inode); +	if (!iint) +		return; +	mutex_lock(&iint->mutex); +	rc = ima_must_measure(iint, inode, MAY_READ, FILE_CHECK); +	if (rc < 0) +		goto out; + +	if (mode & FMODE_WRITE) { +		ima_read_write_check(TOMTOU, iint, inode, dentry->d_name.name); +		goto out; +	} +	ima_read_write_check(OPEN_WRITERS, iint, inode, dentry->d_name.name); +out: +	ima_inc_counts(iint, file->f_mode); +	mutex_unlock(&iint->mutex); + +	kref_put(&iint->refcount, iint_free); +} + +/*   * Decrement ima counts   */  static void ima_dec_counts(struct ima_iint_cache *iint, struct inode *inode, @@ -153,123 +224,6 @@ void ima_file_free(struct file *file)  	kref_put(&iint->refcount, iint_free);  } -/* ima_read_write_check - reflect possible reading/writing errors in the PCR. - * - * When opening a file for read, if the file is already open for write, - * the file could change, resulting in a file measurement error. - * - * Opening a file for write, if the file is already open for read, results - * in a time of measure, time of use (ToMToU) error. - * - * In either case invalidate the PCR. - */ -enum iint_pcr_error { TOMTOU, OPEN_WRITERS }; -static void ima_read_write_check(enum iint_pcr_error error, -				 struct ima_iint_cache *iint, -				 struct inode *inode, -				 const unsigned char *filename) -{ -	switch (error) { -	case TOMTOU: -		if (iint->readcount > 0) -			ima_add_violation(inode, filename, "invalid_pcr", -					  "ToMToU"); -		break; -	case OPEN_WRITERS: -		if (iint->writecount > 0) -			ima_add_violation(inode, filename, "invalid_pcr", -					  "open_writers"); -		break; -	} -} - -static int get_path_measurement(struct ima_iint_cache *iint, struct file *file, -				const unsigned char *filename) -{ -	int rc = 0; - -	ima_inc_counts(iint, file->f_mode); - -	rc = ima_collect_measurement(iint, file); -	if (!rc) -		ima_store_measurement(iint, file, filename); -	return rc; -} - -/** - * ima_path_check - based on policy, collect/store measurement. - * @path: contains a pointer to the path to be measured - * @mask: contains MAY_READ, MAY_WRITE or MAY_EXECUTE - * - * Measure the file being open for readonly, based on the - * ima_must_measure() policy decision. - * - * Keep read/write counters for all files, but only - * invalidate the PCR for measured files: - * 	- Opening a file for write when already open for read, - *	  results in a time of measure, time of use (ToMToU) error. - *	- Opening a file for read when already open for write, - * 	  could result in a file measurement error. - * - * Always return 0 and audit dentry_open failures. - * (Return code will be based upon measurement appraisal.) - */ -int ima_path_check(struct path *path, int mask) -{ -	struct inode *inode = path->dentry->d_inode; -	struct ima_iint_cache *iint; -	struct file *file = NULL; -	int rc; - -	if (!ima_initialized || !S_ISREG(inode->i_mode)) -		return 0; -	iint = ima_iint_find_get(inode); -	if (!iint) -		return 0; - -	mutex_lock(&iint->mutex); - -	rc = ima_must_measure(iint, inode, MAY_READ, PATH_CHECK); -	if (rc < 0) -		goto out; - -	if ((mask & MAY_WRITE) || (mask == 0)) -		ima_read_write_check(TOMTOU, iint, inode, -				     path->dentry->d_name.name); - -	if ((mask & (MAY_WRITE | MAY_READ | MAY_EXEC)) != MAY_READ) -		goto out; - -	ima_read_write_check(OPEN_WRITERS, iint, inode, -			     path->dentry->d_name.name); -	if (!(iint->flags & IMA_MEASURED)) { -		struct dentry *dentry = dget(path->dentry); -		struct vfsmount *mnt = mntget(path->mnt); - -		file = dentry_open(dentry, mnt, O_RDONLY | O_LARGEFILE, -				   current_cred()); -		if (IS_ERR(file)) { -			int audit_info = 0; - -			integrity_audit_msg(AUDIT_INTEGRITY_PCR, inode, -					    dentry->d_name.name, -					    "add_measurement", -					    "dentry_open failed", -					    1, audit_info); -			file = NULL; -			goto out; -		} -		rc = get_path_measurement(iint, file, dentry->d_name.name); -	} -out: -	mutex_unlock(&iint->mutex); -	if (file) -		fput(file); -	kref_put(&iint->refcount, iint_free); -	return 0; -} -EXPORT_SYMBOL_GPL(ima_path_check); -  static int process_measurement(struct file *file, const unsigned char *filename,  			       int mask, int function)  { @@ -297,33 +251,6 @@ out:  	return rc;  } -/* - * ima_counts_get - increment file counts - * - * - for IPC shm and shmat file. - * - for nfsd exported files. - * - * Increment the counts for these files to prevent unnecessary - * imbalance messages. - */ -void ima_counts_get(struct file *file) -{ -	struct inode *inode = file->f_dentry->d_inode; -	struct ima_iint_cache *iint; - -	if (!ima_initialized || !S_ISREG(inode->i_mode)) -		return; -	iint = ima_iint_find_get(inode); -	if (!iint) -		return; -	mutex_lock(&iint->mutex); -	ima_inc_counts(iint, file->f_mode); -	mutex_unlock(&iint->mutex); - -	kref_put(&iint->refcount, iint_free); -} -EXPORT_SYMBOL_GPL(ima_counts_get); -  /**   * ima_file_mmap - based on policy, collect/store measurement.   * @file: pointer to the file to be measured (May be NULL) @@ -369,11 +296,31 @@ int ima_bprm_check(struct linux_binprm *bprm)  	return 0;  } +/** + * ima_path_check - based on policy, collect/store measurement. + * @file: pointer to the file to be measured + * @mask: contains MAY_READ, MAY_WRITE or MAY_EXECUTE + * + * Measure files based on the ima_must_measure() policy decision. + * + * Always return 0 and audit dentry_open failures. + * (Return code will be based upon measurement appraisal.) + */ +int ima_file_check(struct file *file, int mask) +{ +	int rc; + +	rc = process_measurement(file, file->f_dentry->d_name.name, +				 mask & (MAY_READ | MAY_WRITE | MAY_EXEC), +				 FILE_CHECK); +	return 0; +} +EXPORT_SYMBOL_GPL(ima_file_check); +  static int __init init_ima(void)  {  	int error; -	ima_iintcache_init();  	error = ima_init();  	ima_initialized = 1;  	return error; diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index e1278399b34..4759d0f9933 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -67,7 +67,7 @@ static struct ima_measure_rule_entry default_rules[] = {  	 .flags = IMA_FUNC | IMA_MASK},  	{.action = MEASURE,.func = BPRM_CHECK,.mask = MAY_EXEC,  	 .flags = IMA_FUNC | IMA_MASK}, -	{.action = MEASURE,.func = PATH_CHECK,.mask = MAY_READ,.uid = 0, +	{.action = MEASURE,.func = FILE_CHECK,.mask = MAY_READ,.uid = 0,  	 .flags = IMA_FUNC | IMA_MASK | IMA_UID},  }; @@ -282,8 +282,11 @@ static int ima_parse_rule(char *rule, struct ima_measure_rule_entry *entry)  			break;  		case Opt_func:  			audit_log_format(ab, "func=%s ", args[0].from); -			if (strcmp(args[0].from, "PATH_CHECK") == 0) -				entry->func = PATH_CHECK; +			if (strcmp(args[0].from, "FILE_CHECK") == 0) +				entry->func = FILE_CHECK; +			/* PATH_CHECK is for backwards compat */ +			else if (strcmp(args[0].from, "PATH_CHECK") == 0) +				entry->func = FILE_CHECK;  			else if (strcmp(args[0].from, "FILE_MMAP") == 0)  				entry->func = FILE_MMAP;  			else if (strcmp(args[0].from, "BPRM_CHECK") == 0) diff --git a/security/security.c b/security/security.c index 24e060be9fa..122b748d0f4 100644 --- a/security/security.c +++ b/security/security.c @@ -666,8 +666,6 @@ int security_file_alloc(struct file *file)  void security_file_free(struct file *file)  {  	security_ops->file_free_security(file); -	if (file->f_dentry) -		ima_file_free(file);  }  int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c index cb65bd0dd35..459c1f62783 100644 --- a/sound/pci/ctxfi/ctatc.c +++ b/sound/pci/ctxfi/ctatc.c @@ -166,18 +166,7 @@ static void ct_unmap_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm)  static unsigned long atc_get_ptp_phys(struct ct_atc *atc, int index)  { -	struct ct_vm *vm; -	void *kvirt_addr; -	unsigned long phys_addr; - -	vm = atc->vm; -	kvirt_addr = vm->get_ptp_virt(vm, index); -	if (kvirt_addr == NULL) -		phys_addr = (~0UL); -	else -		phys_addr = virt_to_phys(kvirt_addr); - -	return phys_addr; +	return atc->vm->get_ptp_phys(atc->vm, index);  }  static unsigned int convert_format(snd_pcm_format_t snd_format) @@ -1669,7 +1658,7 @@ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,  	}  	/* Set up device virtual memory management object */ -	err = ct_vm_create(&atc->vm); +	err = ct_vm_create(&atc->vm, pci);  	if (err < 0)  		goto error1; diff --git a/sound/pci/ctxfi/ctvmem.c b/sound/pci/ctxfi/ctvmem.c index 6b78752e950..65da6e466f8 100644 --- a/sound/pci/ctxfi/ctvmem.c +++ b/sound/pci/ctxfi/ctvmem.c @@ -138,7 +138,7 @@ ct_vm_map(struct ct_vm *vm, struct snd_pcm_substream *substream, int size)  		return NULL;  	} -	ptp = vm->ptp[0]; +	ptp = (unsigned long *)vm->ptp[0].area;  	pte_start = (block->addr >> CT_PAGE_SHIFT);  	pages = block->size >> CT_PAGE_SHIFT;  	for (i = 0; i < pages; i++) { @@ -158,25 +158,25 @@ static void ct_vm_unmap(struct ct_vm *vm, struct ct_vm_block *block)  }  /* * - * return the host (kmalloced) addr of the @index-th device - * page talbe page on success, or NULL on failure. - * The first returned NULL indicates the termination. + * return the host physical addr of the @index-th device + * page table page on success, or ~0UL on failure. + * The first returned ~0UL indicates the termination.   * */ -static void * -ct_get_ptp_virt(struct ct_vm *vm, int index) +static dma_addr_t +ct_get_ptp_phys(struct ct_vm *vm, int index)  { -	void *addr; +	dma_addr_t addr; -	addr = (index >= CT_PTP_NUM) ? NULL : vm->ptp[index]; +	addr = (index >= CT_PTP_NUM) ? ~0UL : vm->ptp[index].addr;  	return addr;  } -int ct_vm_create(struct ct_vm **rvm) +int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci)  {  	struct ct_vm *vm;  	struct ct_vm_block *block; -	int i; +	int i, err = 0;  	*rvm = NULL; @@ -188,23 +188,21 @@ int ct_vm_create(struct ct_vm **rvm)  	/* Allocate page table pages */  	for (i = 0; i < CT_PTP_NUM; i++) { -		vm->ptp[i] = kmalloc(PAGE_SIZE, GFP_KERNEL); -		if (!vm->ptp[i]) +		err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, +					  snd_dma_pci_data(pci), +					  PAGE_SIZE, &vm->ptp[i]); +		if (err < 0)  			break;  	} -	if (!i) { +	if (err < 0) {  		/* no page table pages are allocated */ -		kfree(vm); +		ct_vm_destroy(vm);  		return -ENOMEM;  	}  	vm->size = CT_ADDRS_PER_PAGE * i; -	/* Initialise remaining ptps */ -	for (; i < CT_PTP_NUM; i++) -		vm->ptp[i] = NULL; -  	vm->map = ct_vm_map;  	vm->unmap = ct_vm_unmap; -	vm->get_ptp_virt = ct_get_ptp_virt; +	vm->get_ptp_phys = ct_get_ptp_phys;  	INIT_LIST_HEAD(&vm->unused);  	INIT_LIST_HEAD(&vm->used);  	block = kzalloc(sizeof(*block), GFP_KERNEL); @@ -242,7 +240,7 @@ void ct_vm_destroy(struct ct_vm *vm)  	/* free allocated page table pages */  	for (i = 0; i < CT_PTP_NUM; i++) -		kfree(vm->ptp[i]); +		snd_dma_free_pages(&vm->ptp[i]);  	vm->size = 0; diff --git a/sound/pci/ctxfi/ctvmem.h b/sound/pci/ctxfi/ctvmem.h index 01e4fd0386a..b23adfca4de 100644 --- a/sound/pci/ctxfi/ctvmem.h +++ b/sound/pci/ctxfi/ctvmem.h @@ -22,6 +22,8 @@  #include <linux/mutex.h>  #include <linux/list.h> +#include <linux/pci.h> +#include <sound/memalloc.h>  /* The chip can handle the page table of 4k pages   * (emu20k1 can handle even 8k pages, but we don't use it right now) @@ -41,7 +43,7 @@ struct snd_pcm_substream;  /* Virtual memory management object for card device */  struct ct_vm { -	void *ptp[CT_PTP_NUM];		/* Device page table pages */ +	struct snd_dma_buffer ptp[CT_PTP_NUM];	/* Device page table pages */  	unsigned int size;		/* Available addr space in bytes */  	struct list_head unused;	/* List of unused blocks */  	struct list_head used;		/* List of used blocks */ @@ -52,10 +54,10 @@ struct ct_vm {  				   int size);  	/* Unmap device logical addr area. */  	void (*unmap)(struct ct_vm *, struct ct_vm_block *block); -	void *(*get_ptp_virt)(struct ct_vm *vm, int index); +	dma_addr_t (*get_ptp_phys)(struct ct_vm *vm, int index);  }; -int ct_vm_create(struct ct_vm **rvm); +int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci);  void ct_vm_destroy(struct ct_vm *vm);  #endif /* CTVMEM_H */ diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index ec9c348336c..ff6da6f386d 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -426,6 +426,7 @@ struct azx {  	/* flags */  	int position_fix; +	int poll_count;  	unsigned int running :1;  	unsigned int initialized :1;  	unsigned int single_cmd :1; @@ -506,7 +507,7 @@ static char *driver_short_names[] __devinitdata = {  #define get_azx_dev(substream) (substream->runtime->private_data)  static int azx_acquire_irq(struct azx *chip, int do_disconnect); - +static int azx_send_cmd(struct hda_bus *bus, unsigned int val);  /*   * Interface for HD codec   */ @@ -664,11 +665,12 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,  {  	struct azx *chip = bus->private_data;  	unsigned long timeout; +	int do_poll = 0;   again:  	timeout = jiffies + msecs_to_jiffies(1000);  	for (;;) { -		if (chip->polling_mode) { +		if (chip->polling_mode || do_poll) {  			spin_lock_irq(&chip->reg_lock);  			azx_update_rirb(chip);  			spin_unlock_irq(&chip->reg_lock); @@ -676,6 +678,9 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,  		if (!chip->rirb.cmds[addr]) {  			smp_rmb();  			bus->rirb_error = 0; + +			if (!do_poll) +				chip->poll_count = 0;  			return chip->rirb.res[addr]; /* the last value */  		}  		if (time_after(jiffies, timeout)) @@ -688,6 +693,16 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,  		}  	} +	if (!chip->polling_mode && chip->poll_count < 2) { +		snd_printdd(SFX "azx_get_response timeout, " +			   "polling the codec once: last cmd=0x%08x\n", +			   chip->last_cmd[addr]); +		do_poll = 1; +		chip->poll_count++; +		goto again; +	} + +  	if (!chip->polling_mode) {  		snd_printk(KERN_WARNING SFX "azx_get_response timeout, "  			   "switching to polling mode: last cmd=0x%08x\n", @@ -1878,6 +1893,9 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)  	if (!bdl_pos_adj[chip->dev_index])  		return 1; /* no delayed ack */ +	if (WARN_ONCE(!azx_dev->period_bytes, +		      "hda-intel: zero azx_dev->period_bytes")) +		return 0; /* this shouldn't happen! */  	if (pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)  		return 0; /* NG - it's below the period boundary */  	return 1; /* OK, it's fine */ @@ -2043,7 +2061,7 @@ static int azx_acquire_irq(struct azx *chip, int do_disconnect)  {  	if (request_irq(chip->pci->irq, azx_interrupt,  			chip->msi ? 0 : IRQF_SHARED, -			"HDA Intel", chip)) { +			"hda_intel", chip)) {  		printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "  		       "disabling device\n", chip->pci->irq);  		if (do_disconnect) @@ -2332,6 +2350,7 @@ static void __devinit check_probe_mask(struct azx *chip, int dev)   */  static struct snd_pci_quirk msi_black_list[] __devinitdata = {  	SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ +	SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */  	{}  }; diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 3f92def752f..da34095c707 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1093,6 +1093,16 @@ static void alc889_coef_init(struct hda_codec *codec)  	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, tmp|0x2010);  } +/* turn on/off EAPD control (only if available) */ +static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on) +{ +	if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN) +		return; +	if (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD) +		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_EAPD_BTLENABLE, +				    on ? 2 : 0); +} +  static void alc_auto_init_amp(struct hda_codec *codec, int type)  {  	unsigned int tmp; @@ -1110,25 +1120,22 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)  	case ALC_INIT_DEFAULT:  		switch (codec->vendor_id) {  		case 0x10ec0260: -			snd_hda_codec_write(codec, 0x0f, 0, -					    AC_VERB_SET_EAPD_BTLENABLE, 2); -			snd_hda_codec_write(codec, 0x10, 0, -					    AC_VERB_SET_EAPD_BTLENABLE, 2); +			set_eapd(codec, 0x0f, 1); +			set_eapd(codec, 0x10, 1);  			break;  		case 0x10ec0262:  		case 0x10ec0267:  		case 0x10ec0268:  		case 0x10ec0269: +		case 0x10ec0270:  		case 0x10ec0272:  		case 0x10ec0660:  		case 0x10ec0662:  		case 0x10ec0663:  		case 0x10ec0862:  		case 0x10ec0889: -			snd_hda_codec_write(codec, 0x14, 0, -					    AC_VERB_SET_EAPD_BTLENABLE, 2); -			snd_hda_codec_write(codec, 0x15, 0, -					    AC_VERB_SET_EAPD_BTLENABLE, 2); +			set_eapd(codec, 0x14, 1); +			set_eapd(codec, 0x15, 1);  			break;  		}  		switch (codec->vendor_id) { @@ -1836,10 +1843,8 @@ static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec)  #ifdef CONFIG_SND_HDA_POWER_SAVE  static void alc889_power_eapd(struct hda_codec *codec, int power)  { -	snd_hda_codec_write(codec, 0x14, 0, -			    AC_VERB_SET_EAPD_BTLENABLE, power ? 2 : 0); -	snd_hda_codec_write(codec, 0x15, 0, -			    AC_VERB_SET_EAPD_BTLENABLE, power ? 2 : 0); +	set_eapd(codec, 0x14, power); +	set_eapd(codec, 0x15, power);  }  #endif @@ -9473,6 +9478,7 @@ static struct alc_config_preset alc882_presets[] = {  		.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),  		.channel_mode = alc883_3ST_6ch_modes,  		.need_dac_fix = 1, +		.const_channel_count = 6,  		.num_mux_defs =  			ARRAY_SIZE(alc888_2_capture_sources),  		.input_mux = alc888_2_capture_sources, @@ -10377,7 +10383,7 @@ static void alc262_hp_t5735_setup(struct hda_codec *codec)  	struct alc_spec *spec = codec->spec;  	spec->autocfg.hp_pins[0] = 0x15; -	spec->autocfg.speaker_pins[0] = 0x0c; /* HACK: not actually a pin */ +	spec->autocfg.speaker_pins[0] = 0x14;  }  static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = { @@ -11788,9 +11794,9 @@ static struct alc_config_preset alc262_presets[] = {  		.num_channel_mode = ARRAY_SIZE(alc262_modes),  		.channel_mode = alc262_modes,  		.input_mux = &alc262_capture_source, -		.unsol_event = alc_automute_amp_unsol_event, +		.unsol_event = alc_sku_unsol_event,  		.setup = alc262_hp_t5735_setup, -		.init_hook = alc_automute_amp, +		.init_hook = alc_inithook,  	},  	[ALC262_HP_RP5700] = {  		.mixers = { alc262_hp_rp5700_mixer }, @@ -12541,6 +12547,7 @@ static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid,  		dac = 0x02;  		break;  	case 0x15: +	case 0x21:  		dac = 0x03;  		break;  	default: diff --git a/sound/pci/ice1712/aureon.c b/sound/pci/ice1712/aureon.c index 765d7bd4c3d..9e66f6d306f 100644 --- a/sound/pci/ice1712/aureon.c +++ b/sound/pci/ice1712/aureon.c @@ -703,11 +703,13 @@ static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned sho  {  	unsigned char nvol; -	if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE)) +	if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE)) {  		nvol = 0; -	else +	} else {  		nvol = ((vol % WM_VOL_CNT) * (master % WM_VOL_CNT)) /  								WM_VOL_MAX; +		nvol += 0x1b; +	}  	wm_put(ice, index, nvol);  	wm_put_nocache(ice, index, 0x180 | nvol); @@ -778,7 +780,7 @@ static int wm_master_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_  	for (ch = 0; ch < 2; ch++) {  		unsigned int vol = ucontrol->value.integer.value[ch];  		if (vol > WM_VOL_MAX) -			continue; +			vol = WM_VOL_MAX;  		vol |= spec->master[ch] & WM_VOL_MUTE;  		if (vol != spec->master[ch]) {  			int dac; @@ -834,8 +836,8 @@ static int wm_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *  	for (i = 0; i < voices; i++) {  		unsigned int vol = ucontrol->value.integer.value[i];  		if (vol > WM_VOL_MAX) -			continue; -		vol |= spec->vol[ofs+i]; +			vol = WM_VOL_MAX; +		vol |= spec->vol[ofs+i] & WM_VOL_MUTE;  		if (vol != spec->vol[ofs+i]) {  			spec->vol[ofs+i] = vol;  			idx  = WM_DAC_ATTEN + ofs + i; diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c index a9dc5fb5477..da589d8664d 100644 --- a/sound/soc/codecs/tlv320aic23.c +++ b/sound/soc/codecs/tlv320aic23.c @@ -627,7 +627,7 @@ static int tlv320aic23_resume(struct platform_device *pdev)  	u16 reg;  	/* Sync reg_cache with the hardware */ -	for (reg = 0; reg < TLV320AIC23_RESET; reg++) { +	for (reg = 0; reg <= TLV320AIC23_ACTIVE; reg++) {  		u16 val = tlv320aic23_read_reg_cache(codec, reg);  		tlv320aic23_write(codec, reg, val);  	} diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c index ce5515e3f2b..3595bd57c4e 100644 --- a/sound/soc/codecs/wm8903.c +++ b/sound/soc/codecs/wm8903.c @@ -1504,7 +1504,7 @@ static int wm8903_resume(struct platform_device *pdev)  	struct i2c_client *i2c = codec->control_data;  	int i;  	u16 *reg_cache = codec->reg_cache; -	u16 *tmp_cache = kmemdup(codec->reg_cache, sizeof(wm8903_reg_defaults), +	u16 *tmp_cache = kmemdup(reg_cache, sizeof(wm8903_reg_defaults),  				 GFP_KERNEL);  	/* Bring the codec back up to standby first to minimise pop/clicks */ @@ -1516,6 +1516,7 @@ static int wm8903_resume(struct platform_device *pdev)  		for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++)  			if (tmp_cache[i] != reg_cache[i])  				snd_soc_write(codec, i, tmp_cache[i]); +		kfree(tmp_cache);  	} else {  		dev_err(&i2c->dev, "Failed to allocate temporary cache\n");  	} diff --git a/sound/soc/omap/Makefile b/sound/soc/omap/Makefile index 3db8a6c523f..19283e5edfb 100644 --- a/sound/soc/omap/Makefile +++ b/sound/soc/omap/Makefile @@ -25,7 +25,7 @@ obj-$(CONFIG_SND_OMAP_SOC_OSK5912) += snd-soc-osk5912.o  obj-$(CONFIG_SND_OMAP_SOC_OVERO) += snd-soc-overo.o  obj-$(CONFIG_SND_OMAP_SOC_OMAP2EVM) += snd-soc-omap2evm.o  obj-$(CONFIG_SND_OMAP_SOC_OMAP3EVM) += snd-soc-omap3evm.o -obj-$(CONFIG_SND_OMAP_SOC_OMAP3517EVM) += snd-soc-am3517evm.o +obj-$(CONFIG_SND_OMAP_SOC_AM3517EVM) += snd-soc-am3517evm.o  obj-$(CONFIG_SND_OMAP_SOC_SDP3430) += snd-soc-sdp3430.o  obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o  obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c index 71b2c161158..68980c19a3b 100644 --- a/sound/soc/omap/omap3pandora.c +++ b/sound/soc/omap/omap3pandora.c @@ -145,6 +145,7 @@ static const struct snd_soc_dapm_widget omap3pandora_in_dapm_widgets[] = {  };  static const struct snd_soc_dapm_route omap3pandora_out_map[] = { +	{"PCM DAC", NULL, "APLL Enable"},  	{"Headphone Amplifier", NULL, "PCM DAC"},  	{"Line Out", NULL, "PCM DAC"},  	{"Headphone Jack", NULL, "Headphone Amplifier"}, diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore index fe08660ce0b..124760bb37b 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -13,6 +13,7 @@ perf*.xml  perf*.html  common-cmds.h  perf.data +perf.data.old  tags  TAGS  cscope* diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index db10c0e8eca..860f1eeeea7 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -269,7 +269,7 @@ parse_callchain_opt(const struct option *opt __used, const char *arg,  	else if (!strncmp(tok, "none", strlen(arg))) {  		callchain_param.mode = CHAIN_NONE; -		symbol_conf.use_callchain = true; +		symbol_conf.use_callchain = false;  		return 0;  	} diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index ddc584b6487..4b91d8cf00e 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -705,7 +705,7 @@ static void print_mapped_keys(void)  		fprintf(stdout, "\t[w]     toggle display weighted/count[E]r. \t(%d)\n", display_weighted ? 1 : 0);  	fprintf(stdout, -		"\t[K]     hide kernel_symbols symbols.             \t(%s)\n", +		"\t[K]     hide kernel_symbols symbols.     \t(%s)\n",  		hide_kernel_symbols ? "yes" : "no");  	fprintf(stdout,  		"\t[U]     hide user symbols.               \t(%s)\n", diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index bb0fd6da2d5..8a9e6baa309 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -295,10 +295,10 @@ void thread__find_addr_location(struct thread *self,  	al->thread = self;  	al->addr = addr; -	if (cpumode & PERF_RECORD_MISC_KERNEL) { +	if (cpumode == PERF_RECORD_MISC_KERNEL) {  		al->level = 'k';  		mg = &session->kmaps; -	} else if (cpumode & PERF_RECORD_MISC_USER) +	} else if (cpumode == PERF_RECORD_MISC_USER)  		al->level = '.';  	else {  		al->level = 'H'; diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c index 30f70fd511c..a9d3fc6c681 100644 --- a/virt/kvm/eventfd.c +++ b/virt/kvm/eventfd.c @@ -72,12 +72,13 @@ static void  irqfd_shutdown(struct work_struct *work)  {  	struct _irqfd *irqfd = container_of(work, struct _irqfd, shutdown); +	u64 cnt;  	/*  	 * Synchronize with the wait-queue and unhook ourselves to prevent  	 * further events.  	 */ -	remove_wait_queue(irqfd->wqh, &irqfd->wait); +	eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt);  	/*  	 * We know no new events will be scheduled at this point, so block @@ -166,7 +167,7 @@ irqfd_ptable_queue_proc(struct file *file, wait_queue_head_t *wqh,  static int  kvm_irqfd_assign(struct kvm *kvm, int fd, int gsi)  { -	struct _irqfd *irqfd; +	struct _irqfd *irqfd, *tmp;  	struct file *file = NULL;  	struct eventfd_ctx *eventfd = NULL;  	int ret; @@ -203,9 +204,20 @@ kvm_irqfd_assign(struct kvm *kvm, int fd, int gsi)  	init_waitqueue_func_entry(&irqfd->wait, irqfd_wakeup);  	init_poll_funcptr(&irqfd->pt, irqfd_ptable_queue_proc); +	spin_lock_irq(&kvm->irqfds.lock); + +	ret = 0; +	list_for_each_entry(tmp, &kvm->irqfds.items, list) { +		if (irqfd->eventfd != tmp->eventfd) +			continue; +		/* This fd is used for another irq already. */ +		ret = -EBUSY; +		spin_unlock_irq(&kvm->irqfds.lock); +		goto fail; +	} +  	events = file->f_op->poll(file, &irqfd->pt); -	spin_lock_irq(&kvm->irqfds.lock);  	list_add_tail(&irqfd->list, &kvm->irqfds.items);  	spin_unlock_irq(&kvm->irqfds.lock); diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index 9b077342ab5..9fd5b3ebc51 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c @@ -302,6 +302,7 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt,  {  	int r = -EINVAL;  	int delta; +	unsigned max_pin;  	struct kvm_kernel_irq_routing_entry *ei;  	struct hlist_node *n; @@ -322,12 +323,15 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt,  		switch (ue->u.irqchip.irqchip) {  		case KVM_IRQCHIP_PIC_MASTER:  			e->set = kvm_set_pic_irq; +			max_pin = 16;  			break;  		case KVM_IRQCHIP_PIC_SLAVE:  			e->set = kvm_set_pic_irq; +			max_pin = 16;  			delta = 8;  			break;  		case KVM_IRQCHIP_IOAPIC: +			max_pin = KVM_IOAPIC_NUM_PINS;  			e->set = kvm_set_ioapic_irq;  			break;  		default: @@ -335,7 +339,7 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt,  		}  		e->irqchip.irqchip = ue->u.irqchip.irqchip;  		e->irqchip.pin = ue->u.irqchip.pin + delta; -		if (e->irqchip.pin >= KVM_IOAPIC_NUM_PINS) +		if (e->irqchip.pin >= max_pin)  			goto out;  		rt->chip[ue->u.irqchip.irqchip][e->irqchip.pin] = ue->gsi;  		break;  |