initial srpm import
This commit is contained in:
		
							parent
							
								
									64ba2e5ffd
								
							
						
					
					
						commit
						7a32965a10
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -0,0 +1,3 @@ | ||||
| linux-2.6.34.tar.bz2 | ||||
| patch-2.6.35-rc6-git1.bz2 | ||||
| patch-2.6.35-rc6.bz2 | ||||
							
								
								
									
										105
									
								
								Makefile.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								Makefile.config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | ||||
| # Make rules for configuration files.
 | ||||
| #
 | ||||
| # $Id$
 | ||||
| 
 | ||||
| CFG		= kernel-$(VERSION) | ||||
| 
 | ||||
| CONFIGFILES	= \
 | ||||
| 	$(CFG)-i686.config $(CFG)-i686-debug.config \
 | ||||
| 	$(CFG)-i686-PAE.config $(CFG)-i686-PAEdebug.config \
 | ||||
| 	$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
 | ||||
| 	$(CFG)-s390x.config $(CFG)-arm.config \
 | ||||
| 	$(CFG)-ppc.config $(CFG)-ppc-smp.config \
 | ||||
| 	$(CFG)-sparc64.config  \
 | ||||
| 	$(CFG)-ppc64.config $(CFG)-ppc64-debug.config \
 | ||||
| 	$(CFG)-ia64.config | ||||
| 
 | ||||
| PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64 | ||||
| TEMPFILES	= $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS))) | ||||
| 
 | ||||
| configs: $(CONFIGFILES) | ||||
| 	@rm -f kernel-*-config | ||||
| 	@rm -f $(TEMPFILES) | ||||
| 	@rm -f temp-generic temp-*-generic temp-*-generic-tmp | ||||
| 
 | ||||
| # Augment the clean target to clean up our own cruft
 | ||||
| clean :: | ||||
| 	@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-$(VERSION)*config | ||||
| 
 | ||||
| temp-generic: config-generic | ||||
| 	cat config-generic config-nodebug > temp-generic | ||||
| 
 | ||||
| temp-debug-generic: config-generic | ||||
| 	cat config-generic config-debug > temp-debug-generic | ||||
| 
 | ||||
| temp-x86-generic: config-x86-generic temp-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-x86-debug-generic: config-x86-generic temp-debug-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-x86_64-generic: config-x86_64-generic temp-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-x86_64-debug-generic: config-x86_64-generic temp-debug-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-sparc64-generic: config-sparc64-generic temp-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-powerpc-generic: config-powerpc-generic temp-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-powerpc-debug-generic: config-powerpc-generic temp-debug-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-powerpc32-generic: config-powerpc32-generic temp-powerpc-generic | ||||
| 	perl merge.pl $^  > $@ | ||||
| 
 | ||||
| temp-s390-generic: config-s390x temp-generic | ||||
| 	perl merge.pl $^ > $@ | ||||
| 
 | ||||
| temp-ia64-generic: config-ia64-generic temp-generic | ||||
| 	perl merge.pl $^ > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-i686-PAE.config: config-i686-PAE temp-x86-generic | ||||
| 	perl merge.pl $^ i386 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-i686-PAEdebug.config: config-i686-PAE temp-x86-debug-generic | ||||
| 	perl merge.pl $^ i386 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-i686.config: /dev/null temp-x86-generic | ||||
| 	perl merge.pl $^ i386 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-i686-debug.config: /dev/null temp-x86-debug-generic | ||||
| 	perl merge.pl $^ i386 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic | ||||
| 	perl merge.pl $^ x86_64 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic | ||||
| 	perl merge.pl $^ x86_64 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic | ||||
| 	perl merge.pl $^ sparc64 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic | ||||
| 	perl merge.pl $^ powerpc > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generic | ||||
| 	perl merge.pl $^ powerpc > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-s390x.config: config-s390x temp-s390-generic | ||||
| 	perl merge.pl $^ s390 > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-arm.config: config-arm temp-generic | ||||
| 	perl merge.pl $^ arm > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-ppc.config: /dev/null temp-powerpc32-generic | ||||
| 	perl merge.pl $^ powerpc > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-ppc-smp.config: config-powerpc32-smp temp-powerpc32-generic | ||||
| 	perl merge.pl $^ powerpc > $@ | ||||
| 
 | ||||
| kernel-$(VERSION)-ia64.config: /dev/null temp-ia64-generic | ||||
| 	perl merge.pl $^ ia64 > $@ | ||||
							
								
								
									
										52
									
								
								acpi-ec-add-delay-before-write.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								acpi-ec-add-delay-before-write.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| https://bugzilla.kernel.org/show_bug.cgi?id=14733#c41 | ||||
| 
 | ||||
| diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
 | ||||
| index 27e0b92..09fbb69 100644
 | ||||
| --- a/drivers/acpi/ec.c
 | ||||
| +++ b/drivers/acpi/ec.c
 | ||||
| @@ -226,6 +226,7 @@ static int ec_poll(struct acpi_ec *ec)
 | ||||
|  				if (ec_transaction_done(ec)) | ||||
|  					return 0; | ||||
|  			} else { | ||||
| +				msleep(1);
 | ||||
|  				if (wait_event_timeout(ec->wait, | ||||
|  						ec_transaction_done(ec), | ||||
|  						msecs_to_jiffies(1))) | ||||
| @@ -233,8 +234,8 @@ static int ec_poll(struct acpi_ec *ec)
 | ||||
|  			} | ||||
|  			advance_transaction(ec, acpi_ec_read_status(ec)); | ||||
|  		} while (time_before(jiffies, delay)); | ||||
| -		if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
 | ||||
| -			break;
 | ||||
| +//		if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
 | ||||
| +//			break;
 | ||||
|  		pr_debug(PREFIX "controller reset, restart transaction\n"); | ||||
|  		spin_lock_irqsave(&ec->curr_lock, flags); | ||||
|  		start_transaction(ec); | ||||
| @@ -271,15 +272,25 @@ static int ec_check_ibf0(struct acpi_ec *ec)
 | ||||
|  	return (status & ACPI_EC_FLAG_IBF) == 0; | ||||
|  } | ||||
|   | ||||
| +/* try to clean input buffer with burst_disable transaction */
 | ||||
| +static int acpi_ec_clean_buffer(struct acpi_ec *ec)
 | ||||
| +{
 | ||||
| +	struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
 | ||||
| +				.wdata = NULL, .rdata = NULL,
 | ||||
| +				.wlen = 0, .rlen = 0};
 | ||||
| +	return acpi_ec_transaction_unlocked(ec, &t);
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int ec_wait_ibf0(struct acpi_ec *ec) | ||||
|  { | ||||
| +	
 | ||||
|  	unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY); | ||||
|  	/* interrupt wait manually if GPE mode is not active */ | ||||
|  	while (time_before(jiffies, delay)) | ||||
|  		if (wait_event_timeout(ec->wait, ec_check_ibf0(ec), | ||||
|  					msecs_to_jiffies(1))) | ||||
|  			return 0; | ||||
| -	return -ETIME;
 | ||||
| +	return acpi_ec_clean_buffer(ec);
 | ||||
|  } | ||||
|   | ||||
|  static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) | ||||
							
								
								
									
										115
									
								
								config-arm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								config-arm
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| CONFIG_ARM=y | ||||
| CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||||
| # CONFIG_SMP is not set | ||||
| 
 | ||||
| # CONFIG_CMDLINE_FORCE is not set | ||||
| 
 | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| 
 | ||||
| CONFIG_ARCH_VERSATILE=y | ||||
| CONFIG_ARCH_VERSATILE_PB=y | ||||
| CONFIG_MACH_VERSATILE_AB=y | ||||
| 
 | ||||
| CONFIG_HIGHMEM=y | ||||
| # CONFIG_HIGHPTE is not set | ||||
| 
 | ||||
| # CONFIG_CPU_ICACHE_DISABLE is not set | ||||
| # CONFIG_CPU_DCACHE_DISABLE is not set | ||||
| # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||||
| # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||||
| 
 | ||||
| CONFIG_ZBOOT_ROM_TEXT=0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0 | ||||
| 
 | ||||
| # CONFIG_XIP_KERNEL is not set | ||||
| 
 | ||||
| CONFIG_ATAGS_PROC=y | ||||
| 
 | ||||
| # CONFIG_FPE_NWFPE is not set | ||||
| CONFIG_FPE_FASTFPE=y | ||||
| CONFIG_VFP=y | ||||
| 
 | ||||
| CONFIG_PM=y | ||||
| # CONFIG_PM_DEBUG is not set | ||||
| # CONFIG_PM_TRACE is not set | ||||
| CONFIG_SUSPEND=y | ||||
| # CONFIG_PM_TEST_SUSPEND is not set | ||||
| CONFIG_APM_EMULATION=y | ||||
| 
 | ||||
| CONFIG_ARM_THUMB=y | ||||
| 
 | ||||
| CONFIG_AEABI=y | ||||
| CONFIG_OABI_COMPAT=y | ||||
| 
 | ||||
| # CONFIG_UACCESS_WITH_MEMCPY is not set | ||||
| 
 | ||||
| CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20" | ||||
| 
 | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| 
 | ||||
| # CONFIG_CPU_IDLE is not set | ||||
| 
 | ||||
| CONFIG_LEDS=y | ||||
| CONFIG_LEDS_CPU=y | ||||
| 
 | ||||
| CONFIG_MTD_AFS_PARTS=y | ||||
| CONFIG_MTD_ARM_INTEGRATOR=y | ||||
| CONFIG_MTD_IMPA7=y | ||||
| 
 | ||||
| CONFIG_AX88796=m | ||||
| CONFIG_AX88796_93CX6=y | ||||
| CONFIG_SMC91X=m | ||||
| CONFIG_DM9000=m | ||||
| CONFIG_DM9000_DEBUGLEVEL=4 | ||||
| # CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set | ||||
| CONFIG_SMC911X=m | ||||
| CONFIG_SMSC911X=m | ||||
| 
 | ||||
| CONFIG_SERIO_AMBAKMI=m | ||||
| 
 | ||||
| CONFIG_SERIAL_AMBA_PL011=y | ||||
| CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||||
| 
 | ||||
| CONFIG_I2C_VERSATILE=y | ||||
| 
 | ||||
| CONFIG_THERMAL=y | ||||
| 
 | ||||
| # CONFIG_MFD_T7L66XB is not set | ||||
| # CONFIG_MFD_TC6387XB is not set | ||||
| 
 | ||||
| CONFIG_FB_ARMCLCD=m | ||||
| 
 | ||||
| CONFIG_SND_ARM=y | ||||
| CONFIG_SND_ARMAACI=m | ||||
| 
 | ||||
| CONFIG_USB_MUSB_HDRC=m | ||||
| # CONFIG_MUSB_PIO_ONLY is not set | ||||
| CONFIG_USB_TUSB6010=y | ||||
| # CONFIG_USB_MUSB_DEBUG is not set | ||||
| 
 | ||||
| CONFIG_MMC_ARMMMCI=m | ||||
| 
 | ||||
| CONFIG_RTC_DRV_PL030=m | ||||
| CONFIG_RTC_DRV_PL031=m | ||||
| 
 | ||||
| # CONFIG_SGI_IOC4 is not set | ||||
| 
 | ||||
| # CONFIG_DEBUG_USER is not set | ||||
| # CONFIG_DEBUG_ERRORS is not set | ||||
| # CONFIG_DEBUG_LL is not set | ||||
| 
 | ||||
| CONFIG_ARM_UNWIND=y | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=32 | ||||
| 
 | ||||
| # CONFIG_USB_ULPI is not set | ||||
| # CONFIG_OC_ETM is not set | ||||
| 
 | ||||
| # CONFIG_MTD_PISMO is not set | ||||
| 
 | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| 
 | ||||
| # CONFIG_MG_DISK is not set | ||||
| # CONFIG_GPIO_PL061 is not set | ||||
							
								
								
									
										91
									
								
								config-debug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								config-debug
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| CONFIG_SND_VERBOSE_PRINTK=y | ||||
| CONFIG_SND_DEBUG=y | ||||
| CONFIG_SND_PCM_XRUN_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_MUTEXES=y | ||||
| CONFIG_DEBUG_RT_MUTEXES=y | ||||
| CONFIG_DEBUG_LOCK_ALLOC=y | ||||
| CONFIG_PROVE_LOCKING=y | ||||
| CONFIG_DEBUG_VM=y | ||||
| CONFIG_DEBUG_SPINLOCK=y | ||||
| CONFIG_PROVE_RCU=y | ||||
| # CONFIG_PROVE_RCU_REPEATEDLY is not set | ||||
| CONFIG_DEBUG_PER_CPU_MAPS=y | ||||
| CONFIG_CPUMASK_OFFSTACK=y | ||||
| 
 | ||||
| CONFIG_CPU_NOTIFIER_ERROR_INJECT=m | ||||
| 
 | ||||
| CONFIG_FAULT_INJECTION=y | ||||
| CONFIG_FAILSLAB=y | ||||
| CONFIG_FAIL_PAGE_ALLOC=y | ||||
| CONFIG_FAIL_MAKE_REQUEST=y | ||||
| CONFIG_FAULT_INJECTION_DEBUG_FS=y | ||||
| CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y | ||||
| CONFIG_FAIL_IO_TIMEOUT=y | ||||
| 
 | ||||
| CONFIG_SLUB_DEBUG_ON=y | ||||
| 
 | ||||
| CONFIG_LOCK_STAT=y | ||||
| 
 | ||||
| CONFIG_DEBUG_STACK_USAGE=y | ||||
| 
 | ||||
| CONFIG_ACPI_DEBUG=y | ||||
| # CONFIG_ACPI_DEBUG_FUNC_TRACE is not set | ||||
| 
 | ||||
| CONFIG_DEBUG_SG=y | ||||
| 
 | ||||
| # CONFIG_DEBUG_PAGEALLOC is not set | ||||
| 
 | ||||
| CONFIG_DEBUG_WRITECOUNT=y | ||||
| CONFIG_DEBUG_OBJECTS=y | ||||
| # CONFIG_DEBUG_OBJECTS_SELFTEST is not set | ||||
| CONFIG_DEBUG_OBJECTS_FREE=y | ||||
| CONFIG_DEBUG_OBJECTS_TIMERS=y | ||||
| CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 | ||||
| 
 | ||||
| CONFIG_X86_PTDUMP=y | ||||
| 
 | ||||
| CONFIG_CAN_DEBUG_DEVICES=y | ||||
| 
 | ||||
| CONFIG_MODULE_FORCE_UNLOAD=y | ||||
| 
 | ||||
| CONFIG_SYSCTL_SYSCALL_CHECK=y | ||||
| 
 | ||||
| CONFIG_DEBUG_NOTIFIERS=y | ||||
| 
 | ||||
| CONFIG_DMA_API_DEBUG=y | ||||
| 
 | ||||
| CONFIG_MMIOTRACE=y | ||||
| 
 | ||||
| CONFIG_DEBUG_CREDENTIALS=y | ||||
| 
 | ||||
| CONFIG_EXT4_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_PERF_USE_VMALLOC=y | ||||
| 
 | ||||
| # off in both production debug and nodebug builds, | ||||
| #  on in rawhide nodebug builds | ||||
| # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||||
| 
 | ||||
| CONFIG_JBD2_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_CFQ_IOSCHED=y | ||||
| 
 | ||||
| CONFIG_DRBD_FAULT_INJECTION=y | ||||
| 
 | ||||
| CONFIG_ATH_DEBUG=y | ||||
| CONFIG_IWLWIFI_DEVICE_TRACING=y | ||||
| 
 | ||||
| CONFIG_DEBUG_OBJECTS_WORK=y | ||||
| # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set | ||||
| 
 | ||||
| CONFIG_DMADEVICES_DEBUG=y | ||||
| CONFIG_DMADEVICES_VDEBUG=y | ||||
| 
 | ||||
| CONFIG_PM_ADVANCED_DEBUG=y | ||||
| 
 | ||||
| CONFIG_CEPH_FS_PRETTYDEBUG=y | ||||
| CONFIG_QUOTA_DEBUG=y | ||||
| 
 | ||||
| CONFIG_KGDB_KDB=y | ||||
| CONFIG_KDB_KEYBOARD=y | ||||
							
								
								
									
										4293
									
								
								config-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4293
									
								
								config-generic
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5
									
								
								config-i686-PAE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								config-i686-PAE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| # CONFIG_HIGHMEM4G is not set | ||||
| CONFIG_HIGHMEM64G=y | ||||
| 
 | ||||
| CONFIG_XEN_DEV_EVTCHN=m | ||||
| CONFIG_XEN_SYS_HYPERVISOR=y | ||||
							
								
								
									
										206
									
								
								config-ia64-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								config-ia64-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,206 @@ | ||||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Processor type and features | ||||
| # | ||||
| CONFIG_IA64=y | ||||
| CONFIG_64BIT=y | ||||
| # CONFIG_XEN is not set | ||||
| CONFIG_MMU=y | ||||
| CONFIG_EFI=y | ||||
| # CONFIG_ITANIUM is not set | ||||
| CONFIG_MCKINLEY=y | ||||
| CONFIG_IA64_GENERIC=y | ||||
| # CONFIG_IA64_DIG is not set | ||||
| # CONFIG_IA64_HP_ZX1 is not set | ||||
| # CONFIG_IA64_SGI_SN2 is not set | ||||
| CONFIG_IA64_ESI=y | ||||
| CONFIG_IA64_HP_AML_NFW=y | ||||
| CONFIG_MSPEC=y | ||||
| # CONFIG_IA64_HP_SIM is not set | ||||
| # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||||
| # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||||
| CONFIG_IA64_PAGE_SIZE_16KB=y | ||||
| # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||||
| CONFIG_IA64_L1_CACHE_SHIFT=7 | ||||
| CONFIG_NUMA=y | ||||
| # CONFIG_VIRTUAL_MEM_MAP is not set | ||||
| CONFIG_SPARSEMEM_MANUAL=y | ||||
| CONFIG_SPARSEMEM=y | ||||
| CONFIG_MEMORY_HOTPLUG=y | ||||
| CONFIG_MEMORY_HOTREMOVE=y | ||||
| CONFIG_IA64_MCA_RECOVERY=m | ||||
| CONFIG_IA64_CYCLONE=y | ||||
| CONFIG_MMTIMER=y | ||||
| CONFIG_IOSAPIC=y | ||||
| CONFIG_FORCE_MAX_ZONEORDER=18 | ||||
| CONFIG_NR_CPUS=1024 | ||||
| # CONFIG_IA32_SUPPORT is not set | ||||
| # CONFIG_COMPAT is not set | ||||
| CONFIG_PERFMON=y | ||||
| CONFIG_IA64_PALINFO=y | ||||
| CONFIG_EFI_VARS=y | ||||
| CONFIG_SERIAL_8250_RUNTIME_UARTS=16 | ||||
| CONFIG_EFI_PCDP=y | ||||
| # | ||||
| # Block devices | ||||
| # | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| 
 | ||||
| # | ||||
| # IDE chipset support/bugfixes | ||||
| # | ||||
| CONFIG_BLK_DEV_SGIIOC4=y | ||||
| 
 | ||||
| # | ||||
| # Character devices | ||||
| # | ||||
| CONFIG_TCG_INFINEON=m | ||||
| 
 | ||||
| # | ||||
| # Watchdog Cards | ||||
| # | ||||
| # CONFIG_HW_RANDOM is not set | ||||
| # CONFIG_GEN_RTC is not set | ||||
| CONFIG_EFI_RTC=y | ||||
| CONFIG_RTC_DRV_EFI=y | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # AGP | ||||
| # | ||||
| CONFIG_AGP_I460=y | ||||
| CONFIG_AGP_HP_ZX1=y | ||||
| CONFIG_AGP_SGI_TIOCA=y | ||||
| 
 | ||||
| # | ||||
| # HP Simulator drivers | ||||
| # | ||||
| # CONFIG_HP_SIMETH is not set | ||||
| # CONFIG_HP_SIMSERIAL is not set | ||||
| # CONFIG_HP_SIMSCSI is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| # | ||||
| # CONFIG_IA64_PRINT_HAZARDS is not set | ||||
| # CONFIG_DISABLE_VHPT is not set | ||||
| # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||||
| # CONFIG_IA64_DEBUG_IRQ is not set | ||||
| 
 | ||||
| # | ||||
| # Memory Technology Devices (MTD) | ||||
| # | ||||
| # CONFIG_MTD is not set | ||||
| 
 | ||||
| # | ||||
| # SGI | ||||
| # | ||||
| CONFIG_SGI_SNSC=y | ||||
| CONFIG_SGI_TIOCX=y | ||||
| CONFIG_SGI_MBCS=m | ||||
| CONFIG_SGI_IOC3=m | ||||
| CONFIG_SGI_IOC4=y | ||||
| CONFIG_SGI_XP=m | ||||
| CONFIG_SGI_GRU=m | ||||
| # CONFIG_SGI_GRU_DEBUG is not set | ||||
| CONFIG_SERIAL_SGI_L1_CONSOLE=y | ||||
| CONFIG_SERIAL_SGI_IOC3=m | ||||
| CONFIG_SERIAL_SGI_IOC4=m | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # SCSI low-level drivers | ||||
| # | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| 
 | ||||
| # | ||||
| CONFIG_ACPI=y | ||||
| CONFIG_ACPI_AC=y | ||||
| # CONFIG_ACPI_ASUS is not set | ||||
| CONFIG_ACPI_PROCFS_POWER=y | ||||
| CONFIG_ACPI_SYSFS_POWER=y | ||||
| # CONFIG_ACPI_BATTERY is not set | ||||
| CONFIG_ACPI_BLACKLIST_YEAR=0 | ||||
| CONFIG_ACPI_BUTTON=y | ||||
| # CONFIG_ACPI_DOCK is not set | ||||
| CONFIG_ACPI_FAN=y | ||||
| CONFIG_ACPI_HOTPLUG_MEMORY=y | ||||
| CONFIG_ACPI_NUMA=y | ||||
| CONFIG_ACPI_POWER=y | ||||
| CONFIG_ACPI_PROCESSOR=y | ||||
| CONFIG_ACPI_PROCFS=y | ||||
| CONFIG_ACPI_SLEEP=y | ||||
| CONFIG_ACPI_THERMAL=y | ||||
| # CONFIG_ACPI_TOSHIBA is not set | ||||
| CONFIG_ACPI_VIDEO=m | ||||
| # CONFIG_ACPI_PROC_EVENT is not set | ||||
| CONFIG_ACPI_HED=m | ||||
| 
 | ||||
| CONFIG_PM=y | ||||
| CONFIG_HOTPLUG_PCI=y | ||||
| # CONFIG_HPET is not set | ||||
| # CONFIG_HOTPLUG_PCI_CPCI is not set | ||||
| CONFIG_HOTPLUG_PCI_SHPC=m | ||||
| CONFIG_HOTPLUG_PCI_SGI=m | ||||
| CONFIG_PNPACPI=y | ||||
| 
 | ||||
| CONFIG_SCHED_SMT=y | ||||
| 
 | ||||
| CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||||
| 
 | ||||
| CONFIG_CPU_FREQ=y | ||||
| CONFIG_CPU_FREQ_DEBUG=y | ||||
| CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | ||||
| CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_CPU_FREQ_GOV_POWERSAVE=m | ||||
| CONFIG_CPU_FREQ_GOV_USERSPACE=m | ||||
| CONFIG_CPU_FREQ_GOV_ONDEMAND=m | ||||
| CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m | ||||
| CONFIG_CPU_FREQ_STAT=m | ||||
| CONFIG_CPU_FREQ_STAT_DETAILS=y | ||||
| 
 | ||||
| CONFIG_IA64_ACPI_CPUFREQ=m | ||||
| 
 | ||||
| # CONFIG_PERMIT_BSP_REMOVE is not set | ||||
| # CONFIG_FORCE_CPEI_RETARGET is not set | ||||
| 
 | ||||
| CONFIG_NODES_SHIFT=10 | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_HW_RANDOM_INTEL=m | ||||
| 
 | ||||
| CONFIG_CRASH_DUMP=y | ||||
| CONFIG_PROC_VMCORE=y | ||||
| 
 | ||||
| # drivers/media/video/usbvision/usbvision-i2c.c:64:39: error: macro "outb" passed 4 arguments, but takes just 2 | ||||
| # CONFIG_VIDEO_USBVISION is not set | ||||
| 
 | ||||
| # CONFIG_IA64_MC_ERR_INJECT is not set | ||||
| 
 | ||||
| CONFIG_DMIID=y | ||||
| 
 | ||||
| CONFIG_SENSORS_I5K_AMB=m | ||||
| 
 | ||||
| CONFIG_SPARSEMEM_VMEMMAP=y | ||||
| 
 | ||||
| CONFIG_FRAME_WARN=2048 | ||||
| 
 | ||||
| CONFIG_VIRT_CPU_ACCOUNTING=y | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| CONFIG_KVM=m | ||||
| CONFIG_KVM_INTEL=m | ||||
| 
 | ||||
| CONFIG_HP_ILO=m | ||||
| 
 | ||||
| CONFIG_PARAVIRT_GUEST=y | ||||
| CONFIG_PARAVIRT=y | ||||
| 
 | ||||
| CONFIG_DMAR_DEFAULT_ON=y | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=64 | ||||
| 
 | ||||
| CONFIG_ACPI_POWER_METER=m | ||||
| CONFIG_I2C_SCMI=m | ||||
							
								
								
									
										91
									
								
								config-nodebug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								config-nodebug
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| CONFIG_SND_VERBOSE_PRINTK=y | ||||
| CONFIG_SND_DEBUG=y | ||||
| CONFIG_SND_PCM_XRUN_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_MUTEXES=y | ||||
| CONFIG_DEBUG_RT_MUTEXES=y | ||||
| CONFIG_DEBUG_LOCK_ALLOC=y | ||||
| CONFIG_PROVE_LOCKING=y | ||||
| CONFIG_DEBUG_VM=y | ||||
| CONFIG_DEBUG_SPINLOCK=y | ||||
| CONFIG_PROVE_RCU=y | ||||
| # CONFIG_PROVE_RCU_REPEATEDLY is not set | ||||
| CONFIG_DEBUG_PER_CPU_MAPS=y | ||||
| CONFIG_CPUMASK_OFFSTACK=y | ||||
| 
 | ||||
| CONFIG_CPU_NOTIFIER_ERROR_INJECT=m | ||||
| 
 | ||||
| CONFIG_FAULT_INJECTION=y | ||||
| CONFIG_FAILSLAB=y | ||||
| CONFIG_FAIL_PAGE_ALLOC=y | ||||
| CONFIG_FAIL_MAKE_REQUEST=y | ||||
| CONFIG_FAULT_INJECTION_DEBUG_FS=y | ||||
| CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y | ||||
| CONFIG_FAIL_IO_TIMEOUT=y | ||||
| 
 | ||||
| CONFIG_SLUB_DEBUG_ON=y | ||||
| 
 | ||||
| CONFIG_LOCK_STAT=y | ||||
| 
 | ||||
| CONFIG_DEBUG_STACK_USAGE=y | ||||
| 
 | ||||
| CONFIG_ACPI_DEBUG=y | ||||
| # CONFIG_ACPI_DEBUG_FUNC_TRACE is not set | ||||
| 
 | ||||
| CONFIG_DEBUG_SG=y | ||||
| 
 | ||||
| # CONFIG_DEBUG_PAGEALLOC is not set | ||||
| 
 | ||||
| CONFIG_DEBUG_WRITECOUNT=y | ||||
| CONFIG_DEBUG_OBJECTS=y | ||||
| # CONFIG_DEBUG_OBJECTS_SELFTEST is not set | ||||
| CONFIG_DEBUG_OBJECTS_FREE=y | ||||
| CONFIG_DEBUG_OBJECTS_TIMERS=y | ||||
| CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 | ||||
| 
 | ||||
| CONFIG_X86_PTDUMP=y | ||||
| 
 | ||||
| CONFIG_CAN_DEBUG_DEVICES=y | ||||
| 
 | ||||
| CONFIG_MODULE_FORCE_UNLOAD=y | ||||
| 
 | ||||
| CONFIG_SYSCTL_SYSCALL_CHECK=y | ||||
| 
 | ||||
| CONFIG_DEBUG_NOTIFIERS=y | ||||
| 
 | ||||
| CONFIG_DMA_API_DEBUG=y | ||||
| 
 | ||||
| CONFIG_MMIOTRACE=y | ||||
| 
 | ||||
| CONFIG_DEBUG_CREDENTIALS=y | ||||
| 
 | ||||
| # off in both production debug and nodebug builds, | ||||
| #  on in rawhide nodebug builds | ||||
| CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y | ||||
| 
 | ||||
| CONFIG_EXT4_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_PERF_USE_VMALLOC=y | ||||
| 
 | ||||
| CONFIG_JBD2_DEBUG=y | ||||
| 
 | ||||
| CONFIG_DEBUG_CFQ_IOSCHED=y | ||||
| 
 | ||||
| CONFIG_DRBD_FAULT_INJECTION=y | ||||
| 
 | ||||
| CONFIG_ATH_DEBUG=y | ||||
| CONFIG_IWLWIFI_DEVICE_TRACING=y | ||||
| 
 | ||||
| CONFIG_DEBUG_OBJECTS_WORK=y | ||||
| CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y | ||||
| 
 | ||||
| CONFIG_DMADEVICES_DEBUG=y | ||||
| CONFIG_DMADEVICES_VDEBUG=y | ||||
| 
 | ||||
| CONFIG_PM_ADVANCED_DEBUG=y | ||||
| 
 | ||||
| CONFIG_CEPH_FS_PRETTYDEBUG=y | ||||
| CONFIG_QUOTA_DEBUG=y | ||||
| 
 | ||||
| CONFIG_KGDB_KDB=y | ||||
| CONFIG_KDB_KEYBOARD=y | ||||
							
								
								
									
										334
									
								
								config-powerpc-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										334
									
								
								config-powerpc-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,334 @@ | ||||
| # Most PowerPC kernels we build are SMP | ||||
| CONFIG_SMP=y | ||||
| CONFIG_IRQ_ALL_CPUS=y | ||||
| CONFIG_PPC=y | ||||
| CONFIG_WATCHDOG_RTAS=m | ||||
| CONFIG_DEBUGGER=y | ||||
| CONFIG_GENERIC_NVRAM=y | ||||
| CONFIG_ALTIVEC=y | ||||
| 
 | ||||
| CONFIG_TAU=y | ||||
| # CONFIG_TAU_INT is not set | ||||
| CONFIG_TAU_AVERAGE=y | ||||
| 
 | ||||
| CONFIG_SECCOMP=y | ||||
| 
 | ||||
| CONFIG_CPU_FREQ=y | ||||
| CONFIG_CPU_FREQ_DEBUG=y | ||||
| # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||||
| CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | ||||
| CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_CPU_FREQ_GOV_POWERSAVE=m | ||||
| CONFIG_CPU_FREQ_GOV_USERSPACE=m | ||||
| CONFIG_CPU_FREQ_GOV_ONDEMAND=m | ||||
| CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m | ||||
| CONFIG_CPU_FREQ_TABLE=y | ||||
| CONFIG_CPU_FREQ_STAT=m | ||||
| CONFIG_CPU_FREQ_STAT_DETAILS=y | ||||
| 
 | ||||
| CONFIG_PM=y | ||||
| 
 | ||||
| CONFIG_PM_STD_PARTITION="" | ||||
| 
 | ||||
| CONFIG_SUSPEND=y | ||||
| CONFIG_HIBERNATION=y | ||||
| # CONFIG_RTC is not set | ||||
| # CONFIG_GEN_RTC is not set | ||||
| # CONFIG_GEN_RTC_X is not set | ||||
| CONFIG_RTC_DRV_GENERIC=y | ||||
| CONFIG_PROC_DEVICETREE=y | ||||
| # CONFIG_CMDLINE_BOOL is not set | ||||
| 
 | ||||
| CONFIG_ADB=y | ||||
| CONFIG_ADB_PMU=y | ||||
| CONFIG_WINDFARM=y | ||||
| CONFIG_WINDFARM_PM112=y | ||||
| CONFIG_I2C_POWERMAC=y | ||||
| CONFIG_APPLE_AIRPORT=m | ||||
| CONFIG_SERIAL_PMACZILOG=m | ||||
| # CONFIG_SERIAL_PMACZILOG_TTYS is not set | ||||
| CONFIG_AGP_UNINORTH=y | ||||
| CONFIG_FB_OF=y | ||||
| # CONFIG_FB_CONTROL is not set | ||||
| CONFIG_FB_IBM_GXT4500=y | ||||
| CONFIG_FB_RADEON=y | ||||
| CONFIG_FB_MATROX=y | ||||
| CONFIG_FB_NVIDIA=m | ||||
| # CONFIG_FB_VGA16 is not set | ||||
| CONFIG_FB_ATY128_BACKLIGHT=y | ||||
| CONFIG_FB_ATY_BACKLIGHT=y | ||||
| CONFIG_FB_RADEON_BACKLIGHT=y | ||||
| CONFIG_FB_RIVA_BACKLIGHT=y | ||||
| CONFIG_FB_NVIDIA_BACKLIGHT=y | ||||
| 
 | ||||
| CONFIG_SND_POWERMAC=m | ||||
| CONFIG_SND_POWERMAC_AUTO_DRC=y | ||||
| CONFIG_SND_AOA=m | ||||
| CONFIG_SND_AOA_SOUNDBUS=m | ||||
| CONFIG_SND_AOA_FABRIC_LAYOUT=m | ||||
| CONFIG_SND_AOA_ONYX=m | ||||
| CONFIG_SND_AOA_TAS=m | ||||
| CONFIG_SND_AOA_TOONIE=m | ||||
| CONFIG_SND_AOA_SOUNDBUS_I2S=m | ||||
| 
 | ||||
| CONFIG_XMON=y | ||||
| # CONFIG_XMON_DEFAULT is not set | ||||
| CONFIG_XMON_DISASSEMBLY=y | ||||
| 
 | ||||
| CONFIG_BOOTX_TEXT=y | ||||
| CONFIG_MAC_EMUMOUSEBTN=y | ||||
| CONFIG_CAPI_EICON=y | ||||
| 
 | ||||
| CONFIG_NVRAM=y | ||||
| 
 | ||||
| # CONFIG_PCMCIA_M8XX is not set | ||||
| # CONFIG_SCSI_AHA1542 is not set | ||||
| # CONFIG_SCSI_IN2000 is not set | ||||
| # CONFIG_SCSI_IPS is not set | ||||
| # CONFIG_NI52 is not set | ||||
| # CONFIG_NI65 is not set | ||||
| # CONFIG_LANCE is not set | ||||
| # CONFIG_3C515 is not set | ||||
| # CONFIG_ELPLUS is not set | ||||
| 
 | ||||
| CONFIG_MEMORY_HOTPLUG=y | ||||
| 
 | ||||
| # Stuff which wants bus_to_virt() or virt_to_bus() | ||||
| # CONFIG_BLK_CPQ_DA is not set | ||||
| # CONFIG_VIDEO_STRADIS is not set | ||||
| # CONFIG_VIDEO_ZORAN is not set | ||||
| # CONFIG_ATM_HORIZON is not set | ||||
| # CONFIG_ATM_FIRESTREAM is not set | ||||
| # CONFIG_ATM_AMBASSADOR is not set | ||||
| # CONFIG_SCSI_DC390T is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| 
 | ||||
| 
 | ||||
| # CONFIG_PPC_EARLY_DEBUG is not set | ||||
| 
 | ||||
| # CONFIG_PMAC_BACKLIGHT_LEGACY is not set | ||||
| CONFIG_LEDS_TRIGGER_TIMER=m | ||||
| CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||||
| CONFIG_LEDS_TRIGGER_GPIO=m | ||||
| 
 | ||||
| # FIXME: Should depend on IA64/x86 | ||||
| # CONFIG_SGI_IOC4 is not set | ||||
| 
 | ||||
| CONFIG_PPC_EFIKA=y | ||||
| CONFIG_PPC_MEDIA5200=y | ||||
| 
 | ||||
| # CONFIG_PPC_LITE5200 is not set | ||||
| CONFIG_PPC_BESTCOMM=y | ||||
| CONFIG_PMAC_RACKMETER=m | ||||
| CONFIG_USB_OHCI_HCD_PPC_SOC=y | ||||
| CONFIG_USB_OHCI_HCD_PCI=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_SERIAL_UARTLITE=m | ||||
| CONFIG_SERIAL_UARTLITE_CONSOLE=y | ||||
| 
 | ||||
| CONFIG_SENSORS_AMS=m | ||||
| CONFIG_SENSORS_AMS_PMU=y | ||||
| CONFIG_SENSORS_AMS_I2C=y | ||||
| 
 | ||||
| CONFIG_IDE=y | ||||
| CONFIG_BLK_DEV_IDE=y | ||||
| 
 | ||||
| # | ||||
| # Please see Documentation/ide.txt for help/info on IDE drives | ||||
| # | ||||
| # CONFIG_BLK_DEV_IDE_SATA is not set | ||||
| # CONFIG_BLK_DEV_IDECS is not set | ||||
| CONFIG_BLK_DEV_IDECD=m | ||||
| # CONFIG_BLK_DEV_IDETAPE is not set | ||||
| CONFIG_IDE_TASK_IOCTL=y | ||||
| # | ||||
| # IDE chipset support/bugfixes | ||||
| # | ||||
| # CONFIG_IDE_GENERIC is not set | ||||
| # CONFIG_BLK_DEV_IDEPNP is not set | ||||
| # CONFIG_BLK_DEV_IDEPCI is not set | ||||
| # CONFIG_BLK_DEV_AEC62XX is not set | ||||
| # CONFIG_BLK_DEV_ALI15X3 is not set | ||||
| # CONFIG_BLK_DEV_AMD74XX is not set | ||||
| # CONFIG_BLK_DEV_CMD64X is not set | ||||
| # CONFIG_BLK_DEV_TRIFLEX is not set | ||||
| # CONFIG_BLK_DEV_CY82C693 is not set | ||||
| # CONFIG_BLK_DEV_CS5520 is not set | ||||
| # CONFIG_BLK_DEV_CS5530 is not set | ||||
| # CONFIG_BLK_DEV_HPT366 is not set | ||||
| # CONFIG_BLK_DEV_JMICRON is not set | ||||
| # CONFIG_BLK_DEV_SC1200 is not set | ||||
| # CONFIG_BLK_DEV_PIIX is not set | ||||
| # CONFIG_BLK_DEV_IT821X is not set | ||||
| # CONFIG_BLK_DEV_NS87415 is not set | ||||
| # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||||
| # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||||
| # CONFIG_BLK_DEV_SVWKS is not set | ||||
| # CONFIG_BLK_DEV_SIIMAGE is not set | ||||
| # CONFIG_BLK_DEV_SL82C105 is not set | ||||
| # CONFIG_BLK_DEV_SLC90E66 is not set | ||||
| # CONFIG_BLK_DEV_TRM290 is not set | ||||
| # CONFIG_BLK_DEV_VIA82CXXX is not set | ||||
| CONFIG_BLK_DEV_IDE_PMAC=y | ||||
| CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y | ||||
| CONFIG_BLK_DEV_IDEDMA=y | ||||
| # CONFIG_BLK_DEV_HD is not set | ||||
| # CONFIG_USB_STORAGE_ISD200 is not set | ||||
| CONFIG_MTD_PHYSMAP_OF=m | ||||
| CONFIG_IDE_PROC_FS=y | ||||
| CONFIG_MACINTOSH_DRIVERS=y | ||||
| 
 | ||||
| CONFIG_PPC_PASEMI_MDIO=m | ||||
| CONFIG_SPU_FS_64K_LS=y | ||||
| CONFIG_PPC_PASEMI_CPUFREQ=y | ||||
| CONFIG_PMAC_APM_EMU=m | ||||
| CONFIG_HW_RANDOM_PASEMI=m | ||||
| 
 | ||||
| CONFIG_EDAC=y | ||||
| # CONFIG_EDAC_DEBUG is not set | ||||
| CONFIG_EDAC_MM_EDAC=m | ||||
| CONFIG_EDAC_PASEMI=m | ||||
| CONFIG_EDAC_AMD8131=m | ||||
| CONFIG_EDAC_AMD8111=m | ||||
| 
 | ||||
| CONFIG_AXON_RAM=m | ||||
| CONFIG_OPROFILE_CELL=y | ||||
| 
 | ||||
| CONFIG_SUSPEND_FREEZER=y | ||||
| # CONFIG_IDEPCI_PCIBUS_ORDER is not set | ||||
| CONFIG_PATA_PLATFORM=m | ||||
| CONFIG_PATA_OF_PLATFORM=m | ||||
| CONFIG_USB_EHCI_HCD_PPC_OF=y | ||||
| 
 | ||||
| # CONFIG_MPC5121_ADS is not set | ||||
| # CONFIG_MPC5121_GENERIC is not set | ||||
| CONFIG_MTD_OF_PARTS=m | ||||
| # CONFIG_MTD_NAND_FSL_ELBC is not set | ||||
| CONFIG_THERMAL=y | ||||
| 
 | ||||
| # CONFIG_MEMORY_HOTREMOVE is not set | ||||
| 
 | ||||
| CONFIG_DMADEVICES=y | ||||
| # CONFIG_FSL_DMA is not set | ||||
| 
 | ||||
| CONFIG_SND_PPC=y | ||||
| 
 | ||||
| CONFIG_PPC_82xx=y | ||||
| CONFIG_PPC_83xx=y | ||||
| CONFIG_PPC_86xx=y | ||||
| CONFIG_EXTRA_TARGETS="" | ||||
| # CONFIG_CODE_PATCHING_SELFTEST is not set | ||||
| # CONFIG_FTR_FIXUP_SELFTEST is not set | ||||
| 
 | ||||
| # CONFIG_MATH_EMULATION is not set | ||||
| # CONFIG_RAPIDIO is not set | ||||
| # CONFIG_FS_ENET is not set | ||||
| # CONFIG_UCC_GETH is not set | ||||
| # CONFIG_KEYBOARD_MATRIX is not set | ||||
| # CONFIG_SERIAL_CPM is not set | ||||
| # CONFIG_SERIAL_QE is not set | ||||
| # CONFIG_I2C_CPM is not set | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_SERIO_XILINX_XPS_PS2=m | ||||
| 
 | ||||
| # CONFIG_PPC_SMLPAR is not set | ||||
| 
 | ||||
| CONFIG_MGCOGE=y | ||||
| CONFIG_GEF_SBC610=y | ||||
| CONFIG_GEF_PPC9A=y | ||||
| CONFIG_GEF_SBC310=y | ||||
| 
 | ||||
| CONFIG_QUICC_ENGINE=y | ||||
| CONFIG_QE_GPIO=y | ||||
| CONFIG_MPC8xxx_GPIO=y | ||||
| 
 | ||||
| CONFIG_IDE_GD=y | ||||
| CONFIG_IDE_GD_ATA=y | ||||
| CONFIG_IDE_GD_ATAPI=y | ||||
| 
 | ||||
| CONFIG_MCU_MPC8349EMITX=m | ||||
| 
 | ||||
| CONFIG_GPIO_XILINX=y | ||||
| 
 | ||||
| CONFIG_PMIC_DA903X=y | ||||
| CONFIG_BACKLIGHT_DA903X=m | ||||
| CONFIG_LEDS_DA903X=m | ||||
| 
 | ||||
| CONFIG_MSI_BITMAP_SELFTEST=y | ||||
| 
 | ||||
| CONFIG_RELOCATABLE=y | ||||
| 
 | ||||
| # CONFIG_HVC_UDBG is not set | ||||
| CONFIG_PRINT_STACK_DEPTH=64 | ||||
| 
 | ||||
| CONFIG_BATTERY_DA9030=m | ||||
| # CONFIG_TWL4030_CORE is not set | ||||
| 
 | ||||
| CONFIG_BLK_DEV_IT8172=m | ||||
| CONFIG_TOUCHSCREEN_DA9034=m | ||||
| 
 | ||||
| CONFIG_SIMPLE_GPIO=y | ||||
| 
 | ||||
| CONFIG_FSL_PQ_MDIO=m | ||||
| 
 | ||||
| CONFIG_PS3_VRAM=m | ||||
| CONFIG_MDIO_GPIO=m | ||||
| CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL=m | ||||
| # CONFIG_DEBUG_GPIO is not set | ||||
| CONFIG_GPIO_PCA953X=m | ||||
| CONFIG_GPIO_PCF857X=m | ||||
| 
 | ||||
| # CONFIG_USB_FHCI_HCD is not set | ||||
| # CONFIG_FHCI_DEBUG is not set | ||||
| 
 | ||||
| # CONFIG_DRM_RADEON_KMS is not set | ||||
| 
 | ||||
| # CONFIG_AMIGAONE is not set | ||||
| 
 | ||||
| CONFIG_PPC_OF_BOOT_TRAMPOLINE=y | ||||
| 
 | ||||
| CONFIG_DTL=y | ||||
| 
 | ||||
| CONFIG_MMC_SDHCI_OF=m | ||||
| 
 | ||||
| # CONFIG_CONSISTENT_SIZE_BOOL is not set | ||||
| 
 | ||||
| CONFIG_CAN_SJA1000_OF_PLATFORM=m | ||||
| 
 | ||||
| CONFIG_PPC_EMULATED_STATS=y | ||||
| 
 | ||||
| CONFIG_SWIOTLB=y | ||||
| 
 | ||||
| # CONFIG_RDS is not set | ||||
| 
 | ||||
| CONFIG_PPC_DISABLE_WERROR=y | ||||
| 
 | ||||
| CONFIG_XILINX_LL_TEMAC=m | ||||
| CONFIG_XILINX_EMACLITE=m | ||||
| 
 | ||||
| CONFIG_GPIO_WM831X=m | ||||
| # CONFIG_GPIO_LANGWELL is not set | ||||
| # CONFIG_GPIO_UCB1400 is not set | ||||
| CONFIG_EDAC_MPC85XX=m | ||||
| 
 | ||||
| CONFIG_NR_IRQS=512 | ||||
| CONFIG_SPARSE_IRQ=y | ||||
| 
 | ||||
| CONFIG_PPC_MPC5200_LPBFIFO=m | ||||
| CONFIG_CAN_MSCAN=m | ||||
| CONFIG_CAN_MPC5XXX=m | ||||
| CONFIG_PATA_MACIO=m | ||||
| CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m | ||||
| # CONFIG_PMIC_ADP5520 is not set | ||||
| # CONFIG_MFD_88PM8607 is not set | ||||
| # CONFIG_XPS_USB_HCD_XILINX is not set | ||||
| # CONFIG_MMC_SDHCI_OF_ESDHC is not set | ||||
| # CONFIG_MMC_SDHCI_OF_HLWD is not set | ||||
| 
 | ||||
| # CONFIG_MFD_TC35892 is not set | ||||
| 
 | ||||
| # CONFIG_GPIO_SCH is not set | ||||
							
								
								
									
										183
									
								
								config-powerpc32-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								config-powerpc32-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,183 @@ | ||||
| # CONFIG_SMP is not set | ||||
| CONFIG_PPC32=y | ||||
| # CONFIG_PPC64 is not set | ||||
| # CONFIG_RTAS_PROC is not set | ||||
| # CONFIG_PCMCIA_M8XX is not set | ||||
| # CONFIG_HOTPLUG_PCI is not set | ||||
| CONFIG_CPU_FREQ_PMAC=y | ||||
| CONFIG_PPC_CHRP=y | ||||
| CONFIG_PPC_PMAC=y | ||||
| CONFIG_PPC_MPC52xx=y | ||||
| CONFIG_PPC_PREP=y | ||||
| 
 | ||||
| # CONFIG_PPC_MPC5200_SIMPLE is not set | ||||
| CONFIG_SATA_FSL=m | ||||
| # CONFIG_SATA_NV is not set | ||||
| 
 | ||||
| # busted in .28git1 | ||||
| # ERROR: "cacheable_memzero" [drivers/net/gianfar_driver.ko] undefined! | ||||
| # CONFIG_GIANFAR is not set | ||||
| CONFIG_USB_EHCI_FSL=y | ||||
| 
 | ||||
| CONFIG_PMAC_APM_EMU=y | ||||
| CONFIG_PMAC_BACKLIGHT=y | ||||
| 
 | ||||
| CONFIG_HIGHMEM=y | ||||
| # CONFIG_HIGHMEM_START_BOOL is not set | ||||
| # CONFIG_LOWMEM_SIZE_BOOL is not set | ||||
| # CONFIG_TASK_SIZE_BOOL is not set | ||||
| # CONFIG_KERNEL_START_BOOL is not set | ||||
| # CONFIG_PPC601_SYNC_FIX is not set | ||||
| CONFIG_ADVANCED_OPTIONS=y | ||||
| CONFIG_SCSI_MESH=m | ||||
| CONFIG_SCSI_MESH_SYNC_RATE=5 | ||||
| CONFIG_SCSI_MESH_RESET_DELAY_MS=4000 | ||||
| 
 | ||||
| CONFIG_SCSI_MAC53C94=m | ||||
| CONFIG_ADB_CUDA=y | ||||
| CONFIG_ADB_MACIO=y | ||||
| CONFIG_INPUT_ADBHID=y | ||||
| CONFIG_ADB_PMU_LED=y | ||||
| CONFIG_ADB_PMU_LED_IDE=y | ||||
| 
 | ||||
| CONFIG_PMAC_MEDIABAY=y | ||||
| CONFIG_BMAC=m | ||||
| CONFIG_MACE=m | ||||
| # CONFIG_MACE_AAUI_PORT is not set | ||||
| CONFIG_MV643XX_ETH=m | ||||
| CONFIG_I2C_HYDRA=m | ||||
| CONFIG_I2C_MPC=m | ||||
| CONFIG_THERM_WINDTUNNEL=m | ||||
| CONFIG_THERM_ADT746X=m | ||||
| # CONFIG_ANSLCD is not set | ||||
| 
 | ||||
| CONFIG_FB_PLATINUM=y | ||||
| CONFIG_FB_VALKYRIE=y | ||||
| CONFIG_FB_CT65550=y | ||||
| # CONFIG_BDI_SWITCH is not set | ||||
| 
 | ||||
| CONFIG_MAC_FLOPPY=m | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| 
 | ||||
| CONFIG_FB_ATY128=y | ||||
| CONFIG_FB_ATY=y | ||||
| CONFIG_FB_MATROX=y | ||||
| # CONFIG_KEXEC is not set | ||||
| 
 | ||||
| # CONFIG_HVC_RTAS is not set | ||||
| 
 | ||||
| # CONFIG_UDBG_RTAS_CONSOLE is not set | ||||
| CONFIG_BRIQ_PANEL=m | ||||
| 
 | ||||
| # CONFIG_ATA_PIIX is not set | ||||
| # CONFIG_PATA_AMD is not set | ||||
| # CONFIG_PATA_ATIIXP is not set | ||||
| CONFIG_PATA_MPC52xx=m | ||||
| # CONFIG_PATA_MPIIX is not set | ||||
| # CONFIG_PATA_OLDPIIX is not set | ||||
| # CONFIG_PATA_OPTI is not set | ||||
| # CONFIG_PATA_SERVERWORKS is not set | ||||
| 
 | ||||
| CONFIG_SERIAL_MPC52xx=y | ||||
| CONFIG_SERIAL_MPC52xx_CONSOLE=y | ||||
| CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200 | ||||
| # CONFIG_MPC5200_WDT is not set | ||||
| CONFIG_8xxx_WDT=m | ||||
| CONFIG_GEF_WDT=m | ||||
| 
 | ||||
| CONFIG_PPC_MPC5200_BUGFIX=y | ||||
| CONFIG_FEC_MPC52xx=m | ||||
| #CHECK: This may later become a tristate. | ||||
| CONFIG_FEC_MPC52xx_MDIO=y | ||||
| CONFIG_PPC_MPC5200_GPIO=y | ||||
| CONFIG_MDIO_GPIO=m | ||||
| 
 | ||||
| CONFIG_SERIAL_OF_PLATFORM=y | ||||
| CONFIG_DEBUG_STACKOVERFLOW=y | ||||
| 
 | ||||
| # CONFIG_EMBEDDED6xx is not set | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| 
 | ||||
| # CONFIG_BLK_DEV_PLATFORM is not set | ||||
| # CONFIG_BLK_DEV_4DRIVES is not set | ||||
| # CONFIG_BLK_DEV_ALI14XX is not set | ||||
| # CONFIG_BLK_DEV_DTC2278 is not set | ||||
| # CONFIG_BLK_DEV_HT6560B is not set | ||||
| # CONFIG_BLK_DEV_QD65XX is not set | ||||
| # CONFIG_BLK_DEV_UMC8672 is not set | ||||
| 
 | ||||
| # CONFIG_VIRQ_DEBUG is not set | ||||
| 
 | ||||
| CONFIG_PPC_BESTCOMM_ATA=m | ||||
| CONFIG_PPC_BESTCOMM_FEC=m | ||||
| CONFIG_PPC_BESTCOMM_GEN_BD=m | ||||
| 
 | ||||
| CONFIG_FORCE_MAX_ZONEORDER=11 | ||||
| # CONFIG_PAGE_OFFSET_BOOL is not set | ||||
| # CONFIG_FB_FSL_DIU is not set | ||||
| CONFIG_IRQSTACKS=y | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| 
 | ||||
| # CONFIG_DEBUG_GPIO is not set | ||||
| # CONFIG_GPIO_PCA953X is not set | ||||
| # CONFIG_GPIO_PCF857X is not set | ||||
| # CONFIG_HTC_EGPIO is not set | ||||
| 
 | ||||
| # CONFIG_TIFM_CORE is not set | ||||
| 
 | ||||
| # CONFIG_BLK_CPQ_CISS_DA is not set | ||||
| # CONFIG_CISS_SCSI_TAPE is not set | ||||
| 
 | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| 
 | ||||
| # CONFIG_SND_INTEL8X0 is not set | ||||
| # CONFIG_SND_INTEL8X0M is not set | ||||
| 
 | ||||
| # CONFIG_MEMSTICK is not set | ||||
| 
 | ||||
| # CONFIG_IPMI_HANDLER is not set | ||||
| # CONFIG_TCG_TPM is not set | ||||
| 
 | ||||
| # PPC gets sad with debug alloc (bz 448598) | ||||
| # CONFIG_DEBUG_PAGEALLOC is not set | ||||
| 
 | ||||
| CONFIG_SND_ISA=y | ||||
| CONFIG_CRYPTO_DEV_TALITOS=m | ||||
| 
 | ||||
| CONFIG_FSL_EMB_PERFMON=y | ||||
| CONFIG_MPC8272_ADS=y | ||||
| CONFIG_PQ2FADS=y | ||||
| CONFIG_EP8248E=y | ||||
| CONFIG_MPC831x_RDB=y | ||||
| CONFIG_MPC832x_MDS=y | ||||
| CONFIG_MPC832x_RDB=y | ||||
| CONFIG_MPC834x_MDS=y | ||||
| CONFIG_MPC834x_ITX=y | ||||
| CONFIG_MPC836x_MDS=y | ||||
| CONFIG_MPC836x_RDK=y | ||||
| CONFIG_MPC837x_MDS=y | ||||
| CONFIG_MPC837x_RDB=y | ||||
| CONFIG_SBC834x=y | ||||
| CONFIG_ASP834x=y | ||||
| CONFIG_KMETER1=y | ||||
| CONFIG_MPC8641_HPCN=y | ||||
| CONFIG_SBC8641D=y | ||||
| CONFIG_MPC8610_HPCD=y | ||||
| 
 | ||||
| # CONFIG_USB_MUSB_HDRC is not set | ||||
| 
 | ||||
| # busted in 2.6.27 | ||||
| # drivers/mtd/maps/sbc8240.c: In function 'init_sbc8240_mtd': | ||||
| # drivers/mtd/maps/sbc8240.c:172: warning: passing argument 1 of 'simple_map_init' from incompatible pointer type | ||||
| # drivers/mtd/maps/sbc8240.c:177: error: 'struct mtd_info' has no member named 'module' | ||||
| 
 | ||||
| CONFIG_MTD_NAND_FSL_UPM=m | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=32 | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| CONFIG_KVM_BOOK3S_32=m | ||||
							
								
								
									
										4
									
								
								config-powerpc32-smp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								config-powerpc32-smp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| CONFIG_SMP=y | ||||
| # CONFIG_HOTPLUG_CPU is not set | ||||
| CONFIG_NR_CPUS=4 | ||||
| # CONFIG_BATTERY_PMU is not set | ||||
							
								
								
									
										184
									
								
								config-powerpc64
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								config-powerpc64
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,184 @@ | ||||
| CONFIG_WINDFARM_PM81=y | ||||
| CONFIG_WINDFARM_PM91=y | ||||
| CONFIG_WINDFARM_PM121=y | ||||
| CONFIG_PPC_PMAC64=y | ||||
| CONFIG_PPC_MAPLE=y | ||||
| CONFIG_PPC_CELL=y | ||||
| CONFIG_PPC_IBM_CELL_BLADE=y | ||||
| CONFIG_PPC_ISERIES=y | ||||
| CONFIG_PPC_PSERIES=y | ||||
| CONFIG_PPC_PMAC=y | ||||
| CONFIG_PPC_PASEMI=y | ||||
| # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set | ||||
| CONFIG_PPC_PS3=y | ||||
| CONFIG_PPC_CELLEB=y | ||||
| CONFIG_PPC_CELL_QPACE=y | ||||
| CONFIG_PS3_HTAB_SIZE=20 | ||||
| # CONFIG_PS3_DYNAMIC_DMA is not set | ||||
| CONFIG_PS3_ADVANCED=y | ||||
| CONFIG_PS3_HTAB_SIZE=20 | ||||
| # CONFIG_PS3_DYNAMIC_DMA is not set | ||||
| CONFIG_PS3_VUART=y | ||||
| CONFIG_PS3_PS3AV=y | ||||
| CONFIG_PS3_STORAGE=m | ||||
| CONFIG_PS3_DISK=m | ||||
| CONFIG_PS3_ROM=m | ||||
| CONFIG_PS3_FLASH=m | ||||
| CONFIG_PS3_LPM=y | ||||
| CONFIG_SND_PS3=m | ||||
| CONFIG_SND_PS3_DEFAULT_START_DELAY=1000 | ||||
| CONFIG_GELIC_NET=m | ||||
| CONFIG_GELIC_WIRELESS=y | ||||
| CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE=y | ||||
| CONFIG_CBE_THERM=m | ||||
| CONFIG_CBE_CPUFREQ=m | ||||
| CONFIG_CBE_CPUFREQ_PMI=m | ||||
| CONFIG_CBE_CPUFREQ_PMI_ENABLE=y | ||||
| CONFIG_PMAC_RACKMETER=m | ||||
| CONFIG_IBMEBUS=y | ||||
| CONFIG_SPU_FS=m | ||||
| CONFIG_RTAS_FLASH=y | ||||
| CONFIG_PPC_SPLPAR=y | ||||
| CONFIG_SCANLOG=y | ||||
| CONFIG_LPARCFG=y | ||||
| CONFIG_SERIAL_ICOM=m | ||||
| CONFIG_HVCS=m | ||||
| CONFIG_HVC_CONSOLE=y | ||||
| CONFIG_HOTPLUG_PCI=y | ||||
| CONFIG_THERM_PM72=y | ||||
| CONFIG_IBMVETH=m | ||||
| CONFIG_SCSI_IBMVSCSI=m | ||||
| # CONFIG_HOTPLUG_PCI_CPCI is not set | ||||
| CONFIG_HOTPLUG_PCI_SHPC=m | ||||
| CONFIG_HOTPLUG_PCI_RPA=m | ||||
| CONFIG_HOTPLUG_PCI_RPA_DLPAR=y | ||||
| CONFIG_ADB_PMU_LED=y | ||||
| CONFIG_ADB_PMU_LED_IDE=y | ||||
| CONFIG_PMAC_SMU=y | ||||
| CONFIG_CPU_FREQ_PMAC64=y | ||||
| CONFIG_SCSI_IPR=m | ||||
| CONFIG_SCSI_IPR_TRACE=y | ||||
| CONFIG_SCSI_IPR_DUMP=y | ||||
| CONFIG_SPIDER_NET=m | ||||
| CONFIG_HVC_RTAS=y | ||||
| CONFIG_HVC_ISERIES=y | ||||
| CONFIG_CBE_RAS=y | ||||
| 
 | ||||
| # iSeries device drivers | ||||
| # | ||||
| CONFIG_ISERIES_VETH=m | ||||
| CONFIG_VIODASD=m | ||||
| CONFIG_VIOCD=m | ||||
| CONFIG_VIOTAPE=m | ||||
| 
 | ||||
| CONFIG_PASEMI_MAC=m | ||||
| CONFIG_SERIAL_OF_PLATFORM=m | ||||
| 
 | ||||
| CONFIG_PPC_PASEMI_IOMMU=y | ||||
| CONFIG_SERIAL_TXX9=y | ||||
| CONFIG_SERIAL_TXX9_NR_UARTS=6 | ||||
| CONFIG_SERIAL_TXX9_CONSOLE=y | ||||
| 
 | ||||
| CONFIG_HVC_BEAT=y | ||||
| 
 | ||||
| CONFIG_FB_PS3=y | ||||
| CONFIG_FB_PS3_DEFAULT_SIZE_M=18 | ||||
| 
 | ||||
| CONFIG_PPC_PMI=m | ||||
| CONFIG_PS3_SYS_MANAGER=y | ||||
| # CONFIG_BLK_DEV_CELLEB is not set | ||||
| 
 | ||||
| CONFIG_PATA_SCC=m | ||||
| 
 | ||||
| CONFIG_APM_EMULATION=m | ||||
| 
 | ||||
| CONFIG_PPC64=y | ||||
| CONFIG_VIRT_CPU_ACCOUNTING=y | ||||
| CONFIG_NR_CPUS=128 | ||||
| # CONFIG_FB_PLATINUM is not set | ||||
| # CONFIG_FB_VALKYRIE is not set | ||||
| # CONFIG_FB_CT65550 is not set | ||||
| # CONFIG_FB_VGA16 is not set | ||||
| # CONFIG_FB_ATY128 is not set | ||||
| # CONFIG_FB_ATY is not set | ||||
| 
 | ||||
| # CONFIG_POWER4_ONLY is not set | ||||
| 
 | ||||
| CONFIG_RTAS_PROC=y | ||||
| CONFIG_IOMMU_VMERGE=y | ||||
| CONFIG_NUMA=y | ||||
| # CONFIG_PPC_64K_PAGES is not set | ||||
| CONFIG_SCHED_SMT=y | ||||
| 
 | ||||
| # CONFIG_MV643XX_ETH is not set | ||||
| CONFIG_IRQSTACKS=y | ||||
| CONFIG_DEBUG_STACKOVERFLOW=y | ||||
| # CONFIG_INPUT_PCSPKR is not set | ||||
| 
 | ||||
| CONFIG_EHEA=m | ||||
| CONFIG_INFINIBAND_EHCA=m | ||||
| 
 | ||||
| CONFIG_HCALL_STATS=y | ||||
| 
 | ||||
| CONFIG_XMON_DISASSEMBLY=y | ||||
| 
 | ||||
| CONFIG_SCSI_IBMVSCSIS=m | ||||
| 
 | ||||
| CONFIG_SECCOMP=y | ||||
| 
 | ||||
| CONFIG_TUNE_CELL=y | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| # CONFIG_BLK_DEV_PLATFORM is not set | ||||
| CONFIG_IBM_NEW_EMAC=m | ||||
| CONFIG_IBM_NEW_EMAC_RXB=128 | ||||
| CONFIG_IBM_NEW_EMAC_TXB=64 | ||||
| CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32 | ||||
| CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256 | ||||
| CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0 | ||||
| # CONFIG_IBM_NEW_EMAC_DEBUG is not set | ||||
| 
 | ||||
| # CONFIG_VIRQ_DEBUG is not set | ||||
| CONFIG_ELECTRA_CF=m | ||||
| 
 | ||||
| CONFIG_MTD_NAND_PASEMI=m | ||||
| CONFIG_EDAC_CELL=m | ||||
| CONFIG_EDAC_CPC925=m | ||||
| CONFIG_FRAME_WARN=2048 | ||||
| 
 | ||||
| CONFIG_PHYP_DUMP=y | ||||
| CONFIG_FORCE_MAX_ZONEORDER=13 | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| 
 | ||||
| CONFIG_VSX=y | ||||
| 
 | ||||
| CONFIG_SCSI_IBMVFC=m | ||||
| # CONFIG_SCSI_IBMVFC_TRACE is not set | ||||
| CONFIG_IBM_BSR=m | ||||
| 
 | ||||
| CONFIG_SERIO_XILINX_XPS_PS2=m | ||||
| 
 | ||||
| CONFIG_PPC_IBM_CELL_RESETBUTTON=y | ||||
| CONFIG_PPC_IBM_CELL_POWERBUTTON=m | ||||
| CONFIG_CBE_CPUFREQ_SPU_GOVERNOR=m | ||||
| 
 | ||||
| CONFIG_RTC_DRV_PS3=y | ||||
| 
 | ||||
| CONFIG_CRASH_DUMP=y | ||||
| CONFIG_RELOCATABLE=y | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=64 | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| CONFIG_KVM_BOOK3S_64=m | ||||
| # CONFIG_KVM_EXIT_TIMING is not set | ||||
| 
 | ||||
| #-- bz#607175 | ||||
| #-- active memory sharing | ||||
| CONFIG_PPC_SMLPAR=y | ||||
| CONFIG_CMM=y | ||||
| #-- DLPAR memory remove | ||||
| # CONFIG_SPARSEMEM_VMEMMAP is not set | ||||
							
								
								
									
										205
									
								
								config-rhel-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								config-rhel-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,205 @@ | ||||
| # CONFIG_ISA is not set | ||||
| # CONFIG_ISAPNP is not set | ||||
| # CONFIG_I2C_PCA_ISA is not set | ||||
| 
 | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_SCSI_INIA100 is not set | ||||
| # CONFIG_SCSI_ADVANSYS is not set | ||||
| # CONFIG_SCSI_AHA1542 is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| # CONFIG_SCSI_IN2000 is not set | ||||
| # CONFIG_SCSI_QLOGIC_FAS is not set | ||||
| # CONFIG_SCSI_DC390T is not set | ||||
| 
 | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_DEV_APPLETALK is not set | ||||
| # CONFIG_LTPC is not set | ||||
| # CONFIG_COPS is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_IPDDP is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_PLIP is not set | ||||
| 
 | ||||
| # CONFIG_PCMCIA_AHA152X is not set | ||||
| # CONFIG_PCMCIA_NINJA_SCSI is not set | ||||
| # CONFIG_PCMCIA_QLOGIC is not set | ||||
| # CONFIG_PCMCIA_SYM53C500 is not set | ||||
| 
 | ||||
| # CONFIG_EL2 is not set | ||||
| # CONFIG_ELPLUS is not set | ||||
| # CONFIG_WD80x3 is not set | ||||
| # CONFIG_I82092 is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| # CONFIG_SUNDANCE is not set | ||||
| # CONFIG_ULTRA is not set | ||||
| # CONFIG_SKFP is not set | ||||
| # CONFIG_DE600 is not set | ||||
| # CONFIG_DE620 is not set | ||||
| # CONFIG_CS89x0 is not set | ||||
| # CONFIG_AC3200 is not set | ||||
| # CONFIG_NI52 is not set | ||||
| # CONFIG_NI65 is not set | ||||
| # CONFIG_LANCE is not set | ||||
| # CONFIG_EL16 is not set | ||||
| # CONFIG_EL3 is not set | ||||
| # CONFIG_3C515 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_HP100 is not set | ||||
| # CONFIG_EQUALIZER is not set | ||||
| # CONFIG_NET_SB1000 is not set | ||||
| # CONFIG_DEPCA is not set | ||||
| # CONFIG_ATP is not set | ||||
| 
 | ||||
| # CONFIG_TR is not set | ||||
| 
 | ||||
| # CONFIG_GAMEPORT is not set | ||||
| 
 | ||||
| # CONFIG_SND_AD1816A is not set | ||||
| # CONFIG_SND_AD1848 is not set | ||||
| # CONFIG_SND_CS4231 is not set | ||||
| # CONFIG_SND_CS4236 is not set | ||||
| # CONFIG_SND_ES968 is not set | ||||
| # CONFIG_SND_ES1688 is not set | ||||
| # CONFIG_SND_ES18XX is not set | ||||
| # CONFIG_SND_GUSCLASSIC is not set | ||||
| # CONFIG_SND_GUSEXTREME is not set | ||||
| # CONFIG_SND_GUSMAX is not set | ||||
| # CONFIG_SND_INTERWAVE is not set | ||||
| # CONFIG_SND_INTERWAVE_STB is not set | ||||
| # CONFIG_SND_OPTI92X_AD1848 is not set | ||||
| # CONFIG_SND_OPTI92X_CS4231 is not set | ||||
| # CONFIG_SND_OPTI93X is not set | ||||
| # CONFIG_SND_MIRO is not set | ||||
| # CONFIG_SND_SB8 is not set | ||||
| # CONFIG_SND_SB16 is not set | ||||
| # CONFIG_SND_SBAWE is not set | ||||
| # CONFIG_SND_SB16_CSP is not set | ||||
| # CONFIG_SND_WAVEFRONT is not set | ||||
| # CONFIG_SND_ALS100 is not set | ||||
| # CONFIG_SND_AZT2320 is not set | ||||
| # CONFIG_SND_CMI8330 is not set | ||||
| # CONFIG_SND_DT019X is not set | ||||
| # CONFIG_SND_OPL3SA2 is not set | ||||
| # CONFIG_SND_SGALAXY is not set | ||||
| # CONFIG_SND_SSCAPE is not set | ||||
| 
 | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # CONFIG_BINFMT_AOUT is not set | ||||
| 
 | ||||
| # CONFIG_DRM_TDFX is not set | ||||
| # CONFIG_DRM_SIS is not set | ||||
| 
 | ||||
| # CONFIG_BLK_DEV_UMEM is not set | ||||
| # CONFIG_BLK_DEV_NBD is not set | ||||
| # CONFIG_BLK_DEV_DAC960 is not set | ||||
| 
 | ||||
| # CONFIG_PARIDE is not set | ||||
| 
 | ||||
| # CONFIG_I2O is not set | ||||
| 
 | ||||
| # CONFIG_MWAVE is not set | ||||
| 
 | ||||
| # CONFIG_ROCKETPORT is not set | ||||
| # CONFIG_R3964 is not set | ||||
| 
 | ||||
| # CONFIG_JOYSTICK_ANALOG is not set | ||||
| # CONFIG_JOYSTICK_A3D is not set | ||||
| # CONFIG_JOYSTICK_ADI is not set | ||||
| # CONFIG_JOYSTICK_COBRA is not set | ||||
| # CONFIG_JOYSTICK_GF2K is not set | ||||
| # CONFIG_JOYSTICK_GRIP is not set | ||||
| # CONFIG_JOYSTICK_GRIP_MP is not set | ||||
| # CONFIG_JOYSTICK_GUILLEMOT is not set | ||||
| # CONFIG_JOYSTICK_INTERACT is not set | ||||
| # CONFIG_JOYSTICK_SIDEWINDER is not set | ||||
| # CONFIG_JOYSTICK_TMDC is not set | ||||
| # CONFIG_JOYSTICK_IFORCE is not set | ||||
| # CONFIG_JOYSTICK_WARRIOR is not set | ||||
| # CONFIG_JOYSTICK_MAGELLAN is not set | ||||
| # CONFIG_JOYSTICK_SPACEORB is not set | ||||
| # CONFIG_JOYSTICK_SPACEBALL is not set | ||||
| # CONFIG_JOYSTICK_STINGER is not set | ||||
| # CONFIG_JOYSTICK_DB9 is not set | ||||
| # CONFIG_JOYSTICK_GAMECON is not set | ||||
| # CONFIG_JOYSTICK_TURBOGRAFX is not set | ||||
| 
 | ||||
| # CONFIG_RADIO_CADET is not set | ||||
| # CONFIG_RADIO_RTRACK is not set | ||||
| # CONFIG_RADIO_RTRACK2 is not set | ||||
| # CONFIG_RADIO_AZTECH is not set | ||||
| # CONFIG_RADIO_GEMTEK is not set | ||||
| # CONFIG_RADIO_GEMTEK_PCI is not set | ||||
| # CONFIG_RADIO_MAXIRADIO is not set | ||||
| # CONFIG_RADIO_MAESTRO is not set | ||||
| # CONFIG_RADIO_MIROPCM20 is not set | ||||
| # CONFIG_RADIO_SF16FMI is not set | ||||
| # CONFIG_RADIO_SF16FMR2 is not set | ||||
| # CONFIG_RADIO_TERRATEC is not set | ||||
| # CONFIG_RADIO_TRUST is not set | ||||
| # CONFIG_RADIO_TYPHOON is not set | ||||
| # CONFIG_RADIO_ZOLTRIX is not set | ||||
| 
 | ||||
| 
 | ||||
| # CONFIG_VIDEO_PMS is not set | ||||
| # CONFIG_VIDEO_BWQCAM is not set | ||||
| # CONFIG_VIDEO_CQCAM is not set | ||||
| # CONFIG_VIDEO_W9966 is not set | ||||
| # CONFIG_VIDEO_CPIA is not set | ||||
| # CONFIG_VIDEO_CPIA_PP is not set | ||||
| # CONFIG_VIDEO_CPIA_USB is not set | ||||
| # CONFIG_VIDEO_SAA5249 is not set | ||||
| # CONFIG_VIDEO_STRADIS is not set | ||||
| # CONFIG_VIDEO_ZORAN is not set | ||||
| # CONFIG_VIDEO_ZORAN_BUZ is not set | ||||
| # CONFIG_VIDEO_ZORAN_DC10 is not set | ||||
| # CONFIG_VIDEO_ZORAN_DC30 is not set | ||||
| # CONFIG_VIDEO_ZORAN_LML33 is not set | ||||
| # CONFIG_VIDEO_ZORAN_LML33R10 is not set | ||||
| # CONFIG_VIDEO_MEYE is not set | ||||
| # CONFIG_VIDEO_SAA7134 is not set | ||||
| # CONFIG_VIDEO_MXB is not set | ||||
| # CONFIG_VIDEO_HEXIUM_ORION is not set | ||||
| # CONFIG_VIDEO_HEXIUM_GEMINI is not set | ||||
| # CONFIG_VIDEO_CX88 is not set | ||||
| # CONFIG_VIDEO_SAA5246A is not set | ||||
| 
 | ||||
| # CONFIG_INFTL is not set | ||||
| # CONFIG_MTD_DOC2000 is not set | ||||
| # CONFIG_MTD_DOC2001PLUS is not set | ||||
| # CONFIG_MTD_PMC551 is not set | ||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||
| # CONFIG_MTD_PCI is not set | ||||
| 
 | ||||
| # CONFIG_FB_MATROX is not set | ||||
| # CONFIG_FB_3DFX is not set | ||||
| # CONFIG_FB_HGA is not set | ||||
| # CONFIG_FB_ATY is not set | ||||
| # CONFIG_FB_TRIDENT is not set | ||||
| # CONFIG_FB_VOODOO1 is not set | ||||
| # CONFIG_FB_ATY128 is not set | ||||
| # CONFIG_FB_RADEON is not set | ||||
| # CONFIG_FB_NEOMAGIC is not set | ||||
| # CONFIG_FB_ASILIANT is not set | ||||
| # CONFIG_FB_HGA_ACCEL is not set | ||||
| # CONFIG_FB_3DFX_ACCEL is not set | ||||
| 
 | ||||
| # CONFIG_JFS_FS is not set | ||||
| # CONFIG_NCP_FS is not set | ||||
| # CONFIG_CODA_FS is not set | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_XFS_FS is not set | ||||
| # CONFIG_AFFS_FS is not set | ||||
| # CONFIG_BEFS_FS is not set | ||||
| # CONFIG_EFS_FS is not set | ||||
| # CONFIG_BFS_FS is not set | ||||
| # CONFIG_QNX4FS_FS is not set | ||||
| # CONFIG_SYSV_FS is not set | ||||
| # CONFIG_UFS_FS is not set | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_9P_FS is not set | ||||
| # CONFIG_OCFS2_FS is not set | ||||
| # CONFIG_HFS_FS is not set | ||||
| # CONFIG_HFSPLUS_FS is not set | ||||
| 
 | ||||
							
								
								
									
										228
									
								
								config-s390x
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										228
									
								
								config-s390x
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,228 @@ | ||||
| CONFIG_64BIT=y | ||||
| # CONFIG_MARCH_G5 is not set | ||||
| # CONFIG_MARCH_Z900 is not set | ||||
| CONFIG_MARCH_Z9_109=y | ||||
| # CONFIG_MARCH_Z990 is not set | ||||
| 
 | ||||
| CONFIG_NR_CPUS=64 | ||||
| CONFIG_COMPAT=y | ||||
| 
 | ||||
| # See bug 496596 | ||||
| CONFIG_HZ_100=y | ||||
| # CONFIG_HZ_1000 is not set | ||||
| # See bug 496605 | ||||
| # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||||
| 
 | ||||
| CONFIG_MMU=y | ||||
| 
 | ||||
| CONFIG_LOG_BUF_SHIFT=16 | ||||
| CONFIG_NO_IDLE_HZ=y | ||||
| 
 | ||||
| CONFIG_SMP=y | ||||
| 
 | ||||
| # | ||||
| # I/O subsystem configuration | ||||
| # | ||||
| CONFIG_QDIO=m | ||||
| 
 | ||||
| # | ||||
| # Misc | ||||
| # | ||||
| CONFIG_IPL=y | ||||
| # CONFIG_IPL_TAPE is not set | ||||
| CONFIG_IPL_VM=y | ||||
| # CONFIG_PROCESS_DEBUG is not set | ||||
| CONFIG_PFAULT=y | ||||
| CONFIG_SHARED_KERNEL=y | ||||
| CONFIG_CMM=m | ||||
| CONFIG_CMM_PROC=y | ||||
| # CONFIG_NETIUCV is not set | ||||
| CONFIG_SMSGIUCV=m | ||||
| 
 | ||||
| # | ||||
| # SCSI low-level drivers | ||||
| # | ||||
| CONFIG_ZFCP=m | ||||
| CONFIG_ZFCPDUMP=y | ||||
| CONFIG_CCW=y | ||||
| 
 | ||||
| # | ||||
| # S/390 block device drivers | ||||
| # | ||||
| CONFIG_DCSSBLK=m | ||||
| CONFIG_BLK_DEV_XPRAM=m | ||||
| CONFIG_DASD=m | ||||
| CONFIG_DASD_PROFILE=y | ||||
| CONFIG_DASD_ECKD=m | ||||
| CONFIG_DASD_FBA=m | ||||
| CONFIG_DASD_DIAG=m | ||||
| CONFIG_DASD_EER=y | ||||
| 
 | ||||
| # | ||||
| # S/390 character device drivers | ||||
| # | ||||
| CONFIG_TN3270=y | ||||
| CONFIG_TN3270_CONSOLE=y | ||||
| CONFIG_TN3215=y | ||||
| CONFIG_TN3215_CONSOLE=y | ||||
| CONFIG_CCW_CONSOLE=y | ||||
| CONFIG_SCLP_TTY=y | ||||
| CONFIG_SCLP_CONSOLE=y | ||||
| CONFIG_SCLP_VT220_TTY=y | ||||
| CONFIG_SCLP_VT220_CONSOLE=y | ||||
| CONFIG_SCLP_CPI=m | ||||
| CONFIG_SCLP_ASYNC=m | ||||
| CONFIG_S390_TAPE=m | ||||
| CONFIG_S390_TAPE_3590=m | ||||
| 
 | ||||
| CONFIG_APPLDATA_BASE=y | ||||
| CONFIG_APPLDATA_MEM=m | ||||
| CONFIG_APPLDATA_OS=m | ||||
| CONFIG_APPLDATA_NET_SUM=m | ||||
| CONFIG_TN3270_TTY=y | ||||
| CONFIG_TN3270_FS=m | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # S/390 tape interface support | ||||
| # | ||||
| CONFIG_S390_TAPE_BLOCK=y | ||||
| 
 | ||||
| # | ||||
| # S/390 tape hardware support | ||||
| # | ||||
| CONFIG_S390_TAPE_34XX=m | ||||
| 
 | ||||
| # CONFIG_PPP is not set | ||||
| # CONFIG_SLIP is not set | ||||
| 
 | ||||
| # | ||||
| # Token Ring devices | ||||
| # | ||||
| CONFIG_TR=y | ||||
| CONFIG_NETCONSOLE=m | ||||
| 
 | ||||
| # | ||||
| # Wan interfaces | ||||
| # | ||||
| # CONFIG_WAN is not set | ||||
| 
 | ||||
| # | ||||
| # S/390 network device drivers | ||||
| # | ||||
| CONFIG_LCS=m | ||||
| CONFIG_CTC=m | ||||
| CONFIG_IUCV=m | ||||
| CONFIG_QETH=m | ||||
| CONFIG_QETH_IPV6=y | ||||
| CONFIG_CCWGROUP=m | ||||
| 
 | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| # CONFIG_WIRELESS_EXT is not set | ||||
| # CONFIG_MAC80211 is not set | ||||
| # CONFIG_B44 is not set | ||||
| 
 | ||||
| # | ||||
| # Partition Types | ||||
| # | ||||
| CONFIG_PARTITION_ADVANCED=y | ||||
| # CONFIG_OSF_PARTITION is not set | ||||
| CONFIG_IBM_PARTITION=y | ||||
| # CONFIG_MAC_PARTITION is not set | ||||
| CONFIG_MSDOS_PARTITION=y | ||||
| # CONFIG_SGI_PARTITION is not set | ||||
| # CONFIG_SUN_PARTITION is not set | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # S390 crypto hw | ||||
| # | ||||
| CONFIG_CRYPTO_SHA1_S390=m | ||||
| CONFIG_CRYPTO_SHA256_S390=m | ||||
| CONFIG_CRYPTO_DES_S390=m | ||||
| CONFIG_CRYPTO_AES_S390=m | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # S390 specific stack options; needs gcc 3.5 so off for now | ||||
| # | ||||
| CONFIG_PACK_STACK=y | ||||
| CONFIG_CHECK_STACK=y | ||||
| # CONFIG_WARN_STACK is not set | ||||
| # CONFIG_SMALL_STACK is not set | ||||
| 
 | ||||
| CONFIG_ZVM_WATCHDOG=m | ||||
| CONFIG_VMLOGRDR=m | ||||
| CONFIG_MONREADER=m | ||||
| 
 | ||||
| CONFIG_VIRT_CPU_ACCOUNTING=y | ||||
| 
 | ||||
| # CONFIG_CLAW is not set | ||||
| 
 | ||||
| # CONFIG_ATMEL is not set | ||||
| 
 | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| # CONFIG_ATA_OVER_ETH is not set | ||||
| # CONFIG_MII is not set | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_STACK_GUARD=256 | ||||
| CONFIG_CMM_IUCV=y | ||||
| 
 | ||||
| # CONFIG_DETECT_SOFTLOCKUP is not set | ||||
| 
 | ||||
| CONFIG_S390_HYPFS_FS=y | ||||
| 
 | ||||
| CONFIG_MONWRITER=m | ||||
| CONFIG_ZCRYPT=m | ||||
| CONFIG_ZCRYPT_MONOLITHIC=y | ||||
| 
 | ||||
| CONFIG_S390_EXEC_PROTECT=y | ||||
| CONFIG_AFIUCV=m | ||||
| CONFIG_S390_PRNG=m | ||||
| 
 | ||||
| CONFIG_S390_VMUR=m | ||||
| 
 | ||||
| # CONFIG_THERMAL is not set | ||||
| 
 | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_CTCM=m | ||||
| CONFIG_QETH_L2=m | ||||
| CONFIG_QETH_L3=m | ||||
| CONFIG_CRYPTO_SHA512_S390=m | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| CONFIG_KVM=m | ||||
| CONFIG_S390_GUEST=y | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_MEMORY_HOTPLUG=y | ||||
| CONFIG_MEMORY_HOTREMOVE=y | ||||
| CONFIG_CHSC_SCH=m | ||||
| 
 | ||||
| # drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now" | ||||
| # CONFIG_MISDN_HFCMULTI is not set | ||||
| 
 | ||||
| CONFIG_HVC_IUCV=y | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=64 | ||||
| 
 | ||||
| CONFIG_SECCOMP=y | ||||
| 
 | ||||
| CONFIG_PM=y | ||||
| CONFIG_HIBERNATION=y | ||||
| CONFIG_PM_STD_PARTITION="/dev/jokes" | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| CONFIG_SMSGIUCV_EVENT=m | ||||
| 
 | ||||
| # CONFIG_PREEMPT_TRACER is not set | ||||
| 
 | ||||
| CONFIG_VMCP=y | ||||
							
								
								
									
										203
									
								
								config-sparc64-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								config-sparc64-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,203 @@ | ||||
| CONFIG_SMP=y | ||||
| CONFIG_SPARC=y | ||||
| CONFIG_SPARC64=y | ||||
| CONFIG_SECCOMP=y | ||||
| CONFIG_HZ_100=y | ||||
| # CONFIG_HZ_1000 is not set | ||||
| CONFIG_HZ=100 | ||||
| 
 | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_CPU_FREQ=y | ||||
| CONFIG_CPU_FREQ_TABLE=m | ||||
| CONFIG_CPU_FREQ_DEBUG=y | ||||
| # CONFIG_CPU_FREQ_STAT is not set | ||||
| # CONFIG_CPU_FREQ_STAT_DETAILS is not set | ||||
| CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | ||||
| # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||||
| CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_CPU_FREQ_GOV_POWERSAVE=m | ||||
| CONFIG_CPU_FREQ_GOV_USERSPACE=m | ||||
| CONFIG_CPU_FREQ_GOV_ONDEMAND=m | ||||
| CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m | ||||
| CONFIG_US3_FREQ=m | ||||
| CONFIG_US2E_FREQ=m | ||||
| 
 | ||||
| CONFIG_SUN_LDOMS=y | ||||
| CONFIG_SCHED_SMT=y | ||||
| CONFIG_SCHED_MC=y | ||||
| CONFIG_64BIT=y | ||||
| # CONFIG_BBC_I2C is not set | ||||
| CONFIG_HUGETLB_PAGE_SIZE_4MB=y | ||||
| # CONFIG_HUGETLB_PAGE_SIZE_512K is not set | ||||
| # CONFIG_HUGETLB_PAGE_SIZE_64K is not set | ||||
| CONFIG_NR_CPUS=256 | ||||
| CONFIG_US3_FREQ=m | ||||
| CONFIG_US2E_FREQ=m | ||||
| CONFIG_SUN_OPENPROMFS=m | ||||
| CONFIG_COMPAT=y | ||||
| CONFIG_UID16=y | ||||
| CONFIG_BINFMT_ELF32=y | ||||
| CONFIG_ENVCTRL=m | ||||
| CONFIG_DISPLAY7SEG=m | ||||
| CONFIG_WATCHDOG_CP1XXX=m | ||||
| CONFIG_WATCHDOG_RIO=m | ||||
| # CONFIG_CMDLINE_BOOL is not set | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| # CONFIG_PARPORT is not set | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| # CONFIG_LIRC_PARALLEL is not set | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_SIMTEC is not set | ||||
| CONFIG_I2C_ALI1535=m | ||||
| # CONFIG_VGASTATE is not set | ||||
| # CONFIG_FB_DDC is not set | ||||
| # CONFIG_FB_BW2 is not set | ||||
| CONFIG_FB_CG3=y | ||||
| CONFIG_FB_CG6=y | ||||
| # CONFIG_FB_RIVA is not set | ||||
| # CONFIG_FB_MATROX is not set | ||||
| # CONFIG_FB_RADEON is not set | ||||
| CONFIG_FB_ATY=y | ||||
| # CONFIG_FB_S3 is not set | ||||
| # CONFIG_FB_SAVAGE is not set | ||||
| # CONFIG_FB_SIS is not set | ||||
| # CONFIG_FB_NEOMAGIC is not set | ||||
| # CONFIG_FB_3DFX is not set | ||||
| # CONFIG_FB_VOODOO1 is not set | ||||
| # CONFIG_FB_TRIDENT is not set | ||||
| CONFIG_FB_SBUS=y | ||||
| CONFIG_FB_FFB=y | ||||
| # CONFIG_FB_TCX is not set | ||||
| # CONFIG_FB_CG14 is not set | ||||
| CONFIG_FB_PM2=y | ||||
| CONFIG_FB_P9100=y | ||||
| # CONFIG_FB_LEO is not set | ||||
| CONFIG_FB_XVR500=y | ||||
| CONFIG_FB_XVR2500=y | ||||
| # CONFIG_VGASTATE is not set | ||||
| # CONFIG_FB_DDC is not set | ||||
| # CONFIG_FB_CIRRUS is not set | ||||
| # CONFIG_FB_ATY128 is not set | ||||
| # CONFIG_FB_KYRO is not set | ||||
| # CONFIG_AGP is not set | ||||
| # CONFIG_DRM_NOUVEAU is not set | ||||
| # CONFIG_MDA_CONSOLE is not set | ||||
| CONFIG_FONTS=y | ||||
| # CONFIG_FONT_8x8 is not set | ||||
| # CONFIG_FONT_8x16 is not set | ||||
| # CONFIG_FONT_7x14 is not set | ||||
| # CONFIG_FONT_10x18 is not set | ||||
| # CONFIG_FONT_6x11 is not set | ||||
| # CONFIG_FONT_SUN12x22 is not set | ||||
| # CONFIG_FONT_PEARL_8x8 is not set | ||||
| # CONFIG_FONT_ACORN_8x8 is not set | ||||
| CONFIG_FONT_SUN8x16=y | ||||
| CONFIG_FONT_SUN12x22=y | ||||
| # CONFIG_LOGO_LINUX_CLUT224 is not set | ||||
| # CONFIG_SERIAL_8250 is not set | ||||
| CONFIG_SERIAL_SUNZILOG=y | ||||
| CONFIG_SERIAL_SUNZILOG_CONSOLE=y | ||||
| CONFIG_SERIAL_SUNSU=y | ||||
| CONFIG_SERIAL_SUNSU_CONSOLE=y | ||||
| CONFIG_SERIAL_SUNSAB=y | ||||
| CONFIG_SERIAL_SUNSAB_CONSOLE=y | ||||
| CONFIG_SERIAL_SUNHV=y | ||||
| CONFIG_SUN_OPENPROMIO=y | ||||
| CONFIG_OBP_FLASH=m | ||||
| # CONFIG_SERIO_SERPORT is not set | ||||
| CONFIG_BLK_DEV_FD=y | ||||
| CONFIG_SUNVDC=m | ||||
| CONFIG_SUNVNET=m | ||||
| # CONFIG_BLK_DEV_AEC62XX is not set | ||||
| # CONFIG_BLK_DEV_HPT366 is not set | ||||
| # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||||
| # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||||
| # CONFIG_BLK_DEV_SIIMAGE is not set | ||||
| # CONFIG_BLK_DEV_SLC90E66 is not set | ||||
| # CONFIG_BLK_DEV_VIA82CXXX is not set | ||||
| # CONFIG_SCSI_ADVANSYS is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_SCSI_EATA is not set | ||||
| # CONFIG_SCSI_GDTH is not set | ||||
| # CONFIG_SCSI_AIC7XXX is not set | ||||
| # CONFIG_SCSI_AIC79XX is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| CONFIG_SCSI_QLOGICPTI=m | ||||
| CONFIG_SCSI_SUNESP=m | ||||
| CONFIG_SUNLANCE=m | ||||
| CONFIG_SUNBMAC=m | ||||
| CONFIG_SUNQE=m | ||||
| # CONFIG_DM9102 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_R8169 is not set | ||||
| CONFIG_ATM_FORE200E_USE_TASKLET=y | ||||
| CONFIG_ATM_FORE200E_DEBUG=0 | ||||
| CONFIG_ATM_FORE200E_TX_RETRY=16 | ||||
| # CONFIG_DRM_TDFX is not set | ||||
| CONFIG_KEYBOARD_ATKBD=y | ||||
| CONFIG_KEYBOARD_SUNKBD=y | ||||
| # CONFIG_INPUT_PCSPKR is not set | ||||
| CONFIG_INPUT_SPARCSPKR=m | ||||
| # CONFIG_SOUND_PRIME is not set | ||||
| # CONFIG_SND_SUN_AMD7930 is not set | ||||
| CONFIG_SND_SUN_CS4231=m | ||||
| # CONFIG_SND_SUN_DBRI is not set | ||||
| CONFIG_PARPORT_SUNBPP=m | ||||
| CONFIG_LOGO_SUN_CLUT224=y | ||||
| CONFIG_MTD_SUN_UFLASH=m | ||||
| CONFIG_MYRI_SBUS=m | ||||
| # CONFIG_SGI_IOC4 is not set | ||||
| # CONFIG_VIDEO_ZORAN is not set | ||||
| # CONFIG_VIDEO_STRADIS is not set | ||||
| # CONFIG_IEEE1394_SBP2 is not set | ||||
| # CONFIG_USB_NET2280 is not set | ||||
| # CONFIG_DEBUG_BUGVERBOSE is not set | ||||
| # CONFIG_DEBUG_DCFLUSH is not set | ||||
| # CONFIG_DEBUG_BOOTMEM is not set | ||||
| # CONFIG_DEBUG_LOCK_ALLOC is not set | ||||
| # CONFIG_PROVE_LOCKING is not set | ||||
| # CONFIG_LOCK_STAT is not set | ||||
| # CONFIG_LOCKDEP is not set | ||||
| # CONFIG_STACK_DEBUG is not set | ||||
| 
 | ||||
| CONFIG_SPARSEMEM_VMEMMAP=y | ||||
| 
 | ||||
| # CONFIG_THERMAL is not set | ||||
| 
 | ||||
| CONFIG_FRAME_WARN=2048 | ||||
| 
 | ||||
| CONFIG_NUMA=y | ||||
| 
 | ||||
| CONFIG_SND_SPARC=y | ||||
| 
 | ||||
| CONFIG_HW_RANDOM_N2RNG=m | ||||
| 
 | ||||
| # drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now" | ||||
| # CONFIG_MISDN_HFCMULTI is not set | ||||
| 
 | ||||
| CONFIG_US3_MC=y | ||||
| CONFIG_SENSORS_ULTRA45=m | ||||
| CONFIG_LEDS_SUNFIRE=m | ||||
| CONFIG_TADPOLE_TS102_UCTRL=m | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=64 | ||||
| 
 | ||||
| CONFIG_LIRC_ENE0100=m | ||||
| # CONFIG_BATTERY_DS2782 is not set | ||||
| CONFIG_USB_GSPCA_SN9C20X=m | ||||
| CONFIG_USB_GSPCA_SN9C20X_EVDEV=y | ||||
| CONFIG_LSM_MMAP_MIN_ADDR=65536 | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| CONFIG_EARLYFB=y | ||||
| CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m | ||||
| 
 | ||||
| CONFIG_GRETH=m | ||||
| CONFIG_FB_XVR1000=y | ||||
| 
 | ||||
| CONFIG_CRYPTO_DEV_NIAGARA2=y | ||||
							
								
								
									
										484
									
								
								config-x86-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										484
									
								
								config-x86-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,484 @@ | ||||
| CONFIG_UID16=y | ||||
| # CONFIG_64BIT is not set | ||||
| # CONFIG_KERNEL_LZMA is not set | ||||
| 
 | ||||
| # | ||||
| # Processor type and features | ||||
| # | ||||
| # | ||||
| # Enable summit and co via the generic arch | ||||
| # | ||||
| CONFIG_X86_EXTENDED_PLATFORM=y | ||||
| CONFIG_X86_32_NON_STANDARD=y | ||||
| 
 | ||||
| # CONFIG_X86_ELAN is not set | ||||
| # CONFIG_X86_NUMAQ is not set | ||||
| # CONFIG_X86_SUMMIT is not set | ||||
| CONFIG_X86_BIGSMP=y | ||||
| # CONFIG_X86_VISWS is not set | ||||
| # CONFIG_X86_RDC321X is not set | ||||
| # CONFIG_X86_ES7000 is not set | ||||
| # CONFIG_M386 is not set | ||||
| # CONFIG_M486 is not set | ||||
| # CONFIG_M586 is not set | ||||
| # CONFIG_M586TSC is not set | ||||
| # CONFIG_M586MMX is not set | ||||
| CONFIG_M686=y | ||||
| # CONFIG_MPENTIUMII is not set | ||||
| # CONFIG_MPENTIUMIII is not set | ||||
| # CONFIG_MPENTIUMM is not set | ||||
| # CONFIG_MPENTIUM4 is not set | ||||
| # CONFIG_MK6 is not set | ||||
| # CONFIG_MK7 is not set | ||||
| # CONFIG_MK8 is not set | ||||
| # CONFIG_MCRUSOE is not set | ||||
| # CONFIG_MWINCHIPC6 is not set | ||||
| # CONFIG_MWINCHIP3D is not set | ||||
| # CONFIG_MCYRIXIII is not set | ||||
| # CONFIG_MVIAC3_2 is not set | ||||
| CONFIG_SMP=y | ||||
| CONFIG_NR_CPUS=32 | ||||
| CONFIG_X86_GENERIC=y | ||||
| # CONFIG_X86_PPRO_FENCE is not set | ||||
| CONFIG_HPET=y | ||||
| CONFIG_HPET_TIMER=y | ||||
| # CONFIG_HPET_MMAP is not set | ||||
| CONFIG_X86_MCE=y | ||||
| CONFIG_TOSHIBA=m | ||||
| CONFIG_I8K=m | ||||
| CONFIG_SONYPI=m | ||||
| CONFIG_SONYPI_COMPAT=y | ||||
| CONFIG_MICROCODE=m | ||||
| CONFIG_X86_MSR=y | ||||
| CONFIG_X86_CPUID=y | ||||
| CONFIG_EDD=m | ||||
| # CONFIG_EDD_OFF is not set | ||||
| # CONFIG_NUMA is not set | ||||
| 
 | ||||
| # CONFIG_NOHIGHMEM is not set | ||||
| CONFIG_HIGHMEM4G=y | ||||
| # CONFIG_HIGHMEM64G is not set | ||||
| CONFIG_HIGHMEM=y | ||||
| CONFIG_HIGHPTE=y | ||||
| 
 | ||||
| # CONFIG_MATH_EMULATION is not set | ||||
| CONFIG_MTRR=y | ||||
| CONFIG_X86_PAT=y | ||||
| CONFIG_X86_PM_TIMER=y | ||||
| 
 | ||||
| CONFIG_EFI=y | ||||
| CONFIG_EFI_VARS=y | ||||
| CONFIG_EFI_PCDP=y | ||||
| CONFIG_FB_EFI=y | ||||
| # CONFIG_FB_N411 is not set | ||||
| 
 | ||||
| CONFIG_DMAR=y | ||||
| CONFIG_DMAR_BROKEN_GFX_WA=y | ||||
| CONFIG_DMAR_FLOPPY_WA=y | ||||
| CONFIG_DMAR_DEFAULT_ON=y | ||||
| 
 | ||||
| CONFIG_FB_GEODE=y | ||||
| CONFIG_FB_GEODE_LX=y | ||||
| CONFIG_FB_GEODE_GX=y | ||||
| # CONFIG_FB_GEODE_GX1 is not set | ||||
| 
 | ||||
| # CONFIG_PCI_GOBIOS is not set | ||||
| # CONFIG_PCI_GODIRECT is not set | ||||
| # CONFIG_PCI_GOMMCONFIG is not set | ||||
| CONFIG_PCI_GOANY=y | ||||
| 
 | ||||
| # | ||||
| # x86 specific drivers | ||||
| # | ||||
| CONFIG_PCMCIA_FDOMAIN=m | ||||
| CONFIG_SCSI_FUTURE_DOMAIN=m | ||||
| CONFIG_SCSI_ADVANSYS=m | ||||
| 
 | ||||
| CONFIG_CC_STACKPROTECTOR=y | ||||
| 
 | ||||
| CONFIG_SECCOMP=y | ||||
| 
 | ||||
| CONFIG_CAPI_EICON=y | ||||
| 
 | ||||
| # | ||||
| # APM (Advanced Power Management) BIOS Support | ||||
| # | ||||
| CONFIG_APM=y | ||||
| # CONFIG_APM_IGNORE_USER_SUSPEND is not set | ||||
| # CONFIG_APM_DO_ENABLE is not set | ||||
| CONFIG_APM_CPU_IDLE=y | ||||
| # CONFIG_APM_DISPLAY_BLANK is not set | ||||
| # CONFIG_APM_ALLOW_INTS is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel debugging | ||||
| # | ||||
| CONFIG_X86_MPPARSE=y | ||||
| 
 | ||||
| CONFIG_ACPI=y | ||||
| CONFIG_ACPI_AC=y | ||||
| # CONFIG_ACPI_ASUS is not set | ||||
| CONFIG_ACPI_PROCFS_POWER=y | ||||
| CONFIG_ACPI_SYSFS_POWER=y | ||||
| CONFIG_ACPI_BATTERY=y | ||||
| CONFIG_ACPI_BLACKLIST_YEAR=1999 | ||||
| CONFIG_ACPI_BUTTON=y | ||||
| CONFIG_ACPI_CONTAINER=m | ||||
| CONFIG_ACPI_DOCK=y | ||||
| CONFIG_ACPI_FAN=y | ||||
| CONFIG_ACPI_NUMA=y | ||||
| CONFIG_ACPI_PROCESSOR=y | ||||
| CONFIG_ACPI_POWER=y | ||||
| CONFIG_ACPI_PROCFS=y | ||||
| CONFIG_ACPI_SBS=m | ||||
| CONFIG_ACPI_SLEEP=y | ||||
| CONFIG_ACPI_THERMAL=y | ||||
| CONFIG_TOPSTAR_LAPTOP=m | ||||
| CONFIG_ACPI_TOSHIBA=m | ||||
| CONFIG_ACPI_VIDEO=m | ||||
| # CONFIG_ACPI_PROC_EVENT is not set | ||||
| CONFIG_PNPACPI=y | ||||
| CONFIG_ACPI_POWER_METER=m | ||||
| CONFIG_ACPI_PROCESSOR_AGGREGATOR=m | ||||
| CONFIG_ACPI_HED=m | ||||
| CONFIG_ACPI_APEI=y | ||||
| CONFIG_ACPI_APEI_GHES=m | ||||
| # CONFIG_ACPI_APEI_EINJ is not set | ||||
| 
 | ||||
| # | ||||
| # CPUFreq processor drivers | ||||
| # | ||||
| CONFIG_CPU_FREQ=y | ||||
| CONFIG_CPU_FREQ_DEBUG=y | ||||
| # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||||
| CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | ||||
| CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_CPU_FREQ_GOV_POWERSAVE=m | ||||
| CONFIG_CPU_FREQ_GOV_USERSPACE=m | ||||
| CONFIG_CPU_FREQ_GOV_ONDEMAND=m | ||||
| CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m | ||||
| CONFIG_CPU_FREQ_TABLE=y | ||||
| CONFIG_CPU_FREQ_STAT=m | ||||
| CONFIG_CPU_FREQ_STAT_DETAILS=y | ||||
| 
 | ||||
| CONFIG_X86_ACPI_CPUFREQ=m | ||||
| CONFIG_X86_PCC_CPUFREQ=m | ||||
| # CONFIG_X86_POWERNOW_K6 is not set | ||||
| CONFIG_X86_POWERNOW_K7=y | ||||
| CONFIG_X86_POWERNOW_K8=m | ||||
| # CONFIG_X86_GX_SUSPMOD is not set | ||||
| # CONFIG_X86_SPEEDSTEP_CENTRINO is not set | ||||
| CONFIG_X86_SPEEDSTEP_ICH=y | ||||
| CONFIG_X86_SPEEDSTEP_SMI=y | ||||
| CONFIG_X86_SPEEDSTEP_LIB=y | ||||
| # CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set | ||||
| CONFIG_X86_P4_CLOCKMOD=m | ||||
| CONFIG_X86_LONGRUN=y | ||||
| # CONFIG_X86_LONGHAUL is not set | ||||
| # CONFIG_X86_CPUFREQ_NFORCE2 is not set | ||||
| # e_powersaver is dangerous | ||||
| # CONFIG_X86_E_POWERSAVER is not set | ||||
| 
 | ||||
| CONFIG_X86_HT=y | ||||
| CONFIG_X86_TRAMPOLINE=y | ||||
| 
 | ||||
| # | ||||
| # various x86 specific drivers | ||||
| # | ||||
| CONFIG_NVRAM=y | ||||
| CONFIG_IBM_ASM=m | ||||
| CONFIG_CRYPTO_AES_586=m | ||||
| CONFIG_CRYPTO_TWOFISH_586=m | ||||
| CONFIG_CRYPTO_DEV_PADLOCK=m | ||||
| CONFIG_CRYPTO_DEV_PADLOCK_AES=m | ||||
| CONFIG_CRYPTO_DEV_PADLOCK_SHA=m | ||||
| 
 | ||||
| CONFIG_GENERIC_ISA_DMA=y | ||||
| CONFIG_SCHED_SMT=y | ||||
| CONFIG_SUSPEND=y | ||||
| CONFIG_HIBERNATION=y | ||||
| CONFIG_PM_STD_PARTITION="" | ||||
| 
 | ||||
| CONFIG_DEBUG_RODATA=y | ||||
| CONFIG_DEBUG_STACKOVERFLOW=y | ||||
| # CONFIG_4KSTACKS is not set | ||||
| CONFIG_DEBUG_NMI_TIMEOUT=5 | ||||
| 
 | ||||
| CONFIG_PCI_DIRECT=y | ||||
| CONFIG_PCI_MMCONFIG=y | ||||
| CONFIG_PCI_BIOS=y | ||||
| 
 | ||||
| CONFIG_HOTPLUG_PCI=y | ||||
| CONFIG_HOTPLUG_PCI_COMPAQ=m | ||||
| # CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set | ||||
| CONFIG_HOTPLUG_PCI_IBM=m | ||||
| # CONFIG_HOTPLUG_PCI_CPCI is not set | ||||
| # SHPC has half-arsed PCI probing, which makes it load on too many systems | ||||
| # CONFIG_HOTPLUG_PCI_SHPC is not set | ||||
| CONFIG_PM=y | ||||
| 
 | ||||
| CONFIG_IPW2100=m | ||||
| CONFIG_IPW2100_MONITOR=y | ||||
| CONFIG_IPW2200=m | ||||
| CONFIG_IPW2200_MONITOR=y | ||||
| CONFIG_IPW2200_RADIOTAP=y | ||||
| CONFIG_IPW2200_PROMISCUOUS=y | ||||
| CONFIG_IPW2200_QOS=y | ||||
| 
 | ||||
| CONFIG_BLK_DEV_AMD74XX=y | ||||
| 
 | ||||
| CONFIG_I2C_ALI1535=m | ||||
| CONFIG_I2C_ALI15X3=m | ||||
| CONFIG_I2C_ALI1563=m | ||||
| CONFIG_I2C_AMD756=m | ||||
| CONFIG_I2C_AMD756_S4882=m | ||||
| CONFIG_I2C_AMD8111=m | ||||
| CONFIG_I2C_I801=m | ||||
| CONFIG_I2C_ISCH=m | ||||
| CONFIG_I2C_NFORCE2=m | ||||
| CONFIG_I2C_NFORCE2_S4985=m | ||||
| CONFIG_I2C_PIIX4=m | ||||
| CONFIG_I2C_SIS5595=m | ||||
| CONFIG_I2C_SIS630=m | ||||
| CONFIG_I2C_SIS96X=m | ||||
| 
 | ||||
| CONFIG_I2C_VIA=m | ||||
| CONFIG_I2C_VIAPRO=m | ||||
| 
 | ||||
| CONFIG_SCx200_ACB=m | ||||
| 
 | ||||
| # CONFIG_X86_REBOOTFIXUPS is not set | ||||
| 
 | ||||
| CONFIG_DELL_RBU=m | ||||
| CONFIG_DCDBAS=m | ||||
| 
 | ||||
| CONFIG_GPIO_SCH=m | ||||
| CONFIG_PC8736x_GPIO=m | ||||
| # CONFIG_NSC_GPIO is not set | ||||
| CONFIG_CS5535_GPIO=m | ||||
| 
 | ||||
| CONFIG_EDAC=y | ||||
| # CONFIG_EDAC_DEBUG is not set | ||||
| CONFIG_EDAC_MM_EDAC=m | ||||
| CONFIG_EDAC_AMD76X=m | ||||
| CONFIG_EDAC_E7XXX=m | ||||
| CONFIG_EDAC_E752X=m | ||||
| CONFIG_EDAC_I82860=m | ||||
| CONFIG_EDAC_I82875P=m | ||||
| CONFIG_EDAC_I82975X=m | ||||
| CONFIG_EDAC_I3000=m | ||||
| CONFIG_EDAC_I5000=m | ||||
| CONFIG_EDAC_I5100=m | ||||
| CONFIG_EDAC_I5400=m | ||||
| CONFIG_EDAC_R82600=m | ||||
| CONFIG_EDAC_AMD8131=m | ||||
| CONFIG_EDAC_AMD8111=m | ||||
| CONFIG_EDAC_I7CORE=m | ||||
| 
 | ||||
| CONFIG_SCHED_MC=y | ||||
| 
 | ||||
| CONFIG_SND_ISA=y | ||||
| CONFIG_SND_ES18XX=m | ||||
| 
 | ||||
| CONFIG_TCG_INFINEON=m | ||||
| 
 | ||||
| CONFIG_HW_RANDOM_INTEL=m | ||||
| CONFIG_HW_RANDOM_AMD=m | ||||
| CONFIG_HW_RANDOM_GEODE=m | ||||
| CONFIG_HW_RANDOM_VIA=m | ||||
| 
 | ||||
| 
 | ||||
| # CONFIG_COMPAT_VDSO is not set | ||||
| 
 | ||||
| # CONFIG_SGI_IOC4 is not set | ||||
| 
 | ||||
| CONFIG_X86_PLATFORM_DEVICES=y | ||||
| CONFIG_ASUS_LAPTOP=m | ||||
| CONFIG_COMPAL_LAPTOP=m | ||||
| CONFIG_EEEPC_LAPTOP=m | ||||
| CONFIG_EEEPC_WMI=m | ||||
| CONFIG_FUJITSU_LAPTOP=m | ||||
| # CONFIG_FUJITSU_LAPTOP_DEBUG is not set | ||||
| CONFIG_MSI_LAPTOP=m | ||||
| CONFIG_SONY_LAPTOP=m | ||||
| CONFIG_DELL_LAPTOP=m | ||||
| CONFIG_ACPI_WMI=m | ||||
| CONFIG_ACER_WMI=m | ||||
| CONFIG_ACERHDF=m | ||||
| CONFIG_TC1100_WMI=m | ||||
| CONFIG_HP_WMI=m | ||||
| # CONFIG_INTEL_SCU_IPC is not set | ||||
| CONFIG_DELL_WMI=m | ||||
| 
 | ||||
| # CONFIG_TOUCHSCREEN_INTEL_MID is not set | ||||
| 
 | ||||
| # CONFIG_SMSC37B787_WDT is not set | ||||
| CONFIG_W83697HF_WDT=m | ||||
| CONFIG_IB700_WDT=m | ||||
| 
 | ||||
| CONFIG_RELOCATABLE=y | ||||
| CONFIG_PHYSICAL_ALIGN=0x400000 | ||||
| CONFIG_PHYSICAL_START=0x400000 | ||||
| CONFIG_CRASH_DUMP=y | ||||
| # CONFIG_KEXEC_JUMP is not set | ||||
| CONFIG_PROC_VMCORE=y | ||||
| CONFIG_CRASH=m | ||||
| 
 | ||||
| CONFIG_CRYPTO_DEV_GEODE=m | ||||
| 
 | ||||
| CONFIG_VIDEO_CAFE_CCIC=m | ||||
| 
 | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| CONFIG_KVM=m | ||||
| CONFIG_KVM_INTEL=m | ||||
| CONFIG_KVM_AMD=m | ||||
| CONFIG_LGUEST=m | ||||
| 
 | ||||
| CONFIG_PARAVIRT_GUEST=y | ||||
| CONFIG_PARAVIRT=y | ||||
| # CONFIG_PARAVIRT_DEBUG is not set | ||||
| 
 | ||||
| # PARAVIRT_SPINLOCKS has a 5% perf hit | ||||
| # CONFIG_PARAVIRT_SPINLOCKS is not set | ||||
| CONFIG_KVM_CLOCK=y | ||||
| CONFIG_KVM_GUEST=y | ||||
| CONFIG_LGUEST_GUEST=y | ||||
| CONFIG_VMI=y | ||||
| 
 | ||||
| CONFIG_XEN=y | ||||
| CONFIG_XEN_MAX_DOMAIN_MEMORY=8 | ||||
| CONFIG_XEN_BALLOON=y | ||||
| CONFIG_XEN_SCRUB_PAGES=y | ||||
| CONFIG_XEN_SAVE_RESTORE=y | ||||
| CONFIG_HVC_XEN=y | ||||
| CONFIG_XEN_FBDEV_FRONTEND=y | ||||
| CONFIG_XEN_KBDDEV_FRONTEND=y | ||||
| CONFIG_XEN_BLKDEV_FRONTEND=m | ||||
| CONFIG_XEN_NETDEV_FRONTEND=m | ||||
| CONFIG_XENFS=m | ||||
| CONFIG_XEN_COMPAT_XENFS=y | ||||
| 
 | ||||
| CONFIG_MTD_ESB2ROM=m | ||||
| CONFIG_MTD_CK804XROM=m | ||||
| CONFIG_MTD_NAND_CAFE=m | ||||
| 
 | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_CPU_IDLE=y | ||||
| # CONFIG_CPU_IDLE_GOV_LADDER is not set | ||||
| CONFIG_CPU_IDLE_GOV_MENU=y | ||||
| 
 | ||||
| CONFIG_THINKPAD_ACPI=m | ||||
| # CONFIG_THINKPAD_ACPI_DEBUG is not set | ||||
| # CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set | ||||
| CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y | ||||
| CONFIG_THINKPAD_ACPI_VIDEO=y | ||||
| CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y | ||||
| # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set | ||||
| 
 | ||||
| CONFIG_MACINTOSH_DRIVERS=y | ||||
| 
 | ||||
| CONFIG_DMIID=y | ||||
| CONFIG_ISCSI_IBFT_FIND=y | ||||
| CONFIG_ISCSI_IBFT=m | ||||
| 
 | ||||
| CONFIG_DMADEVICES=y | ||||
| CONFIG_INTEL_IOATDMA=m | ||||
| 
 | ||||
| CONFIG_SENSORS_I5K_AMB=m | ||||
| 
 | ||||
| # CONFIG_CPA_DEBUG is not set | ||||
| # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set | ||||
| 
 | ||||
| CONFIG_HP_WATCHDOG=m | ||||
| 
 | ||||
| CONFIG_OLPC=y | ||||
| CONFIG_BATTERY_OLPC=y | ||||
| CONFIG_MOUSE_PS2_OLPC=y | ||||
| 
 | ||||
| CONFIG_STRICT_DEVMEM=y | ||||
| 
 | ||||
| # CONFIG_NO_BOOTMEM is not set | ||||
| 
 | ||||
| # CONFIG_MEMTEST is not set | ||||
| # CONFIG_MAXSMP is not set | ||||
| CONFIG_MTRR_SANITIZER=y | ||||
| CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 | ||||
| CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 | ||||
| CONFIG_SYSPROF_TRACER=y | ||||
| 
 | ||||
| # CONFIG_X86_VERBOSE_BOOTUP is not set | ||||
| # CONFIG_MMIOTRACE_TEST is not set | ||||
| 
 | ||||
| # CONFIG_DEBUG_PER_CPU_MAPS is not set | ||||
| 
 | ||||
| CONFIG_HP_ILO=m | ||||
| 
 | ||||
| CONFIG_BACKLIGHT_MBP_NVIDIA=m | ||||
| 
 | ||||
| CONFIG_OPROFILE_IBS=y | ||||
| CONFIG_MICROCODE_INTEL=y | ||||
| CONFIG_MICROCODE_AMD=y | ||||
| 
 | ||||
| # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set | ||||
| CONFIG_X86_RESERVE_LOW_64K=y | ||||
| 
 | ||||
| # CONFIG_CMDLINE_BOOL is not set | ||||
| 
 | ||||
| CONFIG_PANASONIC_LAPTOP=m | ||||
| 
 | ||||
| CONFIG_XEN_DEBUG_FS=y | ||||
| CONFIG_X86_PTRACE_BTS=y | ||||
| 
 | ||||
| CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y | ||||
| 
 | ||||
| CONFIG_POWER_TRACER=y | ||||
| CONFIG_HW_BRANCH_TRACER=y | ||||
| 
 | ||||
| # CONFIG_SPARSE_IRQ is not set | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=32 | ||||
| 
 | ||||
| # CONFIG_IOMMU_STRESS is not set | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| CONFIG_X86_MCE_INTEL=y | ||||
| CONFIG_X86_MCE_AMD=y | ||||
| # CONFIG_X86_ANCIENT_MCE is not set | ||||
| # CONFIG_X86_MCE_INJECT is not set | ||||
| 
 | ||||
| # CONFIG_X86_MRST is not set | ||||
| CONFIG_SFI=y | ||||
| 
 | ||||
| CONFIG_INPUT_WINBOND_CIR=m | ||||
| CONFIG_I2C_SCMI=m | ||||
| CONFIG_SBC_FITPC2_WATCHDOG=m | ||||
| CONFIG_EDAC_I3200=m | ||||
| CONFIG_EDAC_DECODE_MCE=m | ||||
| 
 | ||||
| CONFIG_GPIO_LANGWELL=y | ||||
| 
 | ||||
| # CONFIG_INTEL_TXT is not set | ||||
| 
 | ||||
| CONFIG_CS5535_MFGPT=m | ||||
| CONFIG_GEODE_WDT=m | ||||
| CONFIG_CS5535_CLOCK_EVENT_SRC=m | ||||
| 
 | ||||
| CONFIG_LEDS_INTEL_SS4200=m | ||||
| 
 | ||||
| CONFIG_X86_DECODER_SELFTEST=y | ||||
| 
 | ||||
| CONFIG_ACPI_CMPC=m | ||||
| CONFIG_MSI_WMI=m | ||||
| CONFIG_TOSHIBA_BT_RFKILL=m | ||||
| # CONFIG_SAMSUNG_LAPTOP is not set | ||||
| 
 | ||||
| CONFIG_VGA_SWITCHEROO=y | ||||
| CONFIG_LPC_SCH=m | ||||
| 
 | ||||
| CONFIG_INTEL_IDLE=m | ||||
| 
 | ||||
| CONFIG_PCI_CNB20LE_QUIRK=y | ||||
							
								
								
									
										409
									
								
								config-x86_64-generic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										409
									
								
								config-x86_64-generic
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,409 @@ | ||||
| CONFIG_64BIT=y | ||||
| CONFIG_UID16=y | ||||
| # CONFIG_KERNEL_LZMA is not set | ||||
| 
 | ||||
| # CONFIG_MK8 is not set | ||||
| # CONFIG_MPSC is not set | ||||
| CONFIG_GENERIC_CPU=y | ||||
| CONFIG_X86_EXTENDED_PLATFORM=y | ||||
| # CONFIG_X86_VSMP is not set | ||||
| # CONFIG_X86_UV is not set | ||||
| CONFIG_X86_MSR=y | ||||
| CONFIG_X86_CPUID=y | ||||
| CONFIG_MTRR=y | ||||
| CONFIG_NUMA=y | ||||
| CONFIG_K8_NUMA=y | ||||
| CONFIG_X86_64_ACPI_NUMA=y | ||||
| # CONFIG_NUMA_EMU is not set | ||||
| CONFIG_NR_CPUS=512 | ||||
| CONFIG_X86_POWERNOW_K8=m | ||||
| CONFIG_X86_P4_CLOCKMOD=m | ||||
| CONFIG_IA32_EMULATION=y | ||||
| # CONFIG_IA32_AOUT is not set | ||||
| # CONFIG_IOMMU_DEBUG is not set | ||||
| CONFIG_DEBUG_RODATA=y | ||||
| CONFIG_MICROCODE=m | ||||
| CONFIG_SWIOTLB=y | ||||
| CONFIG_CALGARY_IOMMU=y | ||||
| CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y | ||||
| CONFIG_X86_PM_TIMER=y | ||||
| CONFIG_EDD=m | ||||
| # CONFIG_EDD_OFF is not set | ||||
| CONFIG_PCI_BIOS=y | ||||
| CONFIG_PCI_MMCONFIG=y | ||||
| CONFIG_DMAR=y | ||||
| CONFIG_DMAR_BROKEN_GFX_WA=y | ||||
| CONFIG_DMAR_FLOPPY_WA=y | ||||
| CONFIG_DMAR_DEFAULT_ON=y | ||||
| 
 | ||||
| CONFIG_KEXEC_JUMP=y | ||||
| 
 | ||||
| CONFIG_EFI=y | ||||
| CONFIG_EFI_VARS=y | ||||
| CONFIG_EFI_PCDP=y | ||||
| CONFIG_FB_EFI=y | ||||
| 
 | ||||
| CONFIG_SECCOMP=y | ||||
| 
 | ||||
| CONFIG_CAPI_EICON=y | ||||
| 
 | ||||
| CONFIG_GENERIC_ISA_DMA=y | ||||
| CONFIG_SCHED_SMT=y | ||||
| CONFIG_SUSPEND=y | ||||
| CONFIG_HIBERNATION=y | ||||
| CONFIG_PM_STD_PARTITION="" | ||||
| 
 | ||||
| CONFIG_CPU_FREQ=y | ||||
| # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||||
| CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | ||||
| CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_CPU_FREQ_GOV_POWERSAVE=m | ||||
| CONFIG_CPU_FREQ_GOV_USERSPACE=m | ||||
| CONFIG_CPU_FREQ_GOV_ONDEMAND=m | ||||
| CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m | ||||
| CONFIG_CPU_FREQ_TABLE=y | ||||
| CONFIG_CPU_FREQ_DEBUG=y | ||||
| # CONFIG_X86_SPEEDSTEP_CENTRINO is not set | ||||
| CONFIG_X86_PCC_CPUFREQ=m  | ||||
| CONFIG_X86_ACPI_CPUFREQ=m | ||||
| CONFIG_CPU_FREQ_STAT=m | ||||
| CONFIG_CPU_FREQ_STAT_DETAILS=y | ||||
| 
 | ||||
| CONFIG_ACPI=y | ||||
| CONFIG_ACPI_AC=y | ||||
| # CONFIG_ACPI_ASUS is not set | ||||
| CONFIG_ACPI_PROCFS_POWER=y | ||||
| CONFIG_ACPI_SYSFS_POWER=y | ||||
| CONFIG_ACPI_BATTERY=y | ||||
| CONFIG_ACPI_BLACKLIST_YEAR=0 | ||||
| CONFIG_ACPI_BUTTON=y | ||||
| CONFIG_ACPI_CONTAINER=m | ||||
| CONFIG_ACPI_DOCK=y | ||||
| CONFIG_ACPI_FAN=y | ||||
| CONFIG_ACPI_HOTPLUG_MEMORY=m | ||||
| CONFIG_ACPI_NUMA=y | ||||
| CONFIG_ACPI_PROCESSOR=y | ||||
| CONFIG_ACPI_PROCFS=y | ||||
| CONFIG_ACPI_SBS=m | ||||
| CONFIG_ACPI_SLEEP=y | ||||
| CONFIG_ACPI_THERMAL=y | ||||
| CONFIG_ACPI_TOSHIBA=m | ||||
| CONFIG_ACPI_POWER=y | ||||
| CONFIG_ACPI_VIDEO=m | ||||
| # CONFIG_ACPI_PROC_EVENT is not set | ||||
| CONFIG_ACPI_POWER_METER=m | ||||
| CONFIG_ACPI_PROCESSOR_AGGREGATOR=m | ||||
| CONFIG_ACPI_HED=m | ||||
| CONFIG_ACPI_APEI=y | ||||
| CONFIG_ACPI_APEI_GHES=m | ||||
| # CONFIG_ACPI_APEI_EINJ is not set | ||||
| 
 | ||||
| CONFIG_X86_PLATFORM_DEVICES=y | ||||
| CONFIG_ASUS_LAPTOP=m | ||||
| CONFIG_COMPAL_LAPTOP=m | ||||
| CONFIG_FUJITSU_LAPTOP=m | ||||
| # CONFIG_FUJITSU_LAPTOP_DEBUG is not set | ||||
| CONFIG_MSI_LAPTOP=m | ||||
| CONFIG_SONY_LAPTOP=m | ||||
| CONFIG_SONYPI_COMPAT=y | ||||
| CONFIG_EEEPC_LAPTOP=m | ||||
| CONFIG_EEEPC_WMI=m | ||||
| CONFIG_DELL_LAPTOP=m | ||||
| CONFIG_ACPI_WMI=m | ||||
| CONFIG_ACER_WMI=m | ||||
| CONFIG_ACERHDF=m | ||||
| CONFIG_HP_WMI=m | ||||
| CONFIG_DELL_WMI=m | ||||
| # CONFIG_INTEL_SCU_IPC is not set | ||||
| 
 | ||||
| # CONFIG_TOUCHSCREEN_INTEL_MID is not set | ||||
| 
 | ||||
| CONFIG_THINKPAD_ACPI=m | ||||
| # CONFIG_THINKPAD_ACPI_DEBUG is not set | ||||
| # CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set | ||||
| CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y | ||||
| CONFIG_THINKPAD_ACPI_VIDEO=y | ||||
| CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y | ||||
| # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set | ||||
| 
 | ||||
| CONFIG_HOTPLUG_PCI=y | ||||
| CONFIG_HOTPLUG_PCI_COMPAQ=m | ||||
| # CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set | ||||
| CONFIG_HOTPLUG_PCI_IBM=m | ||||
| # CONFIG_HOTPLUG_PCI_CPCI is not set | ||||
| # SHPC has half-arsed PCI probing, which makes it load on too many systems | ||||
| CONFIG_HOTPLUG_PCI_SHPC=m | ||||
| 
 | ||||
| CONFIG_HPET=y | ||||
| # CONFIG_HPET_MMAP is not set | ||||
| CONFIG_PM=y | ||||
| 
 | ||||
| CONFIG_IPW2100=m | ||||
| CONFIG_IPW2100_MONITOR=y | ||||
| CONFIG_IPW2200=m | ||||
| CONFIG_IPW2200_MONITOR=y | ||||
| CONFIG_IPW2200_RADIOTAP=y | ||||
| CONFIG_IPW2200_PROMISCUOUS=y | ||||
| CONFIG_IPW2200_QOS=y | ||||
| 
 | ||||
| CONFIG_PNP=y | ||||
| CONFIG_PNPACPI=y | ||||
| 
 | ||||
| CONFIG_BLK_DEV_AMD74XX=y | ||||
| CONFIG_CRYPTO_DEV_PADLOCK=m | ||||
| CONFIG_CRYPTO_DEV_PADLOCK_AES=m | ||||
| CONFIG_CRYPTO_DEV_PADLOCK_SHA=m | ||||
| # CONFIG_CRYPTO_AES is not set | ||||
| CONFIG_CRYPTO_AES_X86_64=m | ||||
| # CONFIG_CRYPTO_TWOFISH is not set | ||||
| CONFIG_CRYPTO_TWOFISH_X86_64=m | ||||
| # CONFIG_CRYPTO_SALSA20 is not set | ||||
| CONFIG_CRYPTO_SALSA20_X86_64=m | ||||
| CONFIG_CRYPTO_AES_NI_INTEL=m | ||||
| 
 | ||||
| CONFIG_X86_MCE=y | ||||
| CONFIG_X86_MCE_INTEL=y | ||||
| CONFIG_X86_MCE_AMD=y | ||||
| 
 | ||||
| # CONFIG_I2C_ALI1535 is not set | ||||
| # CONFIG_I2C_ALI1563 is not set | ||||
| # CONFIG_I2C_ALI15X3 is not set | ||||
| CONFIG_I2C_AMD756=m | ||||
| CONFIG_I2C_AMD756_S4882=m | ||||
| CONFIG_I2C_AMD8111=m | ||||
| CONFIG_I2C_I801=m | ||||
| CONFIG_I2C_ISCH=m | ||||
| CONFIG_I2C_NFORCE2_S4985=m | ||||
| CONFIG_I2C_PIIX4=m | ||||
| # CONFIG_I2C_SIS5595 is not set | ||||
| # CONFIG_I2C_SIS630 is not set | ||||
| 
 | ||||
| CONFIG_I2C_SIS96X=m | ||||
| CONFIG_I2C_VIA=m | ||||
| CONFIG_I2C_VIAPRO=m | ||||
| 
 | ||||
| CONFIG_DELL_RBU=m | ||||
| CONFIG_DCDBAS=m | ||||
| 
 | ||||
| CONFIG_NVRAM=y | ||||
| 
 | ||||
| CONFIG_EDAC=y | ||||
| # CONFIG_EDAC_DEBUG is not set | ||||
| CONFIG_EDAC_MM_EDAC=m | ||||
| CONFIG_EDAC_AMD76X=m | ||||
| CONFIG_EDAC_E7XXX=m | ||||
| CONFIG_EDAC_E752X=m | ||||
| CONFIG_EDAC_I5000=m | ||||
| CONFIG_EDAC_I5100=m | ||||
| CONFIG_EDAC_I5400=m | ||||
| CONFIG_EDAC_I82875P=m | ||||
| CONFIG_EDAC_I82860=m | ||||
| CONFIG_EDAC_I82975X=m | ||||
| CONFIG_EDAC_R82600=m | ||||
| CONFIG_EDAC_AMD8131=m | ||||
| CONFIG_EDAC_AMD8111=m | ||||
| CONFIG_EDAC_AMD64=m | ||||
| # CONFIG_EDAC_AMD64_ERROR_INJECTION is not set | ||||
| CONFIG_EDAC_DECODE_MCE=m | ||||
| CONFIG_EDAC_I7CORE=m | ||||
| 
 | ||||
| CONFIG_SCHED_MC=y | ||||
| 
 | ||||
| CONFIG_TCG_INFINEON=m | ||||
| 
 | ||||
| CONFIG_HW_RANDOM_INTEL=m | ||||
| CONFIG_HW_RANDOM_AMD=m | ||||
| CONFIG_HW_RANDOM_VIA=m | ||||
| 
 | ||||
| # CONFIG_HW_RANDOM_GEODE is not set | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_DEBUG_STACKOVERFLOW=y | ||||
| CONFIG_DEBUG_NMI_TIMEOUT=5 | ||||
| 
 | ||||
| CONFIG_GPIO_SCH=m | ||||
| # CONFIG_PC8736x_GPIO is not set | ||||
| 
 | ||||
| # CONFIG_DISCONTIGMEM_MANUAL is not set | ||||
| CONFIG_SPARSEMEM_MANUAL=y | ||||
| CONFIG_SPARSEMEM=y | ||||
| CONFIG_HAVE_MEMORY_PRESENT=y | ||||
| CONFIG_SPARSEMEM_EXTREME=y | ||||
| CONFIG_SPARSEMEM_VMEMMAP=y | ||||
| CONFIG_MEMORY_HOTPLUG=y | ||||
| CONFIG_MEMORY_HOTREMOVE=y | ||||
| 
 | ||||
| # CONFIG_BLK_DEV_CMD640 is not set | ||||
| # CONFIG_BLK_DEV_RZ1000 is not set | ||||
| # CONFIG_BLK_DEV_TRIFLEX is not set | ||||
| # CONFIG_BLK_DEV_CS5520 is not set | ||||
| # CONFIG_BLK_DEV_CS5530 is not set | ||||
| # CONFIG_BLK_DEV_CS5535 is not set | ||||
| 
 | ||||
| CONFIG_CC_STACKPROTECTOR=y | ||||
| 
 | ||||
| CONFIG_SGI_IOC4=m | ||||
| CONFIG_SGI_XP=m | ||||
| CONFIG_SGI_GRU=m | ||||
| # CONFIG_SGI_GRU_DEBUG is not set | ||||
| 
 | ||||
| # CONFIG_SMSC37B787_WDT is not set | ||||
| CONFIG_W83697HF_WDT=m | ||||
| 
 | ||||
| # CONFIG_VIDEO_CAFE_CCIC is not set | ||||
| 
 | ||||
| CONFIG_MTD_ESB2ROM=m | ||||
| CONFIG_MTD_CK804XROM=m | ||||
| 
 | ||||
| CONFIG_RELOCATABLE=y | ||||
| CONFIG_MACINTOSH_DRIVERS=y | ||||
| 
 | ||||
| CONFIG_CRASH_DUMP=y | ||||
| CONFIG_PHYSICAL_START=0x1000000 | ||||
| CONFIG_PROC_VMCORE=y | ||||
| CONFIG_CRASH=m | ||||
| 
 | ||||
| CONFIG_DMIID=y | ||||
| CONFIG_ISCSI_IBFT_FIND=y | ||||
| CONFIG_ISCSI_IBFT=m | ||||
| 
 | ||||
| 
 | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_CPU_IDLE=y | ||||
| # CONFIG_CPU_IDLE_GOV_LADDER is not set | ||||
| CONFIG_CPU_IDLE_GOV_MENU=y | ||||
| 
 | ||||
| CONFIG_VIRTUALIZATION=y | ||||
| CONFIG_KVM=m | ||||
| CONFIG_KVM_INTEL=m | ||||
| CONFIG_KVM_AMD=m | ||||
| 
 | ||||
| CONFIG_PARAVIRT_GUEST=y | ||||
| CONFIG_PARAVIRT=y | ||||
| # CONFIG_PARAVIRT_DEBUG is not set | ||||
| # PARAVIRT_SPINLOCKS has a 5% perf hit | ||||
| # CONFIG_PARAVIRT_SPINLOCKS is not set | ||||
| CONFIG_KVM_CLOCK=y | ||||
| CONFIG_KVM_GUEST=y | ||||
| 
 | ||||
| CONFIG_XEN=y | ||||
| CONFIG_XEN_MAX_DOMAIN_MEMORY=32 | ||||
| CONFIG_XEN_BALLOON=y | ||||
| CONFIG_XEN_SCRUB_PAGES=y | ||||
| CONFIG_XEN_SAVE_RESTORE=y | ||||
| CONFIG_HVC_XEN=y | ||||
| CONFIG_XEN_FBDEV_FRONTEND=y | ||||
| CONFIG_XEN_KBDDEV_FRONTEND=y | ||||
| CONFIG_XEN_BLKDEV_FRONTEND=m | ||||
| CONFIG_XEN_NETDEV_FRONTEND=m | ||||
| CONFIG_XENFS=m | ||||
| CONFIG_XEN_COMPAT_XENFS=y | ||||
| CONFIG_XEN_DEV_EVTCHN=m | ||||
| CONFIG_XEN_SYS_HYPERVISOR=y | ||||
| 
 | ||||
| CONFIG_DMADEVICES=y | ||||
| CONFIG_INTEL_IOATDMA=m | ||||
| 
 | ||||
| CONFIG_SENSORS_I5K_AMB=m | ||||
| 
 | ||||
| # CONFIG_COMPAT_VDSO is not set | ||||
| CONFIG_PROVIDE_OHCI1394_DMA_INIT=y | ||||
| # CONFIG_DEBUG_PER_CPU_MAPS is not set | ||||
| # CONFIG_CPA_DEBUG is not set | ||||
| 
 | ||||
| CONFIG_HP_WATCHDOG=m | ||||
| 
 | ||||
| CONFIG_FRAME_WARN=2048 | ||||
| 
 | ||||
| CONFIG_NODES_SHIFT=9 | ||||
| CONFIG_X86_PAT=y | ||||
| # FIXME: These should be 32bit only | ||||
| # CONFIG_FB_N411 is not set | ||||
| CONFIG_STRICT_DEVMEM=y | ||||
| 
 | ||||
| CONFIG_DIRECT_GBPAGES=y | ||||
| 
 | ||||
| # CONFIG_NO_BOOTMEM is not set | ||||
| 
 | ||||
| # CONFIG_MEMTEST is not set | ||||
| CONFIG_AMD_IOMMU=y | ||||
| CONFIG_AMD_IOMMU_STATS=y | ||||
| # CONFIG_MAXSMP is not set | ||||
| CONFIG_MTRR_SANITIZER=y | ||||
| CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 | ||||
| CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 | ||||
| CONFIG_SYSPROF_TRACER=y | ||||
| # CONFIG_X86_VERBOSE_BOOTUP is not set | ||||
| # CONFIG_MMIOTRACE_TEST is not set | ||||
| 
 | ||||
| CONFIG_X86_MPPARSE=y | ||||
| 
 | ||||
| CONFIG_BACKLIGHT_MBP_NVIDIA=m | ||||
| 
 | ||||
| CONFIG_OPROFILE_IBS=y | ||||
| CONFIG_MICROCODE_INTEL=y | ||||
| CONFIG_MICROCODE_AMD=y | ||||
| 
 | ||||
| # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set | ||||
| CONFIG_X86_RESERVE_LOW_64K=y | ||||
| 
 | ||||
| # CONFIG_CMDLINE_BOOL is not set | ||||
| 
 | ||||
| CONFIG_PANASONIC_LAPTOP=m | ||||
| 
 | ||||
| CONFIG_XEN_DEBUG_FS=y | ||||
| CONFIG_X86_PTRACE_BTS=y | ||||
| 
 | ||||
| CONFIG_I7300_IDLE=m | ||||
| CONFIG_INTR_REMAP=y | ||||
| 
 | ||||
| CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y | ||||
| 
 | ||||
| CONFIG_POWER_TRACER=y | ||||
| CONFIG_HW_BRANCH_TRACER=y | ||||
| 
 | ||||
| CONFIG_X86_X2APIC=y | ||||
| CONFIG_SPARSE_IRQ=y | ||||
| 
 | ||||
| CONFIG_RCU_FANOUT=64 | ||||
| 
 | ||||
| # CONFIG_IOMMU_STRESS is not set | ||||
| 
 | ||||
| CONFIG_PERF_COUNTERS=y | ||||
| CONFIG_PERF_EVENTS=y | ||||
| CONFIG_EVENT_PROFILE=y | ||||
| 
 | ||||
| # CONFIG_X86_MCE_INJECT is not set | ||||
| 
 | ||||
| CONFIG_SFI=y | ||||
| CONFIG_INPUT_WINBOND_CIR=m | ||||
| CONFIG_I2C_SCMI=m | ||||
| CONFIG_SBC_FITPC2_WATCHDOG=m | ||||
| CONFIG_EDAC_I3200=m | ||||
| CONFIG_TOPSTAR_LAPTOP=m | ||||
| CONFIG_INTEL_TXT=y | ||||
| CONFIG_GPIO_LANGWELL=y | ||||
| 
 | ||||
| CONFIG_FUNCTION_GRAPH_TRACER=y | ||||
| 
 | ||||
| CONFIG_ACPI_CMPC=m | ||||
| CONFIG_MSI_WMI=m | ||||
| CONFIG_TOSHIBA_BT_RFKILL=m | ||||
| # CONFIG_SAMSUNG_LAPTOP is not set | ||||
| 
 | ||||
| CONFIG_CS5535_MFGPT=m | ||||
| CONFIG_GEODE_WDT=m | ||||
| CONFIG_CS5535_CLOCK_EVENT_SRC=m | ||||
| 
 | ||||
| CONFIG_X86_DECODER_SELFTEST=y | ||||
| 
 | ||||
| CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m | ||||
| 
 | ||||
| CONFIG_VGA_SWITCHEROO=y | ||||
| CONFIG_LPC_SCH=m | ||||
| 
 | ||||
| CONFIG_INTEL_IDLE=m | ||||
| CONFIG_I7300_IDLE=m | ||||
| 
 | ||||
| CONFIG_PCI_CNB20LE_QUIRK=y | ||||
							
								
								
									
										30
									
								
								die-floppy-die.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								die-floppy-die.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| From 4ff58b642f80dedb20533978123d89b5ac9b1ed5 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Tue, 30 Mar 2010 00:04:29 -0400 | ||||
| Subject: die-floppy-die | ||||
| 
 | ||||
| Kill the floppy.ko pnp modalias. We were surviving just fine without | ||||
| autoloading floppy drivers, tyvm. | ||||
| 
 | ||||
| Please feel free to register all complaints in the wastepaper bin. | ||||
| ---
 | ||||
|  drivers/block/floppy.c |    3 +-- | ||||
|  1 files changed, 1 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
 | ||||
| index 90c4038..f4a0b90 100644
 | ||||
| --- a/drivers/block/floppy.c
 | ||||
| +++ b/drivers/block/floppy.c
 | ||||
| @@ -4619,8 +4619,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
 | ||||
|  	{"PNP0700", 0}, | ||||
|  	{} | ||||
|  }; | ||||
| -
 | ||||
| -MODULE_DEVICE_TABLE(pnp, floppy_pnpids);
 | ||||
| +/* MODULE_DEVICE_TABLE(pnp, floppy_pnpids); */
 | ||||
|   | ||||
|  #else | ||||
|   | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										59
									
								
								disable-i8042-check-on-apple-mac.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								disable-i8042-check-on-apple-mac.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001 | ||||
| From: Bastien Nocera <hadess@hadess.net> | ||||
| Date: Thu, 20 May 2010 10:30:31 -0400 | ||||
| Subject: Disable i8042 checks on Intel Apple Macs | ||||
| 
 | ||||
| As those computers never had any i8042 controllers, and the | ||||
| current lookup code could potentially lock up/hang/wait for | ||||
| timeout for long periods of time. | ||||
| 
 | ||||
| Fixes intermittent hangs on boot on a MacbookAir1,1 | ||||
| 
 | ||||
| Signed-off-by: Bastien Nocera <hadess@hadess.net> | ||||
| ---
 | ||||
|  drivers/input/serio/i8042.c |   22 ++++++++++++++++++++++ | ||||
|  1 files changed, 22 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
 | ||||
| index 6440a8f..4d7cf98 100644
 | ||||
| --- a/drivers/input/serio/i8042.c
 | ||||
| +++ b/drivers/input/serio/i8042.c
 | ||||
| @@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = {
 | ||||
|  	.shutdown	= i8042_shutdown, | ||||
|  }; | ||||
|   | ||||
| +#ifdef CONFIG_DMI
 | ||||
| +static struct dmi_system_id __initdata dmi_system_table[] = {
 | ||||
| +	{
 | ||||
| +		.matches = {
 | ||||
| +			DMI_MATCH(DMI_BIOS_VENDOR, "Apple Computer, Inc.")
 | ||||
| +		},
 | ||||
| +	},
 | ||||
| +	{
 | ||||
| +		.matches = {
 | ||||
| +			DMI_MATCH(DMI_BIOS_VENDOR, "Apple Inc.")
 | ||||
| +		},
 | ||||
| +	},
 | ||||
| +	{}
 | ||||
| +};
 | ||||
| +#endif /*CONFIG_DMI*/
 | ||||
| +
 | ||||
|  static int __init i8042_init(void) | ||||
|  { | ||||
|  	struct platform_device *pdev; | ||||
| @@ -1458,6 +1474,12 @@ static int __init i8042_init(void)
 | ||||
|   | ||||
|  	dbg_init(); | ||||
|   | ||||
| +#ifdef CONFIG_DMI
 | ||||
| +	/* Intel Apple Macs never have an i8042 controller */
 | ||||
| +	if (dmi_check_system(dmi_system_table) > 0)
 | ||||
| +		return -ENODEV;
 | ||||
| +#endif /*CONFIG_DMI*/
 | ||||
| +
 | ||||
|  	err = i8042_platform_init(); | ||||
|  	if (err) | ||||
|  		return err; | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										16
									
								
								drm-intel-big-hammer.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								drm-intel-big-hammer.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
 | ||||
| index 37427e4..08af9db 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_gem.c
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_gem.c
 | ||||
| @@ -2553,6 +2553,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
 | ||||
|   | ||||
|  	mutex_lock(&dev->struct_mutex); | ||||
|   | ||||
| +	/* We don't get the flushing right for these chipsets, use the
 | ||||
| +	 * big hamer for now to avoid random crashiness. */
 | ||||
| +	if (IS_I85X(dev) || IS_I865G(dev))
 | ||||
| +		wbinvd();
 | ||||
| +
 | ||||
|  	i915_verify_inactive(dev, __FILE__, __LINE__); | ||||
|   | ||||
|  	if (dev_priv->mm.wedged) { | ||||
							
								
								
									
										19
									
								
								drm-intel-make-lvds-work.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								drm-intel-make-lvds-work.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| diff -up linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c
 | ||||
| --- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig	2010-03-31 16:59:39.901995671 -0400
 | ||||
| +++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c	2010-03-31 17:01:05.416996744 -0400
 | ||||
| @@ -3757,7 +3757,6 @@ struct drm_crtc *intel_get_load_detect_p
 | ||||
|  void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, int dpms_mode) | ||||
|  { | ||||
|  	struct drm_encoder *encoder = &intel_encoder->enc; | ||||
| -	struct drm_device *dev = encoder->dev;
 | ||||
|  	struct drm_crtc *crtc = encoder->crtc; | ||||
|  	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; | ||||
|  	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; | ||||
| @@ -3767,7 +3766,6 @@ void intel_release_load_detect_pipe(stru
 | ||||
|  		intel_encoder->base.encoder = NULL; | ||||
|  		intel_encoder->load_detect_temp = false; | ||||
|  		crtc->enabled = drm_helper_crtc_in_use(crtc); | ||||
| -		drm_helper_disable_unused_functions(dev);
 | ||||
|  	} | ||||
|   | ||||
|  	/* Switch crtc and output back off if necessary */ | ||||
							
								
								
									
										1
									
								
								drm-intel-next.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								drm-intel-next.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| empty | ||||
							
								
								
									
										6997
									
								
								drm-nouveau-updates.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6997
									
								
								drm-nouveau-updates.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -0,0 +1,958 @@ | ||||
| From 5b904034b0ab5195d971b139d0c0b67ab21b063c Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@dreadnought.i.jkkm.org> | ||||
| Date: Mon, 21 Jun 2010 20:33:16 +0100 | ||||
| Subject: Revert "drm/fbdev: rework output polling to be back in the core. (v4)" | ||||
| 
 | ||||
| This reverts commit eb1f8e4f3be898df808e2dfc131099f5831d491d. | ||||
| 
 | ||||
| Conflicts: | ||||
| 
 | ||||
| 	drivers/gpu/drm/drm_crtc_helper.c | ||||
| 	drivers/gpu/drm/i915/i915_dma.c | ||||
| 	drivers/gpu/drm/i915/intel_fb.c | ||||
| 	drivers/gpu/drm/nouveau/nouveau_fbcon.c | ||||
| 	drivers/gpu/drm/radeon/radeon_fb.c | ||||
| 	include/drm/drm_crtc_helper.h | ||||
| ---
 | ||||
|  drivers/gpu/drm/Kconfig                     |    2 +- | ||||
|  drivers/gpu/drm/drm_crtc_helper.c           |  111 ------------------------ | ||||
|  drivers/gpu/drm/drm_fb_helper.c             |  123 +++++++++++++++++++++++---- | ||||
|  drivers/gpu/drm/i915/i915_dma.c             |    1 - | ||||
|  drivers/gpu/drm/i915/i915_irq.c             |    3 +- | ||||
|  drivers/gpu/drm/i915/intel_crt.c            |    5 - | ||||
|  drivers/gpu/drm/i915/intel_display.c        |    2 - | ||||
|  drivers/gpu/drm/i915/intel_dp.c             |    2 - | ||||
|  drivers/gpu/drm/i915/intel_drv.h            |    2 +- | ||||
|  drivers/gpu/drm/i915/intel_fb.c             |   14 ++-- | ||||
|  drivers/gpu/drm/i915/intel_hdmi.c           |    1 - | ||||
|  drivers/gpu/drm/i915/intel_sdvo.c           |    2 - | ||||
|  drivers/gpu/drm/nouveau/nouveau_connector.c |   12 --- | ||||
|  drivers/gpu/drm/nouveau/nouveau_display.c   |    1 - | ||||
|  drivers/gpu/drm/nouveau/nouveau_fbcon.c     |   13 ++- | ||||
|  drivers/gpu/drm/nouveau/nouveau_fbcon.h     |    2 +- | ||||
|  drivers/gpu/drm/nouveau/nouveau_state.c     |    5 +- | ||||
|  drivers/gpu/drm/nouveau/nv50_display.c      |    2 +- | ||||
|  drivers/gpu/drm/radeon/radeon_connectors.c  |   13 --- | ||||
|  drivers/gpu/drm/radeon/radeon_display.c     |   10 -- | ||||
|  drivers/gpu/drm/radeon/radeon_fb.c          |   15 +++- | ||||
|  drivers/gpu/drm/radeon/radeon_irq_kms.c     |    5 +- | ||||
|  drivers/gpu/drm/radeon/radeon_mode.h        |    3 +- | ||||
|  include/drm/drm_crtc.h                      |   17 ---- | ||||
|  include/drm/drm_crtc_helper.h               |    6 -- | ||||
|  include/drm/drm_fb_helper.h                 |   13 +++- | ||||
|  26 files changed, 155 insertions(+), 230 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
 | ||||
| index c2711c6..a51a1e4 100644
 | ||||
| --- a/drivers/gpu/drm/Kconfig
 | ||||
| +++ b/drivers/gpu/drm/Kconfig
 | ||||
| @@ -9,7 +9,6 @@ menuconfig DRM
 | ||||
|  	depends on (AGP || AGP=n) && PCI && !EMULATED_CMPXCHG && MMU | ||||
|  	select I2C | ||||
|  	select I2C_ALGOBIT | ||||
| -	select SLOW_WORK
 | ||||
|  	help | ||||
|  	  Kernel-level support for the Direct Rendering Infrastructure (DRI) | ||||
|  	  introduced in XFree86 4.0. If you say Y here, you need to select | ||||
| @@ -24,6 +23,7 @@ config DRM_KMS_HELPER
 | ||||
|  	depends on DRM | ||||
|  	select FB | ||||
|  	select FRAMEBUFFER_CONSOLE if !EMBEDDED | ||||
| +	select SLOW_WORK
 | ||||
|  	help | ||||
|  	  FB and CRTC helpers for KMS drivers. | ||||
|   | ||||
| diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
 | ||||
| index 9b2a541..b142ac2 100644
 | ||||
| --- a/drivers/gpu/drm/drm_crtc_helper.c
 | ||||
| +++ b/drivers/gpu/drm/drm_crtc_helper.c
 | ||||
| @@ -807,114 +807,3 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
 | ||||
|  	return 0; | ||||
|  } | ||||
|  EXPORT_SYMBOL(drm_helper_resume_force_mode); | ||||
| -
 | ||||
| -static struct slow_work_ops output_poll_ops;
 | ||||
| -
 | ||||
| -#define DRM_OUTPUT_POLL_PERIOD (10*HZ)
 | ||||
| -static void output_poll_execute(struct slow_work *work)
 | ||||
| -{
 | ||||
| -	struct delayed_slow_work *delayed_work = container_of(work, struct delayed_slow_work, work);
 | ||||
| -	struct drm_device *dev = container_of(delayed_work, struct drm_device, mode_config.output_poll_slow_work);
 | ||||
| -	struct drm_connector *connector;
 | ||||
| -	enum drm_connector_status old_status, status;
 | ||||
| -	bool repoll = false, changed = false;
 | ||||
| -	int ret;
 | ||||
| -
 | ||||
| -	mutex_lock(&dev->mode_config.mutex);
 | ||||
| -	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
 | ||||
| -
 | ||||
| -		/* if this is HPD or polled don't check it -
 | ||||
| -		   TV out for instance */
 | ||||
| -		if (!connector->polled)
 | ||||
| -			continue;
 | ||||
| -
 | ||||
| -		else if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT))
 | ||||
| -			repoll = true;
 | ||||
| -
 | ||||
| -		old_status = connector->status;
 | ||||
| -		/* if we are connected and don't want to poll for disconnect
 | ||||
| -		   skip it */
 | ||||
| -		if (old_status == connector_status_connected &&
 | ||||
| -		    !(connector->polled & DRM_CONNECTOR_POLL_DISCONNECT) &&
 | ||||
| -		    !(connector->polled & DRM_CONNECTOR_POLL_HPD))
 | ||||
| -			continue;
 | ||||
| -
 | ||||
| -		status = connector->funcs->detect(connector);
 | ||||
| -		if (old_status != status)
 | ||||
| -			changed = true;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	mutex_unlock(&dev->mode_config.mutex);
 | ||||
| -
 | ||||
| -	if (changed) {
 | ||||
| -		/* send a uevent + call fbdev */
 | ||||
| -		drm_sysfs_hotplug_event(dev);
 | ||||
| -		if (dev->mode_config.funcs->output_poll_changed)
 | ||||
| -			dev->mode_config.funcs->output_poll_changed(dev);
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	if (repoll) {
 | ||||
| -		ret = delayed_slow_work_enqueue(delayed_work, DRM_OUTPUT_POLL_PERIOD);
 | ||||
| -		if (ret)
 | ||||
| -			DRM_ERROR("delayed enqueue failed %d\n", ret);
 | ||||
| -	}
 | ||||
| -}
 | ||||
| -
 | ||||
| -void drm_kms_helper_poll_disable(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	if (!dev->mode_config.poll_enabled)
 | ||||
| -		return;
 | ||||
| -	delayed_slow_work_cancel(&dev->mode_config.output_poll_slow_work);
 | ||||
| -}
 | ||||
| -EXPORT_SYMBOL(drm_kms_helper_poll_disable);
 | ||||
| -
 | ||||
| -void drm_kms_helper_poll_enable(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	bool poll = false;
 | ||||
| -	struct drm_connector *connector;
 | ||||
| -	int ret;
 | ||||
| -
 | ||||
| -	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
 | ||||
| -		if (connector->polled)
 | ||||
| -			poll = true;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	if (poll) {
 | ||||
| -		ret = delayed_slow_work_enqueue(&dev->mode_config.output_poll_slow_work, DRM_OUTPUT_POLL_PERIOD);
 | ||||
| -		if (ret)
 | ||||
| -			DRM_ERROR("delayed enqueue failed %d\n", ret);
 | ||||
| -	}
 | ||||
| -}
 | ||||
| -EXPORT_SYMBOL(drm_kms_helper_poll_enable);
 | ||||
| -
 | ||||
| -void drm_kms_helper_poll_init(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	slow_work_register_user(THIS_MODULE);
 | ||||
| -	delayed_slow_work_init(&dev->mode_config.output_poll_slow_work,
 | ||||
| -			       &output_poll_ops);
 | ||||
| -	dev->mode_config.poll_enabled = true;
 | ||||
| -
 | ||||
| -	drm_kms_helper_poll_enable(dev);
 | ||||
| -}
 | ||||
| -EXPORT_SYMBOL(drm_kms_helper_poll_init);
 | ||||
| -
 | ||||
| -void drm_kms_helper_poll_fini(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	drm_kms_helper_poll_disable(dev);
 | ||||
| -	slow_work_unregister_user(THIS_MODULE);
 | ||||
| -}
 | ||||
| -EXPORT_SYMBOL(drm_kms_helper_poll_fini);
 | ||||
| -
 | ||||
| -void drm_helper_hpd_irq_event(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	if (!dev->mode_config.poll_enabled)
 | ||||
| -		return;
 | ||||
| -	delayed_slow_work_cancel(&dev->mode_config.output_poll_slow_work);
 | ||||
| -	/* schedule a slow work asap */
 | ||||
| -	delayed_slow_work_enqueue(&dev->mode_config.output_poll_slow_work, 0);
 | ||||
| -}
 | ||||
| -EXPORT_SYMBOL(drm_helper_hpd_irq_event);
 | ||||
| -
 | ||||
| -static struct slow_work_ops output_poll_ops = {
 | ||||
| -	.execute = output_poll_execute,
 | ||||
| -};
 | ||||
| diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
 | ||||
| index 08c4c92..dcc6601 100644
 | ||||
| --- a/drivers/gpu/drm/drm_fb_helper.c
 | ||||
| +++ b/drivers/gpu/drm/drm_fb_helper.c
 | ||||
| @@ -42,6 +42,8 @@ MODULE_LICENSE("GPL and additional rights");
 | ||||
|   | ||||
|  static LIST_HEAD(kernel_fb_helper_list); | ||||
|   | ||||
| +static struct slow_work_ops output_status_change_ops;
 | ||||
| +
 | ||||
|  /* simple single crtc case helper function */ | ||||
|  int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper) | ||||
|  { | ||||
| @@ -423,13 +425,19 @@ static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper)
 | ||||
|   | ||||
|  int drm_fb_helper_init(struct drm_device *dev, | ||||
|  		       struct drm_fb_helper *fb_helper, | ||||
| -		       int crtc_count, int max_conn_count)
 | ||||
| +		       int crtc_count, int max_conn_count,
 | ||||
| +		       bool polled)
 | ||||
|  { | ||||
|  	struct drm_crtc *crtc; | ||||
|  	int ret = 0; | ||||
|  	int i; | ||||
|   | ||||
|  	fb_helper->dev = dev; | ||||
| +	fb_helper->poll_enabled = polled;
 | ||||
| +
 | ||||
| +	slow_work_register_user(THIS_MODULE);
 | ||||
| +	delayed_slow_work_init(&fb_helper->output_status_change_slow_work,
 | ||||
| +			       &output_status_change_ops);
 | ||||
|   | ||||
|  	INIT_LIST_HEAD(&fb_helper->kernel_fb_list); | ||||
|   | ||||
| @@ -486,6 +494,8 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
 | ||||
|   | ||||
|  	drm_fb_helper_crtc_free(fb_helper); | ||||
|   | ||||
| +	delayed_slow_work_cancel(&fb_helper->output_status_change_slow_work);
 | ||||
| +	slow_work_unregister_user(THIS_MODULE);
 | ||||
|  } | ||||
|  EXPORT_SYMBOL(drm_fb_helper_fini); | ||||
|   | ||||
| @@ -703,7 +713,7 @@ int drm_fb_helper_set_par(struct fb_info *info)
 | ||||
|   | ||||
|  	if (fb_helper->delayed_hotplug) { | ||||
|  		fb_helper->delayed_hotplug = false; | ||||
| -		drm_fb_helper_hotplug_event(fb_helper);
 | ||||
| +		delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 0);
 | ||||
|  	} | ||||
|  	return 0; | ||||
|  } | ||||
| @@ -816,7 +826,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
 | ||||
|  	if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) { | ||||
|  		/* hmm everyone went away - assume VGA cable just fell out | ||||
|  		   and will come back later. */ | ||||
| -		DRM_INFO("Cannot find any crtc or sizes - going 1024x768\n");
 | ||||
| +		DRM_ERROR("Cannot find any crtc or sizes - going 1024x768\n");
 | ||||
|  		sizes.fb_width = sizes.surface_width = 1024; | ||||
|  		sizes.fb_height = sizes.surface_height = 768; | ||||
|  	} | ||||
| @@ -1362,7 +1372,12 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
 | ||||
|  	 * we shouldn't end up with no modes here. | ||||
|  	 */ | ||||
|  	if (count == 0) { | ||||
| -		printk(KERN_INFO "No connectors reported connected with modes\n");
 | ||||
| +		if (fb_helper->poll_enabled) {
 | ||||
| +			delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work,
 | ||||
| +						  5*HZ);
 | ||||
| +			printk(KERN_INFO "No connectors reported connected with modes - started polling\n");
 | ||||
| +		} else
 | ||||
| +			printk(KERN_INFO "No connectors reported connected with modes\n");
 | ||||
|  	} | ||||
|  	drm_setup_crtcs(fb_helper); | ||||
|   | ||||
| @@ -1370,16 +1385,71 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
 | ||||
|  } | ||||
|  EXPORT_SYMBOL(drm_fb_helper_initial_config); | ||||
|   | ||||
| -bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
 | ||||
| +/* we got a hotplug irq - need to update fbcon */
 | ||||
| +void drm_helper_fb_hpd_irq_event(struct drm_fb_helper *fb_helper)
 | ||||
| +{
 | ||||
| +	/* if we don't have the fbdev registered yet do nothing */
 | ||||
| +	if (!fb_helper->fbdev)
 | ||||
| +		return;
 | ||||
| +
 | ||||
| +	/* schedule a slow work asap */
 | ||||
| +	delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 0);
 | ||||
| +}
 | ||||
| +EXPORT_SYMBOL(drm_helper_fb_hpd_irq_event);
 | ||||
| +
 | ||||
| +bool drm_helper_fb_hotplug_event(struct drm_fb_helper *fb_helper, bool polled)
 | ||||
|  { | ||||
|  	int count = 0; | ||||
| +	int ret;
 | ||||
|  	u32 max_width, max_height, bpp_sel; | ||||
| -	bool bound = false, crtcs_bound = false;
 | ||||
| -	struct drm_crtc *crtc;
 | ||||
|   | ||||
|  	if (!fb_helper->fb) | ||||
|  		return false; | ||||
| +	DRM_DEBUG_KMS("\n");
 | ||||
| +
 | ||||
| +	max_width = fb_helper->fb->width;
 | ||||
| +	max_height = fb_helper->fb->height;
 | ||||
| +	bpp_sel = fb_helper->fb->bits_per_pixel;
 | ||||
| +
 | ||||
| +	count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
 | ||||
| +						    max_height);
 | ||||
| +	if (fb_helper->poll_enabled && !polled) {
 | ||||
| +		if (count) {
 | ||||
| +			delayed_slow_work_cancel(&fb_helper->output_status_change_slow_work);
 | ||||
| +		} else {
 | ||||
| +			ret = delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 5*HZ);
 | ||||
| +		}
 | ||||
| +	}
 | ||||
| +	drm_setup_crtcs(fb_helper);
 | ||||
| +
 | ||||
| +	return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
 | ||||
| +}
 | ||||
| +EXPORT_SYMBOL(drm_helper_fb_hotplug_event);
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * delayed work queue execution function
 | ||||
| + * - check if fbdev is actually in use on the gpu
 | ||||
| + *   - if not set delayed flag and repoll if necessary
 | ||||
| + * - check for connector status change
 | ||||
| + * - repoll if 0 modes found
 | ||||
| + *- call driver output status changed notifier
 | ||||
| + */
 | ||||
| +static void output_status_change_execute(struct slow_work *work)
 | ||||
| +{
 | ||||
| +	struct delayed_slow_work *delayed_work = container_of(work, struct delayed_slow_work, work);
 | ||||
| +	struct drm_fb_helper *fb_helper = container_of(delayed_work, struct drm_fb_helper, output_status_change_slow_work);
 | ||||
| +	struct drm_connector *connector;
 | ||||
| +	enum drm_connector_status old_status, status;
 | ||||
| +	bool repoll, changed = false;
 | ||||
| +	int ret;
 | ||||
| +	int i;
 | ||||
| +	bool bound = false, crtcs_bound = false;
 | ||||
| +	struct drm_crtc *crtc;
 | ||||
|   | ||||
| +	repoll = fb_helper->poll_enabled;
 | ||||
| +
 | ||||
| +	/* first of all check the fbcon framebuffer is actually bound to any crtc */
 | ||||
| +	/* take into account that no crtc at all maybe bound */
 | ||||
|  	list_for_each_entry(crtc, &fb_helper->dev->mode_config.crtc_list, head) { | ||||
|  		if (crtc->fb) | ||||
|  			crtcs_bound = true; | ||||
| @@ -1387,21 +1457,38 @@ bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
 | ||||
|  			bound = true; | ||||
|  	} | ||||
|   | ||||
| -	if (!bound && crtcs_bound) {
 | ||||
| +	if (bound == false && crtcs_bound) {
 | ||||
|  		fb_helper->delayed_hotplug = true; | ||||
| -		return false;
 | ||||
| +		goto requeue;
 | ||||
|  	} | ||||
| -	DRM_DEBUG_KMS("\n");
 | ||||
|   | ||||
| -	max_width = fb_helper->fb->width;
 | ||||
| -	max_height = fb_helper->fb->height;
 | ||||
| -	bpp_sel = fb_helper->fb->bits_per_pixel;
 | ||||
| +	for (i = 0; i < fb_helper->connector_count; i++) {
 | ||||
| +		connector = fb_helper->connector_info[i]->connector;
 | ||||
| +		old_status = connector->status;
 | ||||
| +		status = connector->funcs->detect(connector);
 | ||||
| +		if (old_status != status) {
 | ||||
| +			changed = true;
 | ||||
| +		}
 | ||||
| +		if (status == connector_status_connected && repoll) {
 | ||||
| +			DRM_DEBUG("%s is connected - stop polling\n", drm_get_connector_name(connector));
 | ||||
| +			repoll = false;
 | ||||
| +		}
 | ||||
| +	}
 | ||||
|   | ||||
| -	count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
 | ||||
| -						    max_height);
 | ||||
| -	drm_setup_crtcs(fb_helper);
 | ||||
| +	if (changed) {
 | ||||
| +		if (fb_helper->funcs->fb_output_status_changed)
 | ||||
| +			fb_helper->funcs->fb_output_status_changed(fb_helper);
 | ||||
| +	}
 | ||||
|   | ||||
| -	return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
 | ||||
| +requeue:
 | ||||
| +	if (repoll) {
 | ||||
| +		ret = delayed_slow_work_enqueue(delayed_work, 5*HZ);
 | ||||
| +		if (ret)
 | ||||
| +			DRM_ERROR("delayed enqueue failed %d\n", ret);
 | ||||
| +	}
 | ||||
|  } | ||||
| -EXPORT_SYMBOL(drm_fb_helper_hotplug_event);
 | ||||
| +
 | ||||
| +static struct slow_work_ops output_status_change_ops = {
 | ||||
| +	.execute = output_status_change_execute,
 | ||||
| +};
 | ||||
|   | ||||
| diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| index 59a2bf8..76ace2d 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| @@ -1430,7 +1430,6 @@ static int i915_load_modeset_init(struct drm_device *dev,
 | ||||
|  	if (ret) | ||||
|  		goto cleanup_irq; | ||||
|   | ||||
| -	drm_kms_helper_poll_init(dev);
 | ||||
|  	return 0; | ||||
|   | ||||
|  cleanup_irq: | ||||
| diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
 | ||||
| index 2479be0..6350bd3 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_irq.c
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_irq.c
 | ||||
| @@ -271,7 +271,8 @@ static void i915_hotplug_work_func(struct work_struct *work)
 | ||||
|  		} | ||||
|  	} | ||||
|  	/* Just fire off a uevent and let userspace tell us what to do */ | ||||
| -	drm_helper_hpd_irq_event(dev);
 | ||||
| +	intelfb_hotplug(dev, false);
 | ||||
| +	drm_sysfs_hotplug_event(dev);
 | ||||
|  } | ||||
|   | ||||
|  static void i915_handle_rps_change(struct drm_device *dev) | ||||
| diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
 | ||||
| index 22ff384..125eded 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_crt.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_crt.c
 | ||||
| @@ -584,10 +584,5 @@ void intel_crt_init(struct drm_device *dev)
 | ||||
|   | ||||
|  	drm_sysfs_connector_add(connector); | ||||
|   | ||||
| -	if (I915_HAS_HOTPLUG(dev))
 | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
| -	else
 | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
| -
 | ||||
|  	dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS; | ||||
|  } | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index d753257..70537cf 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -5036,7 +5036,6 @@ intel_user_framebuffer_create(struct drm_device *dev,
 | ||||
|   | ||||
|  static const struct drm_mode_config_funcs intel_mode_funcs = { | ||||
|  	.fb_create = intel_user_framebuffer_create, | ||||
| -	.output_poll_changed = intel_fb_output_poll_changed,
 | ||||
|  }; | ||||
|   | ||||
|  static struct drm_gem_object * | ||||
| @@ -5538,7 +5537,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
 | ||||
|   | ||||
|  	mutex_lock(&dev->struct_mutex); | ||||
|   | ||||
| -	drm_kms_helper_poll_fini(dev);
 | ||||
|  	intel_fbdev_fini(dev); | ||||
|   | ||||
|  	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | ||||
| diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| index 49b54f0..1815df5 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| @@ -1393,8 +1393,6 @@ intel_dp_init(struct drm_device *dev, int output_reg)
 | ||||
|  			   DRM_MODE_CONNECTOR_DisplayPort); | ||||
|  	drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs); | ||||
|   | ||||
| -	connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
| -
 | ||||
|  	if (output_reg == DP_A) | ||||
|  		intel_encoder->type = INTEL_OUTPUT_EDP; | ||||
|  	else | ||||
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| index df931f7..3230e8d 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| @@ -235,5 +235,5 @@ extern int intel_overlay_put_image(struct drm_device *dev, void *data,
 | ||||
|  extern int intel_overlay_attrs(struct drm_device *dev, void *data, | ||||
|  			       struct drm_file *file_priv); | ||||
|   | ||||
| -extern void intel_fb_output_poll_changed(struct drm_device *dev);
 | ||||
| +void intelfb_hotplug(struct drm_device *dev, bool polled);
 | ||||
|  #endif /* __INTEL_DRV_H__ */ | ||||
| diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
 | ||||
| index c3c5052..79098b3 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_fb.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_fb.c
 | ||||
| @@ -211,6 +211,12 @@ static int intel_fb_find_or_create_single(struct drm_fb_helper *helper,
 | ||||
|  	return new_fb; | ||||
|  } | ||||
|   | ||||
| +void intelfb_hotplug(struct drm_device *dev, bool polled)
 | ||||
| +{
 | ||||
| +	drm_i915_private_t *dev_priv = dev->dev_private;
 | ||||
| +	drm_helper_fb_hpd_irq_event(&dev_priv->fbdev->helper);
 | ||||
| +}
 | ||||
| +
 | ||||
|  static struct drm_fb_helper_funcs intel_fb_helper_funcs = { | ||||
|  	.gamma_set = intel_crtc_fb_gamma_set, | ||||
|  	.gamma_get = intel_crtc_fb_gamma_get, | ||||
| @@ -256,7 +262,7 @@ int intel_fbdev_init(struct drm_device *dev)
 | ||||
|   | ||||
|  	ret = drm_fb_helper_init(dev, &ifbdev->helper, | ||||
|  				 dev_priv->num_pipe, | ||||
| -				 INTELFB_CONN_LIMIT);
 | ||||
| +				 INTELFB_CONN_LIMIT, false);
 | ||||
|  	if (ret) { | ||||
|  		kfree(ifbdev); | ||||
|  		return ret; | ||||
| @@ -278,9 +284,3 @@ void intel_fbdev_fini(struct drm_device *dev)
 | ||||
|  	dev_priv->fbdev = NULL; | ||||
|  } | ||||
|  MODULE_LICENSE("GPL and additional rights"); | ||||
| -
 | ||||
| -void intel_fb_output_poll_changed(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	drm_i915_private_t *dev_priv = dev->dev_private;
 | ||||
| -	drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
 | ||||
| -}
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
 | ||||
| index 83bd764..acaca07 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_hdmi.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_hdmi.c
 | ||||
| @@ -240,7 +240,6 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
 | ||||
|   | ||||
|  	intel_encoder->type = INTEL_OUTPUT_HDMI; | ||||
|   | ||||
| -	connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
|  	connector->interlace_allowed = 0; | ||||
|  	connector->doublescan_allowed = 0; | ||||
|  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1); | ||||
| diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
 | ||||
| index 76993ac..1c716b5 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_sdvo.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_sdvo.c
 | ||||
| @@ -2218,7 +2218,6 @@ intel_sdvo_dvi_init(struct intel_encoder *intel_encoder, int device)
 | ||||
|  	} | ||||
|   | ||||
|  	connector = &intel_connector->base; | ||||
| -	connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
 | ||||
|  	encoder->encoder_type = DRM_MODE_ENCODER_TMDS; | ||||
|  	connector->connector_type = DRM_MODE_CONNECTOR_DVID; | ||||
|   | ||||
| @@ -2285,7 +2284,6 @@ intel_sdvo_analog_init(struct intel_encoder *intel_encoder, int device)
 | ||||
|                  return false; | ||||
|   | ||||
|          connector = &intel_connector->base; | ||||
| -	connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
|          encoder->encoder_type = DRM_MODE_ENCODER_DAC; | ||||
|          connector->connector_type = DRM_MODE_CONNECTOR_VGA; | ||||
|          sdvo_connector = intel_connector->dev_priv; | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
 | ||||
| index 149ed22..9a61f3c 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
 | ||||
| @@ -846,7 +846,6 @@ nouveau_connector_create(struct drm_device *dev,
 | ||||
|   | ||||
|  	switch (dcb->type) { | ||||
|  	case DCB_CONNECTOR_VGA: | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
|  		if (dev_priv->card_type >= NV_50) { | ||||
|  			drm_connector_attach_property(connector, | ||||
|  					dev->mode_config.scaling_mode_property, | ||||
| @@ -858,17 +857,6 @@ nouveau_connector_create(struct drm_device *dev,
 | ||||
|  	case DCB_CONNECTOR_TV_3: | ||||
|  		nv_connector->scaling_mode = DRM_MODE_SCALE_NONE; | ||||
|  		break; | ||||
| -	case DCB_CONNECTOR_DP:
 | ||||
| -	case DCB_CONNECTOR_eDP:
 | ||||
| -	case DCB_CONNECTOR_HDMI_0:
 | ||||
| -	case DCB_CONNECTOR_HDMI_1:
 | ||||
| -	case DCB_CONNECTOR_DVI_I:
 | ||||
| -	case DCB_CONNECTOR_DVI_D:
 | ||||
| -		if (dev_priv->card_type >= NV_50)
 | ||||
| -			connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
| -		else
 | ||||
| -			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
| -		/* fall-through */
 | ||||
|  	default: | ||||
|  		nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; | ||||
|   | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
 | ||||
| index 74e6b4e..9d7928f 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_display.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
 | ||||
| @@ -101,6 +101,5 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
 | ||||
|   | ||||
|  const struct drm_mode_config_funcs nouveau_mode_config_funcs = { | ||||
|  	.fb_create = nouveau_user_framebuffer_create, | ||||
| -	.output_poll_changed = nouveau_fbcon_output_poll_changed,
 | ||||
|  }; | ||||
|   | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
 | ||||
| index c9a4a0d..0a59f96 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
 | ||||
| @@ -326,11 +326,15 @@ nouveau_fbcon_find_or_create_single(struct drm_fb_helper *helper,
 | ||||
|  	return new_fb; | ||||
|  } | ||||
|   | ||||
| -void
 | ||||
| -nouveau_fbcon_output_poll_changed(struct drm_device *dev)
 | ||||
| +void nouveau_fbcon_hotplug(struct drm_device *dev)
 | ||||
|  { | ||||
|  	struct drm_nouveau_private *dev_priv = dev->dev_private; | ||||
| -	drm_fb_helper_hotplug_event(&dev_priv->nfbdev->helper);
 | ||||
| +	drm_helper_fb_hpd_irq_event(&dev_priv->nfbdev->helper);
 | ||||
| +}
 | ||||
| +
 | ||||
| +static void nouveau_fbcon_output_status_changed(struct drm_fb_helper *fb_helper)
 | ||||
| +{
 | ||||
| +	drm_helper_fb_hotplug_event(fb_helper, true);
 | ||||
|  } | ||||
|   | ||||
|  int | ||||
| @@ -370,6 +374,7 @@ static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
 | ||||
|  	.gamma_set = nouveau_fbcon_gamma_set, | ||||
|  	.gamma_get = nouveau_fbcon_gamma_get, | ||||
|  	.fb_probe = nouveau_fbcon_find_or_create_single, | ||||
| +	.fb_output_status_changed = nouveau_fbcon_output_status_changed,
 | ||||
|  }; | ||||
|   | ||||
|   | ||||
| @@ -387,7 +392,7 @@ int nouveau_fbcon_init(struct drm_device *dev)
 | ||||
|  	dev_priv->nfbdev = nfbdev; | ||||
|  	nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs; | ||||
|   | ||||
| -	ret = drm_fb_helper_init(dev, &nfbdev->helper, 2, 4);
 | ||||
| +	ret = drm_fb_helper_init(dev, &nfbdev->helper, 2, 4, true);
 | ||||
|  	if (ret) { | ||||
|  		kfree(nfbdev); | ||||
|  		return ret; | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.h b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
 | ||||
| index e7e1268..bf8e00d 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.h
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
 | ||||
| @@ -58,6 +58,6 @@ void nouveau_fbcon_zfill_all(struct drm_device *dev);
 | ||||
|  void nouveau_fbcon_save_disable_accel(struct drm_device *dev); | ||||
|  void nouveau_fbcon_restore_accel(struct drm_device *dev); | ||||
|   | ||||
| -void nouveau_fbcon_output_poll_changed(struct drm_device *dev);
 | ||||
| +void nouveau_fbcon_hotplug(struct drm_device *dev);
 | ||||
|  #endif /* __NV50_FBCON_H__ */ | ||||
|   | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| index b02a231..4dcb976 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| @@ -519,10 +519,8 @@ nouveau_card_init(struct drm_device *dev)
 | ||||
|   | ||||
|  	dev_priv->init_state = NOUVEAU_CARD_INIT_DONE; | ||||
|   | ||||
| -	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 | ||||
| +	if (drm_core_check_feature(dev, DRIVER_MODESET))
 | ||||
|  		nouveau_fbcon_init(dev); | ||||
| -		drm_kms_helper_poll_init(dev);
 | ||||
| -	}
 | ||||
|   | ||||
|  	return 0; | ||||
|   | ||||
| @@ -844,7 +842,6 @@ int nouveau_unload(struct drm_device *dev)
 | ||||
|  	struct drm_nouveau_private *dev_priv = dev->dev_private; | ||||
|   | ||||
|  	if (drm_core_check_feature(dev, DRIVER_MODESET)) { | ||||
| -		drm_kms_helper_poll_fini(dev);
 | ||||
|  		nouveau_fbcon_fini(dev); | ||||
|  		if (dev_priv->card_type >= NV_50) | ||||
|  			nv50_display_destroy(dev); | ||||
| diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
 | ||||
| index 580a5d1..e6a44af 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nv50_display.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nv50_display.c
 | ||||
| @@ -980,7 +980,7 @@ nv50_display_irq_hotplug_bh(struct work_struct *work)
 | ||||
|  	if (dev_priv->chipset >= 0x90) | ||||
|  		nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074)); | ||||
|   | ||||
| -	drm_helper_hpd_irq_event(dev);
 | ||||
| +	nouveau_fbcon_hotplug(dev);
 | ||||
|  } | ||||
|   | ||||
|  void | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
 | ||||
| index 0c7ccc6..40a24c9 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_connectors.c
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
 | ||||
| @@ -1085,7 +1085,6 @@ radeon_add_atom_connector(struct drm_device *dev,
 | ||||
|  		drm_connector_attach_property(&radeon_connector->base, | ||||
|  					      rdev->mode_info.load_detect_property, | ||||
|  					      1); | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
|  		break; | ||||
|  	case DRM_MODE_CONNECTOR_DVIA: | ||||
|  		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); | ||||
| @@ -1212,12 +1211,6 @@ radeon_add_atom_connector(struct drm_device *dev,
 | ||||
|  		break; | ||||
|  	} | ||||
|   | ||||
| -	if (hpd->hpd == RADEON_HPD_NONE) {
 | ||||
| -		if (i2c_bus->valid)
 | ||||
| -			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
| -	} else
 | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
| -
 | ||||
|  	connector->display_info.subpixel_order = subpixel_order; | ||||
|  	drm_sysfs_connector_add(connector); | ||||
|  	return; | ||||
| @@ -1279,7 +1272,6 @@ radeon_add_legacy_connector(struct drm_device *dev,
 | ||||
|  		drm_connector_attach_property(&radeon_connector->base, | ||||
|  					      rdev->mode_info.load_detect_property, | ||||
|  					      1); | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
|  		break; | ||||
|  	case DRM_MODE_CONNECTOR_DVIA: | ||||
|  		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); | ||||
| @@ -1348,11 +1340,6 @@ radeon_add_legacy_connector(struct drm_device *dev,
 | ||||
|  		break; | ||||
|  	} | ||||
|   | ||||
| -	if (hpd->hpd == RADEON_HPD_NONE) {
 | ||||
| -		if (i2c_bus->valid)
 | ||||
| -			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 | ||||
| -	} else
 | ||||
| -		connector->polled = DRM_CONNECTOR_POLL_HPD;
 | ||||
|  	connector->display_info.subpixel_order = subpixel_order; | ||||
|  	drm_sysfs_connector_add(connector); | ||||
|  	return; | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
 | ||||
| index c73444a..ed756be 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_display.c
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_display.c
 | ||||
| @@ -887,15 +887,8 @@ radeon_user_framebuffer_create(struct drm_device *dev,
 | ||||
|  	return &radeon_fb->base; | ||||
|  } | ||||
|   | ||||
| -static void radeon_output_poll_changed(struct drm_device *dev)
 | ||||
| -{
 | ||||
| -	struct radeon_device *rdev = dev->dev_private;
 | ||||
| -	radeon_fb_output_poll_changed(rdev);
 | ||||
| -}
 | ||||
| -
 | ||||
|  static const struct drm_mode_config_funcs radeon_mode_funcs = { | ||||
|  	.fb_create = radeon_user_framebuffer_create, | ||||
| -	.output_poll_changed = radeon_output_poll_changed
 | ||||
|  }; | ||||
|   | ||||
|  struct drm_prop_enum_list { | ||||
| @@ -1044,8 +1037,6 @@ int radeon_modeset_init(struct radeon_device *rdev)
 | ||||
|  		radeon_pm_init(rdev); | ||||
|   | ||||
|  	radeon_fbdev_init(rdev); | ||||
| -	drm_kms_helper_poll_init(rdev->ddev);
 | ||||
| -
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| @@ -1058,7 +1049,6 @@ void radeon_modeset_fini(struct radeon_device *rdev)
 | ||||
|  		radeon_pm_fini(rdev); | ||||
|   | ||||
|  	if (rdev->mode_info.mode_config_initialized) { | ||||
| -		drm_kms_helper_poll_fini(rdev->ddev);
 | ||||
|  		radeon_hpd_fini(rdev); | ||||
|  		drm_mode_config_cleanup(rdev->ddev); | ||||
|  		rdev->mode_info.mode_config_initialized = false; | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
 | ||||
| index dc1634b..7dc38f6 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_fb.c
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_fb.c
 | ||||
| @@ -316,9 +316,16 @@ int radeon_parse_options(char *options)
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| -void radeon_fb_output_poll_changed(struct radeon_device *rdev)
 | ||||
| +void radeonfb_hotplug(struct drm_device *dev, bool polled)
 | ||||
|  { | ||||
| -	drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
 | ||||
| +	struct radeon_device *rdev = dev->dev_private;
 | ||||
| +
 | ||||
| +	drm_helper_fb_hpd_irq_event(&rdev->mode_info.rfbdev->helper);
 | ||||
| +}
 | ||||
| +
 | ||||
| +static void radeon_fb_output_status_changed(struct drm_fb_helper *fb_helper)
 | ||||
| +{
 | ||||
| +	drm_helper_fb_hotplug_event(fb_helper, true);
 | ||||
|  } | ||||
|   | ||||
|  static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfbdev) | ||||
| @@ -357,6 +364,7 @@ static struct drm_fb_helper_funcs radeon_fb_helper_funcs = {
 | ||||
|  	.gamma_set = radeon_crtc_fb_gamma_set, | ||||
|  	.gamma_get = radeon_crtc_fb_gamma_get, | ||||
|  	.fb_probe = radeon_fb_find_or_create_single, | ||||
| +	.fb_output_status_changed = radeon_fb_output_status_changed,
 | ||||
|  }; | ||||
|   | ||||
|  int radeon_fbdev_init(struct radeon_device *rdev) | ||||
| @@ -379,7 +387,7 @@ int radeon_fbdev_init(struct radeon_device *rdev)
 | ||||
|   | ||||
|  	ret = drm_fb_helper_init(rdev->ddev, &rfbdev->helper, | ||||
|  				 rdev->num_crtc, | ||||
| -				 RADEONFB_CONN_LIMIT);
 | ||||
| +				 RADEONFB_CONN_LIMIT, true);
 | ||||
|  	if (ret) { | ||||
|  		kfree(rfbdev); | ||||
|  		return ret; | ||||
| @@ -388,6 +396,7 @@ int radeon_fbdev_init(struct radeon_device *rdev)
 | ||||
|  	drm_fb_helper_single_add_all_connectors(&rfbdev->helper); | ||||
|  	drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel); | ||||
|  	return 0; | ||||
| +
 | ||||
|  } | ||||
|   | ||||
|  void radeon_fbdev_fini(struct radeon_device *rdev) | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
 | ||||
| index 059bfa4..b0178de 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
 | ||||
| @@ -26,7 +26,6 @@
 | ||||
|   *          Jerome Glisse | ||||
|   */ | ||||
|  #include "drmP.h" | ||||
| -#include "drm_crtc_helper.h"
 | ||||
|  #include "radeon_drm.h" | ||||
|  #include "radeon_reg.h" | ||||
|  #include "radeon.h" | ||||
| @@ -56,7 +55,9 @@ static void radeon_hotplug_work_func(struct work_struct *work)
 | ||||
|  			radeon_connector_hotplug(connector); | ||||
|  	} | ||||
|  	/* Just fire off a uevent and let userspace tell us what to do */ | ||||
| -	drm_helper_hpd_irq_event(dev);
 | ||||
| +	radeonfb_hotplug(dev, false);
 | ||||
| +
 | ||||
| +	drm_sysfs_hotplug_event(dev);
 | ||||
|  } | ||||
|   | ||||
|  void radeon_driver_irq_preinstall_kms(struct drm_device *dev) | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
 | ||||
| index 67358ba..fdd1611 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_mode.h
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_mode.h
 | ||||
| @@ -588,6 +588,5 @@ void radeon_fbdev_fini(struct radeon_device *rdev);
 | ||||
|  void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state); | ||||
|  int radeon_fbdev_total_size(struct radeon_device *rdev); | ||||
|  bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj); | ||||
| -
 | ||||
| -void radeon_fb_output_poll_changed(struct radeon_device *rdev);
 | ||||
| +void radeonfb_hotplug(struct drm_device *dev, bool polled);
 | ||||
|  #endif | ||||
| diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
 | ||||
| index 93a1a31..a7148d2 100644
 | ||||
| --- a/include/drm/drm_crtc.h
 | ||||
| +++ b/include/drm/drm_crtc.h
 | ||||
| @@ -31,7 +31,6 @@
 | ||||
|  #include <linux/idr.h> | ||||
|   | ||||
|  #include <linux/fb.h> | ||||
| -#include <linux/slow-work.h>
 | ||||
|   | ||||
|  struct drm_device; | ||||
|  struct drm_mode_set; | ||||
| @@ -461,15 +460,6 @@ enum drm_connector_force {
 | ||||
|  	DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */ | ||||
|  }; | ||||
|   | ||||
| -/* should we poll this connector for connects and disconnects */
 | ||||
| -/* hot plug detectable */
 | ||||
| -#define DRM_CONNECTOR_POLL_HPD (1 << 0)
 | ||||
| -/* poll for connections */
 | ||||
| -#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
 | ||||
| -/* can cleanly poll for disconnections without flickering the screen */
 | ||||
| -/* DACs should rarely do this without a lot of testing */
 | ||||
| -#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
 | ||||
| -
 | ||||
|  /** | ||||
|   * drm_connector - central DRM connector control structure | ||||
|   * @crtc: CRTC this connector is currently connected to, NULL if none | ||||
| @@ -514,8 +504,6 @@ struct drm_connector {
 | ||||
|  	u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY]; | ||||
|  	uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY]; | ||||
|   | ||||
| -	uint8_t polled; /* DRM_CONNECTOR_POLL_* */
 | ||||
| -
 | ||||
|  	/* requested DPMS state */ | ||||
|  	int dpms; | ||||
|   | ||||
| @@ -555,7 +543,6 @@ struct drm_mode_set {
 | ||||
|   */ | ||||
|  struct drm_mode_config_funcs { | ||||
|  	struct drm_framebuffer *(*fb_create)(struct drm_device *dev, struct drm_file *file_priv, struct drm_mode_fb_cmd *mode_cmd); | ||||
| -	void (*output_poll_changed)(struct drm_device *dev);
 | ||||
|  }; | ||||
|   | ||||
|  struct drm_mode_group { | ||||
| @@ -593,10 +580,6 @@ struct drm_mode_config {
 | ||||
|  	struct drm_mode_config_funcs *funcs; | ||||
|  	resource_size_t fb_base; | ||||
|   | ||||
| -	/* output poll support */
 | ||||
| -	bool poll_enabled;
 | ||||
| -	struct delayed_slow_work output_poll_slow_work;
 | ||||
| -
 | ||||
|  	/* pointers to standard properties */ | ||||
|  	struct list_head property_blob_list; | ||||
|  	struct drm_property *edid_property; | ||||
| diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
 | ||||
| index 1121f77..b1fa0f8 100644
 | ||||
| --- a/include/drm/drm_crtc_helper.h
 | ||||
| +++ b/include/drm/drm_crtc_helper.h
 | ||||
| @@ -127,10 +127,4 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
 | ||||
|  } | ||||
|   | ||||
|  extern int drm_helper_resume_force_mode(struct drm_device *dev); | ||||
| -extern void drm_kms_helper_poll_init(struct drm_device *dev);
 | ||||
| -extern void drm_kms_helper_poll_fini(struct drm_device *dev);
 | ||||
| -extern void drm_helper_hpd_irq_event(struct drm_device *dev);
 | ||||
| -
 | ||||
| -extern void drm_kms_helper_poll_disable(struct drm_device *dev);
 | ||||
| -extern void drm_kms_helper_poll_enable(struct drm_device *dev);
 | ||||
|  #endif | ||||
| diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
 | ||||
| index f0a6afc..9b55a94 100644
 | ||||
| --- a/include/drm/drm_fb_helper.h
 | ||||
| +++ b/include/drm/drm_fb_helper.h
 | ||||
| @@ -30,6 +30,8 @@
 | ||||
|  #ifndef DRM_FB_HELPER_H | ||||
|  #define DRM_FB_HELPER_H | ||||
|   | ||||
| +#include <linux/slow-work.h>
 | ||||
| +
 | ||||
|  struct drm_fb_helper; | ||||
|   | ||||
|  struct drm_fb_helper_crtc { | ||||
| @@ -69,6 +71,9 @@ struct drm_fb_helper_funcs {
 | ||||
|   | ||||
|  	int (*fb_probe)(struct drm_fb_helper *helper, | ||||
|  			struct drm_fb_helper_surface_size *sizes); | ||||
| +
 | ||||
| +	void (*fb_output_status_changed)(struct drm_fb_helper *helper);
 | ||||
| +
 | ||||
|  }; | ||||
|   | ||||
|  struct drm_fb_helper_connector { | ||||
| @@ -90,6 +95,8 @@ struct drm_fb_helper {
 | ||||
|  	u32 pseudo_palette[17]; | ||||
|  	struct list_head kernel_fb_list; | ||||
|   | ||||
| +	struct delayed_slow_work output_status_change_slow_work;
 | ||||
| +	bool poll_enabled;
 | ||||
|  	/* we got a hotplug but fbdev wasn't running the console | ||||
|  	   delay until next set_par */ | ||||
|  	bool delayed_hotplug; | ||||
| @@ -100,7 +107,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper,
 | ||||
|   | ||||
|  int drm_fb_helper_init(struct drm_device *dev, | ||||
|  		       struct drm_fb_helper *helper, int crtc_count, | ||||
| -		       int max_conn);
 | ||||
| +		       int max_conn, bool polled);
 | ||||
|  void drm_fb_helper_fini(struct drm_fb_helper *helper); | ||||
|  int drm_fb_helper_blank(int blank, struct fb_info *info); | ||||
|  int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, | ||||
| @@ -123,8 +130,10 @@ void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
 | ||||
|   | ||||
|  int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info); | ||||
|   | ||||
| -bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
 | ||||
| +bool drm_helper_fb_hotplug_event(struct drm_fb_helper *fb_helper,
 | ||||
| +				 bool polled);
 | ||||
|  bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel); | ||||
|  int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper); | ||||
|   | ||||
| +void drm_helper_fb_hpd_irq_event(struct drm_fb_helper *fb_helper);
 | ||||
|  #endif | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										44
									
								
								find-provides
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								find-provides
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,44 @@ | ||||
| #!/usr/bin/python | ||||
| # | ||||
| # find-provides: munge the provides dependencies from the kabideps file | ||||
| # | ||||
| # This software may be freely redistributed under the terms of the GNU | ||||
| # General Public License (GPL). | ||||
| # | ||||
| # Takes a directory prefix, then outputs the kabideps file contents. | ||||
| 
 | ||||
| __author__ = "Jon Masters <jcm@redhat.com>" | ||||
| __version__ = "1.0" | ||||
| __date__ = "Tue 25 Jul 2006 04:00 GMT" | ||||
| __copyright__ = "Copyright (C) 2006 Red Hat, Inc" | ||||
| __license__ = "GPL" | ||||
| 
 | ||||
| import os | ||||
| import re | ||||
| import string | ||||
| import sys | ||||
| 
 | ||||
| false = 0 | ||||
| true = 1 | ||||
| 
 | ||||
| kabideps="" | ||||
| 
 | ||||
| p = re.compile('^(.*)/symvers-(.*).gz$') | ||||
| while true: | ||||
| 	foo = sys.stdin.readline() | ||||
| 	if foo == "": | ||||
| 		break | ||||
| 	string.split(foo) | ||||
| 	m = p.match(foo) | ||||
| 	if m: | ||||
| 		kabideps=sys.argv[1] + "/kernel-" + m.group(2) + "-kabideps" | ||||
| 	 | ||||
| if kabideps == "": | ||||
| 	sys.exit(0) | ||||
| 
 | ||||
| if not (os.path.isfile(kabideps)): | ||||
| 	sys.stderr.write(sys.argv[0] + ": cannot locate kabideps file: " + kabideps + "\n") | ||||
| 	sys.exit(1) | ||||
| 
 | ||||
| sys.stderr.write(sys.argv[0] + ": processing kABI: " + kabideps) | ||||
| os.system("cat " + kabideps) | ||||
							
								
								
									
										34
									
								
								fix_xen_guest_on_old_EC2.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								fix_xen_guest_on_old_EC2.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| 
 | ||||
| Legacy hypervisors (RHEL 5.0 and RHEL 5.1) do not handle guest writes to | ||||
| cr4 gracefully. If a guest attempts to write a bit of cr4 that is | ||||
| unsupported, then the HV is so offended it crashes the domain. While | ||||
| later guest kernels (such as RHEL6) don't assume the HV supports all | ||||
| features, they do expect nicer responses. That assumption introduced | ||||
| code that probes whether or not xsave is supported early in the boot. So | ||||
| now when attempting to boot a RHEL6 guest on RHEL5.0 or RHEL5.1 an early | ||||
| crash will occur. | ||||
| 
 | ||||
| This patch is quite obviously an undesirable hack. The real fix for this | ||||
| problem should be in the HV, and is, in later HVs. However, to support | ||||
| running on old HVs, RHEL6 can take this small change. No impact will | ||||
| occur for running on any RHEL HV (not even RHEL 5.5 supports xsave). | ||||
| There is only potential for guest performance loss on upstream Xen. | ||||
| 
 | ||||
| ---
 | ||||
|  arch/x86/xen/enlighten.c |    1 + | ||||
|  1 files changed, 1 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
 | ||||
| index 52f8e19..6db3d67 100644
 | ||||
| --- a/arch/x86/xen/enlighten.c
 | ||||
| +++ b/arch/x86/xen/enlighten.c
 | ||||
| @@ -802,6 +802,7 @@ static void xen_write_cr4(unsigned long cr4)
 | ||||
|  { | ||||
|  	cr4 &= ~X86_CR4_PGE; | ||||
|  	cr4 &= ~X86_CR4_PSE; | ||||
| +	cr4 &= ~X86_CR4_OSXSAVE;
 | ||||
|   | ||||
|  	native_write_cr4(cr4); | ||||
|  } | ||||
| -- 
 | ||||
| 1.6.6.1 | ||||
							
								
								
									
										7
									
								
								genkey
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								genkey
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| %pubring kernel.pub | ||||
| %secring kernel.sec | ||||
| Key-Type: DSA | ||||
| Key-Length: 512 | ||||
| Name-Real: Red Hat, Inc. | ||||
| Name-Comment: Kernel Module GPG key | ||||
| %commit | ||||
							
								
								
									
										0
									
								
								git-linus.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								git-linus.diff
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										6326
									
								
								git-utrace.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6326
									
								
								git-utrace.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										47
									
								
								hda_intel-prealloc-4mb-dmabuffer.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								hda_intel-prealloc-4mb-dmabuffer.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| From c69fcbd1f60b0842f7c1ad2c95692ffd19c4932b Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Mon, 29 Mar 2010 23:56:08 -0400 | ||||
| Subject: hda_intel-prealloc-4mb-dmabuffer | ||||
| 
 | ||||
| ---
 | ||||
|  sound/pci/hda/hda_intel.c |   14 +++++++++++++- | ||||
|  1 files changed, 13 insertions(+), 1 deletions(-) | ||||
| 
 | ||||
| diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
 | ||||
| index 4bb9067..37db515 100644
 | ||||
| --- a/sound/pci/hda/hda_intel.c
 | ||||
| +++ b/sound/pci/hda/hda_intel.c
 | ||||
| @@ -1986,6 +1986,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
 | ||||
|  	struct azx_pcm *apcm; | ||||
|  	int pcm_dev = cpcm->device; | ||||
|  	int s, err; | ||||
| +	size_t prealloc_min = 64*1024;	/* 64KB */
 | ||||
|   | ||||
|  	if (pcm_dev >= HDA_MAX_PCMS) { | ||||
|  		snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n", | ||||
| @@ -2019,10 +2020,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
 | ||||
|  		if (cpcm->stream[s].substreams) | ||||
|  			snd_pcm_set_ops(pcm, s, &azx_pcm_ops); | ||||
|  	} | ||||
| +
 | ||||
|  	/* buffer pre-allocation */ | ||||
| +
 | ||||
| +	/* subtle, don't allocate a big buffer for modems...
 | ||||
| +	 * also, don't just test 32BIT_MASK, since azx supports
 | ||||
| +	 * 64-bit DMA in some cases.
 | ||||
| +	 */
 | ||||
| +	/* lennart wants a 2.2MB buffer for 2sec of 48khz */
 | ||||
| +	if (pcm->dev_class == SNDRV_PCM_CLASS_GENERIC &&
 | ||||
| +	    chip->pci->dma_mask >= DMA_32BIT_MASK)
 | ||||
| +		prealloc_min = 4 * 1024 * 1024;	/* 4MB */
 | ||||
| +
 | ||||
|  	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, | ||||
|  					      snd_dma_pci_data(chip->pci), | ||||
| -					      1024 * 64, 32 * 1024 * 1024);
 | ||||
| +					      prealloc_min, 32 * 1024 * 1024);
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										220
									
								
								hdpvr-ir-enable.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								hdpvr-ir-enable.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,220 @@ | ||||
| diff --git a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
 | ||||
| index e0230fc..3baa9f6 100644
 | ||||
| --- a/drivers/media/video/hdpvr/Makefile
 | ||||
| +++ b/drivers/media/video/hdpvr/Makefile
 | ||||
| @@ -1,6 +1,4 @@
 | ||||
| -hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o
 | ||||
| -
 | ||||
| -hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
 | ||||
| +hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o hdpvr-i2c.o
 | ||||
|   | ||||
|  obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o | ||||
|   | ||||
| diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
 | ||||
| index 830d47b..70cfdc8 100644
 | ||||
| --- a/drivers/media/video/hdpvr/hdpvr-core.c
 | ||||
| +++ b/drivers/media/video/hdpvr/hdpvr-core.c
 | ||||
| @@ -364,14 +364,13 @@ static int hdpvr_probe(struct usb_interface *interface,
 | ||||
|  		goto error; | ||||
|  	} | ||||
|   | ||||
| -#ifdef CONFIG_I2C
 | ||||
| -	/* until i2c is working properly */
 | ||||
| -	retval = 0; /* hdpvr_register_i2c_adapter(dev); */
 | ||||
| +#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 | ||||
| +	retval = hdpvr_register_i2c_adapter(dev);
 | ||||
|  	if (retval < 0) { | ||||
|  		v4l2_err(&dev->v4l2_dev, "registering i2c adapter failed\n"); | ||||
|  		goto error; | ||||
|  	} | ||||
| -#endif /* CONFIG_I2C */
 | ||||
| +#endif
 | ||||
|   | ||||
|  	/* let the user know what node this device is now attached to */ | ||||
|  	v4l2_info(&dev->v4l2_dev, "device now attached to %s\n", | ||||
| diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
 | ||||
| index 463b81b..60cdc06 100644
 | ||||
| --- a/drivers/media/video/hdpvr/hdpvr-i2c.c
 | ||||
| +++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
 | ||||
| @@ -10,6 +10,8 @@
 | ||||
|   * | ||||
|   */ | ||||
|   | ||||
| +#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 | ||||
| +
 | ||||
|  #include <linux/i2c.h> | ||||
|  #include <linux/slab.h> | ||||
|   | ||||
| @@ -22,8 +24,11 @@
 | ||||
|  #define REQTYPE_I2C_WRITE	0xb0 | ||||
|  #define REQTYPE_I2C_WRITE_STATT	0xd0 | ||||
|   | ||||
| -static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
 | ||||
| -			  char *data, int len)
 | ||||
| +#define HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR	0x70
 | ||||
| +#define HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR	0x71
 | ||||
| +
 | ||||
| +static int hdpvr_i2c_read(struct hdpvr_device *dev, int bus,
 | ||||
| +			  unsigned char addr, char *data, int len)
 | ||||
|  { | ||||
|  	int ret; | ||||
|  	char *buf = kmalloc(len, GFP_KERNEL); | ||||
| @@ -33,7 +38,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
 | ||||
|  	ret = usb_control_msg(dev->udev, | ||||
|  			      usb_rcvctrlpipe(dev->udev, 0), | ||||
|  			      REQTYPE_I2C_READ, CTRL_READ_REQUEST, | ||||
| -			      0x100|addr, 0, buf, len, 1000);
 | ||||
| +			      (bus << 8) | addr, 0, buf, len, 1000);
 | ||||
|   | ||||
|  	if (ret == len) { | ||||
|  		memcpy(data, buf, len); | ||||
| @@ -46,8 +51,8 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
 | ||||
|  	return ret; | ||||
|  } | ||||
|   | ||||
| -static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
 | ||||
| -			   char *data, int len)
 | ||||
| +static int hdpvr_i2c_write(struct hdpvr_device *dev, int bus,
 | ||||
| +			   unsigned char addr, char *data, int len)
 | ||||
|  { | ||||
|  	int ret; | ||||
|  	char *buf = kmalloc(len, GFP_KERNEL); | ||||
| @@ -58,7 +63,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
 | ||||
|  	ret = usb_control_msg(dev->udev, | ||||
|  			      usb_sndctrlpipe(dev->udev, 0), | ||||
|  			      REQTYPE_I2C_WRITE, CTRL_WRITE_REQUEST, | ||||
| -			      0x100|addr, 0, buf, len, 1000);
 | ||||
| +			      (bus << 8) | addr, 0, buf, len, 1000);
 | ||||
|   | ||||
|  	if (ret < 0) | ||||
|  		goto error; | ||||
| @@ -68,7 +73,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
 | ||||
|  			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST, | ||||
|  			      0, 0, buf, 2, 1000); | ||||
|   | ||||
| -	if (ret == 2)
 | ||||
| +	if ((ret == 2) && (buf[1] == (len - 1)))
 | ||||
|  		ret = 0; | ||||
|  	else if (ret >= 0) | ||||
|  		ret = -EIO; | ||||
| @@ -93,10 +98,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
 | ||||
|  		addr = msgs[i].addr << 1; | ||||
|   | ||||
|  		if (msgs[i].flags & I2C_M_RD) | ||||
| -			retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
 | ||||
| +			retval = hdpvr_i2c_read(dev, 1, addr, msgs[i].buf,
 | ||||
|  						msgs[i].len); | ||||
|  		else | ||||
| -			retval = hdpvr_i2c_write(dev, addr, msgs[i].buf,
 | ||||
| +			retval = hdpvr_i2c_write(dev, 1, addr, msgs[i].buf,
 | ||||
|  						 msgs[i].len); | ||||
|  	} | ||||
|   | ||||
| @@ -115,31 +120,59 @@ static struct i2c_algorithm hdpvr_algo = {
 | ||||
|  	.functionality = hdpvr_functionality, | ||||
|  }; | ||||
|   | ||||
| +static struct i2c_adapter hdpvr_i2c_adapter_template = {
 | ||||
| +	.name 	= "Hauppage HD PVR I2C",
 | ||||
| +	.owner 	= THIS_MODULE,
 | ||||
| +	.id 	= I2C_HW_B_HDPVR,
 | ||||
| +	.algo 	= &hdpvr_algo,
 | ||||
| +	.class 	= I2C_CLASS_TV_ANALOG,
 | ||||
| +};
 | ||||
| +
 | ||||
| +static struct i2c_board_info hdpvr_i2c_board_info = {
 | ||||
| +	I2C_BOARD_INFO("ir_tx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR),
 | ||||
| +	I2C_BOARD_INFO("ir_rx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR),
 | ||||
| +};
 | ||||
| +
 | ||||
| +static int hdpvr_activate_ir(struct hdpvr_device *dev)
 | ||||
| +{
 | ||||
| +	char buffer[8];
 | ||||
| +
 | ||||
| +	mutex_lock(&dev->i2c_mutex);
 | ||||
| +
 | ||||
| +	hdpvr_i2c_read(dev, 0, 0x54, buffer, 1);
 | ||||
| +
 | ||||
| +	buffer[0] = 0;
 | ||||
| +	buffer[1] = 0x8;
 | ||||
| +	hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
 | ||||
| +
 | ||||
| +	buffer[1] = 0x18;
 | ||||
| +	hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
 | ||||
| +
 | ||||
| +	mutex_unlock(&dev->i2c_mutex);
 | ||||
| +
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| +
 | ||||
|  int hdpvr_register_i2c_adapter(struct hdpvr_device *dev) | ||||
|  { | ||||
| -	struct i2c_adapter *i2c_adap;
 | ||||
|  	int retval = -ENOMEM; | ||||
|   | ||||
| -	i2c_adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
 | ||||
| -	if (i2c_adap == NULL)
 | ||||
| -		goto error;
 | ||||
| +	hdpvr_activate_ir(dev);
 | ||||
|   | ||||
| -	strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
 | ||||
| -		sizeof(i2c_adap->name));
 | ||||
| -	i2c_adap->algo  = &hdpvr_algo;
 | ||||
| -	i2c_adap->class = I2C_CLASS_TV_ANALOG;
 | ||||
| -	i2c_adap->owner = THIS_MODULE;
 | ||||
| -	i2c_adap->dev.parent = &dev->udev->dev;
 | ||||
| +	memcpy(&dev->i2c_adapter, &hdpvr_i2c_adapter_template,
 | ||||
| +		sizeof(struct i2c_adapter));
 | ||||
| +	dev->i2c_adapter.dev.parent = &dev->udev->dev;
 | ||||
|   | ||||
| -	i2c_set_adapdata(i2c_adap, dev);
 | ||||
| +	i2c_set_adapdata(&dev->i2c_adapter, dev);
 | ||||
|   | ||||
| -	retval = i2c_add_adapter(i2c_adap);
 | ||||
| +	retval = i2c_add_adapter(&dev->i2c_adapter);
 | ||||
| +	if (retval)
 | ||||
| +		goto error;
 | ||||
|   | ||||
| -	if (!retval)
 | ||||
| -		dev->i2c_adapter = i2c_adap;
 | ||||
| -	else
 | ||||
| -		kfree(i2c_adap);
 | ||||
| +	i2c_new_device(&dev->i2c_adapter, &hdpvr_i2c_board_info);
 | ||||
|   | ||||
|  error: | ||||
|  	return retval; | ||||
|  } | ||||
| +
 | ||||
| +#endif
 | ||||
| diff --git a/drivers/media/video/hdpvr/hdpvr-video.c b/drivers/media/video/hdpvr/hdpvr-video.c
 | ||||
| index c338f3f..26fd9bf 100644
 | ||||
| --- a/drivers/media/video/hdpvr/hdpvr-video.c
 | ||||
| +++ b/drivers/media/video/hdpvr/hdpvr-video.c
 | ||||
| @@ -1221,12 +1221,9 @@ static void hdpvr_device_release(struct video_device *vdev)
 | ||||
|  	v4l2_device_unregister(&dev->v4l2_dev); | ||||
|   | ||||
|  	/* deregister I2C adapter */ | ||||
| -#ifdef CONFIG_I2C
 | ||||
| +#if defined(CONFIG_I2C) || (CONFIG_I2C_MODULE)
 | ||||
|  	mutex_lock(&dev->i2c_mutex); | ||||
| -	if (dev->i2c_adapter)
 | ||||
| -		i2c_del_adapter(dev->i2c_adapter);
 | ||||
| -	kfree(dev->i2c_adapter);
 | ||||
| -	dev->i2c_adapter = NULL;
 | ||||
| +	i2c_del_adapter(&dev->i2c_adapter);
 | ||||
|  	mutex_unlock(&dev->i2c_mutex); | ||||
|  #endif /* CONFIG_I2C */ | ||||
|   | ||||
| diff --git a/drivers/media/video/hdpvr/hdpvr.h b/drivers/media/video/hdpvr/hdpvr.h
 | ||||
| index b0f046d..2107055 100644
 | ||||
| --- a/drivers/media/video/hdpvr/hdpvr.h
 | ||||
| +++ b/drivers/media/video/hdpvr/hdpvr.h
 | ||||
| @@ -102,7 +102,7 @@ struct hdpvr_device {
 | ||||
|  	struct work_struct	worker; | ||||
|   | ||||
|  	/* I2C adapter */ | ||||
| -	struct i2c_adapter	*i2c_adapter;
 | ||||
| +	struct i2c_adapter	i2c_adapter;
 | ||||
|  	/* I2C lock */ | ||||
|  	struct mutex		i2c_mutex; | ||||
|   | ||||
							
								
								
									
										2195
									
								
								kernel.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2195
									
								
								kernel.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										216
									
								
								linux-2.6-32bit-mmap-exec-randomization.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								linux-2.6-32bit-mmap-exec-randomization.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,216 @@ | ||||
| --- b/include/linux/sched.h
 | ||||
| +++ b/include/linux/sched.h
 | ||||
| @@ -397,6 +397,10 @@
 | ||||
|  extern unsigned long | ||||
|  arch_get_unmapped_area(struct file *, unsigned long, unsigned long, | ||||
|  		       unsigned long, unsigned long); | ||||
| +
 | ||||
| +extern unsigned long
 | ||||
| +arch_get_unmapped_exec_area(struct file *, unsigned long, unsigned long,
 | ||||
| +		       unsigned long, unsigned long);
 | ||||
|  extern unsigned long | ||||
|  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, | ||||
|  			  unsigned long len, unsigned long pgoff, | ||||
| --- b/mm/mmap.c
 | ||||
| +++ b/mm/mmap.c
 | ||||
| @@ -28,6 +28,7 @@
 | ||||
|  #include <linux/rmap.h> | ||||
|  #include <linux/mmu_notifier.h> | ||||
|  #include <linux/perf_event.h> | ||||
| +#include <linux/random.h>
 | ||||
|   | ||||
|  #include <asm/uaccess.h> | ||||
|  #include <asm/cacheflush.h> | ||||
| @@ -1000,7 +1001,8 @@
 | ||||
|  	/* Obtain the address to map to. we verify (or select) it and ensure | ||||
|  	 * that it represents a valid section of the address space. | ||||
|  	 */ | ||||
| -	addr = get_unmapped_area(file, addr, len, pgoff, flags);
 | ||||
| +	addr = get_unmapped_area_prot(file, addr, len, pgoff, flags,
 | ||||
| +		prot & PROT_EXEC);
 | ||||
|  	if (addr & ~PAGE_MASK) | ||||
|  		return addr; | ||||
|   | ||||
| @@ -1552,8 +1554,8 @@
 | ||||
|  } | ||||
|   | ||||
|  unsigned long | ||||
| -get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
 | ||||
| -		unsigned long pgoff, unsigned long flags)
 | ||||
| +get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned long len,
 | ||||
| +		unsigned long pgoff, unsigned long flags, int exec)
 | ||||
|  { | ||||
|  	unsigned long (*get_area)(struct file *, unsigned long, | ||||
|  				  unsigned long, unsigned long, unsigned long); | ||||
| @@ -1566,7 +1568,11 @@
 | ||||
|  	if (len > TASK_SIZE) | ||||
|  		return -ENOMEM; | ||||
|   | ||||
| -	get_area = current->mm->get_unmapped_area;
 | ||||
| +	if (exec && current->mm->get_unmapped_exec_area)
 | ||||
| +		get_area = current->mm->get_unmapped_exec_area;
 | ||||
| +	else
 | ||||
| +		get_area = current->mm->get_unmapped_area;
 | ||||
| +
 | ||||
|  	if (file && file->f_op && file->f_op->get_unmapped_area) | ||||
|  		get_area = file->f_op->get_unmapped_area; | ||||
|  	addr = get_area(file, addr, len, pgoff, flags); | ||||
| @@ -1580,8 +1586,83 @@
 | ||||
|   | ||||
|  	return arch_rebalance_pgtables(addr, len); | ||||
|  } | ||||
| +EXPORT_SYMBOL(get_unmapped_area_prot);
 | ||||
| +
 | ||||
| +static bool should_randomize(void)
 | ||||
| +{
 | ||||
| +	return (current->flags & PF_RANDOMIZE) &&
 | ||||
| +		!(current->personality & ADDR_NO_RANDOMIZE);
 | ||||
| +}
 | ||||
| +
 | ||||
| +#define SHLIB_BASE	0x00110000
 | ||||
| +
 | ||||
| +unsigned long
 | ||||
| +arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0,
 | ||||
| +		unsigned long len0, unsigned long pgoff, unsigned long flags)
 | ||||
| +{
 | ||||
| +	unsigned long addr = addr0, len = len0;
 | ||||
| +	struct mm_struct *mm = current->mm;
 | ||||
| +	struct vm_area_struct *vma;
 | ||||
| +	unsigned long tmp;
 | ||||
| +
 | ||||
| +	if (len > TASK_SIZE)
 | ||||
| +		return -ENOMEM;
 | ||||
| +
 | ||||
| +	if (flags & MAP_FIXED)
 | ||||
| +		return addr;
 | ||||
| +
 | ||||
| +	if (!addr)
 | ||||
| +		addr = !should_randomize() ? SHLIB_BASE :
 | ||||
| +			randomize_range(SHLIB_BASE, 0x01000000, len);
 | ||||
| +
 | ||||
| +	if (addr) {
 | ||||
| +		addr = PAGE_ALIGN(addr);
 | ||||
| +		vma = find_vma(mm, addr);
 | ||||
| +		if (TASK_SIZE - len >= addr &&
 | ||||
| +		    (!vma || addr + len <= vma->vm_start))
 | ||||
| +			return addr;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	addr = SHLIB_BASE;
 | ||||
| +	for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
 | ||||
| +		/* At this point:  (!vma || addr < vma->vm_end). */
 | ||||
| +		if (TASK_SIZE - len < addr)
 | ||||
| +			return -ENOMEM;
 | ||||
| +
 | ||||
| +		if (!vma || addr + len <= vma->vm_start) {
 | ||||
| +			/*
 | ||||
| +			 * Must not let a PROT_EXEC mapping get into the
 | ||||
| +			 * brk area:
 | ||||
| +			 */
 | ||||
| +			if (addr + len > mm->brk)
 | ||||
| +				goto failed;
 | ||||
| +
 | ||||
| +			/*
 | ||||
| +			 * Up until the brk area we randomize addresses
 | ||||
| +			 * as much as possible:
 | ||||
| +			 */
 | ||||
| +			if (addr >= 0x01000000 && should_randomize()) {
 | ||||
| +				tmp = randomize_range(0x01000000,
 | ||||
| +					PAGE_ALIGN(max(mm->start_brk,
 | ||||
| +					(unsigned long)0x08000000)), len);
 | ||||
| +				vma = find_vma(mm, tmp);
 | ||||
| +				if (TASK_SIZE - len >= tmp &&
 | ||||
| +				    (!vma || tmp + len <= vma->vm_start))
 | ||||
| +					return tmp;
 | ||||
| +			}
 | ||||
| +			/*
 | ||||
| +			 * Ok, randomization didnt work out - return
 | ||||
| +			 * the result of the linear search:
 | ||||
| +			 */
 | ||||
| +			return addr;
 | ||||
| +		}
 | ||||
| +		addr = vma->vm_end;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +failed:
 | ||||
| +	return current->mm->get_unmapped_area(filp, addr0, len0, pgoff, flags);
 | ||||
| +}
 | ||||
|   | ||||
| -EXPORT_SYMBOL(get_unmapped_area);
 | ||||
|   | ||||
|  /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */ | ||||
|  struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | ||||
| --- a/arch/x86/mm/mmap.c
 | ||||
| +++ b/arch/x86/mm/mmap.c
 | ||||
| @@ -124,13 +124,16 @@ static unsigned long mmap_legacy_base(void)
 | ||||
|   */ | ||||
|  void arch_pick_mmap_layout(struct mm_struct *mm) | ||||
|  { | ||||
|  	if (mmap_is_legacy()) { | ||||
|  		mm->mmap_base = mmap_legacy_base(); | ||||
|  		mm->get_unmapped_area = arch_get_unmapped_area; | ||||
|  		mm->unmap_area = arch_unmap_area; | ||||
|  	} else { | ||||
|  		mm->mmap_base = mmap_base(); | ||||
|  		mm->get_unmapped_area = arch_get_unmapped_area_topdown; | ||||
| +		if (!(current->personality & READ_IMPLIES_EXEC)
 | ||||
| +		    && mmap_is_ia32())
 | ||||
| +			mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
 | ||||
|  		mm->unmap_area = arch_unmap_area_topdown; | ||||
|  	} | ||||
|  } | ||||
| --- a/arch/x86/vdso/vdso32-setup.c
 | ||||
| +++ b/arch/x86/vdso/vdso32-setup.c
 | ||||
| @@ -331,7 +331,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
 | ||||
|  	if (compat) | ||||
|  		addr = VDSO_HIGH_BASE; | ||||
|  	else { | ||||
| -		addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
 | ||||
| +		addr = get_unmapped_area_prot(NULL, 0, PAGE_SIZE, 0, 0, 1);
 | ||||
|  		if (IS_ERR_VALUE(addr)) { | ||||
|  			ret = addr; | ||||
|  			goto up_fail; | ||||
| --- a/include/linux/mm.h
 | ||||
| +++ b/include/linux/mm.h
 | ||||
| @@ -1263,7 +1263,13 @@ extern int install_special_mapping(struct mm_struct *mm,
 | ||||
|  				   unsigned long addr, unsigned long len, | ||||
|  				   unsigned long flags, struct page **pages); | ||||
|   | ||||
| -extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
 | ||||
| +extern unsigned long get_unmapped_area_prot(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, int);
 | ||||
| +
 | ||||
| +static inline unsigned long get_unmapped_area(struct file *file, unsigned long addr,
 | ||||
| +		unsigned long len, unsigned long pgoff, unsigned long flags)
 | ||||
| +{
 | ||||
| +	return get_unmapped_area_prot(file, addr, len, pgoff, flags, 0);
 | ||||
| +}
 | ||||
|   | ||||
|  extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | ||||
|  	unsigned long len, unsigned long prot, | ||||
| --- a/include/linux/mm_types.h
 | ||||
| +++ b/include/linux/mm_types.h
 | ||||
| @@ -227,6 +227,9 @@ struct mm_struct {
 | ||||
|  	unsigned long (*get_unmapped_area) (struct file *filp, | ||||
|  				unsigned long addr, unsigned long len, | ||||
|  				unsigned long pgoff, unsigned long flags); | ||||
| +       unsigned long (*get_unmapped_exec_area) (struct file *filp,
 | ||||
| +				unsigned long addr, unsigned long len,
 | ||||
| +				unsigned long pgoff, unsigned long flags);
 | ||||
|  	void (*unmap_area) (struct mm_struct *mm, unsigned long addr); | ||||
|  #endif | ||||
|  	unsigned long mmap_base;		/* base of mmap area */ | ||||
| --- a/mm/mremap.c
 | ||||
| +++ b/mm/mremap.c
 | ||||
| @@ -487,10 +487,10 @@ unsigned long do_mremap(unsigned long addr,
 | ||||
|  		if (vma->vm_flags & VM_MAYSHARE) | ||||
|  			map_flags |= MAP_SHARED; | ||||
|   | ||||
| -		new_addr = get_unmapped_area(vma->vm_file, 0, new_len,
 | ||||
| +		new_addr = get_unmapped_area_prot(vma->vm_file, 0, new_len,
 | ||||
|  					vma->vm_pgoff + | ||||
|  					((addr - vma->vm_start) >> PAGE_SHIFT), | ||||
| -					map_flags);
 | ||||
| +					map_flags, vma->vm_flags & VM_EXEC);
 | ||||
|  		if (new_addr & ~PAGE_MASK) { | ||||
|  			ret = new_addr; | ||||
|  			goto out; | ||||
							
								
								
									
										24
									
								
								linux-2.6-acpi-debug-infinite-loop.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								linux-2.6-acpi-debug-infinite-loop.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| --- linux-2.6.34.noarch/drivers/acpi/acpica/dsopcode.c~	2010-07-01 14:40:44.000000000 -0400
 | ||||
| +++ linux-2.6.34.noarch/drivers/acpi/acpica/dsopcode.c	2010-07-01 14:48:56.000000000 -0400
 | ||||
| @@ -1276,6 +1276,10 @@ acpi_ds_exec_end_control_op(struct acpi_
 | ||||
|  			 * loop does not implement a timeout. | ||||
|  			 */ | ||||
|  			control_state->control.loop_count++; | ||||
| +			if ((control_state->control.loop_count > 1) && (control_state->control.loop_count % 0xffff == 0))
 | ||||
| +				printk("ACPI: While loop taking a really long time. loop_count=0x%x\n",
 | ||||
| +					control_state->control.loop_count);
 | ||||
| +
 | ||||
|  			if (control_state->control.loop_count > | ||||
|  				ACPI_MAX_LOOP_ITERATIONS) { | ||||
|  				status = AE_AML_INFINITE_LOOP; | ||||
| --- linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h~	2010-07-01 14:49:03.000000000 -0400
 | ||||
| +++ linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h	2010-07-01 14:49:17.000000000 -0400
 | ||||
| @@ -117,7 +117,7 @@
 | ||||
|   | ||||
|  /* Maximum number of While() loop iterations before forced abort */ | ||||
|   | ||||
| -#define ACPI_MAX_LOOP_ITERATIONS        0xFFFF
 | ||||
| +#define ACPI_MAX_LOOP_ITERATIONS        0xFFFFFF
 | ||||
|   | ||||
|  /* Maximum sleep allowed via Sleep() operator */ | ||||
|   | ||||
							
								
								
									
										17
									
								
								linux-2.6-acpi-video-dos.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								linux-2.6-acpi-video-dos.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| Disable firmware video brightness change on AC/Battery switch by default | ||||
| 
 | ||||
| -- mjg59
 | ||||
| 
 | ||||
| diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
 | ||||
| index bac2901..93b1a9e 100644
 | ||||
| --- a/drivers/acpi/video.c
 | ||||
| +++ b/drivers/acpi/video.c
 | ||||
| @@ -1818,7 +1818,7 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
 | ||||
|   | ||||
|  static int acpi_video_bus_start_devices(struct acpi_video_bus *video) | ||||
|  { | ||||
| -	return acpi_video_bus_DOS(video, 0, 0);
 | ||||
| +	return acpi_video_bus_DOS(video, 0, 1);
 | ||||
|  } | ||||
|   | ||||
|  static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) | ||||
							
								
								
									
										128
									
								
								linux-2.6-build-nonintconfig.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								linux-2.6-build-nonintconfig.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | ||||
| diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
 | ||||
| index 6d69c7c..ff84d12 100644
 | ||||
| --- a/scripts/kconfig/Makefile
 | ||||
| +++ b/scripts/kconfig/Makefile
 | ||||
| @@ -58,6 +58,11 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
 | ||||
|  	fi | ||||
|  	$(Q)rm -f .tmp.config | ||||
|   | ||||
| +nonint_oldconfig: $(obj)/conf
 | ||||
| +	$< -b $(Kconfig)
 | ||||
| +loose_nonint_oldconfig: $(obj)/conf
 | ||||
| +	$< -B $(Kconfig)
 | ||||
| +
 | ||||
|  # Create new linux.pot file | ||||
|  # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files | ||||
|  # The symlink is used to repair a deficiency in arch/um | ||||
| diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
 | ||||
| index 9960d1c..ac8d455 100644
 | ||||
| --- a/scripts/kconfig/conf.c
 | ||||
| +++ b/scripts/kconfig/conf.c
 | ||||
| @@ -23,6 +23,8 @@ enum {
 | ||||
|  	ask_all, | ||||
|  	ask_new, | ||||
|  	ask_silent, | ||||
| +	dont_ask,
 | ||||
| +	dont_ask_dont_tell,
 | ||||
|  	set_default, | ||||
|  	set_yes, | ||||
|  	set_mod, | ||||
| @@ -360,7 +362,10 @@ static void conf(struct menu *menu)
 | ||||
|   | ||||
|  		switch (prop->type) { | ||||
|  		case P_MENU: | ||||
| -			if (input_mode == ask_silent && rootEntry != menu) {
 | ||||
| +			if ((input_mode == ask_silent ||
 | ||||
| +			     input_mode == dont_ask ||
 | ||||
| +			     input_mode == dont_ask_dont_tell) &&
 | ||||
| +			    rootEntry != menu) {
 | ||||
|  				check_conf(menu); | ||||
|  				return; | ||||
|  			} | ||||
| @@ -406,6 +411,8 @@ conf_childs:
 | ||||
|  		indent -= 2; | ||||
|  } | ||||
|   | ||||
| +static int return_value;
 | ||||
| +
 | ||||
|  static void check_conf(struct menu *menu) | ||||
|  { | ||||
|  	struct symbol *sym; | ||||
| @@ -418,12 +425,21 @@ static void check_conf(struct menu *menu)
 | ||||
|  	if (sym && !sym_has_value(sym)) { | ||||
|  		if (sym_is_changable(sym) || | ||||
|  		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { | ||||
| +			if (input_mode == dont_ask ||
 | ||||
| +			    input_mode == dont_ask_dont_tell) {
 | ||||
| +				if (input_mode == dont_ask &&
 | ||||
| +				    sym->name && !sym_is_choice_value(sym)) {
 | ||||
| +					fprintf(stderr,"CONFIG_%s\n",sym->name);
 | ||||
| +					++return_value;
 | ||||
| +				}
 | ||||
| +			} else {
 | ||||
|  			if (!conf_cnt++) | ||||
|  				printf(_("*\n* Restart config...\n*\n")); | ||||
|  			rootEntry = menu_get_parent_menu(menu); | ||||
|  			conf(rootEntry); | ||||
|  		} | ||||
|  	} | ||||
| +	}
 | ||||
|   | ||||
|  	for (child = menu->list; child; child = child->next) | ||||
|  		check_conf(child); | ||||
| @@ -439,7 +455,7 @@ int main(int ac, char **av)
 | ||||
|  	bindtextdomain(PACKAGE, LOCALEDIR); | ||||
|  	textdomain(PACKAGE); | ||||
|   | ||||
| -	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
 | ||||
| + 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
 | ||||
|  		switch (opt) { | ||||
|  		case 'o': | ||||
|  			input_mode = ask_silent; | ||||
| @@ -448,6 +464,12 @@ int main(int ac, char **av)
 | ||||
|  			input_mode = ask_silent; | ||||
|  			sync_kconfig = 1; | ||||
|  			break; | ||||
| +		case 'b':
 | ||||
| +			input_mode = dont_ask;
 | ||||
| +			break;
 | ||||
| +		case 'B':
 | ||||
| +			input_mode = dont_ask_dont_tell;
 | ||||
| +			break;
 | ||||
|  		case 'd': | ||||
|  			input_mode = set_default; | ||||
|  			break; | ||||
| @@ -525,6 +547,8 @@ int main(int ac, char **av)
 | ||||
|  	case ask_silent: | ||||
|  	case ask_all: | ||||
|  	case ask_new: | ||||
| +	case dont_ask:
 | ||||
| +	case dont_ask_dont_tell:
 | ||||
|  		conf_read(NULL); | ||||
|  		break; | ||||
|  	case set_no: | ||||
| @@ -586,12 +610,16 @@ int main(int ac, char **av)
 | ||||
|  		conf(&rootmenu); | ||||
|  		input_mode = ask_silent; | ||||
|  		/* fall through */ | ||||
| +	case dont_ask:
 | ||||
| +	case dont_ask_dont_tell:
 | ||||
|  	case ask_silent: | ||||
|  		/* Update until a loop caused no more changes */ | ||||
|  		do { | ||||
|  			conf_cnt = 0; | ||||
|  			check_conf(&rootmenu); | ||||
| -		} while (conf_cnt);
 | ||||
| +		} while (conf_cnt &&
 | ||||
| +			 (input_mode != dont_ask &&
 | ||||
| +			  input_mode != dont_ask_dont_tell));
 | ||||
|  		break; | ||||
|  	} | ||||
|   | ||||
| @@ -613,5 +641,5 @@ int main(int ac, char **av)
 | ||||
|  			exit(1); | ||||
|  		} | ||||
|  	} | ||||
| -	return 0;
 | ||||
| +	return return_value;
 | ||||
|  } | ||||
							
								
								
									
										6
									
								
								linux-2.6-compile-fixes.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								linux-2.6-compile-fixes.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| # | ||||
| # Small compile fixes (For more involved fixes, please use a separate patch). | ||||
| # | ||||
| # Please add the errors from gcc before the diffs to save others having | ||||
| # to do a compile to figure out what your diff is fixing. Thanks. | ||||
| # | ||||
							
								
								
									
										385
									
								
								linux-2.6-crash-driver.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								linux-2.6-crash-driver.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,385 @@ | ||||
| From df42d15cd28f468ecd4c30465b98a53cce90617c Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Tue, 30 Mar 2010 00:16:25 -0400 | ||||
| Subject: dev-crash-driver.patch | ||||
| 
 | ||||
| ---
 | ||||
|  arch/ia64/include/asm/crash.h |   90 +++++++++++++++++++++++++++++ | ||||
|  arch/ia64/kernel/ia64_ksyms.c |    3 + | ||||
|  arch/x86/include/asm/crash.h  |   75 ++++++++++++++++++++++++ | ||||
|  arch/x86/mm/ioremap.c         |    2 + | ||||
|  drivers/char/Kconfig          |    2 + | ||||
|  drivers/char/Makefile         |    2 + | ||||
|  drivers/char/crash.c          |  128 +++++++++++++++++++++++++++++++++++++++++ | ||||
|  7 files changed, 302 insertions(+), 0 deletions(-) | ||||
|  create mode 100644 arch/ia64/include/asm/crash.h | ||||
|  create mode 100644 arch/x86/include/asm/crash.h | ||||
|  create mode 100644 drivers/char/crash.c | ||||
| 
 | ||||
| diff --git a/arch/ia64/include/asm/crash.h b/arch/ia64/include/asm/crash.h
 | ||||
| new file mode 100644 | ||||
| index 0000000..541af84
 | ||||
| --- /dev/null
 | ||||
| +++ b/arch/ia64/include/asm/crash.h
 | ||||
| @@ -0,0 +1,90 @@
 | ||||
| +#ifndef _ASM_IA64_CRASH_H
 | ||||
| +#define _ASM_IA64_CRASH_H
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * linux/include/asm-ia64/crash.h
 | ||||
| + *
 | ||||
| + * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
 | ||||
| + *
 | ||||
| + * 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 | ||||
| + *
 | ||||
| + */
 | ||||
| +
 | ||||
| +#ifdef __KERNEL__
 | ||||
| +
 | ||||
| +#include <linux/efi.h>
 | ||||
| +#include <linux/mm.h>
 | ||||
| +#include <asm/mmzone.h>
 | ||||
| +
 | ||||
| +static inline void *
 | ||||
| +map_virtual(u64 offset, struct page **pp)
 | ||||
| +{
 | ||||
| +	struct page *page;
 | ||||
| +	unsigned long pfn;
 | ||||
| +	u32 type;
 | ||||
| +
 | ||||
| +	if (REGION_NUMBER(offset) == 5) {
 | ||||
| +		char byte;
 | ||||
| +
 | ||||
| +		if (__get_user(byte, (char *)offset) == 0)
 | ||||
| +			return (void *)offset;
 | ||||
| +		else
 | ||||
| +			return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	switch (type = efi_mem_type(offset)) 
 | ||||
| +	{
 | ||||
| +	case EFI_LOADER_CODE:
 | ||||
| +	case EFI_LOADER_DATA:
 | ||||
| +	case EFI_BOOT_SERVICES_CODE:
 | ||||
| +	case EFI_BOOT_SERVICES_DATA:
 | ||||
| +	case EFI_CONVENTIONAL_MEMORY:
 | ||||
| +		break;
 | ||||
| +
 | ||||
| +	default:
 | ||||
| +		printk(KERN_INFO
 | ||||
| +		    "crash memory driver: invalid memory type for %lx: %d\n", 
 | ||||
| +			offset, type);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	pfn = offset >> PAGE_SHIFT;
 | ||||
| +
 | ||||
| +	if (!pfn_valid(pfn)) {
 | ||||
| +		printk(KERN_INFO
 | ||||
| +			"crash memory driver: invalid pfn: %lx )\n", pfn);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	page = pfn_to_page(pfn);
 | ||||
| +
 | ||||
| +	if (!page->virtual) {
 | ||||
| +		printk(KERN_INFO
 | ||||
| +		    "crash memory driver: offset: %lx page: %lx page->virtual: NULL\n", 
 | ||||
| +			offset, (unsigned long)page);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	return (page->virtual + (offset & (PAGE_SIZE-1)));
 | ||||
| +}
 | ||||
| +
 | ||||
| +static inline void unmap_virtual(struct page *page) 
 | ||||
| +{ 
 | ||||
| +	return;
 | ||||
| +}
 | ||||
| +
 | ||||
| +#endif /* __KERNEL__ */
 | ||||
| +
 | ||||
| +#endif /* _ASM_IA64_CRASH_H */
 | ||||
| diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
 | ||||
| index 7f4a0ed..552fe24 100644
 | ||||
| --- a/arch/ia64/kernel/ia64_ksyms.c
 | ||||
| +++ b/arch/ia64/kernel/ia64_ksyms.c
 | ||||
| @@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
 | ||||
|  #include <asm/unwind.h> | ||||
|  EXPORT_SYMBOL(unw_init_running); | ||||
|   | ||||
| +#include <linux/efi.h>
 | ||||
| +EXPORT_SYMBOL_GPL(efi_mem_type);
 | ||||
| +
 | ||||
|  #if defined(CONFIG_IA64_ESI) || defined(CONFIG_IA64_ESI_MODULE) | ||||
|  extern void esi_call_phys (void); | ||||
|  EXPORT_SYMBOL_GPL(esi_call_phys); | ||||
| diff --git a/arch/x86/include/asm/crash.h b/arch/x86/include/asm/crash.h
 | ||||
| new file mode 100644 | ||||
| index 0000000..dfcc006
 | ||||
| --- /dev/null
 | ||||
| +++ b/arch/x86/include/asm/crash.h
 | ||||
| @@ -0,0 +1,75 @@
 | ||||
| +#ifndef _ASM_I386_CRASH_H
 | ||||
| +#define _ASM_I386_CRASH_H
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * linux/include/asm-i386/crash.h
 | ||||
| + *
 | ||||
| + * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
 | ||||
| + *
 | ||||
| + * 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 | ||||
| + *
 | ||||
| + */
 | ||||
| +
 | ||||
| +#ifdef __KERNEL__
 | ||||
| +
 | ||||
| +#include <linux/mm.h>
 | ||||
| +#include <linux/highmem.h>
 | ||||
| +#include <asm/mmzone.h>
 | ||||
| +
 | ||||
| +extern int page_is_ram(unsigned long);
 | ||||
| +
 | ||||
| +static inline void *
 | ||||
| +map_virtual(u64 offset, struct page **pp)
 | ||||
| +{
 | ||||
| +	struct page *page;
 | ||||
| +	unsigned long pfn;
 | ||||
| +	void *vaddr;
 | ||||
| +
 | ||||
| +	pfn = (unsigned long)(offset >> PAGE_SHIFT);
 | ||||
| +
 | ||||
| +	if (!page_is_ram(pfn)) {
 | ||||
| +		printk(KERN_INFO
 | ||||
| +		    "crash memory driver: !page_is_ram(pfn: %lx)\n", pfn);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	if (!pfn_valid(pfn)) {
 | ||||
| +		printk(KERN_INFO
 | ||||
| +		    "crash memory driver: invalid pfn: %lx )\n", pfn);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	page = pfn_to_page(pfn);
 | ||||
| +
 | ||||
| +	vaddr = kmap(page);
 | ||||
| +	if (!vaddr) {
 | ||||
| +		printk(KERN_INFO
 | ||||
| +		    "crash memory driver: pfn: %lx kmap(page: %lx) failed\n", 
 | ||||
| +			pfn, (unsigned long)page);
 | ||||
| +		return NULL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	*pp = page;
 | ||||
| +	return (vaddr + (offset & (PAGE_SIZE-1)));
 | ||||
| +}
 | ||||
| +
 | ||||
| +static inline void unmap_virtual(struct page *page) 
 | ||||
| +{ 
 | ||||
| +	kunmap(page);
 | ||||
| +}
 | ||||
| +
 | ||||
| +#endif /* __KERNEL__ */
 | ||||
| +
 | ||||
| +#endif /* _ASM_I386_CRASH_H */
 | ||||
| diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
 | ||||
| index 5eb1ba7..3e525d2 100644
 | ||||
| --- a/arch/x86/mm/ioremap.c
 | ||||
| +++ b/arch/x86/mm/ioremap.c
 | ||||
| @@ -24,6 +24,8 @@
 | ||||
|   | ||||
|  #include "physaddr.h" | ||||
|   | ||||
| +EXPORT_SYMBOL_GPL(page_is_ram);
 | ||||
| +
 | ||||
|  /* | ||||
|   * Fix up the linear direct mapping of the kernel to avoid cache attribute | ||||
|   * conflicts. | ||||
| diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
 | ||||
| index 3141dd3..153658c 100644
 | ||||
| --- a/drivers/char/Kconfig
 | ||||
| +++ b/drivers/char/Kconfig
 | ||||
| @@ -471,6 +471,8 @@ config LEGACY_PTYS
 | ||||
|  	  security.  This option enables these legacy devices; on most | ||||
|  	  systems, it is safe to say N. | ||||
|   | ||||
| +config CRASH
 | ||||
| +        tristate "Crash Utility memory driver"
 | ||||
|   | ||||
|  config LEGACY_PTY_COUNT | ||||
|  	int "Maximum number of legacy PTY in use" | ||||
| diff --git a/drivers/char/Makefile b/drivers/char/Makefile
 | ||||
| index f957edf..604c418 100644
 | ||||
| --- a/drivers/char/Makefile
 | ||||
| +++ b/drivers/char/Makefile
 | ||||
| @@ -111,6 +111,8 @@ obj-$(CONFIG_PS3_FLASH)		+= ps3flash.o
 | ||||
|  obj-$(CONFIG_JS_RTC)		+= js-rtc.o | ||||
|  js-rtc-y = rtc.o | ||||
|   | ||||
| +obj-$(CONFIG_CRASH)		+= crash.o
 | ||||
| +
 | ||||
|  # Files generated that shall be removed upon make clean | ||||
|  clean-files := consolemap_deftbl.c defkeymap.c | ||||
|   | ||||
| diff --git a/drivers/char/crash.c b/drivers/char/crash.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..e5437de
 | ||||
| --- /dev/null
 | ||||
| +++ b/drivers/char/crash.c
 | ||||
| @@ -0,0 +1,128 @@
 | ||||
| +/*
 | ||||
| + *  linux/drivers/char/crash.c
 | ||||
| + *
 | ||||
| + *  Copyright (C) 2004  Dave Anderson <anderson@redhat.com>
 | ||||
| + *  Copyright (C) 2004  Red Hat, 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 | ||||
| + *
 | ||||
| + *****************************************************************************/
 | ||||
| +
 | ||||
| +#include <linux/module.h>
 | ||||
| +#include <linux/types.h>
 | ||||
| +#include <linux/miscdevice.h>
 | ||||
| +#include <linux/init.h>
 | ||||
| +#include <asm/io.h>
 | ||||
| +#include <asm/uaccess.h>
 | ||||
| +#include <asm/types.h>
 | ||||
| +#include <asm/crash.h>
 | ||||
| +
 | ||||
| +#define CRASH_VERSION   "1.0"
 | ||||
| +
 | ||||
| +/*
 | ||||
| + *  These are the file operation functions that allow crash utility
 | ||||
| + *  access to physical memory.
 | ||||
| + */
 | ||||
| +
 | ||||
| +static loff_t 
 | ||||
| +crash_llseek(struct file * file, loff_t offset, int orig)
 | ||||
| +{
 | ||||
| +	switch (orig) {
 | ||||
| +	case 0:
 | ||||
| +		file->f_pos = offset;
 | ||||
| +		return file->f_pos;
 | ||||
| +	case 1:
 | ||||
| +		file->f_pos += offset;
 | ||||
| +		return file->f_pos;
 | ||||
| +	default:
 | ||||
| +		return -EINVAL;
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +
 | ||||
| +/*
 | ||||
| + *  Determine the page address for an address offset value, 
 | ||||
| + *  get a virtual address for it, and copy it out.
 | ||||
| + *  Accesses must fit within a page.
 | ||||
| + */
 | ||||
| +static ssize_t
 | ||||
| +crash_read(struct file *file, char *buf, size_t count, loff_t *poff)
 | ||||
| +{
 | ||||
| +	void *vaddr;
 | ||||
| +	struct page *page;
 | ||||
| +	u64 offset;
 | ||||
| +	ssize_t read;
 | ||||
| +
 | ||||
| +	offset = *poff;
 | ||||
| +	if (offset >> PAGE_SHIFT != (offset+count-1) >> PAGE_SHIFT) 
 | ||||
| +		return -EINVAL;
 | ||||
| +
 | ||||
| +	vaddr = map_virtual(offset, &page);
 | ||||
| +	if (!vaddr)
 | ||||
| +		return -EFAULT;
 | ||||
| +
 | ||||
| +	if (copy_to_user(buf, vaddr, count)) {
 | ||||
| +		unmap_virtual(page);
 | ||||
| +		return -EFAULT;
 | ||||
| +	}
 | ||||
| +	unmap_virtual(page);
 | ||||
| +
 | ||||
| +	read = count;
 | ||||
| +	*poff += read;
 | ||||
| +	return read;
 | ||||
| +}
 | ||||
| +
 | ||||
| +static struct file_operations crash_fops = {
 | ||||
| +	.owner = THIS_MODULE,
 | ||||
| +	.llseek = crash_llseek,
 | ||||
| +	.read = crash_read,
 | ||||
| +};
 | ||||
| +
 | ||||
| +static struct miscdevice crash_dev = {
 | ||||
| +	MISC_DYNAMIC_MINOR,
 | ||||
| +	"crash",
 | ||||
| +	&crash_fops
 | ||||
| +};
 | ||||
| +
 | ||||
| +static int __init
 | ||||
| +crash_init(void)
 | ||||
| +{
 | ||||
| +	int ret;
 | ||||
| +
 | ||||
| +	ret = misc_register(&crash_dev);
 | ||||
| +	if (ret) {
 | ||||
| +		printk(KERN_ERR 
 | ||||
| +		    "crash memory driver: cannot misc_register (MISC_DYNAMIC_MINOR)\n");
 | ||||
| +		goto out;
 | ||||
| +	}
 | ||||
| +	
 | ||||
| +	ret = 0;
 | ||||
| +	printk(KERN_INFO "crash memory driver: version %s\n", CRASH_VERSION);
 | ||||
| +out:
 | ||||
| +	return ret;
 | ||||
| +}
 | ||||
| +
 | ||||
| +static void __exit
 | ||||
| +crash_cleanup_module(void)
 | ||||
| +{
 | ||||
| +	misc_deregister(&crash_dev);
 | ||||
| +}
 | ||||
| +
 | ||||
| +module_init(crash_init);
 | ||||
| +module_exit(crash_cleanup_module);
 | ||||
| +
 | ||||
| +MODULE_LICENSE("GPL");
 | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										25
									
								
								linux-2.6-debug-always-inline-kzalloc.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								linux-2.6-debug-always-inline-kzalloc.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| From 76ec0e2e6d6edf81abc0331d5e7873ef7b2f6019 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Wed, 8 Jul 2009 13:06:01 -0400 | ||||
| Subject: [PATCH 6/6] fedora: linux-2.6-debug-always-inline-kzalloc.patch | ||||
| 
 | ||||
| ---
 | ||||
|  include/linux/slab.h |    2 +- | ||||
|  1 files changed, 1 insertions(+), 1 deletions(-) | ||||
| 
 | ||||
| diff --git a/include/linux/slab.h b/include/linux/slab.h
 | ||||
| index 2da8372..d4ef74f 100644
 | ||||
| --- a/include/linux/slab.h
 | ||||
| +++ b/include/linux/slab.h
 | ||||
| @@ -310,7 +310,7 @@ static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
 | ||||
|   * @size: how many bytes of memory are required. | ||||
|   * @flags: the type of memory to allocate (see kmalloc). | ||||
|   */ | ||||
| -static inline void *kzalloc(size_t size, gfp_t flags)
 | ||||
| +static __always_inline void *kzalloc(size_t size, gfp_t flags)
 | ||||
|  { | ||||
|  	return kmalloc(size, flags | __GFP_ZERO); | ||||
|  } | ||||
| -- 
 | ||||
| 1.6.2.5 | ||||
| 
 | ||||
							
								
								
									
										45
									
								
								linux-2.6-debug-nmi-timeout.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								linux-2.6-debug-nmi-timeout.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | ||||
| From 542dee6f43067fa0101b53925aadf1d08c997cd4 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Mon, 29 Mar 2010 23:40:27 -0400 | ||||
| Subject: linux-2.6-debug-nmi-timeout | ||||
| 
 | ||||
| ---
 | ||||
|  arch/x86/kernel/apic/nmi.c |    2 +- | ||||
|  lib/Kconfig.debug          |    8 ++++++++ | ||||
|  2 files changed, 9 insertions(+), 1 deletions(-) | ||||
| 
 | ||||
| diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
 | ||||
| index 8aa65ad..ba7d55e 100644
 | ||||
| --- a/arch/x86/kernel/apic/nmi.c
 | ||||
| +++ b/arch/x86/kernel/apic/nmi.c
 | ||||
| @@ -439,7 +439,7 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
 | ||||
|  		 * wait a few IRQs (5 seconds) before doing the oops ... | ||||
|  		 */ | ||||
|  		__this_cpu_inc(alert_counter); | ||||
| -		if (__this_cpu_read(alert_counter) == 5 * nmi_hz)
 | ||||
| +		if (__this_cpu_read(alert_counter) == CONFIG_DEBUG_NMI_TIMEOUT * nmi_hz)
 | ||||
|  			/* | ||||
|  			 * die_nmi will return ONLY if NOTIFY_STOP happens.. | ||||
|  			 */ | ||||
| diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
 | ||||
| index 1fafb4b..963e78b 100644
 | ||||
| --- a/lib/Kconfig.debug
 | ||||
| +++ b/lib/Kconfig.debug
 | ||||
| @@ -254,6 +254,14 @@ config SCHEDSTATS
 | ||||
|  	  application, you can say N to avoid the very slight overhead | ||||
|  	  this adds. | ||||
|   | ||||
| +config DEBUG_NMI_TIMEOUT
 | ||||
| +	int "Number of seconds before NMI timeout"
 | ||||
| +	depends on X86
 | ||||
| +	default 5
 | ||||
| +	help
 | ||||
| +	  This value is the number of seconds the NMI watchdog will tick
 | ||||
| +	  before it decides the machine has hung.
 | ||||
| +
 | ||||
|  config TIMER_STATS | ||||
|  	bool "Collect kernel timers statistics" | ||||
|  	depends on DEBUG_KERNEL && PROC_FS | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										31
									
								
								linux-2.6-debug-sizeof-structs.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								linux-2.6-debug-sizeof-structs.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| diff --git a/init/main.c b/init/main.c
 | ||||
| index 7449819..98cfaae 100644
 | ||||
| --- a/init/main.c
 | ||||
| +++ b/init/main.c
 | ||||
| @@ -369,6 +369,10 @@ static void __init setup_nr_cpu_ids(void)
 | ||||
|  	nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1; | ||||
|  } | ||||
|   | ||||
| +#include <linux/ext3_fs_i.h>
 | ||||
| +#include <linux/skbuff.h>
 | ||||
| +#include <linux/sched.h>
 | ||||
| +
 | ||||
|  /* Called by boot processor to activate the rest. */ | ||||
|  static void __init smp_init(void) | ||||
|  { | ||||
| @@ -391,6 +395,15 @@ static void __init smp_init(void)
 | ||||
|  	/* Any cleanup work */ | ||||
|  	printk(KERN_INFO "Brought up %ld CPUs\n", (long)num_online_cpus()); | ||||
|  	smp_cpus_done(setup_max_cpus); | ||||
| +
 | ||||
| +	printk(KERN_DEBUG "sizeof(vma)=%u bytes\n", (unsigned int) sizeof(struct vm_area_struct));
 | ||||
| +	printk(KERN_DEBUG "sizeof(page)=%u bytes\n", (unsigned int) sizeof(struct page));
 | ||||
| +	printk(KERN_DEBUG "sizeof(inode)=%u bytes\n", (unsigned int) sizeof(struct inode));
 | ||||
| +	printk(KERN_DEBUG "sizeof(dentry)=%u bytes\n", (unsigned int) sizeof(struct dentry));
 | ||||
| +	printk(KERN_DEBUG "sizeof(ext3inode)=%u bytes\n", (unsigned int) sizeof(struct ext3_inode_info));
 | ||||
| +	printk(KERN_DEBUG "sizeof(buffer_head)=%u bytes\n", (unsigned int) sizeof(struct buffer_head));
 | ||||
| +	printk(KERN_DEBUG "sizeof(skbuff)=%u bytes\n", (unsigned int) sizeof(struct sk_buff));
 | ||||
| +	printk(KERN_DEBUG "sizeof(task_struct)=%u bytes\n", (unsigned int) sizeof(struct task_struct));
 | ||||
|  } | ||||
|   | ||||
|  #endif | ||||
							
								
								
									
										65
									
								
								linux-2.6-debug-taint-vm.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								linux-2.6-debug-taint-vm.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| From b04c57d9dc889462951312be2ac81ff6c702e954 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Wed, 8 Jul 2009 13:05:09 -0400 | ||||
| Subject: [PATCH 3/6] fedora: linux-2.6-debug-taint-vm.patch | ||||
| 
 | ||||
| ---
 | ||||
|  kernel/panic.c  |    4 +++- | ||||
|  mm/slab.c       |    8 ++++---- | ||||
|  mm/slub.c       |    2 +- | ||||
|  4 files changed, 11 insertions(+), 8 deletions(-) | ||||
| 
 | ||||
| diff --git a/kernel/panic.c b/kernel/panic.c
 | ||||
| index 984b3ec..6d1c3be 100644
 | ||||
| --- a/kernel/panic.c
 | ||||
| +++ b/kernel/panic.c
 | ||||
| @@ -199,6 +199,7 @@ const char *print_tainted(void)
 | ||||
|   | ||||
|  	return buf; | ||||
|  } | ||||
| +EXPORT_SYMBOL(print_tainted);
 | ||||
|   | ||||
|  int test_taint(unsigned flag) | ||||
|  { | ||||
| diff --git a/mm/slab.c b/mm/slab.c
 | ||||
| index e74a16e..7bc287e 100644
 | ||||
| --- a/mm/slab.c
 | ||||
| +++ b/mm/slab.c
 | ||||
| @@ -1803,8 +1803,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
 | ||||
|  			/* Print header */ | ||||
|  			if (lines == 0) { | ||||
|  				printk(KERN_ERR | ||||
| -					"Slab corruption: %s start=%p, len=%d\n",
 | ||||
| -					cachep->name, realobj, size);
 | ||||
| +					"Slab corruption (%s): %s start=%p, len=%d\n",
 | ||||
| +					print_tainted(), cachep->name, realobj, size);
 | ||||
|  				print_objinfo(cachep, objp, 0); | ||||
|  			} | ||||
|  			/* Hexdump the affected line */ | ||||
| @@ -2902,8 +2902,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
 | ||||
|  	if (entries != cachep->num - slabp->inuse) { | ||||
|  bad: | ||||
|  		printk(KERN_ERR "slab: Internal list corruption detected in " | ||||
| -				"cache '%s'(%d), slabp %p(%d). Hexdump:\n",
 | ||||
| -			cachep->name, cachep->num, slabp, slabp->inuse);
 | ||||
| +				"cache '%s'(%d), slabp %p(%d). Tainted(%s). Hexdump:\n",
 | ||||
| +			cachep->name, cachep->num, slabp, slabp->inuse, print_tainted());
 | ||||
|  		for (i = 0; | ||||
|  		     i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t); | ||||
|  		     i++) { | ||||
| diff --git a/mm/slub.c b/mm/slub.c
 | ||||
| index 819f056..8eff0f4 100644
 | ||||
| --- a/mm/slub.c
 | ||||
| +++ b/mm/slub.c
 | ||||
| @@ -433,7 +433,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
 | ||||
|  	va_end(args); | ||||
|  	printk(KERN_ERR "========================================" | ||||
|  			"=====================================\n"); | ||||
| -	printk(KERN_ERR "BUG %s: %s\n", s->name, buf);
 | ||||
| +	printk(KERN_ERR "BUG %s (%s): %s\n", s->name, print_tainted(), buf);
 | ||||
|  	printk(KERN_ERR "----------------------------------------" | ||||
|  			"-------------------------------------\n\n"); | ||||
|  } | ||||
| -- 
 | ||||
| 1.6.2.5 | ||||
| 
 | ||||
							
								
								
									
										64
									
								
								linux-2.6-debug-vm-would-have-oomkilled.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								linux-2.6-debug-vm-would-have-oomkilled.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| From 03657519851cd180983db4bd0c38eaeed4aa2962 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@treachery.i.jkkm.org> | ||||
| Date: Mon, 11 Jan 2010 08:25:12 -0500 | ||||
| Subject: linux-2.6-debug-vm-would-have-oomkilled.patch | ||||
| 
 | ||||
| ---
 | ||||
|  kernel/sysctl.c |    8 ++++++++ | ||||
|  mm/oom_kill.c   |    7 +++++++ | ||||
|  2 files changed, 15 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/kernel/sysctl.c b/kernel/sysctl.c
 | ||||
| index 8a68b24..72a4ff1 100644
 | ||||
| --- a/kernel/sysctl.c
 | ||||
| +++ b/kernel/sysctl.c
 | ||||
| @@ -71,6 +71,7 @@ extern int sysctl_overcommit_ratio;
 | ||||
|  extern int sysctl_panic_on_oom; | ||||
|  extern int sysctl_oom_kill_allocating_task; | ||||
|  extern int sysctl_oom_dump_tasks; | ||||
| +extern int sysctl_would_have_oomkilled;
 | ||||
|  extern int max_threads; | ||||
|  extern int core_uses_pid; | ||||
|  extern int suid_dumpable; | ||||
| @@ -973,6 +974,13 @@ static struct ctl_table vm_table[] = {
 | ||||
|  		.proc_handler	= proc_dointvec, | ||||
|  	}, | ||||
|  	{ | ||||
| +		.procname	= "would_have_oomkilled",
 | ||||
| +		.data		= &sysctl_would_have_oomkilled,
 | ||||
| +		.maxlen		= sizeof(sysctl_would_have_oomkilled),
 | ||||
| +		.mode		= 0644,
 | ||||
| +		.proc_handler	= &proc_dointvec,
 | ||||
| +	},
 | ||||
| +	{
 | ||||
|  		.procname	= "overcommit_ratio", | ||||
|  		.data		= &sysctl_overcommit_ratio, | ||||
|  		.maxlen		= sizeof(sysctl_overcommit_ratio), | ||||
| diff --git a/mm/oom_kill.c b/mm/oom_kill.c
 | ||||
| index f52481b..a892f07 100644
 | ||||
| --- a/mm/oom_kill.c
 | ||||
| +++ b/mm/oom_kill.c
 | ||||
| @@ -31,6 +31,7 @@
 | ||||
|  int sysctl_panic_on_oom; | ||||
|  int sysctl_oom_kill_allocating_task; | ||||
|  int sysctl_oom_dump_tasks; | ||||
| +int sysctl_would_have_oomkilled;
 | ||||
|  static DEFINE_SPINLOCK(zone_scan_lock); | ||||
|  /* #define DEBUG */ | ||||
|   | ||||
| @@ -396,6 +397,12 @@ static void __oom_kill_task(struct task_struct *p, int verbose)
 | ||||
|  		return; | ||||
|  	} | ||||
|   | ||||
| +	if (sysctl_would_have_oomkilled == 1) {
 | ||||
| +		printk(KERN_ERR "Would have killed process %d (%s). But continuing instead.\n",
 | ||||
| +				task_pid_nr(p), p->comm);
 | ||||
| +		return;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	if (verbose) | ||||
|  		printk(KERN_ERR "Killed process %d (%s) " | ||||
|  		       "vsz:%lukB, anon-rss:%lukB, file-rss:%lukB\n", | ||||
| -- 
 | ||||
| 1.6.5.2 | ||||
| 
 | ||||
							
								
								
									
										13
									
								
								linux-2.6-defaults-acpi-video.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								linux-2.6-defaults-acpi-video.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
 | ||||
| index d8d7596..a1b7117 100644
 | ||||
| --- a/drivers/acpi/video.c
 | ||||
| +++ b/drivers/acpi/video.c
 | ||||
| @@ -71,7 +71,7 @@ MODULE_AUTHOR("Bruno Ducrot");
 | ||||
|  MODULE_DESCRIPTION("ACPI Video Driver"); | ||||
|  MODULE_LICENSE("GPL"); | ||||
|   | ||||
| -static int brightness_switch_enabled = 1;
 | ||||
| +static int brightness_switch_enabled = 0;
 | ||||
|  module_param(brightness_switch_enabled, bool, 0644); | ||||
|   | ||||
|  static int acpi_video_bus_add(struct acpi_device *device); | ||||
							
								
								
									
										12
									
								
								linux-2.6-defaults-aspm.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								linux-2.6-defaults-aspm.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg linux-2.6.30.noarch/drivers/pci/pcie/aspm.c
 | ||||
| --- linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg	2009-07-16 22:01:11.000000000 +0100
 | ||||
| +++ linux-2.6.30.noarch/drivers/pci/pcie/aspm.c	2009-07-16 22:01:30.000000000 +0100
 | ||||
| @@ -65,7 +65,7 @@ static LIST_HEAD(link_list);
 | ||||
|  #define POLICY_DEFAULT 0	/* BIOS default setting */ | ||||
|  #define POLICY_PERFORMANCE 1	/* high performance */ | ||||
|  #define POLICY_POWERSAVE 2	/* high power saving */ | ||||
| -static int aspm_policy;
 | ||||
| +static int aspm_policy = POLICY_POWERSAVE;
 | ||||
|  static const char *policy_str[] = { | ||||
|  	[POLICY_DEFAULT] = "default", | ||||
|  	[POLICY_PERFORMANCE] = "performance", | ||||
							
								
								
									
										110
									
								
								linux-2.6-defaults-pci_no_msi.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								linux-2.6-defaults-pci_no_msi.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | ||||
| From 14bdd0d36f5284108468bb73afd50726b07c7a84 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Mon, 29 Mar 2010 23:43:49 -0400 | ||||
| Subject: linux-2.6-defaults-pci_no_msi | ||||
| 
 | ||||
| ---
 | ||||
|  Documentation/kernel-parameters.txt |    3 +++ | ||||
|  drivers/pci/Kconfig                 |   12 ++++++++++++ | ||||
|  drivers/pci/msi.c                   |    9 +++++++++ | ||||
|  drivers/pci/pci.c                   |    2 ++ | ||||
|  drivers/pci/pci.h                   |    2 ++ | ||||
|  5 files changed, 28 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
 | ||||
| index e4cbca5..8154a0f 100644
 | ||||
| --- a/Documentation/kernel-parameters.txt
 | ||||
| +++ b/Documentation/kernel-parameters.txt
 | ||||
| @@ -1911,6 +1911,9 @@ and is between 256 and 4096 characters. It is defined in the file
 | ||||
|  		check_enable_amd_mmconf [X86] check for and enable | ||||
|  				properly configured MMIO access to PCI | ||||
|  				config space on AMD family 10h CPU | ||||
| +		msi		[MSI] If the PCI_MSI kernel config parameter is
 | ||||
| +				enabled, this kernel boot option can be used to
 | ||||
| +				enable the use of MSI interrupts system-wide.
 | ||||
|  		nomsi		[MSI] If the PCI_MSI kernel config parameter is | ||||
|  				enabled, this kernel boot option can be used to | ||||
|  				disable the use of MSI interrupts system-wide. | ||||
| diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
 | ||||
| index 7858a11..b12fcad 100644
 | ||||
| --- a/drivers/pci/Kconfig
 | ||||
| +++ b/drivers/pci/Kconfig
 | ||||
| @@ -21,6 +21,18 @@ config PCI_MSI
 | ||||
|   | ||||
|  	   If you don't know what to do here, say Y. | ||||
|   | ||||
| +config PCI_MSI_DEFAULT_ON
 | ||||
| +	def_bool y
 | ||||
| +	prompt "Use Message Signaled Interrupts by default"
 | ||||
| +	depends on PCI_MSI
 | ||||
| +	help
 | ||||
| +	  Selecting this option will enable use of PCI MSI where applicable
 | ||||
| +	  by default. Support for MSI can be disabled through the use of the
 | ||||
| +	  pci=nomsi boot flag. Conversely, if this option is not selected,
 | ||||
| +	  support for PCI MSI can be enabled by passing the pci=msi flag.
 | ||||
| +
 | ||||
| +	  If you don't know what to do here, say N.
 | ||||
| +
 | ||||
|  config PCI_DEBUG | ||||
|  	bool "PCI Debugging" | ||||
|  	depends on PCI && DEBUG_KERNEL | ||||
| diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
 | ||||
| index f9cf317..6b0539a 100644
 | ||||
| --- a/drivers/pci/msi.c
 | ||||
| +++ b/drivers/pci/msi.c
 | ||||
| @@ -22,7 +22,11 @@
 | ||||
|  #include "pci.h" | ||||
|  #include "msi.h" | ||||
|   | ||||
| +#ifdef CONFIG_PCI_MSI_DEFAULT_ON
 | ||||
|  static int pci_msi_enable = 1; | ||||
| +#else
 | ||||
| +static int pci_msi_enable = 0;
 | ||||
| +#endif /*CONFIG_PCI_MSI_DEFAULT_ON*/
 | ||||
|   | ||||
|  /* Arch hooks */ | ||||
|   | ||||
| @@ -836,6 +840,11 @@ int pci_msi_enabled(void)
 | ||||
|  } | ||||
|  EXPORT_SYMBOL(pci_msi_enabled); | ||||
|   | ||||
| +void pci_yes_msi(void)
 | ||||
| +{
 | ||||
| +	pci_msi_enable = 1;
 | ||||
| +}
 | ||||
| +
 | ||||
|  void pci_msi_init_pci_dev(struct pci_dev *dev) | ||||
|  { | ||||
|  	INIT_LIST_HEAD(&dev->msi_list); | ||||
| diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
 | ||||
| index 1531f3a..3cb332b 100644
 | ||||
| --- a/drivers/pci/pci.c
 | ||||
| +++ b/drivers/pci/pci.c
 | ||||
| @@ -2983,6 +2983,8 @@ static int __init pci_setup(char *str)
 | ||||
|  		if (*str && (str = pcibios_setup(str)) && *str) { | ||||
|  			if (!strcmp(str, "nomsi")) { | ||||
|  				pci_no_msi(); | ||||
| +			} else if (!strcmp(str, "msi")) {
 | ||||
| +				pci_yes_msi();
 | ||||
|  			} else if (!strcmp(str, "noaer")) { | ||||
|  				pci_no_aer(); | ||||
|  			} else if (!strcmp(str, "nodomains")) { | ||||
| diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
 | ||||
| index 4eb10f4..caa051e 100644
 | ||||
| --- a/drivers/pci/pci.h
 | ||||
| +++ b/drivers/pci/pci.h
 | ||||
| @@ -122,9 +122,11 @@ extern unsigned int pci_pm_d3_delay;
 | ||||
|   | ||||
|  #ifdef CONFIG_PCI_MSI | ||||
|  void pci_no_msi(void); | ||||
| +void pci_yes_msi(void);
 | ||||
|  extern void pci_msi_init_pci_dev(struct pci_dev *dev); | ||||
|  #else | ||||
|  static inline void pci_no_msi(void) { } | ||||
| +static inline void pci_yes_msi(void) { }
 | ||||
|  static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { } | ||||
|  #endif | ||||
|   | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										46
									
								
								linux-2.6-ext4-fix-freeze-deadlock.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								linux-2.6-ext4-fix-freeze-deadlock.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | ||||
| [PATCH] ext4: fix freeze deadlock under IO | ||||
| 
 | ||||
| Commit 6b0310fbf087ad6 caused a regression resulting in deadlocks | ||||
| when freezing a filesystem which had active IO; the vfs_check_frozen | ||||
| level (SB_FREEZE_WRITE) did not let the freeze-related IO syncing | ||||
| through.  Duh. | ||||
| 
 | ||||
| Changing the test to FREEZE_TRANS should let the normal freeze | ||||
| syncing get through the fs, but still block any transactions from | ||||
| starting once the fs is completely frozen. | ||||
| 
 | ||||
| I tested this by running fsstress in the background while periodically | ||||
| snapshotting the fs and running fsck on the result.  I ran into | ||||
| occasional deadlocks, but different ones.  I think this is a | ||||
| fine fix for the problem at hand, and the other deadlocky things | ||||
| will need more investigation. | ||||
| 
 | ||||
| Reported-by: Phillip Susi <psusi@cfl.rr.com> | ||||
| Signed-off-by: Eric Sandeen <sandeen@redhat.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/fs/ext4/super.c b/fs/ext4/super.c
 | ||||
| index 4e8983a..a45ced9 100644
 | ||||
| --- a/fs/ext4/super.c
 | ||||
| +++ b/fs/ext4/super.c
 | ||||
| @@ -241,7 +241,7 @@ handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
 | ||||
|  	if (sb->s_flags & MS_RDONLY) | ||||
|  		return ERR_PTR(-EROFS); | ||||
|   | ||||
| -	vfs_check_frozen(sb, SB_FREEZE_WRITE);
 | ||||
| +	vfs_check_frozen(sb, SB_FREEZE_TRANS);
 | ||||
|  	/* Special case here: if the journal has aborted behind our | ||||
|  	 * backs (eg. EIO in the commit thread), then we still need to | ||||
|  	 * take the FS itself readonly cleanly. */ | ||||
| @@ -3491,7 +3491,7 @@ int ext4_force_commit(struct super_block *sb)
 | ||||
|   | ||||
|  	journal = EXT4_SB(sb)->s_journal; | ||||
|  	if (journal) { | ||||
| -		vfs_check_frozen(sb, SB_FREEZE_WRITE);
 | ||||
| +		vfs_check_frozen(sb, SB_FREEZE_TRANS);
 | ||||
|  		ret = ext4_journal_force_commit(journal); | ||||
|  	} | ||||
|   | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										4
									
								
								linux-2.6-firewire-git-pending.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								linux-2.6-firewire-git-pending.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| # | ||||
| # Patches under review and/or pending inclusion in the linux1394-git | ||||
| # tree (and/or in by the time your read this), which we want... | ||||
| # | ||||
							
								
								
									
										3682
									
								
								linux-2.6-firewire-git-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3682
									
								
								linux-2.6-firewire-git-update.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								linux-2.6-hotfixes.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								linux-2.6-hotfixes.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| fixes: | ||||
| implicit declaration of function kzalloc | ||||
| 
 | ||||
| --- linux-2.6.34.noarch/drivers/usb/serial/qcserial.c~	2010-06-08 15:19:41.000000000 -0400
 | ||||
| +++ linux-2.6.34.noarch/drivers/usb/serial/qcserial.c	2010-06-08 15:19:47.000000000 -0400
 | ||||
| @@ -11,6 +11,7 @@
 | ||||
|   * | ||||
|   */ | ||||
|   | ||||
| +#include <linux/slab.h>
 | ||||
|  #include <linux/tty.h> | ||||
|  #include <linux/tty_flip.h> | ||||
|  #include <linux/usb.h> | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										628
									
								
								linux-2.6-i386-nx-emulation.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										628
									
								
								linux-2.6-i386-nx-emulation.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,628 @@ | ||||
| --- a/arch/x86/include/asm/desc.h
 | ||||
| +++ b/arch/x86/include/asm/desc.h
 | ||||
| @@ -5,6 +5,7 @@
 | ||||
|  #include <asm/ldt.h> | ||||
|  #include <asm/mmu.h> | ||||
|  #include <linux/smp.h> | ||||
| +#include <linux/mm_types.h>
 | ||||
|   | ||||
|  static inline void fill_ldt(struct desc_struct *desc, | ||||
|  			    const struct user_desc *info) | ||||
| @@ -93,6 +94,9 @@ static inline int desc_empty(const void *ptr)
 | ||||
|   | ||||
|  #define load_TLS(t, cpu) native_load_tls(t, cpu) | ||||
|  #define set_ldt native_set_ldt | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +#define load_user_cs_desc native_load_user_cs_desc
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
|   | ||||
|  #define write_ldt_entry(dt, entry, desc)	\ | ||||
|  	native_write_ldt_entry(dt, entry, desc) | ||||
| @@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
 | ||||
|  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); | ||||
|  } | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +static inline void set_user_cs(struct desc_struct *desc, unsigned long limit)
 | ||||
| +{
 | ||||
| +	limit = (limit - 1) / PAGE_SIZE;
 | ||||
| +	desc->a = limit & 0xffff;
 | ||||
| +	desc->b = (limit & 0xf0000) | 0x00c0fb00;
 | ||||
| +}
 | ||||
| +
 | ||||
| +static inline void native_load_user_cs_desc(int cpu, struct mm_struct *mm)
 | ||||
| +{
 | ||||
| +	get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS] = (mm)->context.user_cs;
 | ||||
| +}
 | ||||
| +
 | ||||
| +#define arch_add_exec_range arch_add_exec_range
 | ||||
| +#define arch_remove_exec_range arch_remove_exec_range
 | ||||
| +#define arch_flush_exec_range arch_flush_exec_range
 | ||||
| +extern void arch_add_exec_range(struct mm_struct *mm, unsigned long limit);
 | ||||
| +extern void arch_remove_exec_range(struct mm_struct *mm, unsigned long limit);
 | ||||
| +extern void arch_flush_exec_range(struct mm_struct *mm);
 | ||||
| +#endif /* CONFIG_X86_32 */
 | ||||
| +
 | ||||
|  #endif /* _ASM_X86_DESC_H */ | ||||
| --- a/arch/x86/include/asm/mmu.h
 | ||||
| +++ b/arch/x86/include/asm/mmu.h
 | ||||
| @@ -7,12 +7,19 @@
 | ||||
|  /* | ||||
|   * The x86 doesn't have a mmu context, but | ||||
|   * we put the segment information here. | ||||
| + *
 | ||||
| + * exec_limit is used to track the range PROT_EXEC
 | ||||
| + * mappings span.
 | ||||
|   */ | ||||
|  typedef struct { | ||||
|  	void *ldt; | ||||
|  	int size; | ||||
|  	struct mutex lock; | ||||
|  	void *vdso; | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	struct desc_struct user_cs;
 | ||||
| +	unsigned long exec_limit;
 | ||||
| +#endif
 | ||||
|  } mm_context_t; | ||||
|   | ||||
|  #ifdef CONFIG_SMP | ||||
| --- a/arch/x86/include/asm/paravirt.h
 | ||||
| +++ b/arch/x86/include/asm/paravirt.h
 | ||||
| @@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
 | ||||
|  { | ||||
|  	PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries); | ||||
|  } | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +static inline void load_user_cs_desc(unsigned int cpu, struct mm_struct *mm)
 | ||||
| +{
 | ||||
| +	PVOP_VCALL2(pv_cpu_ops.load_user_cs_desc, cpu, mm);
 | ||||
| +}
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
|  static inline void store_gdt(struct desc_ptr *dtr) | ||||
|  { | ||||
|  	PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr); | ||||
| --- a/arch/x86/include/asm/paravirt_types.h
 | ||||
| +++ b/arch/x86/include/asm/paravirt_types.h
 | ||||
| @@ -118,6 +118,9 @@ struct pv_cpu_ops {
 | ||||
|  	void (*store_gdt)(struct desc_ptr *); | ||||
|  	void (*store_idt)(struct desc_ptr *); | ||||
|  	void (*set_ldt)(const void *desc, unsigned entries); | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	void (*load_user_cs_desc)(int cpu, struct mm_struct *mm);
 | ||||
| +#endif
 | ||||
|  	unsigned long (*store_tr)(void); | ||||
|  	void (*load_tls)(struct thread_struct *t, unsigned int cpu); | ||||
|  #ifdef CONFIG_X86_64 | ||||
| --- a/arch/x86/kernel/cpu/common.c
 | ||||
| +++ b/arch/x86/kernel/cpu/common.c
 | ||||
| @@ -802,6 +802,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
 | ||||
|  	/* Filter out anything that depends on CPUID levels we don't have */ | ||||
|  	filter_cpuid_features(c, true); | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	/*
 | ||||
| +	 *  emulation of NX with segment limits unfortunately means
 | ||||
| +	 *  we have to disable the fast system calls, due to the way that
 | ||||
| +	 *  sysexit clears the segment limits on return.
 | ||||
| +	 *  If we have either disabled exec-shield on the boot command line,
 | ||||
| +	 *  or we have NX, then we don't need to do this.
 | ||||
| +	 */
 | ||||
| +	if (exec_shield != 0) {
 | ||||
| +#ifdef CONFIG_X86_PAE
 | ||||
| +		if (!test_cpu_cap(c, X86_FEATURE_NX))
 | ||||
| +#endif
 | ||||
| +			clear_cpu_cap(c, X86_FEATURE_SEP);
 | ||||
| +	}
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  	/* If the model name is still unset, do table lookup. */ | ||||
|  	if (!c->x86_model_id[0]) { | ||||
|  		const char *p; | ||||
| --- a/arch/x86/kernel/paravirt.c
 | ||||
| +++ b/arch/x86/kernel/paravirt.c
 | ||||
| @@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
 | ||||
|  	.read_tscp = native_read_tscp, | ||||
|  	.load_tr_desc = native_load_tr_desc, | ||||
|  	.set_ldt = native_set_ldt, | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	.load_user_cs_desc = native_load_user_cs_desc,
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
|  	.load_gdt = native_load_gdt, | ||||
|  	.load_idt = native_load_idt, | ||||
|  	.store_gdt = native_store_gdt, | ||||
| --- a/arch/x86/kernel/process_32.c
 | ||||
| +++ b/arch/x86/kernel/process_32.c
 | ||||
| @@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
 | ||||
|  void | ||||
|  start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) | ||||
|  { | ||||
| +	int cpu;
 | ||||
| +
 | ||||
|  	set_user_gs(regs, 0); | ||||
| +
 | ||||
|  	regs->fs		= 0; | ||||
|  	set_fs(USER_DS); | ||||
|  	regs->ds		= __USER_DS; | ||||
| @@ -252,6 +255,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
 | ||||
|  	regs->cs		= __USER_CS; | ||||
|  	regs->ip		= new_ip; | ||||
|  	regs->sp		= new_sp; | ||||
| +
 | ||||
| +	cpu = get_cpu();
 | ||||
| +	load_user_cs_desc(cpu, current->mm);
 | ||||
| +	put_cpu();
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * Free the old FP and other extended state | ||||
|  	 */ | ||||
| @@ -311,6 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
 | ||||
|  	if (preload_fpu) | ||||
|  		prefetch(next->fpu.state); | ||||
|   | ||||
| +	if (next_p->mm)
 | ||||
| +		load_user_cs_desc(cpu, next_p->mm);
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * Reload esp0. | ||||
|  	 */ | ||||
| @@ -404,3 +415,40 @@ unsigned long get_wchan(struct task_struct *p)
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static void modify_cs(struct mm_struct *mm, unsigned long limit)
 | ||||
| +{
 | ||||
| +	mm->context.exec_limit = limit;
 | ||||
| +	set_user_cs(&mm->context.user_cs, limit);
 | ||||
| +	if (mm == current->mm) {
 | ||||
| +		int cpu;
 | ||||
| +
 | ||||
| +		cpu = get_cpu();
 | ||||
| +		load_user_cs_desc(cpu, mm);
 | ||||
| +		put_cpu();
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +
 | ||||
| +void arch_add_exec_range(struct mm_struct *mm, unsigned long limit)
 | ||||
| +{
 | ||||
| +	if (limit > mm->context.exec_limit)
 | ||||
| +		modify_cs(mm, limit);
 | ||||
| +}
 | ||||
| +
 | ||||
| +void arch_remove_exec_range(struct mm_struct *mm, unsigned long old_end)
 | ||||
| +{
 | ||||
| +	struct vm_area_struct *vma;
 | ||||
| +	unsigned long limit = PAGE_SIZE;
 | ||||
| +
 | ||||
| +	if (old_end == mm->context.exec_limit) {
 | ||||
| +		for (vma = mm->mmap; vma; vma = vma->vm_next)
 | ||||
| +			if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
 | ||||
| +				limit = vma->vm_end;
 | ||||
| +		modify_cs(mm, limit);
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +
 | ||||
| +void arch_flush_exec_range(struct mm_struct *mm)
 | ||||
| +{
 | ||||
| +	mm->context.exec_limit = 0;
 | ||||
| +	set_user_cs(&mm->context.user_cs, 0);
 | ||||
| +}
 | ||||
| --- a/arch/x86/kernel/traps.c
 | ||||
| +++ b/arch/x86/kernel/traps.c
 | ||||
| @@ -109,6 +109,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
 | ||||
|  	dec_preempt_count(); | ||||
|  } | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +static inline int
 | ||||
| +__compare_user_cs_desc(const struct desc_struct *desc1,
 | ||||
| +	const struct desc_struct *desc2)
 | ||||
| +{
 | ||||
| +	return ((desc1->limit0 != desc2->limit0) ||
 | ||||
| +		(desc1->limit != desc2->limit) ||
 | ||||
| +		(desc1->base0 != desc2->base0) ||
 | ||||
| +		(desc1->base1 != desc2->base1) ||
 | ||||
| +		(desc1->base2 != desc2->base2));
 | ||||
| +}
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * lazy-check for CS validity on exec-shield binaries:
 | ||||
| + *
 | ||||
| + * the original non-exec stack patch was written by
 | ||||
| + * Solar Designer <solar at openwall.com>. Thanks!
 | ||||
| + */
 | ||||
| +static int
 | ||||
| +check_lazy_exec_limit(int cpu, struct pt_regs *regs, long error_code)
 | ||||
| +{
 | ||||
| +	struct desc_struct *desc1, *desc2;
 | ||||
| +	struct vm_area_struct *vma;
 | ||||
| +	unsigned long limit;
 | ||||
| +
 | ||||
| +	if (current->mm == NULL)
 | ||||
| +		return 0;
 | ||||
| +
 | ||||
| +	limit = -1UL;
 | ||||
| +	if (current->mm->context.exec_limit != -1UL) {
 | ||||
| +		limit = PAGE_SIZE;
 | ||||
| +		spin_lock(¤t->mm->page_table_lock);
 | ||||
| +		for (vma = current->mm->mmap; vma; vma = vma->vm_next)
 | ||||
| +			if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
 | ||||
| +				limit = vma->vm_end;
 | ||||
| +		vma = get_gate_vma(current);
 | ||||
| +		if (vma && (vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
 | ||||
| +			limit = vma->vm_end;
 | ||||
| +		spin_unlock(¤t->mm->page_table_lock);
 | ||||
| +		if (limit >= TASK_SIZE)
 | ||||
| +			limit = -1UL;
 | ||||
| +		current->mm->context.exec_limit = limit;
 | ||||
| +	}
 | ||||
| +	set_user_cs(¤t->mm->context.user_cs, limit);
 | ||||
| +
 | ||||
| +	desc1 = ¤t->mm->context.user_cs;
 | ||||
| +	desc2 = get_cpu_gdt_table(cpu) + GDT_ENTRY_DEFAULT_USER_CS;
 | ||||
| +
 | ||||
| +	if (__compare_user_cs_desc(desc1, desc2)) {
 | ||||
| +		/*
 | ||||
| +		 * The CS was not in sync - reload it and retry the
 | ||||
| +		 * instruction. If the instruction still faults then
 | ||||
| +		 * we won't hit this branch next time around.
 | ||||
| +		 */
 | ||||
| +		if (print_fatal_signals >= 2) {
 | ||||
| +			printk(KERN_ERR "#GPF fixup (%ld[seg:%lx]) at %08lx, CPU#%d.\n",
 | ||||
| +				error_code, error_code/8, regs->ip,
 | ||||
| +				smp_processor_id());
 | ||||
| +			printk(KERN_ERR "exec_limit: %08lx, user_cs: %08x/%08x, CPU_cs: %08x/%08x.\n",
 | ||||
| +				current->mm->context.exec_limit,
 | ||||
| +				desc1->a, desc1->b, desc2->a, desc2->b);
 | ||||
| +		}
 | ||||
| +
 | ||||
| +		load_user_cs_desc(cpu, current->mm);
 | ||||
| +
 | ||||
| +		return 1;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  static void __kprobes | ||||
|  do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, | ||||
|  	long error_code, siginfo_t *info) | ||||
| @@ -265,6 +337,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
 | ||||
|  	if (!user_mode(regs)) | ||||
|  		goto gp_in_kernel; | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +{
 | ||||
| +	int cpu;
 | ||||
| +	int ok;
 | ||||
| +
 | ||||
| +	cpu = get_cpu();
 | ||||
| +	ok = check_lazy_exec_limit(cpu, regs, error_code);
 | ||||
| +	put_cpu();
 | ||||
| +
 | ||||
| +	if (ok)
 | ||||
| +		return;
 | ||||
| +
 | ||||
| +	if (print_fatal_signals) {
 | ||||
| +		printk(KERN_ERR "#GPF(%ld[seg:%lx]) at %08lx, CPU#%d.\n",
 | ||||
| +			error_code, error_code/8, regs->ip, smp_processor_id());
 | ||||
| +		printk(KERN_ERR "exec_limit: %08lx, user_cs: %08x/%08x.\n",
 | ||||
| +			current->mm->context.exec_limit,
 | ||||
| +			current->mm->context.user_cs.a,
 | ||||
| +			current->mm->context.user_cs.b);
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
| +
 | ||||
|  	tsk->thread.error_code = error_code; | ||||
|  	tsk->thread.trap_no = 13; | ||||
|   | ||||
| @@ -792,19 +887,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
 | ||||
|  } | ||||
|   | ||||
|  #ifdef CONFIG_X86_32 | ||||
| +/*
 | ||||
| + * The fixup code for errors in iret jumps to here (iret_exc). It loses
 | ||||
| + * the original trap number and erorr code. The bogus trap 32 and error
 | ||||
| + * code 0 are what the vanilla kernel delivers via:
 | ||||
| + * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
 | ||||
| + *
 | ||||
| + * NOTE: Because of the final "1" in the macro we need to enable interrupts.
 | ||||
| + *
 | ||||
| + * In case of a general protection fault in the iret instruction, we
 | ||||
| + * need to check for a lazy CS update for exec-shield.
 | ||||
| + */
 | ||||
|  dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) | ||||
|  { | ||||
| -	siginfo_t info;
 | ||||
| +	int ok;
 | ||||
| +	int cpu;
 | ||||
| +
 | ||||
|  	local_irq_enable(); | ||||
|   | ||||
| -	info.si_signo = SIGILL;
 | ||||
| -	info.si_errno = 0;
 | ||||
| -	info.si_code = ILL_BADSTK;
 | ||||
| -	info.si_addr = NULL;
 | ||||
| -	if (notify_die(DIE_TRAP, "iret exception",
 | ||||
| -			regs, error_code, 32, SIGILL) == NOTIFY_STOP)
 | ||||
| -		return;
 | ||||
| -	do_trap(32, SIGILL, "iret exception", regs, error_code, &info);
 | ||||
| +	cpu = get_cpu();
 | ||||
| +	ok = check_lazy_exec_limit(cpu, regs, error_code);
 | ||||
| +	put_cpu();
 | ||||
| +
 | ||||
| +	if (!ok && notify_die(DIE_TRAP, "iret exception", regs,
 | ||||
| +		error_code, 32, SIGSEGV) != NOTIFY_STOP) {
 | ||||
| +			siginfo_t info;
 | ||||
| +			info.si_signo = SIGSEGV;
 | ||||
| +			info.si_errno = 0;
 | ||||
| +			info.si_code = ILL_BADSTK;
 | ||||
| +			info.si_addr = 0;
 | ||||
| +			do_trap(32, SIGSEGV, "iret exception", regs, error_code, &info);
 | ||||
| +	}
 | ||||
|  } | ||||
|  #endif | ||||
|   | ||||
| --- a/arch/x86/mm/setup_nx.c
 | ||||
| +++ b/arch/x86/mm/setup_nx.c
 | ||||
| @@ -1,3 +1,4 @@
 | ||||
| +#include <linux/sched.h>
 | ||||
|  #include <linux/spinlock.h> | ||||
|  #include <linux/errno.h> | ||||
|  #include <linux/init.h> | ||||
| @@ -23,6 +24,7 @@ static int __init noexec_setup(char *str)
 | ||||
|  		disable_nx = 0; | ||||
|  	} else if (!strncmp(str, "off", 3)) { | ||||
|  		disable_nx = 1; | ||||
| +		exec_shield = 0;
 | ||||
|  	} | ||||
|  	x86_configure_nx(); | ||||
|  	return 0; | ||||
| @@ -40,6 +42,10 @@ void __cpuinit x86_configure_nx(void)
 | ||||
|  void __init x86_report_nx(void) | ||||
|  { | ||||
|  	if (!cpu_has_nx) { | ||||
| +		if (exec_shield)
 | ||||
| +			printk(KERN_INFO "Using x86 segment limits to approximate NX protection\n");
 | ||||
| +		else
 | ||||
| +
 | ||||
|  		printk(KERN_NOTICE "Notice: NX (Execute Disable) protection " | ||||
|  		       "missing in CPU or disabled in BIOS!\n"); | ||||
|  	} else { | ||||
| --- a/arch/x86/mm/tlb.c
 | ||||
| +++ b/arch/x86/mm/tlb.c
 | ||||
| @@ -6,6 +6,7 @@
 | ||||
|  #include <linux/interrupt.h> | ||||
|  #include <linux/module.h> | ||||
|   | ||||
| +#include <asm/desc.h>
 | ||||
|  #include <asm/tlbflush.h> | ||||
|  #include <asm/mmu_context.h> | ||||
|  #include <asm/cache.h> | ||||
| @@ -131,6 +132,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
 | ||||
|  	union smp_flush_state *f; | ||||
|   | ||||
|  	cpu = smp_processor_id(); | ||||
| +
 | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	if (current->active_mm)
 | ||||
| +		load_user_cs_desc(cpu, current->active_mm);
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * orig_rax contains the negated interrupt vector. | ||||
|  	 * Use that to determine where the sender put the data. | ||||
| --- a/arch/x86/xen/enlighten.c
 | ||||
| +++ b/arch/x86/xen/enlighten.c
 | ||||
| @@ -335,6 +335,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
 | ||||
|  	xen_mc_issue(PARAVIRT_LAZY_CPU); | ||||
|  } | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +static void xen_load_user_cs_desc(int cpu, struct mm_struct *mm)
 | ||||
| +{
 | ||||
| +	void *gdt;
 | ||||
| +	xmaddr_t mgdt;
 | ||||
| +	u64 descriptor;
 | ||||
| +	struct desc_struct user_cs;
 | ||||
| +
 | ||||
| +	gdt = &get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS];
 | ||||
| +	mgdt = virt_to_machine(gdt);
 | ||||
| +
 | ||||
| +	user_cs = mm->context.user_cs;
 | ||||
| +	descriptor = (u64) user_cs.a | ((u64) user_cs.b) << 32;
 | ||||
| +
 | ||||
| +	HYPERVISOR_update_descriptor(mgdt.maddr, descriptor);
 | ||||
| +}
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
| +
 | ||||
|  static void xen_load_gdt(const struct desc_ptr *dtr) | ||||
|  { | ||||
|  	unsigned long va = dtr->address; | ||||
| @@ -961,6 +979,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
 | ||||
|   | ||||
|  	.load_tr_desc = paravirt_nop, | ||||
|  	.set_ldt = xen_set_ldt, | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	.load_user_cs_desc = xen_load_user_cs_desc,
 | ||||
| +#endif /*CONFIG_X86_32*/
 | ||||
|  	.load_gdt = xen_load_gdt, | ||||
|  	.load_idt = xen_load_idt, | ||||
|  	.load_tls = xen_load_tls, | ||||
| --- a/fs/binfmt_elf.c
 | ||||
| +++ b/fs/binfmt_elf.c
 | ||||
| @@ -717,6 +722,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
 | ||||
|  	if (retval) | ||||
|  		goto out_free_dentry; | ||||
|   | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	/*
 | ||||
| +	 * Turn off the CS limit completely if exec-shield disabled or
 | ||||
| +	 * NX active:
 | ||||
| +	 */
 | ||||
| +	if (!exec_shield || executable_stack != EXSTACK_DISABLE_X || (__supported_pte_mask & _PAGE_NX))
 | ||||
| +		arch_add_exec_range(current->mm, -1);
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  	/* OK, This is the point of no return */ | ||||
|  	current->flags &= ~PF_FORKNOEXEC; | ||||
|  	current->mm->def_flags = def_flags; | ||||
| --- a/include/linux/sched.h
 | ||||
| +++ b/include/linux/sched.h
 | ||||
| @@ -101,6 +101,9 @@ struct bio_list;
 | ||||
|  struct fs_struct; | ||||
|  struct perf_event_context; | ||||
|   | ||||
| +extern int exec_shield;
 | ||||
| +extern int print_fatal_signals;
 | ||||
| +
 | ||||
|  /* | ||||
|   * List of flags we want to share for kernel threads, | ||||
|   * if only because they are not used by them anyway. | ||||
| --- a/kernel/sysctl.c
 | ||||
| +++ b/kernel/sysctl.c
 | ||||
| @@ -101,6 +101,17 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
 | ||||
|  #ifndef CONFIG_MMU | ||||
|  extern int sysctl_nr_trim_pages; | ||||
|  #endif | ||||
| +
 | ||||
| +int exec_shield = 1;
 | ||||
| +
 | ||||
| +static int __init setup_exec_shield(char *str)
 | ||||
| +{
 | ||||
| +	get_option(&str, &exec_shield);
 | ||||
| +
 | ||||
| +	return 1;
 | ||||
| +}
 | ||||
| +__setup("exec-shield=", setup_exec_shield);
 | ||||
| +
 | ||||
|  #ifdef CONFIG_BLOCK | ||||
|  extern int blk_iopoll_enabled; | ||||
|  #endif | ||||
| @@ -428,6 +448,16 @@ static struct ctl_table kern_table[] = {
 | ||||
|  		.mode		= 0644, | ||||
|  		.proc_handler	= proc_dointvec, | ||||
|  	}, | ||||
| +#ifdef CONFIG_X86_32
 | ||||
| +	{
 | ||||
| +		.procname	= "exec-shield",
 | ||||
| +		.data		= &exec_shield,
 | ||||
| +		.maxlen		= sizeof(int),
 | ||||
| +		.mode		= 0644,
 | ||||
| +		.proc_handler	= &proc_dointvec,
 | ||||
| +	},
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  #ifdef CONFIG_PROC_SYSCTL | ||||
|  	{ | ||||
|  		.procname	= "tainted", | ||||
| --- b/mm/mmap.c
 | ||||
| +++ b/mm/mmap.c
 | ||||
| @@ -44,6 +45,18 @@
 | ||||
|  #define arch_rebalance_pgtables(addr, len)		(addr) | ||||
|  #endif | ||||
|   | ||||
| +/* No sane architecture will #define these to anything else */
 | ||||
| +#ifndef arch_add_exec_range
 | ||||
| +#define arch_add_exec_range(mm, limit)	do { ; } while (0)
 | ||||
| +#endif
 | ||||
| +#ifndef arch_flush_exec_range
 | ||||
| +#define arch_flush_exec_range(mm)	do { ; } while (0)
 | ||||
| +#endif
 | ||||
| +#ifndef arch_remove_exec_range
 | ||||
| +#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +
 | ||||
|  static void unmap_region(struct mm_struct *mm, | ||||
|  		struct vm_area_struct *vma, struct vm_area_struct *prev, | ||||
|  		unsigned long start, unsigned long end); | ||||
| @@ -388,6 +401,8 @@
 | ||||
|  __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma, | ||||
|  		struct vm_area_struct *prev, struct rb_node *rb_parent) | ||||
|  { | ||||
| +	if (vma->vm_flags & VM_EXEC)
 | ||||
| +		arch_add_exec_range(mm, vma->vm_end);
 | ||||
|  	if (prev) { | ||||
|  		vma->vm_next = prev->vm_next; | ||||
|  		prev->vm_next = vma; | ||||
| @@ -489,6 +504,8 @@
 | ||||
|  	rb_erase(&vma->vm_rb, &mm->mm_rb); | ||||
|  	if (mm->mmap_cache == vma) | ||||
|  		mm->mmap_cache = prev; | ||||
| +	if (vma->vm_flags & VM_EXEC)
 | ||||
| +		arch_remove_exec_range(mm, vma->vm_end);
 | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| @@ -790,6 +807,8 @@
 | ||||
|  		} else					/* cases 2, 5, 7 */ | ||||
|  			err = vma_adjust(prev, prev->vm_start, | ||||
|  				end, prev->vm_pgoff, NULL); | ||||
| +		if (prev->vm_flags & VM_EXEC)
 | ||||
| +			arch_add_exec_range(mm, prev->vm_end);
 | ||||
|  		if (err) | ||||
|  			return NULL; | ||||
|  		return prev; | ||||
| @@ -1966,10 +2075,14 @@
 | ||||
|  	if (new->vm_ops && new->vm_ops->open) | ||||
|  		new->vm_ops->open(new); | ||||
|   | ||||
| -	if (new_below)
 | ||||
| +	if (new_below) {
 | ||||
| +		unsigned long old_end = vma->vm_end;
 | ||||
| +
 | ||||
|  		err = vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff + | ||||
|  			((addr - new->vm_start) >> PAGE_SHIFT), new); | ||||
| -	else
 | ||||
| +		if (vma->vm_flags & VM_EXEC)
 | ||||
| +			arch_remove_exec_range(mm, old_end);
 | ||||
| +	} else
 | ||||
|  		err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); | ||||
|   | ||||
|  	/* Success. */ | ||||
| @@ -2254,6 +2367,7 @@
 | ||||
|   | ||||
|  	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0); | ||||
|  	tlb_finish_mmu(tlb, 0, end); | ||||
| +	arch_flush_exec_range(mm);
 | ||||
|   | ||||
|  	/* | ||||
|  	 * Walk the list again, actually closing and freeing it, | ||||
| --- a/mm/mprotect.c
 | ||||
| +++ b/mm/mprotect.c
 | ||||
| @@ -25,9 +25,14 @@
 | ||||
|  #include <linux/perf_event.h> | ||||
|  #include <asm/uaccess.h> | ||||
|  #include <asm/pgtable.h> | ||||
| +#include <asm/pgalloc.h>
 | ||||
|  #include <asm/cacheflush.h> | ||||
|  #include <asm/tlbflush.h> | ||||
|   | ||||
| +#ifndef arch_remove_exec_range
 | ||||
| +#define arch_remove_exec_range(mm, limit)      do { ; } while (0)
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  #ifndef pgprot_modify | ||||
|  static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) | ||||
|  { | ||||
| @@ -138,7 +143,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
 | ||||
|  	struct mm_struct *mm = vma->vm_mm; | ||||
|  	unsigned long oldflags = vma->vm_flags; | ||||
|  	long nrpages = (end - start) >> PAGE_SHIFT; | ||||
| -	unsigned long charged = 0;
 | ||||
| +	unsigned long charged = 0, old_end = vma->vm_end;
 | ||||
|  	pgoff_t pgoff; | ||||
|  	int error; | ||||
|  	int dirty_accountable = 0; | ||||
| @@ -203,6 +208,9 @@ success:
 | ||||
|  		dirty_accountable = 1; | ||||
|  	} | ||||
|   | ||||
| +	if (oldflags & VM_EXEC)
 | ||||
| +		arch_remove_exec_range(current->mm, old_end);
 | ||||
| +
 | ||||
|  	mmu_notifier_invalidate_range_start(mm, start, end); | ||||
|  	if (is_vm_hugetlb_page(vma)) | ||||
|  		hugetlb_change_protection(vma, start, end, vma->vm_page_prot); | ||||
							
								
								
									
										32
									
								
								linux-2.6-input-kill-stupid-messages.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								linux-2.6-input-kill-stupid-messages.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| From b2c6d55b2351152696aafb8c9bf3ec8968acf77c Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@phobos.i.jkkm.org> | ||||
| Date: Mon, 29 Mar 2010 23:59:58 -0400 | ||||
| Subject: linux-2.6-input-kill-stupid-messages | ||||
| 
 | ||||
| ---
 | ||||
|  drivers/input/keyboard/atkbd.c |    5 +++++ | ||||
|  1 files changed, 5 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
 | ||||
| index d358ef8..38db098 100644
 | ||||
| --- a/drivers/input/keyboard/atkbd.c
 | ||||
| +++ b/drivers/input/keyboard/atkbd.c
 | ||||
| @@ -425,11 +426,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
 | ||||
|  		goto out; | ||||
|  	case ATKBD_RET_ACK: | ||||
|  	case ATKBD_RET_NAK: | ||||
| +#if 0
 | ||||
| +		/* Quite a few key switchers and other tools trigger this
 | ||||
| +		 * and it confuses people who can do nothing about it */
 | ||||
|  		if (printk_ratelimit()) | ||||
|  			dev_warn(&serio->dev, | ||||
|  				 "Spurious %s on %s. " | ||||
|  				 "Some program might be trying access hardware directly.\n", | ||||
|  				 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys); | ||||
| +#endif
 | ||||
|  		goto out; | ||||
|  	case ATKBD_RET_ERR: | ||||
|  		atkbd->err_count++; | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										78
									
								
								linux-2.6-intel-iommu-igfx.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								linux-2.6-intel-iommu-igfx.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | ||||
| Subject: [PATCH] [intel_iommu] Default to igfx_off | ||||
| From: drago01 <drago01@gmail.com> | ||||
| To: fedora-kernel-list <fedora-kernel-list@redhat.com> | ||||
| 
 | ||||
| This option seems to causes way to many issues, it is | ||||
| being investigated by Intel's chipset team for months now and | ||||
| we still don't have any outcome. | ||||
| 
 | ||||
| The results so far are "black screen when starting X", | ||||
| "system hangs when using GL", "system does not resume". | ||||
| 
 | ||||
| The patch adds an intel_iommu=igfx_on option, which makes it opt in, | ||||
| rather than opt out. | ||||
| 
 | ||||
| Signed-off-by: Adel Gadllah <adel.gadllah@gmail.com> | ||||
| Reviewed-by: Adam Jackson <ajax@redhat.com> | ||||
| ---
 | ||||
|  Documentation/kernel-parameters.txt |   11 +++++------ | ||||
|  drivers/pci/intel-iommu.c           |    9 +++++---- | ||||
|  2 files changed, 10 insertions(+), 10 deletions(-) | ||||
| 
 | ||||
| diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
 | ||||
| index e7848a0..9914485 100644
 | ||||
| --- a/Documentation/kernel-parameters.txt
 | ||||
| +++ b/Documentation/kernel-parameters.txt
 | ||||
| @@ -992,12 +992,11 @@ and is between 256 and 4096 characters. It is defined in the file
 | ||||
|  			Enable intel iommu driver. | ||||
|  		off | ||||
|  			Disable intel iommu driver. | ||||
| -		igfx_off [Default Off]
 | ||||
| -			By default, gfx is mapped as normal device. If a gfx
 | ||||
| -			device has a dedicated DMAR unit, the DMAR unit is
 | ||||
| -			bypassed by not enabling DMAR with this option. In
 | ||||
| -			this case, gfx device will use physical address for
 | ||||
| -			DMA.
 | ||||
| +		igfx_on [Default Off]
 | ||||
| +			By default, the gfx's DMAR unit is bypassed by not enabling
 | ||||
| +			DMAR with this option. So the gfx device will use physical
 | ||||
| +			address for DMA. When this option is enabled it the gfx is
 | ||||
| +			mapped as normal device.
 | ||||
|  		forcedac [x86_64] | ||||
|  			With this option iommu will not optimize to look | ||||
|  			for io virtual address below 32 bit forcing dual | ||||
| diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
 | ||||
| index 4173125..8f36786 100644
 | ||||
| --- a/drivers/pci/intel-iommu.c
 | ||||
| +++ b/drivers/pci/intel-iommu.c
 | ||||
| @@ -340,7 +340,8 @@ int dmar_disabled = 0;
 | ||||
|  int dmar_disabled = 1; | ||||
|  #endif /*CONFIG_DMAR_DEFAULT_ON*/ | ||||
| 
 | ||||
| -static int dmar_map_gfx = 1;
 | ||||
| +/* disabled by default; causes way too many issues */
 | ||||
| +static int dmar_map_gfx = 0;
 | ||||
|  static int dmar_forcedac; | ||||
|  static int intel_iommu_strict; | ||||
| 
 | ||||
| @@ -361,10 +362,10 @@ static int __init intel_iommu_setup(char *str)
 | ||||
|  		} else if (!strncmp(str, "off", 3)) { | ||||
|  			dmar_disabled = 1; | ||||
|  			printk(KERN_INFO "Intel-IOMMU: disabled\n"); | ||||
| -		} else if (!strncmp(str, "igfx_off", 8)) {
 | ||||
| -			dmar_map_gfx = 0;
 | ||||
| +		} else if (!strncmp(str, "igfx_on", 7)) {
 | ||||
| +			dmar_map_gfx = 1;
 | ||||
|  			printk(KERN_INFO | ||||
| -				"Intel-IOMMU: disable GFX device mapping\n");
 | ||||
| +				"Intel-IOMMU: enabled GFX device mapping\n");
 | ||||
|  		} else if (!strncmp(str, "forcedac", 8)) { | ||||
|  			printk(KERN_INFO | ||||
|  				"Intel-IOMMU: Forcing DAC for PCI devices\n"); | ||||
| -- 
 | ||||
| 1.6.6.1 | ||||
| _______________________________________________ | ||||
| kernel mailing list | ||||
| kernel@lists.fedoraproject.org | ||||
| https://admin.fedoraproject.org/mailman/listinfo/kernel | ||||
| 
 | ||||
							
								
								
									
										57
									
								
								linux-2.6-makefile-after_link.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								linux-2.6-makefile-after_link.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| diff --git a/Makefile b/Makefile
 | ||||
| index f908acc..960ff6f 100644
 | ||||
| --- a/Makefile
 | ||||
| +++ b/Makefile
 | ||||
| @@ -746,6 +746,10 @@ quiet_cmd_vmlinux__ ?= LD      $@
 | ||||
|        --start-group $(vmlinux-main) --end-group                  \ | ||||
|        $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^) | ||||
|   | ||||
| +ifdef AFTER_LINK
 | ||||
| +cmd_vmlinux__ += ; $(AFTER_LINK)
 | ||||
| +endif
 | ||||
| +
 | ||||
|  # Generate new vmlinux version | ||||
|  quiet_cmd_vmlinux_version = GEN     .version | ||||
|        cmd_vmlinux_version = set -e;                     \ | ||||
| diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile
 | ||||
| index 51ead52..ad21273 100644
 | ||||
| --- a/arch/powerpc/kernel/vdso32/Makefile
 | ||||
| +++ b/arch/powerpc/kernel/vdso32/Makefile
 | ||||
| @@ -41,7 +41,8 @@ $(obj-vdso32): %.o: %.S
 | ||||
|   | ||||
|  # actual build commands | ||||
|  quiet_cmd_vdso32ld = VDSO32L $@ | ||||
| -      cmd_vdso32ld = $(CROSS32CC) $(c_flags) -Wl,-T $^ -o $@
 | ||||
| +      cmd_vdso32ld = $(CROSS32CC) $(c_flags) -Wl,-T $^ -o $@ \
 | ||||
| +		     $(if $(AFTER_LINK),; $(AFTER_LINK))
 | ||||
|  quiet_cmd_vdso32as = VDSO32A $@ | ||||
|        cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< | ||||
|   | ||||
| diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile
 | ||||
| index 79da65d..f11c21b 100644
 | ||||
| --- a/arch/powerpc/kernel/vdso64/Makefile
 | ||||
| +++ b/arch/powerpc/kernel/vdso64/Makefile
 | ||||
| @@ -36,7 +36,8 @@ $(obj-vdso64): %.o: %.S
 | ||||
|   | ||||
|  # actual build commands | ||||
|  quiet_cmd_vdso64ld = VDSO64L $@ | ||||
| -      cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
 | ||||
| +      cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \
 | ||||
| +		     $(if $(AFTER_LINK),; $(AFTER_LINK))
 | ||||
|  quiet_cmd_vdso64as = VDSO64A $@ | ||||
|        cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< | ||||
|   | ||||
| diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
 | ||||
| index 6b4ffed..cbc3d05 100644
 | ||||
| --- a/arch/x86/vdso/Makefile
 | ||||
| +++ b/arch/x86/vdso/Makefile
 | ||||
| @@ -120,7 +120,8 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
 | ||||
|  quiet_cmd_vdso = VDSO    $@ | ||||
|        cmd_vdso = $(CC) -nostdlib -o $@ \ | ||||
|  		       $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ | ||||
| -		       -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
 | ||||
| +		       -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) \
 | ||||
| +		 $(if $(AFTER_LINK),; $(AFTER_LINK))
 | ||||
|   | ||||
|  VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) | ||||
|  GCOV_PROFILE := n | ||||
							
								
								
									
										124
									
								
								linux-2.6-selinux-mprotect-checks.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								linux-2.6-selinux-mprotect-checks.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,124 @@ | ||||
| This needs a fixed toolchain, and a userspace rebuild to work. | ||||
| For these reasons, it's had difficulty getting upstream. | ||||
| 
 | ||||
| ie, Fedora has a new enough toolchain, and has been rebuilt, so we don't need | ||||
| the ifdefs.  Other distros don't/haven't, and this patch would break them | ||||
| if pushed upstream. | ||||
| 
 | ||||
| 
 | ||||
| Subject: [Fwd: Re: [PATCH] Disable execmem for sparc] | ||||
| From: Stephen Smalley <sds@tycho.nsa.gov> | ||||
| To: Dave Jones <davej@redhat.com> | ||||
| Date: Wed, 28 Apr 2010 16:04:56 -0400 | ||||
| Message-Id: <1272485096.6013.326.camel@moss-pluto.epoch.ncsc.mil> | ||||
| 
 | ||||
| -------- Forwarded Message --------
 | ||||
| From: Stephen Smalley <sds@tycho.nsa.gov> | ||||
| To: David Miller <davem@davemloft.net> | ||||
| Cc: tcallawa@redhat.com, dennis@ausil.us, sparclinux@vger.kernel.org, dgilmore@redhat.com, jmorris@namei.org, eparis@parisplace.org | ||||
| Subject: Re: [PATCH] Disable execmem for sparc | ||||
| Date: Wed, 28 Apr 2010 15:57:57 -0400 | ||||
| 
 | ||||
| On Tue, 2010-04-27 at 11:47 -0700, David Miller wrote: | ||||
| > From: "Tom \"spot\" Callaway" <tcallawa@redhat.com>
 | ||||
| > Date: Tue, 27 Apr 2010 14:20:21 -0400
 | ||||
| > 
 | ||||
| > > [root@apollo ~]$ cat /proc/2174/maps
 | ||||
| > > 00010000-00014000 r-xp 00000000 fd:00 15466577
 | ||||
| > >  /sbin/mingetty
 | ||||
| > > 00022000-00024000 rwxp 00002000 fd:00 15466577
 | ||||
| > >  /sbin/mingetty
 | ||||
| > > 00024000-00046000 rwxp 00000000 00:00 0
 | ||||
| > >  [heap]
 | ||||
| > 
 | ||||
| > SELINUX probably barfs on the executable heap, the PLT is in the HEAP
 | ||||
| > just like powerpc32 and that's why VM_DATA_DEFAULT_FLAGS has to set
 | ||||
| > both executable and writable.
 | ||||
| > 
 | ||||
| > You also can't remove the CONFIG_PPC32 ifdefs in selinux, since
 | ||||
| > because of the VM_DATA_DEFAULT_FLAGS setting used still in that arch,
 | ||||
| > the heap will always have executable permission, just like sparc does.
 | ||||
| > You have to support those binaries forever, whether you like it or not.
 | ||||
| > 
 | ||||
| > Let's just replace the CONFIG_PPC32 ifdef in SELINUX with CONFIG_PPC32
 | ||||
| > || CONFIG_SPARC as in Tom's original patch and let's be done with
 | ||||
| > this.
 | ||||
| > 
 | ||||
| > In fact I would go through all the arch/ header files and check the
 | ||||
| > VM_DATA_DEFAULT_FLAGS settings and add the necessary new ifdefs to the
 | ||||
| > SELINUX code so that other platforms don't have the pain of having to
 | ||||
| > go through this process too.
 | ||||
| 
 | ||||
| To avoid maintaining per-arch ifdefs, it seems that we could just | ||||
| directly use (VM_DATA_DEFAULT_FLAGS & VM_EXEC) as the basis for deciding | ||||
| whether to enable or disable these checks.   VM_DATA_DEFAULT_FLAGS isn't | ||||
| constant on some architectures but instead depends on | ||||
| current->personality, but we want this applied uniformly.  So we'll just | ||||
| use the initial task state to determine whether or not to enable these | ||||
| checks. | ||||
| 
 | ||||
| Signed-off-by:  Stephen Smalley <sds@tycho.nsa.gov> | ||||
| 
 | ||||
| diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
 | ||||
| index ebee467..a03fd74 100644
 | ||||
| --- a/security/selinux/hooks.c
 | ||||
| +++ b/security/selinux/hooks.c
 | ||||
| @@ -2999,13 +2999,15 @@ static int selinux_file_ioctl(struct file *file, unsigned int cmd,
 | ||||
|  	return file_has_perm(cred, file, av); | ||||
|  } | ||||
|   | ||||
| +static int default_noexec;
 | ||||
| +
 | ||||
|  static int file_map_prot_check(struct file *file, unsigned long prot, int shared) | ||||
|  { | ||||
|  	const struct cred *cred = current_cred(); | ||||
|  	int rc = 0; | ||||
|   | ||||
| -#ifndef CONFIG_PPC32
 | ||||
| -	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
 | ||||
| +	if (default_noexec &&
 | ||||
| +	    (prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
 | ||||
|  		/* | ||||
|  		 * We are making executable an anonymous mapping or a | ||||
|  		 * private file mapping that will also be writable. | ||||
| @@ -3015,7 +3017,6 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
 | ||||
|  		if (rc) | ||||
|  			goto error; | ||||
|  	} | ||||
| -#endif
 | ||||
|   | ||||
|  	if (file) { | ||||
|  		/* read access is always possible with a mapping */ | ||||
| @@ -3076,8 +3077,8 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
 | ||||
|  	if (selinux_checkreqprot) | ||||
|  		prot = reqprot; | ||||
|   | ||||
| -#ifndef CONFIG_PPC32
 | ||||
| -	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
 | ||||
| +	if (default_noexec &&
 | ||||
| +	    (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
 | ||||
|  		int rc = 0; | ||||
|  		if (vma->vm_start >= vma->vm_mm->start_brk && | ||||
|  		    vma->vm_end <= vma->vm_mm->brk) { | ||||
| @@ -3099,7 +3100,6 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
 | ||||
|  		if (rc) | ||||
|  			return rc; | ||||
|  	} | ||||
| -#endif
 | ||||
|   | ||||
|  	return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED); | ||||
|  } | ||||
| @@ -5662,6 +5662,8 @@ static __init int selinux_init(void)
 | ||||
|  	/* Set the security state for the initial task. */ | ||||
|  	cred_init_security(); | ||||
|   | ||||
| +	default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
 | ||||
| +
 | ||||
|  	sel_inode_cache = kmem_cache_create("selinux_inode_security", | ||||
|  					    sizeof(struct inode_security_struct), | ||||
|  					    0, SLAB_PANIC, NULL); | ||||
| 
 | ||||
| -- 
 | ||||
| Stephen Smalley | ||||
| National Security Agency | ||||
| 
 | ||||
							
								
								
									
										70
									
								
								linux-2.6-serial-460800.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								linux-2.6-serial-460800.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
 | ||||
| index 2209620..659c1bb 100644
 | ||||
| --- a/drivers/serial/8250.c
 | ||||
| +++ b/drivers/serial/8250.c
 | ||||
| @@ -7,6 +7,9 @@
 | ||||
|   * | ||||
|   *  Copyright (C) 2001 Russell King. | ||||
|   * | ||||
| + *  2005/09/16: Enabled higher baud rates for 16C95x.
 | ||||
| + *		(Mathias Adam <a2@adamis.de>)
 | ||||
| + *
 | ||||
|   * 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 | ||||
| @@ -2227,6 +2230,14 @@ static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int
 | ||||
|  	else if ((port->flags & UPF_MAGIC_MULTIPLIER) && | ||||
|  		 baud == (port->uartclk/8)) | ||||
|  		quot = 0x8002; | ||||
| +	/*
 | ||||
| +	 * For 16C950s UART_TCR is used in combination with divisor==1
 | ||||
| +	 * to achieve baud rates up to baud_base*4.
 | ||||
| +	 */
 | ||||
| +	else if ((port->type == PORT_16C950) &&
 | ||||
| +		 baud > (port->uartclk/16))
 | ||||
| +		quot = 1;
 | ||||
| +
 | ||||
|  	else | ||||
|  		quot = uart_get_divisor(port, baud); | ||||
|   | ||||
| @@ -2240,7 +2251,7 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
 | ||||
|  	struct uart_8250_port *up = (struct uart_8250_port *)port; | ||||
|  	unsigned char cval, fcr = 0; | ||||
|  	unsigned long flags; | ||||
| -	unsigned int baud, quot;
 | ||||
| +	unsigned int baud, quot, max_baud;
 | ||||
|   | ||||
|  	switch (termios->c_cflag & CSIZE) { | ||||
|  	case CS5: | ||||
| @@ -2272,9 +2283,10 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
 | ||||
|  	/* | ||||
|  	 * Ask the core to calculate the divisor for us. | ||||
|  	 */ | ||||
| +	max_baud = (up->port.type == PORT_16C950 ? port->uartclk/4 : port->uartclk/16);
 | ||||
|  	baud = uart_get_baud_rate(port, termios, old, | ||||
|  				  port->uartclk / 16 / 0xffff, | ||||
| -				  port->uartclk / 16);
 | ||||
| +				  max_baud);
 | ||||
|  	quot = serial8250_get_divisor(port, baud); | ||||
|   | ||||
|  	/* | ||||
| @@ -2311,6 +2323,19 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
 | ||||
|  	spin_lock_irqsave(&up->port.lock, flags); | ||||
|   | ||||
|  	/* | ||||
| +	 * 16C950 supports additional prescaler ratios between 1:16 and 1:4
 | ||||
| +	 * thus increasing max baud rate to uartclk/4.
 | ||||
| +	 */
 | ||||
| +	if (up->port.type == PORT_16C950) {
 | ||||
| +		if (baud == port->uartclk/4)
 | ||||
| +			serial_icr_write(up, UART_TCR, 0x4);
 | ||||
| +		else if (baud == port->uartclk/8)
 | ||||
| +			serial_icr_write(up, UART_TCR, 0x8);
 | ||||
| +		else
 | ||||
| +			serial_icr_write(up, UART_TCR, 0);
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	/*
 | ||||
|  	 * Update the per-port timeout. | ||||
|  	 */ | ||||
|  	uart_update_timeout(port, termios->c_cflag, baud); | ||||
							
								
								
									
										25
									
								
								linux-2.6-silence-acpi-blacklist.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								linux-2.6-silence-acpi-blacklist.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| diff -up linux-2.6.26.noarch/drivers/acpi/blacklist.c.jx linux-2.6.26.noarch/drivers/acpi/blacklist.c
 | ||||
| --- linux-2.6.26.noarch/drivers/acpi/blacklist.c.jx	2008-07-13 17:51:29.000000000 -0400
 | ||||
| +++ linux-2.6.26.noarch/drivers/acpi/blacklist.c	2008-08-12 14:21:39.000000000 -0400
 | ||||
| @@ -81,18 +81,18 @@ static int __init blacklist_by_year(void
 | ||||
|   | ||||
|  	/* Doesn't exist? Likely an old system */ | ||||
|  	if (!dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL)) { | ||||
| -		printk(KERN_ERR PREFIX "no DMI BIOS year, "
 | ||||
| +		printk(KERN_INFO PREFIX "no DMI BIOS year, "
 | ||||
|  			"acpi=force is required to enable ACPI\n" ); | ||||
|  		return 1; | ||||
|  	} | ||||
|  	/* 0? Likely a buggy new BIOS */ | ||||
|  	if (year == 0) { | ||||
| -		printk(KERN_ERR PREFIX "DMI BIOS year==0, "
 | ||||
| +		printk(KERN_INFO PREFIX "DMI BIOS year==0, "
 | ||||
|  			"assuming ACPI-capable machine\n" ); | ||||
|  		return 0; | ||||
|  	} | ||||
|  	if (year < CONFIG_ACPI_BLACKLIST_YEAR) { | ||||
| -		printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), "
 | ||||
| +		printk(KERN_INFO PREFIX "BIOS age (%d) fails cutoff (%d), "
 | ||||
|  		       "acpi=force is required to enable ACPI\n", | ||||
|  		       year, CONFIG_ACPI_BLACKLIST_YEAR); | ||||
|  		return 1; | ||||
							
								
								
									
										42
									
								
								linux-2.6-silence-fbcon-logo.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								linux-2.6-silence-fbcon-logo.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
 | ||||
| index 1657b96..4c5c2be 100644
 | ||||
| --- a/drivers/video/console/fbcon.c
 | ||||
| +++ b/drivers/video/console/fbcon.c
 | ||||
| @@ -631,13 +631,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
 | ||||
|  		kfree(save); | ||||
|  	} | ||||
|   | ||||
| -	if (logo_lines > vc->vc_bottom) {
 | ||||
| -		logo_shown = FBCON_LOGO_CANSHOW;
 | ||||
| -		printk(KERN_INFO
 | ||||
| -		       "fbcon_init: disable boot-logo (boot-logo bigger than screen).\n");
 | ||||
| -	} else if (logo_shown != FBCON_LOGO_DONTSHOW) {
 | ||||
| -		logo_shown = FBCON_LOGO_DRAW;
 | ||||
| -		vc->vc_top = logo_lines;
 | ||||
| +	if (logo_shown != FBCON_LOGO_DONTSHOW) {
 | ||||
| +		if (logo_lines > vc->vc_bottom) {
 | ||||
| +			logo_shown = FBCON_LOGO_CANSHOW;
 | ||||
| +			printk(KERN_INFO
 | ||||
| +			       "fbcon_init: disable boot-logo (boot-logo bigger than screen).\n");
 | ||||
| +		} else {
 | ||||
| +			logo_shown = FBCON_LOGO_DRAW;
 | ||||
| +			vc->vc_top = logo_lines;
 | ||||
| +		}
 | ||||
|  	} | ||||
|  } | ||||
|  #endif /* MODULE */ | ||||
| @@ -3489,6 +3491,14 @@ static int __init fb_console_init(void)
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static int __init quiet_logo(char *str)
 | ||||
| +{
 | ||||
| +	logo_shown = FBCON_LOGO_DONTSHOW;
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| +
 | ||||
| +early_param("quiet", quiet_logo);
 | ||||
| +
 | ||||
|  module_init(fb_console_init); | ||||
|   | ||||
|  #ifdef MODULE | ||||
							
								
								
									
										89
									
								
								linux-2.6-silence-noise.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								linux-2.6-silence-noise.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| --- linux-2.6.26.noarch/drivers/base/power/main.c~	2008-08-22 20:57:57.000000000 -0400
 | ||||
| +++ linux-2.6.26.noarch/drivers/base/power/main.c	2008-08-22 20:58:05.000000000 -0400
 | ||||
| @@ -69,9 +69,6 @@ void device_pm_unlock(void)
 | ||||
|   */ | ||||
|  void device_pm_add(struct device *dev) | ||||
|  { | ||||
| -	pr_debug("PM: Adding info for %s:%s\n",
 | ||||
| -		 dev->bus ? dev->bus->name : "No Bus",
 | ||||
| -		 kobject_name(&dev->kobj));
 | ||||
|  	mutex_lock(&dpm_list_mtx); | ||||
|  	if (dev->parent) { | ||||
|  		if (dev->parent->power.status >= DPM_SUSPENDING) | ||||
| From b4e96f34c17e5a79cd28774cc722bb33e7e02c6e Mon Sep 17 00:00:00 2001 | ||||
| From: Peter Jones <pjones@redhat.com> | ||||
| Date: Thu, 25 Sep 2008 16:23:33 -0400 | ||||
| Subject: [PATCH] Don't print an error message just because there's no i8042 chip. | ||||
| 
 | ||||
| Some systems, such as EFI-based Apple systems, won't necessarily have an | ||||
| i8042 to initialize.  We shouldn't be printing an error message in this | ||||
| case, since not detecting the chip is the correct behavior. | ||||
| ---
 | ||||
|  drivers/input/serio/i8042.c |    4 +--- | ||||
|  1 files changed, 1 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
 | ||||
| index 170f71e..4f3e632 100644
 | ||||
| --- a/drivers/input/serio/i8042.c
 | ||||
| +++ b/drivers/input/serio/i8042.c
 | ||||
| @@ -701,10 +701,8 @@ static int __devinit i8042_check_aux(void)
 | ||||
|   | ||||
|  static int i8042_controller_check(void) | ||||
|  { | ||||
| -	if (i8042_flush() == I8042_BUFFER_SIZE) {
 | ||||
| -		printk(KERN_ERR "i8042.c: No controller found.\n");
 | ||||
| +	if (i8042_flush() == I8042_BUFFER_SIZE)
 | ||||
|  		return -ENODEV; | ||||
| -	}
 | ||||
|   | ||||
|  	return 0; | ||||
|  } | ||||
| -- 
 | ||||
| 1.6.0.1 | ||||
| 
 | ||||
| Socket fuzzers like sfuzz will trigger this printk a lot, even though it's | ||||
| ratelimited. It isn't particularly useful, so just remove it. | ||||
| 
 | ||||
| Signed-off-by: Dave Jones <davej@redhat.com> | ||||
| 
 | ||||
| --- linux-2.6.27.noarch/net/can/af_can.c~	2008-12-11 16:53:48.000000000 -0500
 | ||||
| +++ linux-2.6.27.noarch/net/can/af_can.c	2008-12-11 16:54:42.000000000 -0500
 | ||||
| @@ -134,13 +134,9 @@ static int can_create(struct net *net, s
 | ||||
|  		err = request_module("can-proto-%d", protocol); | ||||
|   | ||||
|  		/* | ||||
| -		 * In case of error we only print a message but don't
 | ||||
| -		 * return the error code immediately.  Below we will
 | ||||
| -		 * return -EPROTONOSUPPORT
 | ||||
| +		 * In case of error we don't return the error code immediately.
 | ||||
| +		 * Below we will return -EPROTONOSUPPORT
 | ||||
|  		 */ | ||||
| -		if (err && printk_ratelimit())
 | ||||
| -			printk(KERN_ERR "can: request_module "
 | ||||
| -			       "(can-proto-%d) failed.\n", protocol);
 | ||||
|  	} | ||||
|  #endif | ||||
|   | ||||
| Some devices (like the nuforce udac) spew this quite a lot. | ||||
| This patch kinda sucks, but it'll shut things up for now. | ||||
| 
 | ||||
| Probably not an upstream candidate. I suspect the answer would be  | ||||
| "don't turn SND_DEBUG then" | ||||
| 
 | ||||
| --- linux-2.6.34.noarch/sound/usb/clock.c~	2010-07-16 22:11:41.000000000 -0400
 | ||||
| +++ linux-2.6.34.noarch/sound/usb/clock.c	2010-07-16 22:15:21.000000000 -0400
 | ||||
| @@ -212,8 +212,13 @@ static int set_sample_rate_v1(struct snd
 | ||||
|   | ||||
|  	/* if endpoint doesn't have sampling rate control, bail out */ | ||||
|  	if (!(fmt->attributes & UAC_EP_CS_ATTR_SAMPLE_RATE)) { | ||||
| -		snd_printk(KERN_WARNING "%d:%d:%d: endpoint lacks sample rate attribute bit, cannot set.\n",
 | ||||
| +		static int once;
 | ||||
| +
 | ||||
| +		if (!once) {
 | ||||
| +			snd_printk(KERN_WARNING "%d:%d:%d: endpoint lacks sample rate attribute bit, cannot set.\n",
 | ||||
|  				   dev->devnum, iface, fmt->altsetting); | ||||
| +			once = 1;
 | ||||
| +		}
 | ||||
|  		return 0; | ||||
|  	} | ||||
|   | ||||
							
								
								
									
										35
									
								
								linux-2.6-sparc-selinux-mprotect-checks.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								linux-2.6-sparc-selinux-mprotect-checks.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| diff -up linux-2.6.24.sparc64/security/selinux/hooks.c.BAD linux-2.6.24.sparc64/security/selinux/hooks.c
 | ||||
| --- linux-2.6.24.sparc64/security/selinux/hooks.c.BAD	2008-03-21 14:28:06.000000000 -0400
 | ||||
| +++ linux-2.6.24.sparc64/security/selinux/hooks.c	2008-03-21 14:29:10.000000000 -0400
 | ||||
| @@ -3018,6 +3018,7 @@ static int file_map_prot_check(struct fi
 | ||||
|  	const struct cred *cred = current_cred(); | ||||
|  	int rc = 0; | ||||
|   | ||||
| +#ifndef CONFIG_SPARC
 | ||||
|  	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) { | ||||
|  		/* | ||||
|  		 * We are making executable an anonymous mapping or a | ||||
| @@ -3028,6 +3029,7 @@ static int file_map_prot_check(struct fi
 | ||||
|  		if (rc) | ||||
|  			goto error; | ||||
|  	} | ||||
| +#endif
 | ||||
|   | ||||
|  	if (file) { | ||||
|  		/* read access is always possible with a mapping */ | ||||
| @@ -3081,6 +3081,7 @@ static int selinux_file_mprotect(struct 
 | ||||
|  	if (selinux_checkreqprot) | ||||
|  		prot = reqprot; | ||||
|   | ||||
| +#ifndef CONFIG_SPARC
 | ||||
|  	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) { | ||||
|  		rc = 0; | ||||
|  		if (vma->vm_start >= vma->vm_mm->start_brk && | ||||
| @@ -3103,6 +3103,7 @@ static int selinux_file_mprotect(struct 
 | ||||
|  		if (rc) | ||||
|  			return rc; | ||||
|  	} | ||||
| +#endif
 | ||||
|   | ||||
|  	return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED); | ||||
|  } | ||||
							
								
								
									
										1
									
								
								linux-2.6-upstream-reverts.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								linux-2.6-upstream-reverts.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| nil | ||||
							
								
								
									
										161
									
								
								linux-2.6-v4l-dvb-add-kworld-a340-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								linux-2.6-v4l-dvb-add-kworld-a340-support.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | ||||
| From c34c78838f02693a70808e38309629e85aa50266 Mon Sep 17 00:00:00 2001 | ||||
| From: Jarod Wilson <jarod@redhat.com> | ||||
| Date: Thu, 20 May 2010 10:03:13 -0400 | ||||
| Subject: [PATCH] dvb: add support for kworld 340u and ub435-q to em28xx-dvb | ||||
| 
 | ||||
| This adds support for the KWorld PlusTV 340U and KWorld UB345-Q ATSC | ||||
| sticks, which are really the same device. The sticks have an eMPIA | ||||
| em2870 usb bridge chipset, an LG Electronics LGDT3304 ATSC/QAM | ||||
| demodulator and an NXP TDA18271HD tuner -- early versions of the 340U | ||||
| have a a TDA18271HD/C1, later models and the UB435-Q have a C2. | ||||
| 
 | ||||
| The stick has been tested succesfully with both VSB_8 and QAM_256 signals. | ||||
| Its using lgdt3304 support added to the lgdt3305 driver by a prior patch, | ||||
| rather than the current lgdt3304 driver, as its severely lacking in | ||||
| functionality by comparison (see said patch for details). | ||||
| 
 | ||||
| Signed-off-by: Jarod Wilson <jarod@redhat.com> | ||||
| ---
 | ||||
|  drivers/media/video/em28xx/em28xx-cards.c |   28 ++++++++++++++++++++++++ | ||||
|  drivers/media/video/em28xx/em28xx-dvb.c   |   33 +++++++++++++++++++++++++++++ | ||||
|  drivers/media/video/em28xx/em28xx.h       |    1 + | ||||
|  3 files changed, 62 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
 | ||||
| index b0fb083..6312e76 100644
 | ||||
| --- a/drivers/media/video/em28xx/em28xx-cards.c
 | ||||
| +++ b/drivers/media/video/em28xx/em28xx-cards.c
 | ||||
| @@ -158,6 +158,22 @@ static struct em28xx_reg_seq evga_indtube_digital[] = {
 | ||||
|  	{ -1,			-1,	-1,		-1}, | ||||
|  }; | ||||
|   | ||||
| +/*
 | ||||
| + * KWorld PlusTV 340U and UB435-Q (ATSC) GPIOs map:
 | ||||
| + * EM_GPIO_0 - currently unknown
 | ||||
| + * EM_GPIO_1 - LED disable/enable (1 = off, 0 = on)
 | ||||
| + * EM_GPIO_2 - currently unknown
 | ||||
| + * EM_GPIO_3 - currently unknown
 | ||||
| + * EM_GPIO_4 - TDA18271HD/C1 tuner (1 = active, 0 = in reset)
 | ||||
| + * EM_GPIO_5 - LGDT3304 ATSC/QAM demod (1 = active, 0 = in reset)
 | ||||
| + * EM_GPIO_6 - currently unknown
 | ||||
| + * EM_GPIO_7 - currently unknown
 | ||||
| + */
 | ||||
| +static struct em28xx_reg_seq kworld_a340_digital[] = {
 | ||||
| +	{EM28XX_R08_GPIO,	0x6d,		~EM_GPIO_4,	10},
 | ||||
| +	{ -1,			-1,		-1,		-1},
 | ||||
| +};
 | ||||
| +
 | ||||
|  /* Pinnacle Hybrid Pro eb1a:2881 */ | ||||
|  static struct em28xx_reg_seq pinnacle_hybrid_pro_analog[] = { | ||||
|  	{EM28XX_R08_GPIO,	0xfd,   ~EM_GPIO_4,	10}, | ||||
| @@ -1649,6 +1665,16 @@ struct em28xx_board em28xx_boards[] = {
 | ||||
|  		.tuner_gpio    = reddo_dvb_c_usb_box, | ||||
|  		.has_dvb       = 1, | ||||
|  	}, | ||||
| +	/* 1b80:a340 - Empia EM2870, NXP TDA18271HD and LG DT3304, sold
 | ||||
| +	 * initially as the KWorld PlusTV 340U, then as the UB435-Q.
 | ||||
| +	 * Early variants have a TDA18271HD/C1, later ones a TDA18271HD/C2 */
 | ||||
| +	[EM2870_BOARD_KWORLD_A340] = {
 | ||||
| +		.name       = "KWorld PlusTV 340U or UB435-Q (ATSC)",
 | ||||
| +		.tuner_type = TUNER_ABSENT,	/* Digital-only TDA18271HD */
 | ||||
| +		.has_dvb    = 1,
 | ||||
| +		.dvb_gpio   = kworld_a340_digital,
 | ||||
| +		.tuner_gpio = default_tuner_gpio,
 | ||||
| +	},
 | ||||
|  }; | ||||
|  const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); | ||||
|   | ||||
| @@ -1768,6 +1794,8 @@ struct usb_device_id em28xx_id_table[] = {
 | ||||
|  			.driver_info = EM2820_BOARD_IODATA_GVMVP_SZ }, | ||||
|  	{ USB_DEVICE(0xeb1a, 0x50a6), | ||||
|  			.driver_info = EM2860_BOARD_GADMEI_UTV330 }, | ||||
| +	{ USB_DEVICE(0x1b80, 0xa340),
 | ||||
| +			.driver_info = EM2870_BOARD_KWORLD_A340 },
 | ||||
|  	{ }, | ||||
|  }; | ||||
|  MODULE_DEVICE_TABLE(usb, em28xx_id_table); | ||||
| diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
 | ||||
| index bcd3c37..ce8a9ee 100644
 | ||||
| --- a/drivers/media/video/em28xx/em28xx-dvb.c
 | ||||
| +++ b/drivers/media/video/em28xx/em28xx-dvb.c
 | ||||
| @@ -30,11 +30,13 @@
 | ||||
|  #include "tuner-simple.h" | ||||
|   | ||||
|  #include "lgdt330x.h" | ||||
| +#include "lgdt3305.h"
 | ||||
|  #include "zl10353.h" | ||||
|  #include "s5h1409.h" | ||||
|  #include "mt352.h" | ||||
|  #include "mt352_priv.h" /* FIXME */ | ||||
|  #include "tda1002x.h" | ||||
| +#include "tda18271.h"
 | ||||
|   | ||||
|  MODULE_DESCRIPTION("driver for em28xx based DVB cards"); | ||||
|  MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>"); | ||||
| @@ -231,6 +233,18 @@ static struct lgdt330x_config em2880_lgdt3303_dev = {
 | ||||
|  	.demod_chip = LGDT3303, | ||||
|  }; | ||||
|   | ||||
| +static struct lgdt3305_config em2870_lgdt3304_dev = {
 | ||||
| +	.i2c_addr           = 0x0e,
 | ||||
| +	.demod_chip         = LGDT3304,
 | ||||
| +	.spectral_inversion = 1,
 | ||||
| +	.deny_i2c_rptr      = 1,
 | ||||
| +	.mpeg_mode          = LGDT3305_MPEG_PARALLEL,
 | ||||
| +	.tpclk_edge         = LGDT3305_TPCLK_FALLING_EDGE,
 | ||||
| +	.tpvalid_polarity   = LGDT3305_TP_VALID_HIGH,
 | ||||
| +	.vsb_if_khz         = 3250,
 | ||||
| +	.qam_if_khz         = 4000,
 | ||||
| +};
 | ||||
| +
 | ||||
|  static struct zl10353_config em28xx_zl10353_with_xc3028 = { | ||||
|  	.demod_address = (0x1e >> 1), | ||||
|  	.no_tuner = 1, | ||||
| @@ -247,6 +261,17 @@ static struct s5h1409_config em28xx_s5h1409_with_xc3028 = {
 | ||||
|  	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK | ||||
|  }; | ||||
|   | ||||
| +static struct tda18271_std_map kworld_a340_std_map = {
 | ||||
| +	.atsc_6   = { .if_freq = 3250, .agc_mode = 3, .std = 0,
 | ||||
| +		      .if_lvl = 1, .rfagc_top = 0x37, },
 | ||||
| +	.qam_6    = { .if_freq = 4000, .agc_mode = 3, .std = 1,
 | ||||
| +		      .if_lvl = 1, .rfagc_top = 0x37, },
 | ||||
| +};
 | ||||
| +
 | ||||
| +static struct tda18271_config kworld_a340_config = {
 | ||||
| +	.std_map           = &kworld_a340_std_map,
 | ||||
| +};
 | ||||
| +
 | ||||
|  static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { | ||||
|  	.demod_address = (0x1e >> 1), | ||||
|  	.no_tuner = 1, | ||||
| @@ -570,6 +595,14 @@ static int dvb_init(struct em28xx *dev)
 | ||||
|  			} | ||||
|  		} | ||||
|  		break; | ||||
| +	case EM2870_BOARD_KWORLD_A340:
 | ||||
| +		dvb->frontend = dvb_attach(lgdt3305_attach,
 | ||||
| +					   &em2870_lgdt3304_dev,
 | ||||
| +					   &dev->i2c_adap);
 | ||||
| +		if (dvb->frontend != NULL)
 | ||||
| +			dvb_attach(tda18271_attach, dvb->frontend, 0x60,
 | ||||
| +				   &dev->i2c_adap, &kworld_a340_config);
 | ||||
| +		break;
 | ||||
|  	default: | ||||
|  		em28xx_errdev("/2: The frontend of your DVB/ATSC card" | ||||
|  				" isn't supported yet\n"); | ||||
| diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
 | ||||
| index ba6fe5d..9f3fdad 100644
 | ||||
| --- a/drivers/media/video/em28xx/em28xx.h
 | ||||
| +++ b/drivers/media/video/em28xx/em28xx.h
 | ||||
| @@ -112,6 +112,7 @@
 | ||||
|  #define EM2870_BOARD_REDDO_DVB_C_USB_BOX          73 | ||||
|  #define EM2800_BOARD_VC211A			  74 | ||||
|  #define EM2882_BOARD_DIKOM_DK300		  75 | ||||
| +#define EM2870_BOARD_KWORLD_A340		  76
 | ||||
|   | ||||
|  /* Limits minimum and default number of buffers */ | ||||
|  #define EM28XX_MIN_BUF 4 | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										350
									
								
								linux-2.6-v4l-dvb-add-lgdt3304-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								linux-2.6-v4l-dvb-add-lgdt3304-support.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,350 @@ | ||||
| From b71e18093e2e7f240797875c50c49552722f8825 Mon Sep 17 00:00:00 2001 | ||||
| From: Jarod Wilson <jarod@redhat.com> | ||||
| Date: Mon, 15 Feb 2010 17:13:25 -0500 | ||||
| Subject: [PATCH 1/2] dvb: add lgdt3304 support to lgdt3305 driver | ||||
| 
 | ||||
| There's a currently-unused lgdt3304 demod driver, which leaves a lot to | ||||
| be desired as far as functionality. The 3304 is unsurprisingly quite | ||||
| similar to the 3305, and empirical testing yeilds far better results | ||||
| and more complete functionality by merging 3304 support into the 3305 | ||||
| driver. (For example, the current lgdt3304 driver lacks support for | ||||
| signal strength, snr, ucblocks, etc., which we get w/the lgdt3305). | ||||
| 
 | ||||
| For the moment, not dropping the lgdt3304 driver, and its still up to | ||||
| a given device's config setup to choose which demod driver to use, but | ||||
| I'd suggest dropping the 3304 driver entirely. | ||||
| 
 | ||||
| As a follow-up to this patch, I've got another patch that adds support | ||||
| for the KWorld PlusTV 340U (ATSC) em2870-based tuner stick, driving | ||||
| its lgdt3304 demod via this lgdt3305 driver, which is what I used to | ||||
| successfully test this patch with both VSB_8 and QAM_256 signals. | ||||
| 
 | ||||
| A few pieces are still a touch crude, but I think its a solid start, | ||||
| as well as much cleaner and more feature-complete than the existing | ||||
| lgdt3304 driver. | ||||
| 
 | ||||
| Signed-off-by: Jarod Wilson <jarod@redhat.com> | ||||
| ---
 | ||||
|  drivers/media/dvb/frontends/lgdt3305.c |  206 ++++++++++++++++++++++++++++++-- | ||||
|  drivers/media/dvb/frontends/lgdt3305.h |    6 + | ||||
|  2 files changed, 203 insertions(+), 9 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/media/dvb/frontends/lgdt3305.c b/drivers/media/dvb/frontends/lgdt3305.c
 | ||||
| index fde8c59..40695e6 100644
 | ||||
| --- a/drivers/media/dvb/frontends/lgdt3305.c
 | ||||
| +++ b/drivers/media/dvb/frontends/lgdt3305.c
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  /* | ||||
| - *    Support for LGDT3305 - VSB/QAM
 | ||||
| + *    Support for LG Electronics LGDT3304 and LGDT3305 - VSB/QAM
 | ||||
|   * | ||||
|   *    Copyright (C) 2008, 2009 Michael Krufky <mkrufky@linuxtv.org> | ||||
|   * | ||||
| @@ -357,7 +357,10 @@ static int lgdt3305_rfagc_loop(struct lgdt3305_state *state,
 | ||||
|  	case QAM_256: | ||||
|  		agcdelay = 0x046b; | ||||
|  		rfbw     = 0x8889; | ||||
| -		ifbw     = 0x8888;
 | ||||
| +		if (state->cfg->demod_chip == LGDT3305)
 | ||||
| +			ifbw = 0x8888;
 | ||||
| +		else
 | ||||
| +			ifbw = 0x6666;
 | ||||
|  		break; | ||||
|  	default: | ||||
|  		return -EINVAL; | ||||
| @@ -409,8 +412,18 @@ static int lgdt3305_agc_setup(struct lgdt3305_state *state,
 | ||||
|  	lg_dbg("lockdten = %d, acqen = %d\n", lockdten, acqen); | ||||
|   | ||||
|  	/* control agc function */ | ||||
| -	lgdt3305_write_reg(state, LGDT3305_AGC_CTRL_4, 0xe1 | lockdten << 1);
 | ||||
| -	lgdt3305_set_reg_bit(state, LGDT3305_AGC_CTRL_1, 2, acqen);
 | ||||
| +	switch (state->cfg->demod_chip) {
 | ||||
| +	case LGDT3304:
 | ||||
| +		lgdt3305_write_reg(state, 0x0314, 0xe1 | lockdten << 1);
 | ||||
| +		lgdt3305_set_reg_bit(state, 0x030e, 2, acqen);
 | ||||
| +		break;
 | ||||
| +	case LGDT3305:
 | ||||
| +		lgdt3305_write_reg(state, LGDT3305_AGC_CTRL_4, 0xe1 | lockdten << 1);
 | ||||
| +		lgdt3305_set_reg_bit(state, LGDT3305_AGC_CTRL_1, 2, acqen);
 | ||||
| +		break;
 | ||||
| +	default:
 | ||||
| +		return -EINVAL;
 | ||||
| +	}
 | ||||
|   | ||||
|  	return lgdt3305_rfagc_loop(state, param); | ||||
|  } | ||||
| @@ -543,6 +556,11 @@ static int lgdt3305_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
 | ||||
|  				    enable ? 0 : 1); | ||||
|  } | ||||
|   | ||||
| +static int lgdt3304_sleep(struct dvb_frontend *fe)
 | ||||
| +{
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int lgdt3305_sleep(struct dvb_frontend *fe) | ||||
|  { | ||||
|  	struct lgdt3305_state *state = fe->demodulator_priv; | ||||
| @@ -571,6 +589,55 @@ static int lgdt3305_sleep(struct dvb_frontend *fe)
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static int lgdt3304_init(struct dvb_frontend *fe)
 | ||||
| +{
 | ||||
| +	struct lgdt3305_state *state = fe->demodulator_priv;
 | ||||
| +	int ret;
 | ||||
| +
 | ||||
| +	static struct lgdt3305_reg lgdt3304_init_data[] = {
 | ||||
| +		{ .reg = LGDT3305_GEN_CTRL_1,     .val = 0x03, },
 | ||||
| +		{ .reg = 0x000d,                  .val = 0x02, },
 | ||||
| +		{ .reg = 0x000e,                  .val = 0x02, },
 | ||||
| +		{ .reg = LGDT3305_DGTL_AGC_REF_1, .val = 0x32, },
 | ||||
| +		{ .reg = LGDT3305_DGTL_AGC_REF_2, .val = 0xc4, },
 | ||||
| +		{ .reg = LGDT3305_CR_CTR_FREQ_1,  .val = 0x00, },
 | ||||
| +		{ .reg = LGDT3305_CR_CTR_FREQ_2,  .val = 0x00, },
 | ||||
| +		{ .reg = LGDT3305_CR_CTR_FREQ_3,  .val = 0x00, },
 | ||||
| +		{ .reg = LGDT3305_CR_CTR_FREQ_4,  .val = 0x00, },
 | ||||
| +		{ .reg = LGDT3305_CR_CTRL_7,      .val = 0xf9, },
 | ||||
| +		{ .reg = 0x0112,                  .val = 0x17, },
 | ||||
| +		{ .reg = 0x0113,                  .val = 0x15, },
 | ||||
| +		{ .reg = 0x0114,                  .val = 0x18, },
 | ||||
| +		{ .reg = 0x0115,                  .val = 0xff, },
 | ||||
| +		{ .reg = 0x0116,                  .val = 0x3c, },
 | ||||
| +		{ .reg = 0x0214,                  .val = 0x67, },
 | ||||
| +		{ .reg = 0x0424,                  .val = 0x8d, },
 | ||||
| +		{ .reg = 0x0427,                  .val = 0x12, },
 | ||||
| +		{ .reg = 0x0428,                  .val = 0x4f, },
 | ||||
| +		{ .reg = LGDT3305_IFBW_1,         .val = 0x80, },
 | ||||
| +		{ .reg = LGDT3305_IFBW_2,         .val = 0x00, },
 | ||||
| +		{ .reg = 0x030a,                  .val = 0x08, },
 | ||||
| +		{ .reg = 0x030b,                  .val = 0x9b, },
 | ||||
| +		{ .reg = 0x030d,                  .val = 0x00, },
 | ||||
| +		{ .reg = 0x030e,                  .val = 0x1c, },
 | ||||
| +		{ .reg = 0x0314,                  .val = 0xe1, },
 | ||||
| +		{ .reg = 0x000d,                  .val = 0x82, },
 | ||||
| +		{ .reg = LGDT3305_TP_CTRL_1,      .val = 0x5b, },
 | ||||
| +		{ .reg = LGDT3305_TP_CTRL_1,      .val = 0x5b, },
 | ||||
| +	};
 | ||||
| +
 | ||||
| +	lg_dbg("\n");
 | ||||
| +
 | ||||
| +	ret = lgdt3305_write_regs(state, lgdt3304_init_data,
 | ||||
| +				  ARRAY_SIZE(lgdt3304_init_data));
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	ret = lgdt3305_soft_reset(state);
 | ||||
| +fail:
 | ||||
| +	return ret;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int lgdt3305_init(struct dvb_frontend *fe) | ||||
|  { | ||||
|  	struct lgdt3305_state *state = fe->demodulator_priv; | ||||
| @@ -639,6 +706,88 @@ fail:
 | ||||
|  	return ret; | ||||
|  } | ||||
|   | ||||
| +static int lgdt3304_set_parameters(struct dvb_frontend *fe,
 | ||||
| +				   struct dvb_frontend_parameters *param)
 | ||||
| +{
 | ||||
| +	struct lgdt3305_state *state = fe->demodulator_priv;
 | ||||
| +	int ret;
 | ||||
| +
 | ||||
| +	lg_dbg("(%d, %d)\n", param->frequency, param->u.vsb.modulation);
 | ||||
| +
 | ||||
| +	if (fe->ops.tuner_ops.set_params) {
 | ||||
| +		ret = fe->ops.tuner_ops.set_params(fe, param);
 | ||||
| +		if (fe->ops.i2c_gate_ctrl)
 | ||||
| +			fe->ops.i2c_gate_ctrl(fe, 0);
 | ||||
| +		if (lg_fail(ret))
 | ||||
| +			goto fail;
 | ||||
| +		state->current_frequency = param->frequency;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	ret = lgdt3305_set_modulation(state, param);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	ret = lgdt3305_passband_digital_agc(state, param);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	ret = lgdt3305_agc_setup(state, param);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	/* reg 0x030d is 3304-only... seen in vsb and qam usbsnoops... */
 | ||||
| +	switch (param->u.vsb.modulation) {
 | ||||
| +	case VSB_8:
 | ||||
| +		lgdt3305_write_reg(state, 0x030d, 0x00);
 | ||||
| +#if 1
 | ||||
| +		lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_1, 0x4f);
 | ||||
| +		lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_2, 0x0c);
 | ||||
| +		lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_3, 0xac);
 | ||||
| +		lgdt3305_write_reg(state, LGDT3305_CR_CTR_FREQ_4, 0xba);
 | ||||
| +#endif
 | ||||
| +		break;
 | ||||
| +	case QAM_64:
 | ||||
| +	case QAM_256:
 | ||||
| +		lgdt3305_write_reg(state, 0x030d, 0x14);
 | ||||
| +#if 1
 | ||||
| +		ret = lgdt3305_set_if(state, param);
 | ||||
| +		if (lg_fail(ret))
 | ||||
| +			goto fail;
 | ||||
| +#endif
 | ||||
| +		break;
 | ||||
| +	default:
 | ||||
| +		return -EINVAL;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +#if 0
 | ||||
| +	/* the set_if vsb formula doesn't work for the 3304, we end up sending
 | ||||
| +	 * 0x40851e07 instead of 0x4f0cacba (which works back to 94050, rather
 | ||||
| +	 * than 3250, in the case of the kworld 340u) */
 | ||||
| +	ret = lgdt3305_set_if(state, param);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +	ret = lgdt3305_spectral_inversion(state, param,
 | ||||
| +					  state->cfg->spectral_inversion
 | ||||
| +					  ? 1 : 0);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	state->current_modulation = param->u.vsb.modulation;
 | ||||
| +
 | ||||
| +	ret = lgdt3305_mpeg_mode(state, state->cfg->mpeg_mode);
 | ||||
| +	if (lg_fail(ret))
 | ||||
| +		goto fail;
 | ||||
| +
 | ||||
| +	/* lgdt3305_mpeg_mode_polarity calls lgdt3305_soft_reset */
 | ||||
| +	ret = lgdt3305_mpeg_mode_polarity(state,
 | ||||
| +					  state->cfg->tpclk_edge,
 | ||||
| +					  state->cfg->tpvalid_polarity);
 | ||||
| +fail:
 | ||||
| +	return ret;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int lgdt3305_set_parameters(struct dvb_frontend *fe, | ||||
|  				   struct dvb_frontend_parameters *param) | ||||
|  { | ||||
| @@ -847,6 +996,10 @@ static int lgdt3305_read_status(struct dvb_frontend *fe, fe_status_t *status)
 | ||||
|  	switch (state->current_modulation) { | ||||
|  	case QAM_256: | ||||
|  	case QAM_64: | ||||
| +#if 0 /* needed w/3304 to set FE_HAS_SIGNAL */
 | ||||
| +		if (cr_lock)
 | ||||
| +			*status |= FE_HAS_SIGNAL;
 | ||||
| +#endif
 | ||||
|  		ret = lgdt3305_read_fec_lock_status(state, &fec_lock); | ||||
|  		if (lg_fail(ret)) | ||||
|  			goto fail; | ||||
| @@ -992,6 +1145,7 @@ static void lgdt3305_release(struct dvb_frontend *fe)
 | ||||
|  	kfree(state); | ||||
|  } | ||||
|   | ||||
| +static struct dvb_frontend_ops lgdt3304_ops;
 | ||||
|  static struct dvb_frontend_ops lgdt3305_ops; | ||||
|   | ||||
|  struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config, | ||||
| @@ -1012,11 +1166,21 @@ struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
 | ||||
|  	state->cfg = config; | ||||
|  	state->i2c_adap = i2c_adap; | ||||
|   | ||||
| -	memcpy(&state->frontend.ops, &lgdt3305_ops,
 | ||||
| -	       sizeof(struct dvb_frontend_ops));
 | ||||
| +	switch (config->demod_chip) {
 | ||||
| +	case LGDT3304:
 | ||||
| +		memcpy(&state->frontend.ops, &lgdt3304_ops,
 | ||||
| +		       sizeof(struct dvb_frontend_ops));
 | ||||
| +		break;
 | ||||
| +	case LGDT3305:
 | ||||
| +		memcpy(&state->frontend.ops, &lgdt3305_ops,
 | ||||
| +		       sizeof(struct dvb_frontend_ops));
 | ||||
| +		break;
 | ||||
| +	default:
 | ||||
| +		goto fail;
 | ||||
| +	}
 | ||||
|  	state->frontend.demodulator_priv = state; | ||||
|   | ||||
| -	/* verify that we're talking to a lg dt3305 */
 | ||||
| +	/* verify that we're talking to a lg dt3304/5 */
 | ||||
|  	ret = lgdt3305_read_reg(state, LGDT3305_GEN_CTRL_2, &val); | ||||
|  	if ((lg_fail(ret)) | (val == 0)) | ||||
|  		goto fail; | ||||
| @@ -1035,12 +1199,36 @@ struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
 | ||||
|   | ||||
|  	return &state->frontend; | ||||
|  fail: | ||||
| -	lg_warn("unable to detect LGDT3305 hardware\n");
 | ||||
| +	lg_warn("unable to detect %s hardware\n",
 | ||||
| +		config->demod_chip ? "LGDT3304" : "LGDT3305");
 | ||||
|  	kfree(state); | ||||
|  	return NULL; | ||||
|  } | ||||
|  EXPORT_SYMBOL(lgdt3305_attach); | ||||
|   | ||||
| +static struct dvb_frontend_ops lgdt3304_ops = {
 | ||||
| +	.info = {
 | ||||
| +		.name = "LG Electronics LGDT3304 VSB/QAM Frontend",
 | ||||
| +		.type               = FE_ATSC,
 | ||||
| +		.frequency_min      = 54000000,
 | ||||
| +		.frequency_max      = 858000000,
 | ||||
| +		.frequency_stepsize = 62500,
 | ||||
| +		.caps = FE_CAN_QAM_64 | FE_CAN_QAM_256 | FE_CAN_8VSB
 | ||||
| +	},
 | ||||
| +	.i2c_gate_ctrl        = lgdt3305_i2c_gate_ctrl,
 | ||||
| +	.init                 = lgdt3304_init,
 | ||||
| +	.sleep                = lgdt3304_sleep,
 | ||||
| +	.set_frontend         = lgdt3304_set_parameters,
 | ||||
| +	.get_frontend         = lgdt3305_get_frontend,
 | ||||
| +	.get_tune_settings    = lgdt3305_get_tune_settings,
 | ||||
| +	.read_status          = lgdt3305_read_status,
 | ||||
| +	.read_ber             = lgdt3305_read_ber,
 | ||||
| +	.read_signal_strength = lgdt3305_read_signal_strength,
 | ||||
| +	.read_snr             = lgdt3305_read_snr,
 | ||||
| +	.read_ucblocks        = lgdt3305_read_ucblocks,
 | ||||
| +	.release              = lgdt3305_release,
 | ||||
| +};
 | ||||
| +
 | ||||
|  static struct dvb_frontend_ops lgdt3305_ops = { | ||||
|  	.info = { | ||||
|  		.name = "LG Electronics LGDT3305 VSB/QAM Frontend", | ||||
| @@ -1064,7 +1252,7 @@ static struct dvb_frontend_ops lgdt3305_ops = {
 | ||||
|  	.release              = lgdt3305_release, | ||||
|  }; | ||||
|   | ||||
| -MODULE_DESCRIPTION("LG Electronics LGDT3305 ATSC/QAM-B Demodulator Driver");
 | ||||
| +MODULE_DESCRIPTION("LG Electronics LGDT3304/5 ATSC/QAM-B Demodulator Driver");
 | ||||
|  MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>"); | ||||
|  MODULE_LICENSE("GPL"); | ||||
|  MODULE_VERSION("0.1"); | ||||
| diff --git a/drivers/media/dvb/frontends/lgdt3305.h b/drivers/media/dvb/frontends/lgdt3305.h
 | ||||
| index 9cb11c9..a7f30c2 100644
 | ||||
| --- a/drivers/media/dvb/frontends/lgdt3305.h
 | ||||
| +++ b/drivers/media/dvb/frontends/lgdt3305.h
 | ||||
| @@ -41,6 +41,11 @@ enum lgdt3305_tp_valid_polarity {
 | ||||
|  	LGDT3305_TP_VALID_HIGH = 1, | ||||
|  }; | ||||
|   | ||||
| +enum lgdt_demod_chip_type {
 | ||||
| +	LGDT3305 = 0,
 | ||||
| +	LGDT3304 = 1,
 | ||||
| +};
 | ||||
| +
 | ||||
|  struct lgdt3305_config { | ||||
|  	u8 i2c_addr; | ||||
|   | ||||
| @@ -65,6 +70,7 @@ struct lgdt3305_config {
 | ||||
|  	enum lgdt3305_mpeg_mode mpeg_mode; | ||||
|  	enum lgdt3305_tp_clock_edge tpclk_edge; | ||||
|  	enum lgdt3305_tp_valid_polarity tpvalid_polarity; | ||||
| +	enum lgdt_demod_chip_type demod_chip;
 | ||||
|  }; | ||||
|   | ||||
|  #if defined(CONFIG_DVB_LGDT3305) || (defined(CONFIG_DVB_LGDT3305_MODULE) && \ | ||||
| -- 
 | ||||
| 1.6.6 | ||||
| 
 | ||||
							
								
								
									
										0
									
								
								linux-2.6-v4l-dvb-experimental.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								linux-2.6-v4l-dvb-experimental.patch
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								linux-2.6-v4l-dvb-fixes.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								linux-2.6-v4l-dvb-fixes.patch
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										6741
									
								
								linux-2.6-v4l-dvb-ir-core-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6741
									
								
								linux-2.6-v4l-dvb-ir-core-update.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										0
									
								
								linux-2.6-v4l-dvb-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								linux-2.6-v4l-dvb-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										362
									
								
								linux-2.6-v4l-dvb-uvcvideo-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										362
									
								
								linux-2.6-v4l-dvb-uvcvideo-update.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,362 @@ | ||||
| From: Martin Rubli <martin_rubli@logitech.com> | ||||
| Date: Wed, 19 May 2010 22:51:56 +0000 (+0200) | ||||
| Subject: uvcvideo: Add support for absolute pan/tilt controls | ||||
| X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=d3c2f664ec76aff14c3841c99e84cd78d7227f79 | ||||
| 
 | ||||
| uvcvideo: Add support for absolute pan/tilt controls | ||||
| 
 | ||||
| Signed-off-by: Martin Rubli <martin_rubli@logitech.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| index aa0720a..5ec2f4a 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| @@ -606,6 +606,26 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 | ||||
|  		.set		= uvc_ctrl_set_zoom, | ||||
|  	}, | ||||
|  	{ | ||||
| +		.id		= V4L2_CID_PAN_ABSOLUTE,
 | ||||
| +		.name		= "Pan (Absolute)",
 | ||||
| +		.entity		= UVC_GUID_UVC_CAMERA,
 | ||||
| +		.selector	= UVC_CT_PANTILT_ABSOLUTE_CONTROL,
 | ||||
| +		.size		= 32,
 | ||||
| +		.offset		= 0,
 | ||||
| +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
 | ||||
| +		.data_type	= UVC_CTRL_DATA_TYPE_UNSIGNED,
 | ||||
| +	},
 | ||||
| +	{
 | ||||
| +		.id		= V4L2_CID_TILT_ABSOLUTE,
 | ||||
| +		.name		= "Tilt (Absolute)",
 | ||||
| +		.entity		= UVC_GUID_UVC_CAMERA,
 | ||||
| +		.selector	= UVC_CT_PANTILT_ABSOLUTE_CONTROL,
 | ||||
| +		.size		= 32,
 | ||||
| +		.offset		= 32,
 | ||||
| +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
 | ||||
| +		.data_type	= UVC_CTRL_DATA_TYPE_UNSIGNED,
 | ||||
| +	},
 | ||||
| +	{
 | ||||
|  		.id		= V4L2_CID_PRIVACY, | ||||
|  		.name		= "Privacy", | ||||
|  		.entity		= UVC_GUID_UVC_CAMERA, | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Wed, 19 May 2010 23:15:00 +0000 (+0200) | ||||
| Subject: uvcvideo: Make button controls work properly | ||||
| X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=2bd47ad4894bfaf1a97660b821cbc46439a614d6 | ||||
| 
 | ||||
| uvcvideo: Make button controls work properly | ||||
| 
 | ||||
| According to the v4l2 spec, writing any value to a button control should | ||||
| result in the action belonging to the button control being triggered. | ||||
| UVC cams however want to see a 1 written, this patch fixes this by | ||||
| overriding whatever value user space passed in with -1 (0xffffffff) when | ||||
| the control is a button control. | ||||
| 
 | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| index 5ec2f4a..8bb825d 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| @@ -698,6 +698,14 @@ static void uvc_set_le_value(struct uvc_control_mapping *mapping,
 | ||||
|  	int offset = mapping->offset; | ||||
|  	__u8 mask; | ||||
|   | ||||
| +	/* According to the v4l2 spec, writing any value to a button control
 | ||||
| +	 * should result in the action belonging to the button control being
 | ||||
| +	 * triggered. UVC devices however want to see a 1 written -> override
 | ||||
| +	 * value.
 | ||||
| +	 */
 | ||||
| +	if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON)
 | ||||
| +		value = -1;
 | ||||
| +
 | ||||
|  	data += offset / 8; | ||||
|  	offset &= 7; | ||||
|   | ||||
| From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | ||||
| Date: Thu, 18 Feb 2010 19:38:52 +0000 (+0100) | ||||
| Subject: uvcvideo: Support menu controls in the control mapping API | ||||
| X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=4930f2662e47d33e5baedac620da401a225bc3a8 | ||||
| 
 | ||||
| uvcvideo: Support menu controls in the control mapping API | ||||
| 
 | ||||
| The UVCIOC_CTRL_MAP ioctl doesn't support menu entries for menu | ||||
| controls. As the uvc_xu_control_mapping structure has no reserved | ||||
| fields, this can't be fixed while keeping ABI compatibility. | ||||
| 
 | ||||
| Modify the UVCIOC_CTRL_MAP ioctl to add menu entries support, and define | ||||
| UVCIOC_CTRL_MAP_OLD that supports the old ABI without any ability to add | ||||
| menu controls. | ||||
| 
 | ||||
| Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| index 8bb825d..c88d72e 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_ctrl.c
 | ||||
| @@ -1606,6 +1606,28 @@ void uvc_ctrl_cleanup_device(struct uvc_device *dev)
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| +void uvc_ctrl_cleanup(void)
 | ||||
| +{
 | ||||
| +	struct uvc_control_info *info;
 | ||||
| +	struct uvc_control_info *ni;
 | ||||
| +	struct uvc_control_mapping *mapping;
 | ||||
| +	struct uvc_control_mapping *nm;
 | ||||
| +
 | ||||
| +	list_for_each_entry_safe(info, ni, &uvc_driver.controls, list) {
 | ||||
| +		if (!(info->flags & UVC_CONTROL_EXTENSION))
 | ||||
| +			continue;
 | ||||
| +
 | ||||
| +		list_for_each_entry_safe(mapping, nm, &info->mappings, list) {
 | ||||
| +			list_del(&mapping->list);
 | ||||
| +			kfree(mapping->menu_info);
 | ||||
| +			kfree(mapping);
 | ||||
| +		}
 | ||||
| +
 | ||||
| +		list_del(&info->list);
 | ||||
| +		kfree(info);
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +
 | ||||
|  void uvc_ctrl_init(void) | ||||
|  { | ||||
|  	struct uvc_control_info *ctrl = uvc_ctrls; | ||||
| diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
 | ||||
| index 838b56f..34818c1 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_driver.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_driver.c
 | ||||
| @@ -2261,6 +2261,7 @@ static int __init uvc_init(void)
 | ||||
|  static void __exit uvc_cleanup(void) | ||||
|  { | ||||
|  	usb_deregister(&uvc_driver.driver); | ||||
| +	uvc_ctrl_cleanup();
 | ||||
|  } | ||||
|   | ||||
|  module_init(uvc_init); | ||||
| diff --git a/drivers/media/video/uvc/uvc_v4l2.c b/drivers/media/video/uvc/uvc_v4l2.c
 | ||||
| index 7c9ab29..485a899 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_v4l2.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_v4l2.c
 | ||||
| @@ -29,6 +29,71 @@
 | ||||
|  #include "uvcvideo.h" | ||||
|   | ||||
|  /* ------------------------------------------------------------------------ | ||||
| + * UVC ioctls
 | ||||
| + */
 | ||||
| +static int uvc_ioctl_ctrl_map(struct uvc_xu_control_mapping *xmap, int old)
 | ||||
| +{
 | ||||
| +	struct uvc_control_mapping *map;
 | ||||
| +	unsigned int size;
 | ||||
| +	int ret;
 | ||||
| +
 | ||||
| +	map = kzalloc(sizeof *map, GFP_KERNEL);
 | ||||
| +	if (map == NULL)
 | ||||
| +		return -ENOMEM;
 | ||||
| +
 | ||||
| +	map->id = xmap->id;
 | ||||
| +	memcpy(map->name, xmap->name, sizeof map->name);
 | ||||
| +	memcpy(map->entity, xmap->entity, sizeof map->entity);
 | ||||
| +	map->selector = xmap->selector;
 | ||||
| +	map->size = xmap->size;
 | ||||
| +	map->offset = xmap->offset;
 | ||||
| +	map->v4l2_type = xmap->v4l2_type;
 | ||||
| +	map->data_type = xmap->data_type;
 | ||||
| +
 | ||||
| +	switch (xmap->v4l2_type) {
 | ||||
| +	case V4L2_CTRL_TYPE_INTEGER:
 | ||||
| +	case V4L2_CTRL_TYPE_BOOLEAN:
 | ||||
| +	case V4L2_CTRL_TYPE_BUTTON:
 | ||||
| +		break;
 | ||||
| +
 | ||||
| +	case V4L2_CTRL_TYPE_MENU:
 | ||||
| +		if (old) {
 | ||||
| +			ret = -EINVAL;
 | ||||
| +			goto done;
 | ||||
| +		}
 | ||||
| +
 | ||||
| +		size = xmap->menu_count * sizeof(*map->menu_info);
 | ||||
| +		map->menu_info = kmalloc(size, GFP_KERNEL);
 | ||||
| +		if (map->menu_info == NULL) {
 | ||||
| +			ret = -ENOMEM;
 | ||||
| +			goto done;
 | ||||
| +		}
 | ||||
| +
 | ||||
| +		if (copy_from_user(map->menu_info, xmap->menu_info, size)) {
 | ||||
| +			ret = -EFAULT;
 | ||||
| +			goto done;
 | ||||
| +		}
 | ||||
| +
 | ||||
| +		map->menu_count = xmap->menu_count;
 | ||||
| +		break;
 | ||||
| +
 | ||||
| +	default:
 | ||||
| +		ret = -EINVAL;
 | ||||
| +		goto done;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	ret = uvc_ctrl_add_mapping(map);
 | ||||
| +
 | ||||
| +done:
 | ||||
| +	if (ret < 0) {
 | ||||
| +		kfree(map->menu_info);
 | ||||
| +		kfree(map);
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	return ret;
 | ||||
| +}
 | ||||
| +
 | ||||
| +/* ------------------------------------------------------------------------
 | ||||
|   * V4L2 interface | ||||
|   */ | ||||
|   | ||||
| @@ -974,7 +1039,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 | ||||
|  		info->flags = xinfo->flags; | ||||
|   | ||||
|  		info->flags |= UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | | ||||
| -				UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF;
 | ||||
| +			       UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF |
 | ||||
| +			       UVC_CONTROL_EXTENSION;
 | ||||
|   | ||||
|  		ret = uvc_ctrl_add_info(info); | ||||
|  		if (ret < 0) | ||||
| @@ -982,32 +1048,12 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 | ||||
|  		break; | ||||
|  	} | ||||
|   | ||||
| +	case UVCIOC_CTRL_MAP_OLD:
 | ||||
|  	case UVCIOC_CTRL_MAP: | ||||
| -	{
 | ||||
| -		struct uvc_xu_control_mapping *xmap = arg;
 | ||||
| -		struct uvc_control_mapping *map;
 | ||||
| -
 | ||||
|  		if (!capable(CAP_SYS_ADMIN)) | ||||
|  			return -EPERM; | ||||
|   | ||||
| -		map = kzalloc(sizeof *map, GFP_KERNEL);
 | ||||
| -		if (map == NULL)
 | ||||
| -			return -ENOMEM;
 | ||||
| -
 | ||||
| -		map->id = xmap->id;
 | ||||
| -		memcpy(map->name, xmap->name, sizeof map->name);
 | ||||
| -		memcpy(map->entity, xmap->entity, sizeof map->entity);
 | ||||
| -		map->selector = xmap->selector;
 | ||||
| -		map->size = xmap->size;
 | ||||
| -		map->offset = xmap->offset;
 | ||||
| -		map->v4l2_type = xmap->v4l2_type;
 | ||||
| -		map->data_type = xmap->data_type;
 | ||||
| -
 | ||||
| -		ret = uvc_ctrl_add_mapping(map);
 | ||||
| -		if (ret < 0)
 | ||||
| -			kfree(map);
 | ||||
| -		break;
 | ||||
| -	}
 | ||||
| +		return uvc_ioctl_ctrl_map(arg, cmd == UVCIOC_CTRL_MAP_OLD);
 | ||||
|   | ||||
|  	case UVCIOC_CTRL_GET: | ||||
|  		return uvc_xu_ctrl_query(chain, arg, 0); | ||||
| diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h
 | ||||
| index d1f8840..14f77e4 100644
 | ||||
| --- a/drivers/media/video/uvc/uvcvideo.h
 | ||||
| +++ b/drivers/media/video/uvc/uvcvideo.h
 | ||||
| @@ -27,6 +27,8 @@
 | ||||
|  #define UVC_CONTROL_RESTORE	(1 << 6) | ||||
|  /* Control can be updated by the camera. */ | ||||
|  #define UVC_CONTROL_AUTO_UPDATE	(1 << 7) | ||||
| +/* Control is an extension unit control. */
 | ||||
| +#define UVC_CONTROL_EXTENSION	(1 << 8)
 | ||||
|   | ||||
|  #define UVC_CONTROL_GET_RANGE	(UVC_CONTROL_GET_CUR | UVC_CONTROL_GET_MIN | \ | ||||
|  				 UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \ | ||||
| @@ -40,6 +42,15 @@ struct uvc_xu_control_info {
 | ||||
|  	__u32 flags; | ||||
|  }; | ||||
|   | ||||
| +struct uvc_menu_info {
 | ||||
| +	__u32 value;
 | ||||
| +	__u8 name[32];
 | ||||
| +};
 | ||||
| +
 | ||||
| +struct uvc_xu_control_mapping_old {
 | ||||
| +	__u8 reserved[64];
 | ||||
| +};
 | ||||
| +
 | ||||
|  struct uvc_xu_control_mapping { | ||||
|  	__u32 id; | ||||
|  	__u8 name[32]; | ||||
| @@ -50,6 +61,11 @@ struct uvc_xu_control_mapping {
 | ||||
|  	__u8 offset; | ||||
|  	enum v4l2_ctrl_type v4l2_type; | ||||
|  	__u32 data_type; | ||||
| +
 | ||||
| +	struct uvc_menu_info __user *menu_info;
 | ||||
| +	__u32 menu_count;
 | ||||
| +
 | ||||
| +	__u32 reserved[4];
 | ||||
|  }; | ||||
|   | ||||
|  struct uvc_xu_control { | ||||
| @@ -60,6 +76,7 @@ struct uvc_xu_control {
 | ||||
|  }; | ||||
|   | ||||
|  #define UVCIOC_CTRL_ADD		_IOW('U', 1, struct uvc_xu_control_info) | ||||
| +#define UVCIOC_CTRL_MAP_OLD	_IOWR('U', 2, struct uvc_xu_control_mapping_old)
 | ||||
|  #define UVCIOC_CTRL_MAP		_IOWR('U', 2, struct uvc_xu_control_mapping) | ||||
|  #define UVCIOC_CTRL_GET		_IOWR('U', 3, struct uvc_xu_control) | ||||
|  #define UVCIOC_CTRL_SET		_IOW('U', 4, struct uvc_xu_control) | ||||
| @@ -198,11 +215,6 @@ struct uvc_streaming_control {
 | ||||
|  	__u8  bMaxVersion; | ||||
|  }; | ||||
|   | ||||
| -struct uvc_menu_info {
 | ||||
| -	__u32 value;
 | ||||
| -	__u8 name[32];
 | ||||
| -};
 | ||||
| -
 | ||||
|  struct uvc_control_info { | ||||
|  	struct list_head list; | ||||
|  	struct list_head mappings; | ||||
| @@ -625,6 +637,7 @@ extern int uvc_ctrl_init_device(struct uvc_device *dev);
 | ||||
|  extern void uvc_ctrl_cleanup_device(struct uvc_device *dev); | ||||
|  extern int uvc_ctrl_resume_device(struct uvc_device *dev); | ||||
|  extern void uvc_ctrl_init(void); | ||||
| +extern void uvc_ctrl_cleanup(void);
 | ||||
|   | ||||
|  extern int uvc_ctrl_begin(struct uvc_video_chain *chain); | ||||
|  extern int __uvc_ctrl_commit(struct uvc_video_chain *chain, int rollback); | ||||
| From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | ||||
| Date: Fri, 25 Jun 2010 07:58:43 +0000 (+0200) | ||||
| Subject: uvcvideo: Add support for Manta MM-353 Plako | ||||
| X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=352e661e1f347390a86cf34bc5e41adbdd1caa41 | ||||
| 
 | ||||
| uvcvideo: Add support for Manta MM-353 Plako | ||||
| 
 | ||||
| The camera requires the PROBE_MINMAX quirk. Add a corresponding entry | ||||
| in the device IDs list | ||||
| 
 | ||||
| Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
 | ||||
| index 34818c1..1a89384 100644
 | ||||
| --- a/drivers/media/video/uvc/uvc_driver.c
 | ||||
| +++ b/drivers/media/video/uvc/uvc_driver.c
 | ||||
| @@ -2174,6 +2174,15 @@ static struct usb_device_id uvc_ids[] = {
 | ||||
|  	  .bInterfaceSubClass	= 1, | ||||
|  	  .bInterfaceProtocol	= 0, | ||||
|  	  .driver_info		= UVC_QUIRK_PROBE_EXTRAFIELDS }, | ||||
| +	/* Manta MM-353 Plako */
 | ||||
| +	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 | ||||
| +				| USB_DEVICE_ID_MATCH_INT_INFO,
 | ||||
| +	  .idVendor		= 0x18ec,
 | ||||
| +	  .idProduct		= 0x3188,
 | ||||
| +	  .bInterfaceClass	= USB_CLASS_VIDEO,
 | ||||
| +	  .bInterfaceSubClass	= 1,
 | ||||
| +	  .bInterfaceProtocol	= 0,
 | ||||
| +	  .driver_info		= UVC_QUIRK_PROBE_MINMAX },
 | ||||
|  	/* FSC WebCam V30S */ | ||||
|  	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE | ||||
|  				| USB_DEVICE_ID_MATCH_INT_INFO, | ||||
							
								
								
									
										21
									
								
								linux-2.6.29-sparc-IOC_TYPECHECK.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								linux-2.6.29-sparc-IOC_TYPECHECK.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| diff -up vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h
 | ||||
| --- vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD	2009-03-09 17:01:32.000000000 -0400
 | ||||
| +++ vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h	2009-03-09 16:52:27.000000000 -0400
 | ||||
| @@ -41,6 +41,17 @@
 | ||||
|           ((nr)   << _IOC_NRSHIFT) | \ | ||||
|           ((size) << _IOC_SIZESHIFT)) | ||||
|   | ||||
| +#ifdef __KERNEL__
 | ||||
| +/* provoke compile error for invalid uses of size argument */
 | ||||
| +extern unsigned int __invalid_size_argument_for_IOC;
 | ||||
| +#define _IOC_TYPECHECK(t) \
 | ||||
| +        ((sizeof(t) == sizeof(t[1]) && \
 | ||||
| +          sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
 | ||||
| +          sizeof(t) : __invalid_size_argument_for_IOC)
 | ||||
| +#else
 | ||||
| +#define _IOC_TYPECHECK(t) (sizeof(t))
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0) | ||||
|  #define _IOR(type,nr,size)  _IOC(_IOC_READ,(type),(nr),sizeof(size)) | ||||
|  #define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) | ||||
							
								
								
									
										11
									
								
								linux-2.6.30-no-pcspkr-modalias.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								linux-2.6.30-no-pcspkr-modalias.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| diff -up linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx linux-2.6.30.noarch/drivers/input/misc/pcspkr.c
 | ||||
| --- linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx	2009-07-28 16:54:44.000000000 -0400
 | ||||
| +++ linux-2.6.30.noarch/drivers/input/misc/pcspkr.c	2009-07-28 16:59:36.000000000 -0400
 | ||||
| @@ -23,7 +23,6 @@
 | ||||
|  MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); | ||||
|  MODULE_DESCRIPTION("PC Speaker beeper driver"); | ||||
|  MODULE_LICENSE("GPL"); | ||||
| -MODULE_ALIAS("platform:pcspkr");
 | ||||
|   | ||||
|  #if defined(CONFIG_MIPS) || defined(CONFIG_X86) | ||||
|  /* Use the global PIT lock ! */ | ||||
							
								
								
									
										12190
									
								
								lirc-staging-2.6.36.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12190
									
								
								lirc-staging-2.6.36.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										66
									
								
								merge.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								merge.pl
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,66 @@ | ||||
| #! /usr/bin/perl | ||||
| 
 | ||||
| my @args=@ARGV; | ||||
| my %configvalues; | ||||
| my @configoptions; | ||||
| my $configcounter = 0; | ||||
| 
 | ||||
| # optionally print out the architecture as the first line of our output | ||||
| my $arch = $args[2]; | ||||
| if (defined $arch) { | ||||
| 	print "# $arch\n"; | ||||
| } | ||||
| 
 | ||||
| # first, read the override file | ||||
| 
 | ||||
| open (FILE,"$args[0]") || die "Could not open $args[0]"; | ||||
| while (<FILE>) { | ||||
| 	my $str = $_; | ||||
| 	my $configname; | ||||
| 
 | ||||
| 	if (/\# ([\w]+) is not set/) { | ||||
| 		$configname = $1; | ||||
| 	} elsif (/([\w]+)=/) { | ||||
| 		$configname = $1; | ||||
| 	} | ||||
| 
 | ||||
| 	if (defined($configname) && !exists($configvalues{$configname})) { | ||||
| 		$configvalues{$configname} = $str; | ||||
| 		$configoptions[$configcounter] = $configname; | ||||
| 		$configcounter ++; | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| # now, read and output the entire configfile, except for the overridden | ||||
| # parts... for those the new value is printed. | ||||
| 
 | ||||
| open (FILE2,"$args[1]") || die "Could not open $args[1]"; | ||||
| while (<FILE2>) { | ||||
| 	my $configname; | ||||
| 
 | ||||
| 	if (/\# ([\w]+) is not set/) { | ||||
| 		$configname = $1; | ||||
| 	} elsif (/([\w]+)=/) { | ||||
| 		$configname  = $1; | ||||
| 	} | ||||
| 
 | ||||
| 	if (defined($configname) && exists($configvalues{$configname})) { | ||||
| 		print "$configvalues{$configname}"; | ||||
| 		delete($configvalues{$configname}); | ||||
| 	} else { | ||||
| 		print "$_"; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| # now print the new values from the overridden configfile | ||||
| my $counter = 0; | ||||
| 
 | ||||
| while ($counter < $configcounter) { | ||||
| 	my $configname = $configoptions[$counter]; | ||||
| 	if (exists($configvalues{$configname})) { | ||||
| 		print "$configvalues{$configname}"; | ||||
| 	} | ||||
| 	$counter++; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
							
								
								
									
										24
									
								
								neuter_intel_microcode_load.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								neuter_intel_microcode_load.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| diff --git a/arch/x86/kernel/microcode_intel.c b/arch/x86/kernel/microcode_intel.c
 | ||||
| index ebd193e..c57024a 100644
 | ||||
| --- a/arch/x86/kernel/microcode_intel.c
 | ||||
| +++ b/arch/x86/kernel/microcode_intel.c
 | ||||
| @@ -453,9 +453,18 @@ static void microcode_fini_cpu(int cpu)
 | ||||
|  	uci->mc = NULL; | ||||
|  } | ||||
|   | ||||
| +/* we don't ship the broken out files...
 | ||||
| + *  instead, we'll just fail here, and load it with microcode_ctl
 | ||||
| + */
 | ||||
| +static enum ucode_state noop_request_microcode_fw(int cpu,
 | ||||
| +	struct device *device)
 | ||||
| +{
 | ||||
| +	return UCODE_NFOUND;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static struct microcode_ops microcode_intel_ops = { | ||||
|  	.request_microcode_user		  = request_microcode_user, | ||||
| -	.request_microcode_fw             = request_microcode_fw,
 | ||||
| +	.request_microcode_fw             = noop_request_microcode_fw,
 | ||||
|  	.collect_cpu_info                 = collect_cpu_info, | ||||
|  	.apply_microcode                  = apply_microcode, | ||||
|  	.microcode_fini_cpu               = microcode_fini_cpu, | ||||
							
								
								
									
										788
									
								
								only-use-alpha2-regulatory-information-from-country-IE.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										788
									
								
								only-use-alpha2-regulatory-information-from-country-IE.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,788 @@ | ||||
| From linville@tuxdriver.com Thu Jul 15 15:40:22 2010 | ||||
| From: "John W. Linville" <linville@tuxdriver.com> | ||||
| Subject: [RFC] wireless: only use alpha2 regulatory information from country IE | ||||
| Date: Thu, 15 Jul 2010 15:06:47 -0400 | ||||
| 
 | ||||
| The meaning and/or usage of the country IE is somewhat poorly defined. | ||||
| In practice, this means that regulatory rulesets in a country IE are | ||||
| often incomplete and might be untrustworthy.  This removes the code | ||||
| associated with interpreting those rulesets while preserving respect | ||||
| for country "alpha2" codes also contained in the country IE. | ||||
| 
 | ||||
| Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||||
| ---
 | ||||
| This patch is compile-tested only!  Please feel free to suggest that | ||||
| I have left something out or missed some nuance of our regulatory | ||||
| enforcement code... | ||||
| 
 | ||||
|  include/net/regulatory.h |    1 - | ||||
|  net/wireless/reg.c       |  625 +--------------------------------------------- | ||||
|  2 files changed, 12 insertions(+), 614 deletions(-) | ||||
| 
 | ||||
| diff --git a/include/net/regulatory.h b/include/net/regulatory.h
 | ||||
| index f873ee3..9e103a4 100644
 | ||||
| --- a/include/net/regulatory.h
 | ||||
| +++ b/include/net/regulatory.h
 | ||||
| @@ -54,7 +54,6 @@ struct regulatory_request {
 | ||||
|  	enum nl80211_reg_initiator initiator; | ||||
|  	char alpha2[2]; | ||||
|  	bool intersect; | ||||
| -	u32 country_ie_checksum;
 | ||||
|  	enum environment_cap country_ie_env; | ||||
|  	struct list_head list; | ||||
|  }; | ||||
| diff --git a/net/wireless/reg.c b/net/wireless/reg.c
 | ||||
| index 1ac2bdd..678d0bd 100644
 | ||||
| --- a/net/wireless/reg.c
 | ||||
| +++ b/net/wireless/reg.c
 | ||||
| @@ -67,17 +67,9 @@ static struct platform_device *reg_pdev;
 | ||||
|  const struct ieee80211_regdomain *cfg80211_regdomain; | ||||
|   | ||||
|  /* | ||||
| - * We use this as a place for the rd structure built from the
 | ||||
| - * last parsed country IE to rest until CRDA gets back to us with
 | ||||
| - * what it thinks should apply for the same country
 | ||||
| - */
 | ||||
| -static const struct ieee80211_regdomain *country_ie_regdomain;
 | ||||
| -
 | ||||
| -/*
 | ||||
|   * Protects static reg.c components: | ||||
|   *     - cfg80211_world_regdom | ||||
|   *     - cfg80211_regdom | ||||
| - *     - country_ie_regdomain
 | ||||
|   *     - last_request | ||||
|   */ | ||||
|  static DEFINE_MUTEX(reg_mutex); | ||||
| @@ -275,25 +267,6 @@ static bool is_user_regdom_saved(void)
 | ||||
|  	return true; | ||||
|  } | ||||
|   | ||||
| -/**
 | ||||
| - * country_ie_integrity_changes - tells us if the country IE has changed
 | ||||
| - * @checksum: checksum of country IE of fields we are interested in
 | ||||
| - *
 | ||||
| - * If the country IE has not changed you can ignore it safely. This is
 | ||||
| - * useful to determine if two devices are seeing two different country IEs
 | ||||
| - * even on the same alpha2. Note that this will return false if no IE has
 | ||||
| - * been set on the wireless core yet.
 | ||||
| - */
 | ||||
| -static bool country_ie_integrity_changes(u32 checksum)
 | ||||
| -{
 | ||||
| -	/* If no IE has been set then the checksum doesn't change */
 | ||||
| -	if (unlikely(!last_request->country_ie_checksum))
 | ||||
| -		return false;
 | ||||
| -	if (unlikely(last_request->country_ie_checksum != checksum))
 | ||||
| -		return true;
 | ||||
| -	return false;
 | ||||
| -}
 | ||||
| -
 | ||||
|  static int reg_copy_regd(const struct ieee80211_regdomain **dst_regd, | ||||
|  			 const struct ieee80211_regdomain *src_regd) | ||||
|  { | ||||
| @@ -506,471 +479,6 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
 | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| - * This is a work around for sanity checking ieee80211_channel_to_frequency()'s
 | ||||
| - * work. ieee80211_channel_to_frequency() can for example currently provide a
 | ||||
| - * 2 GHz channel when in fact a 5 GHz channel was desired. An example would be
 | ||||
| - * an AP providing channel 8 on a country IE triplet when it sent this on the
 | ||||
| - * 5 GHz band, that channel is designed to be channel 8 on 5 GHz, not a 2 GHz
 | ||||
| - * channel.
 | ||||
| - *
 | ||||
| - * This can be removed once ieee80211_channel_to_frequency() takes in a band.
 | ||||
| - */
 | ||||
| -static bool chan_in_band(int chan, enum ieee80211_band band)
 | ||||
| -{
 | ||||
| -	int center_freq = ieee80211_channel_to_frequency(chan);
 | ||||
| -
 | ||||
| -	switch (band) {
 | ||||
| -	case IEEE80211_BAND_2GHZ:
 | ||||
| -		if (center_freq <= 2484)
 | ||||
| -			return true;
 | ||||
| -		return false;
 | ||||
| -	case IEEE80211_BAND_5GHZ:
 | ||||
| -		if (center_freq >= 5005)
 | ||||
| -			return true;
 | ||||
| -		return false;
 | ||||
| -	default:
 | ||||
| -		return false;
 | ||||
| -	}
 | ||||
| -}
 | ||||
| -
 | ||||
| -/*
 | ||||
| - * Some APs may send a country IE triplet for each channel they
 | ||||
| - * support and while this is completely overkill and silly we still
 | ||||
| - * need to support it. We avoid making a single rule for each channel
 | ||||
| - * though and to help us with this we use this helper to find the
 | ||||
| - * actual subband end channel. These type of country IE triplet
 | ||||
| - * scenerios are handled then, all yielding two regulaotry rules from
 | ||||
| - * parsing a country IE:
 | ||||
| - *
 | ||||
| - * [1]
 | ||||
| - * [2]
 | ||||
| - * [36]
 | ||||
| - * [40]
 | ||||
| - *
 | ||||
| - * [1]
 | ||||
| - * [2-4]
 | ||||
| - * [5-12]
 | ||||
| - * [36]
 | ||||
| - * [40-44]
 | ||||
| - *
 | ||||
| - * [1-4]
 | ||||
| - * [5-7]
 | ||||
| - * [36-44]
 | ||||
| - * [48-64]
 | ||||
| - *
 | ||||
| - * [36-36]
 | ||||
| - * [40-40]
 | ||||
| - * [44-44]
 | ||||
| - * [48-48]
 | ||||
| - * [52-52]
 | ||||
| - * [56-56]
 | ||||
| - * [60-60]
 | ||||
| - * [64-64]
 | ||||
| - * [100-100]
 | ||||
| - * [104-104]
 | ||||
| - * [108-108]
 | ||||
| - * [112-112]
 | ||||
| - * [116-116]
 | ||||
| - * [120-120]
 | ||||
| - * [124-124]
 | ||||
| - * [128-128]
 | ||||
| - * [132-132]
 | ||||
| - * [136-136]
 | ||||
| - * [140-140]
 | ||||
| - *
 | ||||
| - * Returns 0 if the IE has been found to be invalid in the middle
 | ||||
| - * somewhere.
 | ||||
| - */
 | ||||
| -static int max_subband_chan(enum ieee80211_band band,
 | ||||
| -			    int orig_cur_chan,
 | ||||
| -			    int orig_end_channel,
 | ||||
| -			    s8 orig_max_power,
 | ||||
| -			    u8 **country_ie,
 | ||||
| -			    u8 *country_ie_len)
 | ||||
| -{
 | ||||
| -	u8 *triplets_start = *country_ie;
 | ||||
| -	u8 len_at_triplet = *country_ie_len;
 | ||||
| -	int end_subband_chan = orig_end_channel;
 | ||||
| -
 | ||||
| -	/*
 | ||||
| -	 * We'll deal with padding for the caller unless
 | ||||
| -	 * its not immediate and we don't process any channels
 | ||||
| -	 */
 | ||||
| -	if (*country_ie_len == 1) {
 | ||||
| -		*country_ie += 1;
 | ||||
| -		*country_ie_len -= 1;
 | ||||
| -		return orig_end_channel;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	/* Move to the next triplet and then start search */
 | ||||
| -	*country_ie += 3;
 | ||||
| -	*country_ie_len -= 3;
 | ||||
| -
 | ||||
| -	if (!chan_in_band(orig_cur_chan, band))
 | ||||
| -		return 0;
 | ||||
| -
 | ||||
| -	while (*country_ie_len >= 3) {
 | ||||
| -		int end_channel = 0;
 | ||||
| -		struct ieee80211_country_ie_triplet *triplet =
 | ||||
| -			(struct ieee80211_country_ie_triplet *) *country_ie;
 | ||||
| -		int cur_channel = 0, next_expected_chan;
 | ||||
| -
 | ||||
| -		/* means last triplet is completely unrelated to this one */
 | ||||
| -		if (triplet->ext.reg_extension_id >=
 | ||||
| -				IEEE80211_COUNTRY_EXTENSION_ID) {
 | ||||
| -			*country_ie -= 3;
 | ||||
| -			*country_ie_len += 3;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		if (triplet->chans.first_channel == 0) {
 | ||||
| -			*country_ie += 1;
 | ||||
| -			*country_ie_len -= 1;
 | ||||
| -			if (*country_ie_len != 0)
 | ||||
| -				return 0;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		if (triplet->chans.num_channels == 0)
 | ||||
| -			return 0;
 | ||||
| -
 | ||||
| -		/* Monitonically increasing channel order */
 | ||||
| -		if (triplet->chans.first_channel <= end_subband_chan)
 | ||||
| -			return 0;
 | ||||
| -
 | ||||
| -		if (!chan_in_band(triplet->chans.first_channel, band))
 | ||||
| -			return 0;
 | ||||
| -
 | ||||
| -		/* 2 GHz */
 | ||||
| -		if (triplet->chans.first_channel <= 14) {
 | ||||
| -			end_channel = triplet->chans.first_channel +
 | ||||
| -				triplet->chans.num_channels - 1;
 | ||||
| -		}
 | ||||
| -		else {
 | ||||
| -			end_channel =  triplet->chans.first_channel +
 | ||||
| -				(4 * (triplet->chans.num_channels - 1));
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		if (!chan_in_band(end_channel, band))
 | ||||
| -			return 0;
 | ||||
| -
 | ||||
| -		if (orig_max_power != triplet->chans.max_power) {
 | ||||
| -			*country_ie -= 3;
 | ||||
| -			*country_ie_len += 3;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		cur_channel = triplet->chans.first_channel;
 | ||||
| -
 | ||||
| -		/* The key is finding the right next expected channel */
 | ||||
| -		if (band == IEEE80211_BAND_2GHZ)
 | ||||
| -			next_expected_chan = end_subband_chan + 1;
 | ||||
| -		 else
 | ||||
| -			next_expected_chan = end_subband_chan + 4;
 | ||||
| -
 | ||||
| -		if (cur_channel != next_expected_chan) {
 | ||||
| -			*country_ie -= 3;
 | ||||
| -			*country_ie_len += 3;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		end_subband_chan = end_channel;
 | ||||
| -
 | ||||
| -		/* Move to the next one */
 | ||||
| -		*country_ie += 3;
 | ||||
| -		*country_ie_len -= 3;
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * Padding needs to be dealt with if we processed
 | ||||
| -		 * some channels.
 | ||||
| -		 */
 | ||||
| -		if (*country_ie_len == 1) {
 | ||||
| -			*country_ie += 1;
 | ||||
| -			*country_ie_len -= 1;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		/* If seen, the IE is invalid */
 | ||||
| -		if (*country_ie_len == 2)
 | ||||
| -			return 0;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	if (end_subband_chan == orig_end_channel) {
 | ||||
| -		*country_ie = triplets_start;
 | ||||
| -		*country_ie_len = len_at_triplet;
 | ||||
| -		return orig_end_channel;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	return end_subband_chan;
 | ||||
| -}
 | ||||
| -
 | ||||
| -/*
 | ||||
| - * Converts a country IE to a regulatory domain. A regulatory domain
 | ||||
| - * structure has a lot of information which the IE doesn't yet have,
 | ||||
| - * so for the other values we use upper max values as we will intersect
 | ||||
| - * with our userspace regulatory agent to get lower bounds.
 | ||||
| - */
 | ||||
| -static struct ieee80211_regdomain *country_ie_2_rd(
 | ||||
| -				enum ieee80211_band band,
 | ||||
| -				u8 *country_ie,
 | ||||
| -				u8 country_ie_len,
 | ||||
| -				u32 *checksum)
 | ||||
| -{
 | ||||
| -	struct ieee80211_regdomain *rd = NULL;
 | ||||
| -	unsigned int i = 0;
 | ||||
| -	char alpha2[2];
 | ||||
| -	u32 flags = 0;
 | ||||
| -	u32 num_rules = 0, size_of_regd = 0;
 | ||||
| -	u8 *triplets_start = NULL;
 | ||||
| -	u8 len_at_triplet = 0;
 | ||||
| -	/* the last channel we have registered in a subband (triplet) */
 | ||||
| -	int last_sub_max_channel = 0;
 | ||||
| -
 | ||||
| -	*checksum = 0xDEADBEEF;
 | ||||
| -
 | ||||
| -	/* Country IE requirements */
 | ||||
| -	BUG_ON(country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN ||
 | ||||
| -		country_ie_len & 0x01);
 | ||||
| -
 | ||||
| -	alpha2[0] = country_ie[0];
 | ||||
| -	alpha2[1] = country_ie[1];
 | ||||
| -
 | ||||
| -	/*
 | ||||
| -	 * Third octet can be:
 | ||||
| -	 *    'I' - Indoor
 | ||||
| -	 *    'O' - Outdoor
 | ||||
| -	 *
 | ||||
| -	 *  anything else we assume is no restrictions
 | ||||
| -	 */
 | ||||
| -	if (country_ie[2] == 'I')
 | ||||
| -		flags = NL80211_RRF_NO_OUTDOOR;
 | ||||
| -	else if (country_ie[2] == 'O')
 | ||||
| -		flags = NL80211_RRF_NO_INDOOR;
 | ||||
| -
 | ||||
| -	country_ie += 3;
 | ||||
| -	country_ie_len -= 3;
 | ||||
| -
 | ||||
| -	triplets_start = country_ie;
 | ||||
| -	len_at_triplet = country_ie_len;
 | ||||
| -
 | ||||
| -	*checksum ^= ((flags ^ alpha2[0] ^ alpha2[1]) << 8);
 | ||||
| -
 | ||||
| -	/*
 | ||||
| -	 * We need to build a reg rule for each triplet, but first we must
 | ||||
| -	 * calculate the number of reg rules we will need. We will need one
 | ||||
| -	 * for each channel subband
 | ||||
| -	 */
 | ||||
| -	while (country_ie_len >= 3) {
 | ||||
| -		int end_channel = 0;
 | ||||
| -		struct ieee80211_country_ie_triplet *triplet =
 | ||||
| -			(struct ieee80211_country_ie_triplet *) country_ie;
 | ||||
| -		int cur_sub_max_channel = 0, cur_channel = 0;
 | ||||
| -
 | ||||
| -		if (triplet->ext.reg_extension_id >=
 | ||||
| -				IEEE80211_COUNTRY_EXTENSION_ID) {
 | ||||
| -			country_ie += 3;
 | ||||
| -			country_ie_len -= 3;
 | ||||
| -			continue;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * APs can add padding to make length divisible
 | ||||
| -		 * by two, required by the spec.
 | ||||
| -		 */
 | ||||
| -		if (triplet->chans.first_channel == 0) {
 | ||||
| -			country_ie++;
 | ||||
| -			country_ie_len--;
 | ||||
| -			/* This is expected to be at the very end only */
 | ||||
| -			if (country_ie_len != 0)
 | ||||
| -				return NULL;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		if (triplet->chans.num_channels == 0)
 | ||||
| -			return NULL;
 | ||||
| -
 | ||||
| -		if (!chan_in_band(triplet->chans.first_channel, band))
 | ||||
| -			return NULL;
 | ||||
| -
 | ||||
| -		/* 2 GHz */
 | ||||
| -		if (band == IEEE80211_BAND_2GHZ)
 | ||||
| -			end_channel = triplet->chans.first_channel +
 | ||||
| -				triplet->chans.num_channels - 1;
 | ||||
| -		else
 | ||||
| -			/*
 | ||||
| -			 * 5 GHz -- For example in country IEs if the first
 | ||||
| -			 * channel given is 36 and the number of channels is 4
 | ||||
| -			 * then the individual channel numbers defined for the
 | ||||
| -			 * 5 GHz PHY by these parameters are: 36, 40, 44, and 48
 | ||||
| -			 * and not 36, 37, 38, 39.
 | ||||
| -			 *
 | ||||
| -			 * See: http://tinyurl.com/11d-clarification
 | ||||
| -			 */
 | ||||
| -			end_channel =  triplet->chans.first_channel +
 | ||||
| -				(4 * (triplet->chans.num_channels - 1));
 | ||||
| -
 | ||||
| -		cur_channel = triplet->chans.first_channel;
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * Enhancement for APs that send a triplet for every channel
 | ||||
| -		 * or for whatever reason sends triplets with multiple channels
 | ||||
| -		 * separated when in fact they should be together.
 | ||||
| -		 */
 | ||||
| -		end_channel = max_subband_chan(band,
 | ||||
| -					       cur_channel,
 | ||||
| -					       end_channel,
 | ||||
| -					       triplet->chans.max_power,
 | ||||
| -					       &country_ie,
 | ||||
| -					       &country_ie_len);
 | ||||
| -		if (!end_channel)
 | ||||
| -			return NULL;
 | ||||
| -
 | ||||
| -		if (!chan_in_band(end_channel, band))
 | ||||
| -			return NULL;
 | ||||
| -
 | ||||
| -		cur_sub_max_channel = end_channel;
 | ||||
| -
 | ||||
| -		/* Basic sanity check */
 | ||||
| -		if (cur_sub_max_channel < cur_channel)
 | ||||
| -			return NULL;
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * Do not allow overlapping channels. Also channels
 | ||||
| -		 * passed in each subband must be monotonically
 | ||||
| -		 * increasing
 | ||||
| -		 */
 | ||||
| -		if (last_sub_max_channel) {
 | ||||
| -			if (cur_channel <= last_sub_max_channel)
 | ||||
| -				return NULL;
 | ||||
| -			if (cur_sub_max_channel <= last_sub_max_channel)
 | ||||
| -				return NULL;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * When dot11RegulatoryClassesRequired is supported
 | ||||
| -		 * we can throw ext triplets as part of this soup,
 | ||||
| -		 * for now we don't care when those change as we
 | ||||
| -		 * don't support them
 | ||||
| -		 */
 | ||||
| -		*checksum ^= ((cur_channel ^ cur_sub_max_channel) << 8) |
 | ||||
| -		  ((cur_sub_max_channel ^ cur_sub_max_channel) << 16) |
 | ||||
| -		  ((triplet->chans.max_power ^ cur_sub_max_channel) << 24);
 | ||||
| -
 | ||||
| -		last_sub_max_channel = cur_sub_max_channel;
 | ||||
| -
 | ||||
| -		num_rules++;
 | ||||
| -
 | ||||
| -		if (country_ie_len >= 3) {
 | ||||
| -			country_ie += 3;
 | ||||
| -			country_ie_len -= 3;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * Note: this is not a IEEE requirement but
 | ||||
| -		 * simply a memory requirement
 | ||||
| -		 */
 | ||||
| -		if (num_rules > NL80211_MAX_SUPP_REG_RULES)
 | ||||
| -			return NULL;
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	country_ie = triplets_start;
 | ||||
| -	country_ie_len = len_at_triplet;
 | ||||
| -
 | ||||
| -	size_of_regd = sizeof(struct ieee80211_regdomain) +
 | ||||
| -		(num_rules * sizeof(struct ieee80211_reg_rule));
 | ||||
| -
 | ||||
| -	rd = kzalloc(size_of_regd, GFP_KERNEL);
 | ||||
| -	if (!rd)
 | ||||
| -		return NULL;
 | ||||
| -
 | ||||
| -	rd->n_reg_rules = num_rules;
 | ||||
| -	rd->alpha2[0] = alpha2[0];
 | ||||
| -	rd->alpha2[1] = alpha2[1];
 | ||||
| -
 | ||||
| -	/* This time around we fill in the rd */
 | ||||
| -	while (country_ie_len >= 3) {
 | ||||
| -		int end_channel = 0;
 | ||||
| -		struct ieee80211_country_ie_triplet *triplet =
 | ||||
| -			(struct ieee80211_country_ie_triplet *) country_ie;
 | ||||
| -		struct ieee80211_reg_rule *reg_rule = NULL;
 | ||||
| -		struct ieee80211_freq_range *freq_range = NULL;
 | ||||
| -		struct ieee80211_power_rule *power_rule = NULL;
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * Must parse if dot11RegulatoryClassesRequired is true,
 | ||||
| -		 * we don't support this yet
 | ||||
| -		 */
 | ||||
| -		if (triplet->ext.reg_extension_id >=
 | ||||
| -				IEEE80211_COUNTRY_EXTENSION_ID) {
 | ||||
| -			country_ie += 3;
 | ||||
| -			country_ie_len -= 3;
 | ||||
| -			continue;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		if (triplet->chans.first_channel == 0) {
 | ||||
| -			country_ie++;
 | ||||
| -			country_ie_len--;
 | ||||
| -			break;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		reg_rule = &rd->reg_rules[i];
 | ||||
| -		freq_range = ®_rule->freq_range;
 | ||||
| -		power_rule = ®_rule->power_rule;
 | ||||
| -
 | ||||
| -		reg_rule->flags = flags;
 | ||||
| -
 | ||||
| -		/* 2 GHz */
 | ||||
| -		if (band == IEEE80211_BAND_2GHZ)
 | ||||
| -			end_channel = triplet->chans.first_channel +
 | ||||
| -				triplet->chans.num_channels -1;
 | ||||
| -		else
 | ||||
| -			end_channel =  triplet->chans.first_channel +
 | ||||
| -				(4 * (triplet->chans.num_channels - 1));
 | ||||
| -
 | ||||
| -		end_channel = max_subband_chan(band,
 | ||||
| -					       triplet->chans.first_channel,
 | ||||
| -					       end_channel,
 | ||||
| -					       triplet->chans.max_power,
 | ||||
| -					       &country_ie,
 | ||||
| -					       &country_ie_len);
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * The +10 is since the regulatory domain expects
 | ||||
| -		 * the actual band edge, not the center of freq for
 | ||||
| -		 * its start and end freqs, assuming 20 MHz bandwidth on
 | ||||
| -		 * the channels passed
 | ||||
| -		 */
 | ||||
| -		freq_range->start_freq_khz =
 | ||||
| -			MHZ_TO_KHZ(ieee80211_channel_to_frequency(
 | ||||
| -				triplet->chans.first_channel) - 10);
 | ||||
| -		freq_range->end_freq_khz =
 | ||||
| -			MHZ_TO_KHZ(ieee80211_channel_to_frequency(
 | ||||
| -				end_channel) + 10);
 | ||||
| -
 | ||||
| -		/*
 | ||||
| -		 * These are large arbitrary values we use to intersect later.
 | ||||
| -		 * Increment this if we ever support >= 40 MHz channels
 | ||||
| -		 * in IEEE 802.11
 | ||||
| -		 */
 | ||||
| -		freq_range->max_bandwidth_khz = MHZ_TO_KHZ(40);
 | ||||
| -		power_rule->max_antenna_gain = DBI_TO_MBI(100);
 | ||||
| -		power_rule->max_eirp = DBM_TO_MBM(triplet->chans.max_power);
 | ||||
| -
 | ||||
| -		i++;
 | ||||
| -
 | ||||
| -		if (country_ie_len >= 3) {
 | ||||
| -			country_ie += 3;
 | ||||
| -			country_ie_len -= 3;
 | ||||
| -		}
 | ||||
| -
 | ||||
| -		BUG_ON(i > NL80211_MAX_SUPP_REG_RULES);
 | ||||
| -	}
 | ||||
| -
 | ||||
| -	return rd;
 | ||||
| -}
 | ||||
| -
 | ||||
| -
 | ||||
| -/*
 | ||||
|   * Helper for regdom_intersect(), this does the real | ||||
|   * mathematical intersection fun | ||||
|   */ | ||||
| @@ -1191,7 +699,6 @@ static int freq_reg_info_regd(struct wiphy *wiphy,
 | ||||
|   | ||||
|  	return -EINVAL; | ||||
|  } | ||||
| -EXPORT_SYMBOL(freq_reg_info);
 | ||||
|   | ||||
|  int freq_reg_info(struct wiphy *wiphy, | ||||
|  		  u32 center_freq, | ||||
| @@ -1205,6 +712,7 @@ int freq_reg_info(struct wiphy *wiphy,
 | ||||
|  				  reg_rule, | ||||
|  				  NULL); | ||||
|  } | ||||
| +EXPORT_SYMBOL(freq_reg_info);
 | ||||
|   | ||||
|  /* | ||||
|   * Note that right now we assume the desired channel bandwidth | ||||
| @@ -1243,41 +751,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
 | ||||
|  			  desired_bw_khz, | ||||
|  			  ®_rule); | ||||
|   | ||||
| -	if (r) {
 | ||||
| -		/*
 | ||||
| -		 * This means no regulatory rule was found in the country IE
 | ||||
| -		 * with a frequency range on the center_freq's band, since
 | ||||
| -		 * IEEE-802.11 allows for a country IE to have a subset of the
 | ||||
| -		 * regulatory information provided in a country we ignore
 | ||||
| -		 * disabling the channel unless at least one reg rule was
 | ||||
| -		 * found on the center_freq's band. For details see this
 | ||||
| -		 * clarification:
 | ||||
| -		 *
 | ||||
| -		 * http://tinyurl.com/11d-clarification
 | ||||
| -		 */
 | ||||
| -		if (r == -ERANGE &&
 | ||||
| -		    last_request->initiator ==
 | ||||
| -		    NL80211_REGDOM_SET_BY_COUNTRY_IE) {
 | ||||
| -			REG_DBG_PRINT("cfg80211: Leaving channel %d MHz "
 | ||||
| -				"intact on %s - no rule found in band on "
 | ||||
| -				"Country IE\n",
 | ||||
| -			chan->center_freq, wiphy_name(wiphy));
 | ||||
| -		} else {
 | ||||
| -		/*
 | ||||
| -		 * In this case we know the country IE has at least one reg rule
 | ||||
| -		 * for the band so we respect its band definitions
 | ||||
| -		 */
 | ||||
| -			if (last_request->initiator ==
 | ||||
| -			    NL80211_REGDOM_SET_BY_COUNTRY_IE)
 | ||||
| -				REG_DBG_PRINT("cfg80211: Disabling "
 | ||||
| -					"channel %d MHz on %s due to "
 | ||||
| -					"Country IE\n",
 | ||||
| -					chan->center_freq, wiphy_name(wiphy));
 | ||||
| -			flags |= IEEE80211_CHAN_DISABLED;
 | ||||
| -			chan->flags = flags;
 | ||||
| -		}
 | ||||
| +	if (r)
 | ||||
|  		return; | ||||
| -	}
 | ||||
|   | ||||
|  	power_rule = ®_rule->power_rule; | ||||
|  	freq_range = ®_rule->freq_range; | ||||
| @@ -2010,7 +1485,7 @@ EXPORT_SYMBOL(regulatory_hint);
 | ||||
|   | ||||
|  /* Caller must hold reg_mutex */ | ||||
|  static bool reg_same_country_ie_hint(struct wiphy *wiphy, | ||||
| -			u32 country_ie_checksum)
 | ||||
| +			char *alpha2, enum environment_cap env)
 | ||||
|  { | ||||
|  	struct wiphy *request_wiphy; | ||||
|   | ||||
| @@ -2026,13 +1501,17 @@ static bool reg_same_country_ie_hint(struct wiphy *wiphy,
 | ||||
|  		return false; | ||||
|   | ||||
|  	if (likely(request_wiphy != wiphy)) | ||||
| -		return !country_ie_integrity_changes(country_ie_checksum);
 | ||||
| +		return (last_request->alpha2[0] == alpha2[0] &&
 | ||||
| +			last_request->alpha2[1] == alpha2[1] &&
 | ||||
| +			last_request->country_ie_env == env);
 | ||||
|  	/* | ||||
|  	 * We should not have let these through at this point, they | ||||
|  	 * should have been picked up earlier by the first alpha2 check | ||||
|  	 * on the device | ||||
|  	 */ | ||||
| -	if (WARN_ON(!country_ie_integrity_changes(country_ie_checksum)))
 | ||||
| +	if (WARN_ON((last_request->alpha2[0] == alpha2[0] &&
 | ||||
| +			last_request->alpha2[1] == alpha2[1] &&
 | ||||
| +			last_request->country_ie_env == env )))
 | ||||
|  		return true; | ||||
|  	return false; | ||||
|  } | ||||
| @@ -2048,7 +1527,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
 | ||||
|  { | ||||
|  	struct ieee80211_regdomain *rd = NULL; | ||||
|  	char alpha2[2]; | ||||
| -	u32 checksum = 0;
 | ||||
|  	enum environment_cap env = ENVIRON_ANY; | ||||
|  	struct regulatory_request *request; | ||||
|   | ||||
| @@ -2064,14 +1542,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
 | ||||
|  	if (country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN) | ||||
|  		goto out; | ||||
|   | ||||
| -	/*
 | ||||
| -	 * Pending country IE processing, this can happen after we
 | ||||
| -	 * call CRDA and wait for a response if a beacon was received before
 | ||||
| -	 * we were able to process the last regulatory_hint_11d() call
 | ||||
| -	 */
 | ||||
| -	if (country_ie_regdomain)
 | ||||
| -		goto out;
 | ||||
| -
 | ||||
|  	alpha2[0] = country_ie[0]; | ||||
|  	alpha2[1] = country_ie[1]; | ||||
|   | ||||
| @@ -2090,12 +1560,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
 | ||||
|  	    wiphy_idx_valid(last_request->wiphy_idx))) | ||||
|  		goto out; | ||||
|   | ||||
| -	rd = country_ie_2_rd(band, country_ie, country_ie_len, &checksum);
 | ||||
| -	if (!rd) {
 | ||||
| -		REG_DBG_PRINT("cfg80211: Ignoring bogus country IE\n");
 | ||||
| -		goto out;
 | ||||
| -	}
 | ||||
| -
 | ||||
|  	/* | ||||
|  	 * This will not happen right now but we leave it here for the | ||||
|  	 * the future when we want to add suspend/resume support and having | ||||
| @@ -2105,24 +1569,17 @@ void regulatory_hint_11d(struct wiphy *wiphy,
 | ||||
|  	 * If we hit this before we add this support we want to be informed of | ||||
|  	 * it as it would indicate a mistake in the current design | ||||
|  	 */ | ||||
| -	if (WARN_ON(reg_same_country_ie_hint(wiphy, checksum)))
 | ||||
| +	if (WARN_ON(reg_same_country_ie_hint(wiphy, alpha2, env)))
 | ||||
|  		goto free_rd_out; | ||||
|   | ||||
|  	request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); | ||||
|  	if (!request) | ||||
|  		goto free_rd_out; | ||||
|   | ||||
| -	/*
 | ||||
| -	 * We keep this around for when CRDA comes back with a response so
 | ||||
| -	 * we can intersect with that
 | ||||
| -	 */
 | ||||
| -	country_ie_regdomain = rd;
 | ||||
| -
 | ||||
|  	request->wiphy_idx = get_wiphy_idx(wiphy); | ||||
| -	request->alpha2[0] = rd->alpha2[0];
 | ||||
| -	request->alpha2[1] = rd->alpha2[1];
 | ||||
| +	request->alpha2[0] = alpha2[0];
 | ||||
| +	request->alpha2[1] = alpha2[1];
 | ||||
|  	request->initiator = NL80211_REGDOM_SET_BY_COUNTRY_IE; | ||||
| -	request->country_ie_checksum = checksum;
 | ||||
|  	request->country_ie_env = env; | ||||
|   | ||||
|  	mutex_unlock(®_mutex); | ||||
| @@ -2383,33 +1840,6 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
 | ||||
|  	print_rd_rules(rd); | ||||
|  } | ||||
|   | ||||
| -#ifdef CONFIG_CFG80211_REG_DEBUG
 | ||||
| -static void reg_country_ie_process_debug(
 | ||||
| -	const struct ieee80211_regdomain *rd,
 | ||||
| -	const struct ieee80211_regdomain *country_ie_regdomain,
 | ||||
| -	const struct ieee80211_regdomain *intersected_rd)
 | ||||
| -{
 | ||||
| -	printk(KERN_DEBUG "cfg80211: Received country IE:\n");
 | ||||
| -	print_regdomain_info(country_ie_regdomain);
 | ||||
| -	printk(KERN_DEBUG "cfg80211: CRDA thinks this should applied:\n");
 | ||||
| -	print_regdomain_info(rd);
 | ||||
| -	if (intersected_rd) {
 | ||||
| -		printk(KERN_DEBUG "cfg80211: We intersect both of these "
 | ||||
| -			"and get:\n");
 | ||||
| -		print_regdomain_info(intersected_rd);
 | ||||
| -		return;
 | ||||
| -	}
 | ||||
| -	printk(KERN_DEBUG "cfg80211: Intersection between both failed\n");
 | ||||
| -}
 | ||||
| -#else
 | ||||
| -static inline void reg_country_ie_process_debug(
 | ||||
| -	const struct ieee80211_regdomain *rd,
 | ||||
| -	const struct ieee80211_regdomain *country_ie_regdomain,
 | ||||
| -	const struct ieee80211_regdomain *intersected_rd)
 | ||||
| -{
 | ||||
| -}
 | ||||
| -#endif
 | ||||
| -
 | ||||
|  /* Takes ownership of rd only if it doesn't fail */ | ||||
|  static int __set_regdom(const struct ieee80211_regdomain *rd) | ||||
|  { | ||||
| @@ -2521,34 +1951,6 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
 | ||||
|  		return 0; | ||||
|  	} | ||||
|   | ||||
| -	/*
 | ||||
| -	 * Country IE requests are handled a bit differently, we intersect
 | ||||
| -	 * the country IE rd with what CRDA believes that country should have
 | ||||
| -	 */
 | ||||
| -
 | ||||
| -	/*
 | ||||
| -	 * Userspace could have sent two replies with only
 | ||||
| -	 * one kernel request. By the second reply we would have
 | ||||
| -	 * already processed and consumed the country_ie_regdomain.
 | ||||
| -	 */
 | ||||
| -	if (!country_ie_regdomain)
 | ||||
| -		return -EALREADY;
 | ||||
| -	BUG_ON(rd == country_ie_regdomain);
 | ||||
| -
 | ||||
| -	/*
 | ||||
| -	 * Intersect what CRDA returned and our what we
 | ||||
| -	 * had built from the Country IE received
 | ||||
| -	 */
 | ||||
| -
 | ||||
| -	intersected_rd = regdom_intersect(rd, country_ie_regdomain);
 | ||||
| -
 | ||||
| -	reg_country_ie_process_debug(rd,
 | ||||
| -				     country_ie_regdomain,
 | ||||
| -				     intersected_rd);
 | ||||
| -
 | ||||
| -	kfree(country_ie_regdomain);
 | ||||
| -	country_ie_regdomain = NULL;
 | ||||
| -
 | ||||
|  	if (!intersected_rd) | ||||
|  		return -EINVAL; | ||||
|   | ||||
| @@ -2688,9 +2090,6 @@ void /* __init_or_exit */ regulatory_exit(void)
 | ||||
|   | ||||
|  	reset_regdomains(); | ||||
|   | ||||
| -	kfree(country_ie_regdomain);
 | ||||
| -	country_ie_regdomain = NULL;
 | ||||
| -
 | ||||
|  	kfree(last_request); | ||||
|   | ||||
|  	platform_device_unregister(reg_pdev); | ||||
| -- 
 | ||||
| 1.7.1.1 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										53
									
								
								pci-acpi-disable-aspm-if-no-osc.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								pci-acpi-disable-aspm-if-no-osc.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| From: Matthew Garrett <mjg@redhat.com> | ||||
| Subject: ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe | ||||
| 
 | ||||
| ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe | ||||
| 
 | ||||
| The PCI SIG documentation for the _OSC OS/firmware handshaking interface | ||||
| states: | ||||
| 
 | ||||
| "If the _OSC control method is absent from the scope of a host bridge | ||||
| device, then the operating system must not enable or attempt to use any | ||||
| features defined in this section for the hierarchy originated by the host | ||||
| bridge." | ||||
| 
 | ||||
| The obvious interpretation of this is that the OS should not attempt to use | ||||
| PCIe hotplug, PME or AER - however, the specification also notes that an | ||||
| _OSC method is *required* for PCIe hierarchies, and experimental validation | ||||
| with An Alternative OS indicates that it doesn't use any PCIe functionality | ||||
| if the _OSC method is missing. That arguably means we shouldn't be using | ||||
| MSI or extended config space, but right now our problems seem to be limited | ||||
| to vendors being surprised when ASPM gets enabled on machines when other | ||||
| OSs refuse to do so. So, for now, let's just disable ASPM if the _OSC | ||||
| method doesn't exist or refuses to hand over PCIe capability control. | ||||
| 
 | ||||
| Signed-off-by: Matthew Garrett <mjg@redhat.com> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
 | ||||
| index 4eac593..1f67057 100644
 | ||||
| --- a/drivers/acpi/pci_root.c
 | ||||
| +++ b/drivers/acpi/pci_root.c
 | ||||
| @@ -33,6 +33,7 @@
 | ||||
|  #include <linux/pm_runtime.h> | ||||
|  #include <linux/pci.h> | ||||
|  #include <linux/pci-acpi.h> | ||||
| +#include <linux/pci-aspm.h>
 | ||||
|  #include <linux/acpi.h> | ||||
|  #include <linux/slab.h> | ||||
|  #include <acpi/acpi_bus.h> | ||||
| @@ -543,6 +544,14 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
 | ||||
|  	if (flags != base_flags) | ||||
|  		acpi_pci_osc_support(root, flags); | ||||
|   | ||||
| +	status = acpi_pci_osc_control_set(root->device->handle,
 | ||||
| +					  0);
 | ||||
| +
 | ||||
| +	if (status == AE_NOT_EXIST) {
 | ||||
| +		printk(KERN_INFO "Unable to assume PCIe control: Disabling ASPM\n");
 | ||||
| +		pcie_no_aspm();
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	pci_acpi_add_bus_pm_notifier(device, root->bus); | ||||
|  	if (device->wakeup.flags.run_wake) | ||||
|  		device_set_run_wake(root->bus->bridge, true); | ||||
							
								
								
									
										50
									
								
								pci-aspm-dont-enable-too-early.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								pci-aspm-dont-enable-too-early.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| From: Matthew Garrett <mjg@redhat.com> | ||||
| Date: Wed, 9 Jun 2010 20:05:07 +0000 (-0400) | ||||
| Subject: PCI: Don't enable aspm before drivers have had a chance to veto it | ||||
| X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=8f0b08c29f1df91315e48adce04462eb23671099 | ||||
| 
 | ||||
| PCI: Don't enable aspm before drivers have had a chance to veto it | ||||
| 
 | ||||
| The aspm code will currently set the configured aspm policy before drivers | ||||
| have had an opportunity to indicate that their hardware doesn't support it. | ||||
| Unfortunately, putting some hardware in L0 or L1 can result in the hardware | ||||
| no longer responding to any requests, even after aspm is disabled. It makes | ||||
| more sense to leave aspm policy at the BIOS defaults at initial setup time, | ||||
| reconfiguring it after pci_enable_device() is called. This allows the | ||||
| driver to blacklist individual devices beforehand. | ||||
| 
 | ||||
| Reviewed-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> | ||||
| Signed-off-by: Matthew Garrett <mjg@redhat.com> | ||||
| Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
 | ||||
| index be53d98..7122281 100644
 | ||||
| --- a/drivers/pci/pcie/aspm.c
 | ||||
| +++ b/drivers/pci/pcie/aspm.c
 | ||||
| @@ -588,11 +588,23 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
 | ||||
|  	 * update through pcie_aspm_cap_init(). | ||||
|  	 */ | ||||
|  	pcie_aspm_cap_init(link, blacklist); | ||||
| -	pcie_config_aspm_path(link);
 | ||||
|   | ||||
|  	/* Setup initial Clock PM state */ | ||||
|  	pcie_clkpm_cap_init(link, blacklist); | ||||
| -	pcie_set_clkpm(link, policy_to_clkpm_state(link));
 | ||||
| +
 | ||||
| +	/*
 | ||||
| +	 * At this stage drivers haven't had an opportunity to change the
 | ||||
| +	 * link policy setting. Enabling ASPM on broken hardware can cripple
 | ||||
| +	 * it even before the driver has had a chance to disable ASPM, so
 | ||||
| +	 * default to a safe level right now. If we're enabling ASPM beyond
 | ||||
| +	 * the BIOS's expectation, we'll do so once pci_enable_device() is
 | ||||
| +	 * called.
 | ||||
| +	 */
 | ||||
| +	if (aspm_policy != POLICY_POWERSAVE) {
 | ||||
| +		pcie_config_aspm_path(link);
 | ||||
| +		pcie_set_clkpm(link, policy_to_clkpm_state(link));
 | ||||
| +	}
 | ||||
| +
 | ||||
|  unlock: | ||||
|  	mutex_unlock(&aspm_lock); | ||||
|  out: | ||||
							
								
								
									
										74
									
								
								prevent-runtime-conntrack-changes.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								prevent-runtime-conntrack-changes.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| Jon Masters correctly points out that conntrack hash sizes | ||||
| (nf_conntrack_htable_size) are global (not per-netns) and | ||||
| modifiable at runtime via /sys/module/nf_conntrack/hashsize . | ||||
| 
 | ||||
| Steps to reproduce: | ||||
| 	clone(CLONE_NEWNET) | ||||
| 	[grow /sys/module/nf_conntrack/hashsize] | ||||
| 	exit() | ||||
| 
 | ||||
| At netns exit we are going to scan random memory for conntracks to be killed. | ||||
| 
 | ||||
| Apparently there is a code which deals with hashtable resize for | ||||
| init_net (and it was there befode netns conntrack code), so prohibit | ||||
| hashsize modification if there is more than one netns exists. | ||||
| 
 | ||||
| To change hashtable sizes, you need to reload module. | ||||
| 
 | ||||
| Expectation hashtable size was simply glued to a variable with no code | ||||
| to rehash expectations, so it was a bug to allow writing to it. | ||||
| Make "expect_hashsize" readonly. | ||||
| 
 | ||||
| This is temporarily until we figure out what to do. | ||||
| 
 | ||||
| Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> | ||||
| Cc: stable@kernel.org | ||||
| ---
 | ||||
| 
 | ||||
|  net/netfilter/nf_conntrack_core.c   |   15 +++++++++++++++ | ||||
|  net/netfilter/nf_conntrack_expect.c |    2 +- | ||||
|  2 files changed, 16 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| --- a/net/netfilter/nf_conntrack_core.c
 | ||||
| +++ b/net/netfilter/nf_conntrack_core.c
 | ||||
| @@ -21,6 +21,7 @@
 | ||||
|  #include <linux/stddef.h> | ||||
|  #include <linux/slab.h> | ||||
|  #include <linux/random.h> | ||||
| +#include <linux/rtnetlink.h>
 | ||||
|  #include <linux/jhash.h> | ||||
|  #include <linux/err.h> | ||||
|  #include <linux/percpu.h> | ||||
| @@ -1198,6 +1199,20 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
 | ||||
|  	if (!nf_conntrack_htable_size) | ||||
|  		return param_set_uint(val, kp); | ||||
|   | ||||
| +	{
 | ||||
| +		struct net *net;
 | ||||
| +		unsigned int nr;
 | ||||
| +
 | ||||
| +		nr = 0;
 | ||||
| +		rtnl_lock();
 | ||||
| +		for_each_net(net)
 | ||||
| +			nr++;
 | ||||
| +		rtnl_unlock();
 | ||||
| +		/* init_net always exists */
 | ||||
| +		if (nr != 1)
 | ||||
| +			return -EINVAL;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	hashsize = simple_strtoul(val, NULL, 0); | ||||
|  	if (!hashsize) | ||||
|  		return -EINVAL; | ||||
| --- a/net/netfilter/nf_conntrack_expect.c
 | ||||
| +++ b/net/netfilter/nf_conntrack_expect.c
 | ||||
| @@ -569,7 +569,7 @@ static void exp_proc_remove(struct net *net)
 | ||||
|  #endif /* CONFIG_PROC_FS */ | ||||
|  } | ||||
|   | ||||
| -module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0600);
 | ||||
| +module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0400);
 | ||||
|   | ||||
|  int nf_conntrack_expect_init(struct net *net) | ||||
|  { | ||||
| 
 | ||||
							
								
								
									
										65
									
								
								revert-drm-kms-toggle-poll-around-switcheroo.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								revert-drm-kms-toggle-poll-around-switcheroo.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| From 69b711c0c5e3d9cb3a5b9f741fb4cdc96b5739cb Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@dreadnought.i.jkkm.org> | ||||
| Subject: Revert "drm/kms: disable/enable poll around switcheroo on/off" | ||||
| 
 | ||||
| This reverts commit fbf81762e385d3d45acad057b654d56972acf58c, mostly. | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/i915_dma.c         |    4 +--- | ||||
|  drivers/gpu/drm/nouveau/nouveau_state.c |    3 --- | ||||
|  drivers/gpu/drm/radeon/radeon_device.c  |    2 -- | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| index 59a2bf8..2df3286 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_dma.c
 | ||||
| @@ -1320,14 +1320,12 @@ static void i915_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_
 | ||||
|  	struct drm_device *dev = pci_get_drvdata(pdev); | ||||
|  	pm_message_t pmm = { .event = PM_EVENT_SUSPEND }; | ||||
|  	if (state == VGA_SWITCHEROO_ON) { | ||||
| -		printk(KERN_INFO "i915: switched on\n");
 | ||||
| +		printk(KERN_INFO "i915: switched off\n");
 | ||||
|  		/* i915 resume handler doesn't set to D0 */ | ||||
|  		pci_set_power_state(dev->pdev, PCI_D0); | ||||
|  		i915_resume(dev); | ||||
| -		drm_kms_helper_poll_enable(dev);
 | ||||
|  	} else { | ||||
|  		printk(KERN_ERR "i915: switched off\n"); | ||||
| -		drm_kms_helper_poll_disable(dev);
 | ||||
|  		i915_suspend(dev, pmm); | ||||
|  	} | ||||
|  } | ||||
| diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| index b02a231..0c28266 100644
 | ||||
| --- a/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| +++ b/drivers/gpu/drm/nouveau/nouveau_state.c
 | ||||
| @@ -376,15 +376,12 @@ out_err:
 | ||||
|  static void nouveau_switcheroo_set_state(struct pci_dev *pdev, | ||||
|  					 enum vga_switcheroo_state state) | ||||
|  { | ||||
| -	struct drm_device *dev = pci_get_drvdata(pdev);
 | ||||
|  	pm_message_t pmm = { .event = PM_EVENT_SUSPEND }; | ||||
|  	if (state == VGA_SWITCHEROO_ON) { | ||||
|  		printk(KERN_ERR "VGA switcheroo: switched nouveau on\n"); | ||||
|  		nouveau_pci_resume(pdev); | ||||
| -		drm_kms_helper_poll_enable(dev);
 | ||||
|  	} else { | ||||
|  		printk(KERN_ERR "VGA switcheroo: switched nouveau off\n"); | ||||
| -		drm_kms_helper_poll_disable(dev);
 | ||||
|  		nouveau_pci_suspend(pdev, pmm); | ||||
|  	} | ||||
|  } | ||||
| diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
 | ||||
| index f10faed..225a9f2 100644
 | ||||
| --- a/drivers/gpu/drm/radeon/radeon_device.c
 | ||||
| +++ b/drivers/gpu/drm/radeon/radeon_device.c
 | ||||
| @@ -546,10 +546,8 @@ static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switchero
 | ||||
|  		/* don't suspend or resume card normally */ | ||||
|  		rdev->powered_down = false; | ||||
|  		radeon_resume_kms(dev); | ||||
| -		drm_kms_helper_poll_enable(dev);
 | ||||
|  	} else { | ||||
|  		printk(KERN_INFO "radeon: switched off\n"); | ||||
| -		drm_kms_helper_poll_disable(dev);
 | ||||
|  		radeon_suspend_kms(dev, pmm); | ||||
|  		/* don't suspend or resume card normally */ | ||||
|  		rdev->powered_down = true; | ||||
							
								
								
									
										3
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								sources
									
									
									
									
									
								
							| @ -0,0 +1,3 @@ | ||||
| 10eebcb0178fb4540e2165bfd7efc7ad  linux-2.6.34.tar.bz2 | ||||
| ec36a4c6878e4638e2a78a317fef280d  patch-2.6.35-rc6-git1.bz2 | ||||
| 1205481c8d1b5ccecad87840ddaeaf81  patch-2.6.35-rc6.bz2 | ||||
							
								
								
									
										155
									
								
								ssb_check_for_sprom.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								ssb_check_for_sprom.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,155 @@ | ||||
| From 4d9d1ff88f920e9fcdde155c0a1366b7e0462d14 Mon Sep 17 00:00:00 2001 | ||||
| From: John W. Linville <linville@tuxdriver.com> | ||||
| Date: Fri, 19 Mar 2010 14:58:01 -0400 | ||||
| Subject: [PATCH v4] ssb: do not read SPROM if it does not exist | ||||
| 
 | ||||
| Attempting to read registers that don't exist on the SSB bus can cause | ||||
| hangs on some boxes.  At least some b43 devices are 'in the wild' that | ||||
| don't have SPROMs at all.  When the SSB bus support loads, it attempts | ||||
| to read these (non-existant) SPROMs and causes hard hangs on the box -- | ||||
| no console output, etc. | ||||
| 
 | ||||
| This patch adds some intelligence to determine whether or not the SPROM | ||||
| is present before attempting to read it.  This avoids those hard hangs | ||||
| on those devices with no SPROM attached to their SSB bus.  The | ||||
| SSB-attached devices (e.g. b43, et al.) won't work, but at least the box | ||||
| will survive to test further patches. :-) | ||||
| 
 | ||||
| Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||||
| Cc: Larry Finger <Larry.Finger@lwfinger.net> | ||||
| Cc: Michael Buesch <mb@bu3sch.de> | ||||
| Cc: stable@kernel.org | ||||
| ---
 | ||||
|  drivers/ssb/driver_chipcommon.c           |    3 +++ | ||||
|  drivers/ssb/pci.c                         |    3 +++ | ||||
|  drivers/ssb/sprom.c                       |   26 ++++++++++++++++++++++++++ | ||||
|  include/linux/ssb/ssb.h                   |    3 +++ | ||||
|  include/linux/ssb/ssb_driver_chipcommon.h |   15 +++++++++++++++ | ||||
|  5 files changed, 50 insertions(+), 0 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c
 | ||||
| index 9681536..6cf288d 100644
 | ||||
| --- a/drivers/ssb/driver_chipcommon.c
 | ||||
| +++ b/drivers/ssb/driver_chipcommon.c
 | ||||
| @@ -233,6 +233,9 @@ void ssb_chipcommon_init(struct ssb_chipcommon *cc)
 | ||||
|  { | ||||
|  	if (!cc->dev) | ||||
|  		return; /* We don't have a ChipCommon */ | ||||
| +	if (cc->dev->id.revision >= 11) {
 | ||||
| +		cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT);
 | ||||
| +	}
 | ||||
|  	ssb_pmu_init(cc); | ||||
|  	chipco_powercontrol_init(cc); | ||||
|  	ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST); | ||||
| diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
 | ||||
| index a8dbb06..89d7ab1 100644
 | ||||
| --- a/drivers/ssb/pci.c
 | ||||
| +++ b/drivers/ssb/pci.c
 | ||||
| @@ -621,6 +621,9 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
 | ||||
|  	int err = -ENOMEM; | ||||
|  	u16 *buf; | ||||
|   | ||||
| +	if (!ssb_is_sprom_available(bus))
 | ||||
| +		return -ENODEV;
 | ||||
| +
 | ||||
|  	buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); | ||||
|  	if (!buf) | ||||
|  		goto out; | ||||
| diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
 | ||||
| index f2f920f..c690f58 100644
 | ||||
| --- a/drivers/ssb/sprom.c
 | ||||
| +++ b/drivers/ssb/sprom.c
 | ||||
| @@ -176,3 +176,29 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
 | ||||
|  { | ||||
|  	return fallback_sprom; | ||||
|  } | ||||
| +
 | ||||
| +bool ssb_is_sprom_available(struct ssb_bus *bus)
 | ||||
| +{
 | ||||
| +	/* some older devices don't have chipcommon, but they have sprom */
 | ||||
| +	if (!bus->chipco.dev)
 | ||||
| +		return true;
 | ||||
| +
 | ||||
| +	/* status register only exists on chipcomon rev >= 11 */
 | ||||
| +	if (bus->chipco.dev->id.revision < 11)
 | ||||
| +		return true;
 | ||||
| +
 | ||||
| +	switch (bus->chip_id) {
 | ||||
| +	case 0x4312:
 | ||||
| +		return SSB_CHIPCO_CHST_4312_SPROM_PRESENT(bus->chipco.status);
 | ||||
| +	case 0x4322:
 | ||||
| +		return SSB_CHIPCO_CHST_4322_SPROM_PRESENT(bus->chipco.status);
 | ||||
| +	case 0x4325:
 | ||||
| +		return SSB_CHIPCO_CHST_4325_SPROM_PRESENT(bus->chipco.status);
 | ||||
| +	default:
 | ||||
| +		break;
 | ||||
| +	}
 | ||||
| +	if (bus->chipco.dev->id.revision >= 31)
 | ||||
| +		return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM;
 | ||||
| +
 | ||||
| +	return true;
 | ||||
| +}
 | ||||
| diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
 | ||||
| index 24f9885..3b4da23 100644
 | ||||
| --- a/include/linux/ssb/ssb.h
 | ||||
| +++ b/include/linux/ssb/ssb.h
 | ||||
| @@ -394,6 +394,9 @@ extern int ssb_bus_sdiobus_register(struct ssb_bus *bus,
 | ||||
|   | ||||
|  extern void ssb_bus_unregister(struct ssb_bus *bus); | ||||
|   | ||||
| +/* Does the device have an SPROM? */
 | ||||
| +extern bool ssb_is_sprom_available(struct ssb_bus *bus);
 | ||||
| +
 | ||||
|  /* Set a fallback SPROM. | ||||
|   * See kdoc at the function definition for complete documentation. */ | ||||
|  extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); | ||||
| diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h
 | ||||
| index 4e27acf..2cdf249 100644
 | ||||
| --- a/include/linux/ssb/ssb_driver_chipcommon.h
 | ||||
| +++ b/include/linux/ssb/ssb_driver_chipcommon.h
 | ||||
| @@ -53,6 +53,7 @@
 | ||||
|  #define  SSB_CHIPCO_CAP_64BIT		0x08000000	/* 64-bit Backplane */ | ||||
|  #define  SSB_CHIPCO_CAP_PMU		0x10000000	/* PMU available (rev >= 20) */ | ||||
|  #define  SSB_CHIPCO_CAP_ECI		0x20000000	/* ECI available (rev >= 20) */ | ||||
| +#define  SSB_CHIPCO_CAP_SPROM		0x40000000	/* SPROM present */
 | ||||
|  #define SSB_CHIPCO_CORECTL		0x0008 | ||||
|  #define  SSB_CHIPCO_CORECTL_UARTCLK0	0x00000001	/* Drive UART with internal clock */ | ||||
|  #define	 SSB_CHIPCO_CORECTL_SE		0x00000002	/* sync clk out enable (corerev >= 3) */ | ||||
| @@ -385,6 +386,7 @@
 | ||||
|   | ||||
|   | ||||
|  /** Chip specific Chip-Status register contents. */ | ||||
| +#define SSB_CHIPCO_CHST_4322_SPROM_EXISTS	0x00000040 /* SPROM present */
 | ||||
|  #define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL	0x00000003 | ||||
|  #define SSB_CHIPCO_CHST_4325_DEFCIS_SEL		0 /* OTP is powered up, use def. CIS, no SPROM */ | ||||
|  #define SSB_CHIPCO_CHST_4325_SPROM_SEL		1 /* OTP is powered up, SPROM is present */ | ||||
| @@ -398,6 +400,18 @@
 | ||||
|  #define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT	4 | ||||
|  #define SSB_CHIPCO_CHST_4325_PMUTOP_2B 		0x00000200 /* 1 for 2b, 0 for to 2a */ | ||||
|   | ||||
| +/** Macros to determine SPROM presence based on Chip-Status register. */
 | ||||
| +#define SSB_CHIPCO_CHST_4312_SPROM_PRESENT(status) \
 | ||||
| +	((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
 | ||||
| +		SSB_CHIPCO_CHST_4325_OTP_SEL)
 | ||||
| +#define SSB_CHIPCO_CHST_4322_SPROM_PRESENT(status) \
 | ||||
| +	(status & SSB_CHIPCO_CHST_4322_SPROM_EXISTS)
 | ||||
| +#define SSB_CHIPCO_CHST_4325_SPROM_PRESENT(status) \
 | ||||
| +	(((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
 | ||||
| +		SSB_CHIPCO_CHST_4325_DEFCIS_SEL) && \
 | ||||
| +	 ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
 | ||||
| +		SSB_CHIPCO_CHST_4325_OTP_SEL))
 | ||||
| +
 | ||||
|   | ||||
|   | ||||
|  /** Clockcontrol masks and values **/ | ||||
| @@ -564,6 +578,7 @@ struct ssb_chipcommon_pmu {
 | ||||
|  struct ssb_chipcommon { | ||||
|  	struct ssb_device *dev; | ||||
|  	u32 capabilities; | ||||
| +	u32 status;
 | ||||
|  	/* Fast Powerup Delay constant */ | ||||
|  	u16 fast_pwrup_delay; | ||||
|  	struct ssb_chipcommon_pmu pmu; | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										56
									
								
								thinkpad-acpi-fix-backlight.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								thinkpad-acpi-fix-backlight.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| diff -up linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c
 | ||||
| --- linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig	2010-05-17 16:28:13.254200070 -0400
 | ||||
| +++ linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c	2010-05-17 16:29:56.471200083 -0400
 | ||||
| @@ -3397,7 +3397,7 @@ static int __init hotkey_init(struct ibm
 | ||||
|  		/* update bright_acpimode... */ | ||||
|  		tpacpi_check_std_acpi_brightness_support(); | ||||
|   | ||||
| -	if (tp_features.bright_acpimode && acpi_video_backlight_support()) {
 | ||||
| +	if (acpi_video_backlight_support()) {
 | ||||
|  		printk(TPACPI_INFO | ||||
|  		       "This ThinkPad has standard ACPI backlight " | ||||
|  		       "brightness control, supported by the ACPI " | ||||
| @@ -6189,26 +6189,24 @@ static int __init brightness_init(struct
 | ||||
|  	 * going to publish a backlight interface | ||||
|  	 */ | ||||
|  	b = tpacpi_check_std_acpi_brightness_support(); | ||||
| -	if (b > 0) {
 | ||||
|   | ||||
| -		if (acpi_video_backlight_support()) {
 | ||||
| -			if (brightness_enable > 1) {
 | ||||
| -				printk(TPACPI_NOTICE
 | ||||
| -				       "Standard ACPI backlight interface "
 | ||||
| -				       "available, not loading native one.\n");
 | ||||
| -				return 1;
 | ||||
| -			} else if (brightness_enable == 1) {
 | ||||
| -				printk(TPACPI_NOTICE
 | ||||
| -				       "Backlight control force enabled, even if standard "
 | ||||
| -				       "ACPI backlight interface is available\n");
 | ||||
| -			}
 | ||||
| -		} else {
 | ||||
| -			if (brightness_enable > 1) {
 | ||||
| -				printk(TPACPI_NOTICE
 | ||||
| -				       "Standard ACPI backlight interface not "
 | ||||
| -				       "available, thinkpad_acpi native "
 | ||||
| -				       "brightness control enabled\n");
 | ||||
| -			}
 | ||||
| +	if (acpi_video_backlight_support()) {
 | ||||
| +		if (brightness_enable > 1) {
 | ||||
| +			printk(TPACPI_NOTICE
 | ||||
| +			       "Standard ACPI backlight interface "
 | ||||
| +			       "available, not loading native one.\n");
 | ||||
| +			return 1;
 | ||||
| +		} else if (brightness_enable == 1) {
 | ||||
| +			printk(TPACPI_NOTICE
 | ||||
| +			       "Backlight control force enabled, even if standard "
 | ||||
| +			       "ACPI backlight interface is available\n");
 | ||||
| +		}
 | ||||
| +	} else {
 | ||||
| +		if (brightness_enable > 1) {
 | ||||
| +			printk(TPACPI_NOTICE
 | ||||
| +			       "Standard ACPI backlight interface not "
 | ||||
| +			       "available, thinkpad_acpi native "
 | ||||
| +			       "brightness control enabled\n");
 | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
							
								
								
									
										29
									
								
								utrace-ptrace-fix-build.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								utrace-ptrace-fix-build.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| From 9b7ec0e07ce85c377b76626cef552d27d59cc405 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@dreadnought.i.jkkm.org> | ||||
| Date: Tue, 22 Jun 2010 13:57:47 +0100 | ||||
| Subject: utrace-ptrace: removed defunct arch_ptrace_untrace call | ||||
| 
 | ||||
| commit faa4602e removed the unused BTS code which had added | ||||
| this hook. | ||||
| 
 | ||||
| Signed-off-by: Kyle McMartin <kyle@redhat.com> | ||||
| ---
 | ||||
|  kernel/ptrace-utrace.c |    2 -- | ||||
|  1 files changed, 0 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
 | ||||
| index 86234ee..1a8ba5e 100644
 | ||||
| --- a/kernel/ptrace-utrace.c
 | ||||
| +++ b/kernel/ptrace-utrace.c
 | ||||
| @@ -50,8 +50,6 @@ void __ptrace_unlink(struct task_struct *child)
 | ||||
|  	child->ptrace = 0; | ||||
|  	child->parent = child->real_parent; | ||||
|  	list_del_init(&child->ptrace_entry); | ||||
| -
 | ||||
| -	arch_ptrace_untrace(child);
 | ||||
|  } | ||||
|   | ||||
|  struct ptrace_context { | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
							
								
								
									
										32
									
								
								utrace-remove-use-of-kref_set.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								utrace-remove-use-of-kref_set.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| From ad778e66100e4b76bab6b939e3d0c781da82d980 Mon Sep 17 00:00:00 2001 | ||||
| From: Kyle McMartin <kyle@dreadnought.i.jkkm.org> | ||||
| Date: Tue, 22 Jun 2010 14:09:30 +0100 | ||||
| Subject: utrace: remove use of kref_set | ||||
| 
 | ||||
| Unfortunatey db1afffa which removed kref_set did not anticipate | ||||
| anyone would actually like to use a kref which starts with a refcnt | ||||
| above 1. Replace kref_set in utrace with a kref_init + kref_get to | ||||
| immediately bump the reference count. | ||||
| 
 | ||||
| Signed-off-by: Kyle McMartin <kyle@redhat.com> | ||||
| ---
 | ||||
|  kernel/utrace.c |    3 ++- | ||||
|  1 files changed, 2 insertions(+), 1 deletions(-) | ||||
| 
 | ||||
| diff --git a/kernel/utrace.c b/kernel/utrace.c
 | ||||
| index f5a9e2c..cc864d5 100644
 | ||||
| --- a/kernel/utrace.c
 | ||||
| +++ b/kernel/utrace.c
 | ||||
| @@ -304,7 +304,8 @@ struct utrace_engine *utrace_attach_task(
 | ||||
|  	 * Initialize the new engine structure.  It starts out with two | ||||
|  	 * refs: one ref to return, and one ref for being attached. | ||||
|  	 */ | ||||
| -	kref_set(&engine->kref, 2);
 | ||||
| +	kref_init(&engine->kref);
 | ||||
| +	kref_get(&engine->kref);
 | ||||
|  	engine->flags = 0; | ||||
|  	engine->ops = ops; | ||||
|  	engine->data = data; | ||||
| -- 
 | ||||
| 1.7.0.1 | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user