diff options
97 files changed, 1394 insertions, 642 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 602022d2c7a5..412eff60c33d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3411,8 +3411,10 @@ S:	Maintained  F:	drivers/scsi/sym53c8xx_2/  LTP (Linux Test Project) -M:	Subrata Modak <subrata@linux.vnet.ibm.com> -M:	Mike Frysinger <vapier@gentoo.org> +M:	Rishikesh K Rajak <risrajak@linux.vnet.ibm.com> +M:	Garrett Cooper <yanegomi@gmail.com> +M:     Mike Frysinger <vapier@gentoo.org> +M:     Subrata Modak <subrata@linux.vnet.ibm.com>  L:	ltp-list@lists.sourceforge.net (subscribers-only)  W:	http://ltp.sourceforge.net/  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c index 0c3c72d934bf..8afe9dd3f150 100644 --- a/arch/arm/mach-omap2/mmc-twl4030.c +++ b/arch/arm/mach-omap2/mmc-twl4030.c @@ -408,6 +408,7 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  {  	struct twl4030_hsmmc_info *c;  	int nr_hsmmc = ARRAY_SIZE(hsmmc_data); +	int i;  	if (cpu_is_omap2430()) {  		control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; @@ -434,7 +435,7 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  		mmc = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);  		if (!mmc) {  			pr_err("Cannot allocate memory for mmc device!\n"); -			return; +			goto done;  		}  		if (c->name) @@ -532,6 +533,10 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)  			continue;  		c->dev = mmc->dev;  	} + +done: +	for (i = 0; i < nr_hsmmc; i++) +		kfree(hsmmc_data[i]);  }  #endif diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig index ed84b4cb3c8d..84b6503f10b9 100644 --- a/arch/mips/configs/ip27_defconfig +++ b/arch/mips/configs/ip27_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.23-rc2 -# Tue Aug  7 13:04:24 2007 +# Linux kernel version: 2.6.33-rc6 +# Wed Feb  3 18:12:31 2010  #  CONFIG_MIPS=y @@ -9,20 +9,28 @@ CONFIG_MIPS=y  # Machine selection  #  # CONFIG_MACH_ALCHEMY is not set +# CONFIG_AR7 is not set +# CONFIG_BCM47XX is not set +# CONFIG_BCM63XX is not set  # CONFIG_MIPS_COBALT is not set  # CONFIG_MACH_DECSTATION is not set  # CONFIG_MACH_JAZZ is not set -# CONFIG_LEMOTE_FULONG is not set +# CONFIG_LASAT is not set +# CONFIG_MACH_LOONGSON is not set  # CONFIG_MIPS_MALTA is not set  # CONFIG_MIPS_SIM is not set -# CONFIG_MARKEINS is not set +# CONFIG_NEC_MARKEINS is not set  # CONFIG_MACH_VR41XX is not set +# CONFIG_NXP_STB220 is not set +# CONFIG_NXP_STB225 is not set  # CONFIG_PNX8550_JBS is not set  # CONFIG_PNX8550_STB810 is not set  # CONFIG_PMC_MSP is not set  # CONFIG_PMC_YOSEMITE is not set +# CONFIG_POWERTV is not set  # CONFIG_SGI_IP22 is not set  CONFIG_SGI_IP27=y +# CONFIG_SGI_IP28 is not set  # CONFIG_SGI_IP32 is not set  # CONFIG_SIBYTE_CRHINE is not set  # CONFIG_SIBYTE_CARMEL is not set @@ -33,32 +41,39 @@ CONFIG_SGI_IP27=y  # CONFIG_SIBYTE_SENTOSA is not set  # CONFIG_SIBYTE_BIGSUR is not set  # CONFIG_SNI_RM is not set -# CONFIG_TOSHIBA_JMR3927 is not set -# CONFIG_TOSHIBA_RBTX4927 is not set -# CONFIG_TOSHIBA_RBTX4938 is not set +# CONFIG_MACH_TX39XX is not set +# CONFIG_MACH_TX49XX is not set +# CONFIG_MIKROTIK_RB532 is not set  # CONFIG_WR_PPMC is not set +# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set +# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set +# CONFIG_ALCHEMY_GPIO_INDIRECT is not set  CONFIG_SGI_SN_M_MODE=y  # CONFIG_SGI_SN_N_MODE is not set  # CONFIG_MAPPED_KERNEL is not set  # CONFIG_REPLICATE_KTEXT is not set  # CONFIG_REPLICATE_EXHANDLERS is not set +CONFIG_LOONGSON_UART_BASE=y  CONFIG_RWSEM_GENERIC_SPINLOCK=y  # CONFIG_ARCH_HAS_ILOG2_U32 is not set  # CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_SUPPORTS_OPROFILE=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_TIME=y -CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y  CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_ARC=y  CONFIG_DMA_COHERENT=y -CONFIG_EARLY_PRINTK=y  CONFIG_SYS_HAS_EARLY_PRINTK=y  # CONFIG_NO_IOPORT is not set  CONFIG_CPU_BIG_ENDIAN=y  # CONFIG_CPU_LITTLE_ENDIAN is not set  CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y +CONFIG_DEFAULT_SGI_PARTITION=y  CONFIG_MIPS_L1_CACHE_SHIFT=7  CONFIG_ARC64=y  CONFIG_BOOT_ELF64=y @@ -66,7 +81,8 @@ CONFIG_BOOT_ELF64=y  #  # CPU selection  # -# CONFIG_CPU_LOONGSON2 is not set +# CONFIG_CPU_LOONGSON2E is not set +# CONFIG_CPU_LOONGSON2F is not set  # CONFIG_CPU_MIPS32_R1 is not set  # CONFIG_CPU_MIPS32_R2 is not set  # CONFIG_CPU_MIPS64_R1 is not set @@ -79,6 +95,7 @@ CONFIG_BOOT_ELF64=y  # CONFIG_CPU_TX49XX is not set  # CONFIG_CPU_R5000 is not set  # CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R5500 is not set  # CONFIG_CPU_R6000 is not set  # CONFIG_CPU_NEVADA is not set  # CONFIG_CPU_R8000 is not set @@ -86,6 +103,7 @@ CONFIG_CPU_R10000=y  # CONFIG_CPU_RM7000 is not set  # CONFIG_CPU_RM9000 is not set  # CONFIG_CPU_SB1 is not set +# CONFIG_CPU_CAVIUM_OCTEON is not set  CONFIG_SYS_HAS_CPU_R10000=y  CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y  CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y @@ -99,6 +117,7 @@ CONFIG_64BIT=y  CONFIG_PAGE_SIZE_4KB=y  # CONFIG_PAGE_SIZE_8KB is not set  # CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_32KB is not set  # CONFIG_PAGE_SIZE_64KB is not set  CONFIG_CPU_HAS_PREFETCH=y  CONFIG_MIPS_MT_DISABLED=y @@ -110,6 +129,7 @@ CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_IRQ_PER_CPU=y  CONFIG_CPU_SUPPORTS_HIGHMEM=y  CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y  CONFIG_NUMA=y  CONFIG_SYS_SUPPORTS_NUMA=y  CONFIG_NODES_SHIFT=6 @@ -120,16 +140,22 @@ CONFIG_DISCONTIGMEM_MANUAL=y  CONFIG_DISCONTIGMEM=y  CONFIG_FLAT_NODE_MEM_MAP=y  CONFIG_NEED_MULTIPLE_NODES=y -# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_PAGEFLAGS_EXTENDED=y  CONFIG_SPLIT_PTLOCK_CPUS=4  CONFIG_MIGRATION=y -CONFIG_RESOURCES_64BIT=y +CONFIG_PHYS_ADDR_T_64BIT=y  CONFIG_ZONE_DMA_FLAG=0  CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536  CONFIG_SMP=y  CONFIG_SYS_SUPPORTS_SMP=y  CONFIG_NR_CPUS_DEFAULT_64=y  CONFIG_NR_CPUS=64 +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y  # CONFIG_HZ_48 is not set  # CONFIG_HZ_100 is not set  # CONFIG_HZ_128 is not set @@ -142,13 +168,13 @@ CONFIG_HZ=1000  CONFIG_PREEMPT_NONE=y  # CONFIG_PREEMPT_VOLUNTARY is not set  # CONFIG_PREEMPT is not set -CONFIG_PREEMPT_BKL=y  # CONFIG_MIPS_INSANE_LARGE is not set  # CONFIG_KEXEC is not set  CONFIG_SECCOMP=y  CONFIG_LOCKDEP_SUPPORT=y  CONFIG_STACKTRACE_SUPPORT=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y  #  # General setup @@ -162,20 +188,41 @@ CONFIG_SWAP=y  CONFIG_SYSVIPC=y  CONFIG_SYSVIPC_SYSCTL=y  CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y  # CONFIG_BSD_PROCESS_ACCT is not set  # CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set  # CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=64 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_GROUP_SCHED is not set  CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +# CONFIG_CGROUP_NS is not set +# CONFIG_CGROUP_FREEZER is not set +# CONFIG_CGROUP_DEVICE is not set  CONFIG_CPUSETS=y -CONFIG_SYSFS_DEPRECATED=y +CONFIG_PROC_PID_CPUSET=y +# CONFIG_CGROUP_CPUACCT is not set +# CONFIG_RESOURCE_COUNTERS is not set +# CONFIG_SYSFS_DEPRECATED_V2 is not set  CONFIG_RELAY=y +# CONFIG_NAMESPACES is not set  # CONFIG_BLK_DEV_INITRD is not set  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set  CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y  CONFIG_EMBEDDED=y  CONFIG_SYSCTL_SYSCALL=y  CONFIG_KALLSYMS=y @@ -184,44 +231,92 @@ CONFIG_HOTPLUG=y  CONFIG_PRINTK=y  CONFIG_BUG=y  CONFIG_ELF_CORE=y +# CONFIG_PCSPKR_PLATFORM is not set  CONFIG_BASE_FULL=y  CONFIG_FUTEX=y -CONFIG_ANON_INODES=y  CONFIG_EPOLL=y  CONFIG_SIGNALFD=y  CONFIG_TIMERFD=y  CONFIG_EVENTFD=y  CONFIG_SHMEM=y +CONFIG_AIO=y + +# +# Kernel Performance Events And Counters +#  CONFIG_VM_EVENT_COUNTERS=y +CONFIG_PCI_QUIRKS=y +CONFIG_COMPAT_BRK=y  CONFIG_SLAB=y  # CONFIG_SLUB is not set  # CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_SYSCALL_WRAPPERS=y +CONFIG_USE_GENERIC_SMP_HELPERS=y + +# +# GCOV-based kernel profiling +# +CONFIG_SLOW_WORK=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set  CONFIG_BASE_SMALL=0  CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set  CONFIG_MODULE_UNLOAD=y  # CONFIG_MODULE_FORCE_UNLOAD is not set  # CONFIG_MODVERSIONS is not set  CONFIG_MODULE_SRCVERSION_ALL=y -CONFIG_KMOD=y  CONFIG_STOP_MACHINE=y  CONFIG_BLOCK=y -# CONFIG_BLK_DEV_IO_TRACE is not set  # CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set +# CONFIG_BLK_CGROUP is not set +CONFIG_BLOCK_COMPAT=y  #  # IO Schedulers  #  CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y  CONFIG_IOSCHED_DEADLINE=y  CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y +# CONFIG_CFQ_GROUP_IOSCHED is not set  # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y  # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_MUTEX_SPIN_ON_OWNER=y +# CONFIG_FREEZER is not set  #  # Bus options (PCI, PCMCIA, EISA, ISA, TC) @@ -230,11 +325,10 @@ CONFIG_HW_HAS_PCI=y  CONFIG_PCI=y  CONFIG_PCI_DOMAINS=y  # CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCI_LEGACY is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set  CONFIG_MMU=y - -# -# PCCARD (PCMCIA/CardBus) support -#  # CONFIG_PCCARD is not set  # CONFIG_HOTPLUG_PCI is not set @@ -242,8 +336,9 @@ CONFIG_MMU=y  # Executable file formats  #  CONFIG_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +# CONFIG_HAVE_AOUT is not set  # CONFIG_BINFMT_MISC is not set -# CONFIG_BUILD_ELF64 is not set  CONFIG_MIPS32_COMPAT=y  CONFIG_COMPAT=y  CONFIG_SYSVIPC_COMPAT=y @@ -255,13 +350,10 @@ CONFIG_BINFMT_ELF32=y  # Power management options  #  CONFIG_PM=y -# CONFIG_PM_LEGACY is not set  # CONFIG_PM_DEBUG is not set - -# -# Networking -# +# CONFIG_PM_RUNTIME is not set  CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y  #  # Networking options @@ -273,6 +365,8 @@ CONFIG_XFRM=y  CONFIG_XFRM_USER=m  # CONFIG_XFRM_SUB_POLICY is not set  CONFIG_XFRM_MIGRATE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_IPCOMP=m  CONFIG_NET_KEY=y  CONFIG_NET_KEY_MIGRATE=y  CONFIG_INET=y @@ -292,19 +386,40 @@ CONFIG_IP_PNP=y  # CONFIG_INET_ESP is not set  # CONFIG_INET_IPCOMP is not set  # CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set +CONFIG_INET_TUNNEL=m  CONFIG_INET_XFRM_MODE_TRANSPORT=m  CONFIG_INET_XFRM_MODE_TUNNEL=m  CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=y  CONFIG_INET_DIAG=y  CONFIG_INET_TCP_DIAG=y  # CONFIG_TCP_CONG_ADVANCED is not set  CONFIG_TCP_CONG_CUBIC=y  CONFIG_DEFAULT_TCP_CONG="cubic"  CONFIG_TCP_MD5SIG=y -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_PIMSM_V2=y  CONFIG_NETWORK_SECMARK=y  # CONFIG_NETFILTER is not set  # CONFIG_IP_DCCP is not set @@ -314,9 +429,11 @@ CONFIG_IP_SCTP=m  # CONFIG_SCTP_HMAC_NONE is not set  # CONFIG_SCTP_HMAC_SHA1 is not set  CONFIG_SCTP_HMAC_MD5=y +# CONFIG_RDS is not set  # CONFIG_TIPC is not set  # CONFIG_ATM is not set  # CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set  # CONFIG_VLAN_8021Q is not set  # CONFIG_DECNET is not set  # CONFIG_LLC2 is not set @@ -326,12 +443,9 @@ CONFIG_SCTP_HMAC_MD5=y  # CONFIG_LAPB is not set  # CONFIG_ECONET is not set  # CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set  CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=y  #  # Queueing/Scheduling @@ -340,7 +454,7 @@ CONFIG_NET_SCH_CBQ=m  CONFIG_NET_SCH_HTB=m  CONFIG_NET_SCH_HFSC=m  CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_MULTIQ=y  CONFIG_NET_SCH_RED=m  CONFIG_NET_SCH_SFQ=m  CONFIG_NET_SCH_TEQL=m @@ -348,6 +462,7 @@ CONFIG_NET_SCH_TBF=m  CONFIG_NET_SCH_GRED=m  CONFIG_NET_SCH_DSMARK=m  CONFIG_NET_SCH_NETEM=m +# CONFIG_NET_SCH_DRR is not set  CONFIG_NET_SCH_INGRESS=m  # @@ -364,41 +479,63 @@ CONFIG_NET_CLS_U32=m  CONFIG_CLS_U32_MARK=y  CONFIG_NET_CLS_RSVP=m  CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=y  # CONFIG_NET_EMATCH is not set  CONFIG_NET_CLS_ACT=y  CONFIG_NET_ACT_POLICE=y  CONFIG_NET_ACT_GACT=m  CONFIG_GACT_PROB=y  CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m  CONFIG_NET_ACT_PEDIT=m  # CONFIG_NET_ACT_SIMP is not set -CONFIG_NET_CLS_POLICE=y +CONFIG_NET_ACT_SKBEDIT=m  # CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set  #  # Network testing  #  # CONFIG_NET_PKTGEN is not set  # CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set  # CONFIG_IRDA is not set  # CONFIG_BT is not set  # CONFIG_AF_RXRPC is not set - -# -# Wireless -# -CONFIG_CFG80211=m +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y  CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_WIRELESS_OLD_REGULATORY is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set  CONFIG_MAC80211=m -# CONFIG_MAC80211_DEBUG is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set  CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y  # CONFIG_NET_9P is not set  # @@ -408,9 +545,13 @@ CONFIG_RFKILL=m  #  # Generic Driver Options  # +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set  CONFIG_STANDALONE=y  CONFIG_PREVENT_FIRMWARE_BUILD=y  CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE=""  # CONFIG_SYS_HYPERVISOR is not set  CONFIG_CONNECTOR=m  # CONFIG_MTD is not set @@ -423,14 +564,19 @@ CONFIG_BLK_DEV=y  # CONFIG_BLK_DEV_COW_COMMON is not set  CONFIG_BLK_DEV_LOOP=y  CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_DRBD is not set  # CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_OSD=m  # CONFIG_BLK_DEV_SX8 is not set  # CONFIG_BLK_DEV_RAM is not set  CONFIG_CDROM_PKTCDVD=m  CONFIG_CDROM_PKTCDVD_BUFFERS=8  # CONFIG_CDROM_PKTCDVD_WCACHE is not set  CONFIG_ATA_OVER_ETH=m +# CONFIG_BLK_DEV_HD is not set  # CONFIG_MISC_DEVICES is not set +CONFIG_EEPROM_93CX6=m +CONFIG_HAVE_IDE=y  # CONFIG_IDE is not set  # @@ -453,10 +599,6 @@ CONFIG_BLK_DEV_SR=m  CONFIG_BLK_DEV_SR_VENDOR=y  CONFIG_CHR_DEV_SG=m  CONFIG_CHR_DEV_SCH=m - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -#  # CONFIG_SCSI_MULTI_LUN is not set  CONFIG_SCSI_CONSTANTS=y  CONFIG_SCSI_LOGGING=y @@ -471,11 +613,18 @@ CONFIG_SCSI_FC_ATTRS=y  CONFIG_SCSI_ISCSI_ATTRS=m  CONFIG_SCSI_SAS_ATTRS=m  CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_HOST_SMP=y  # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set +# CONFIG_SCSI_SRP_ATTRS is not set  CONFIG_SCSI_LOWLEVEL=y  # CONFIG_ISCSI_TCP is not set +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_BE2ISCSI=m  # CONFIG_BLK_DEV_3W_XXXX_RAID is not set +CONFIG_SCSI_HPSA=m  # CONFIG_SCSI_3W_9XXX is not set +CONFIG_SCSI_3W_SAS=m  # CONFIG_SCSI_ACARD is not set  # CONFIG_SCSI_AACRAID is not set  # CONFIG_SCSI_AIC7XXX is not set @@ -483,11 +632,21 @@ CONFIG_SCSI_LOWLEVEL=y  # CONFIG_SCSI_AIC79XX is not set  CONFIG_SCSI_AIC94XX=m  # CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +CONFIG_SCSI_DPT_I2O=m +# CONFIG_SCSI_ADVANSYS is not set  # CONFIG_SCSI_ARCMSR is not set  # CONFIG_MEGARAID_NEWGEN is not set  # CONFIG_MEGARAID_LEGACY is not set  # CONFIG_MEGARAID_SAS is not set +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +# CONFIG_SCSI_MPT2SAS_LOGGING is not set  # CONFIG_SCSI_HPTIOP is not set +CONFIG_LIBFC=m +# CONFIG_LIBFCOE is not set +# CONFIG_FCOE is not set  # CONFIG_SCSI_DMX3191D is not set  # CONFIG_SCSI_FUTURE_DOMAIN is not set  # CONFIG_SCSI_IPS is not set @@ -502,16 +661,31 @@ CONFIG_SCSI_QLOGIC_1280=y  # CONFIG_SCSI_DC395x is not set  # CONFIG_SCSI_DC390T is not set  # CONFIG_SCSI_DEBUG is not set +CONFIG_SCSI_PMCRAID=m +# CONFIG_SCSI_PM8001 is not set  # CONFIG_SCSI_SRP is not set +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_DH=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +# CONFIG_SCSI_OSD_DEBUG is not set  # CONFIG_ATA is not set  CONFIG_MD=y  CONFIG_BLK_DEV_MD=y +CONFIG_MD_AUTODETECT=y  CONFIG_MD_LINEAR=m  CONFIG_MD_RAID0=y  CONFIG_MD_RAID1=y  CONFIG_MD_RAID10=m  CONFIG_MD_RAID456=y -CONFIG_MD_RAID5_RESHAPE=y +# CONFIG_MULTICORE_RAID456 is not set +CONFIG_MD_RAID6_PQ=y +# CONFIG_ASYNC_RAID6_TEST is not set  CONFIG_MD_MULTIPATH=m  CONFIG_MD_FAULTY=m  CONFIG_BLK_DEV_DM=m @@ -519,36 +693,39 @@ CONFIG_BLK_DEV_DM=m  CONFIG_DM_CRYPT=m  CONFIG_DM_SNAPSHOT=m  CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m  CONFIG_DM_ZERO=m  CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_EMC=m -CONFIG_DM_MULTIPATH_RDAC=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m  # CONFIG_DM_DELAY is not set +CONFIG_DM_UEVENT=y +# CONFIG_FUSION is not set  # -# Fusion MPT device support +# IEEE 1394 (FireWire) support  # -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set  # -# IEEE 1394 (FireWire) support +# You can enable one or both FireWire driver stacks. +# + +# +# The newer stack is recommended.  #  # CONFIG_FIREWIRE is not set  # CONFIG_IEEE1394 is not set  # CONFIG_I2O is not set  CONFIG_NETDEVICES=y -CONFIG_NETDEVICES_MULTIQUEUE=y  CONFIG_IFB=m  # CONFIG_DUMMY is not set  # CONFIG_BONDING is not set  CONFIG_MACVLAN=m  # CONFIG_EQUALIZER is not set  # CONFIG_TUN is not set +CONFIG_VETH=m  # CONFIG_ARCNET is not set -CONFIG_PHYLIB=m +CONFIG_PHYLIB=y  #  # MII PHY device drivers @@ -562,23 +739,51 @@ CONFIG_VITESSE_PHY=m  CONFIG_SMSC_PHY=m  # CONFIG_BROADCOM_PHY is not set  CONFIG_ICPLUS_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_NATIONAL_PHY=m +CONFIG_STE10XP=m +CONFIG_LSI_ET1011C_PHY=m  # CONFIG_FIXED_PHY is not set +CONFIG_MDIO_BITBANG=m  CONFIG_NET_ETHERNET=y  CONFIG_MII=y  CONFIG_AX88796=m +CONFIG_AX88796_93CX6=y  CONFIG_SGI_IOC3_ETH=y  # CONFIG_HAPPYMEAL is not set  # CONFIG_SUNGEM is not set  # CONFIG_CASSINI is not set  # CONFIG_NET_VENDOR_3COM is not set +CONFIG_SMC91X=m  # CONFIG_DM9000 is not set +CONFIG_ETHOC=m +CONFIG_SMSC911X=m +CONFIG_DNET=m  # CONFIG_NET_TULIP is not set  # CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set  # CONFIG_NET_PCI is not set +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_KS8842=m +CONFIG_KS8851_MLL=m +CONFIG_ATL2=m  CONFIG_NETDEV_1000=y  # CONFIG_ACENIC is not set  # CONFIG_DL2K is not set  # CONFIG_E1000 is not set +CONFIG_E1000E=m +CONFIG_IP1000=m +CONFIG_IGB=m +CONFIG_IGBVF=m  # CONFIG_NS83820 is not set  # CONFIG_HAMACHI is not set  # CONFIG_YELLOWFIN is not set @@ -588,24 +793,75 @@ CONFIG_NETDEV_1000=y  # CONFIG_SKY2 is not set  CONFIG_VIA_VELOCITY=m  # CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set +CONFIG_BNX2=m +CONFIG_CNIC=m  CONFIG_QLA3XXX=m  # CONFIG_ATL1 is not set +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_JME=m  CONFIG_NETDEV_10000=y +CONFIG_MDIO=m  # CONFIG_CHELSIO_T1 is not set +CONFIG_CHELSIO_T3_DEPENDS=y  CONFIG_CHELSIO_T3=m +CONFIG_ENIC=m +CONFIG_IXGBE=m  # CONFIG_IXGB is not set  # CONFIG_S2IO is not set +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set  # CONFIG_MYRI10GE is not set  CONFIG_NETXEN_NIC=m -# CONFIG_MLX4_CORE is not set +CONFIG_NIU=m +CONFIG_MLX4_EN=m +CONFIG_MLX4_CORE=m +# CONFIG_MLX4_DEBUG is not set +CONFIG_TEHUTI=m +CONFIG_BNX2X=m +CONFIG_QLGE=m +CONFIG_SFC=m +CONFIG_BE2NET=m  # CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -CONFIG_WLAN_80211=y +CONFIG_WLAN=y +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PRISM54=m +CONFIG_RTL8180=m +CONFIG_ADM8211=m +# CONFIG_MAC80211_HWSIM is not set +CONFIG_MWL8K=m +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K=m +CONFIG_B43=m +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m  CONFIG_IPW2100=m  CONFIG_IPW2100_MONITOR=y  CONFIG_IPW2100_DEBUG=y @@ -615,38 +871,57 @@ CONFIG_IPW2200_RADIOTAP=y  CONFIG_IPW2200_PROMISCUOUS=y  CONFIG_IPW2200_QOS=y  CONFIG_IPW2200_DEBUG=y +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_IWLWIFI=m +CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLAGN=m +CONFIG_IWL4965=y +CONFIG_IWL5000=y +CONFIG_IWL3945=m +CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y  CONFIG_LIBERTAS=m  # CONFIG_LIBERTAS_DEBUG is not set  CONFIG_HERMES=m +# CONFIG_HERMES_CACHE_FW_ON_INIT is not set  CONFIG_PLX_HERMES=m  CONFIG_TMD_HERMES=m  CONFIG_NORTEL_HERMES=m  CONFIG_PCI_HERMES=m -CONFIG_ATMEL=m -CONFIG_PCI_ATMEL=m -CONFIG_PRISM54=m -CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -CONFIG_HOSTAP_FIRMWARE_NVRAM=y -CONFIG_HOSTAP_PLX=m -CONFIG_HOSTAP_PCI=m -CONFIG_BCM43XX=m -CONFIG_BCM43XX_DEBUG=y -CONFIG_BCM43XX_DMA=y -CONFIG_BCM43XX_PIO=y -CONFIG_BCM43XX_DMA_AND_PIO_MODE=y -# CONFIG_BCM43XX_DMA_MODE is not set -# CONFIG_BCM43XX_PIO_MODE is not set +CONFIG_P54_COMMON=m +CONFIG_P54_PCI=m +CONFIG_P54_LEDS=y +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI_PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800_LIB=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_HT=y +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WL12XX=m +CONFIG_WL1251=m + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +#  # CONFIG_WAN is not set  # CONFIG_FDDI is not set  # CONFIG_HIPPI is not set  # CONFIG_PPP is not set  # CONFIG_SLIP is not set  # CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set  # CONFIG_NETCONSOLE is not set  # CONFIG_NETPOLL is not set  # CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set  # CONFIG_ISDN is not set  # CONFIG_PHONE is not set @@ -664,13 +939,16 @@ CONFIG_SERIO_SERPORT=y  # CONFIG_SERIO_PCIPS2 is not set  CONFIG_SERIO_LIBPS2=m  CONFIG_SERIO_RAW=m +CONFIG_SERIO_ALTERA_PS2=m  # CONFIG_GAMEPORT is not set  #  # Character devices  #  # CONFIG_VT is not set +CONFIG_DEVKMEM=y  # CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_NOZOMI=m  #  # Serial drivers @@ -693,95 +971,258 @@ CONFIG_SERIAL_CORE=y  CONFIG_SERIAL_CORE_CONSOLE=y  # CONFIG_SERIAL_JSM is not set  CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y  CONFIG_LEGACY_PTYS=y  CONFIG_LEGACY_PTY_COUNT=256  # CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set  CONFIG_HW_RANDOM=m -# CONFIG_RTC is not set +CONFIG_HW_RANDOM_TIMERIOMEM=m  # CONFIG_R3964 is not set  # CONFIG_APPLICOM is not set -# CONFIG_DRM is not set  # CONFIG_RAW_DRIVER is not set  # CONFIG_TCG_TPM is not set  CONFIG_DEVPORT=y -# CONFIG_I2C is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m  # -# SPI support +# I2C system bus drivers (mostly embedded / system-on-chip)  # +CONFIG_I2C_OCORES=m +CONFIG_I2C_SIMTEC=m + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_TAOS_EVM=m + +# +# Other I2C/SMBus bus drivers +# +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_STUB=m + +# +# Miscellaneous I2C Chip support +# +CONFIG_SENSORS_TSL2550=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set  # CONFIG_SPI is not set -# CONFIG_SPI_MASTER is not set + +# +# PPS support +# +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set  # CONFIG_W1 is not set  # CONFIG_POWER_SUPPLY is not set  # CONFIG_HWMON is not set +CONFIG_THERMAL=m +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y  # -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_SSB_DRIVER_MIPS is not set  # -# Multimedia devices +# Multifunction device drivers  # -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set +# CONFIG_MFD_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_WM8400 is not set +CONFIG_MFD_WM8350=m +CONFIG_MFD_WM8350_I2C=m +CONFIG_MFD_PCF50633=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_AB3100_CORE=m +CONFIG_AB3100_OTP=m +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set  #  # Graphics support  # -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGA_ARB is not set +# CONFIG_DRM is not set  # CONFIG_VGASTATE is not set  # CONFIG_VIDEO_OUTPUT_CONTROL is not set  # CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set  # -# Sound +# Display device support  # +# CONFIG_DISPLAY_SUPPORT is not set  # CONFIG_SOUND is not set  CONFIG_USB_SUPPORT=y  CONFIG_USB_ARCH_HAS_HCD=y  CONFIG_USB_ARCH_HAS_OHCI=y  CONFIG_USB_ARCH_HAS_EHCI=y  # CONFIG_USB is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set  # -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# Enable Host or Gadget support to see Inventra options  #  # -# USB Gadget Support +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may  #  # CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_UWB is not set  # CONFIG_MMC is not set -# CONFIG_NEW_LEDS is not set -# CONFIG_INFINIBAND is not set -# CONFIG_RTC_CLASS is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_BD2802=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m  # -# DMA Engine support +# iptables trigger is under Netfilter config (LED target)  # -# CONFIG_DMA_ENGINE is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set  # -# DMA Clients +# RTC interfaces  # +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set  # -# DMA Devices +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# +  # +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_M48T35=y +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_WM8350 is not set +# CONFIG_RTC_DRV_PCF50633 is not set +CONFIG_RTC_DRV_AB3100=m  # -# Userspace I/O +# on-CPU RTC drivers  # +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set  CONFIG_UIO=y  # CONFIG_UIO_CIF is not set +# CONFIG_UIO_PDRV is not set +# CONFIG_UIO_PDRV_GENIRQ is not set +CONFIG_UIO_SMX=m +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m + +# +# TI VLYNQ +# +# CONFIG_STAGING is not set  #  # File systems @@ -792,36 +1233,58 @@ CONFIG_EXT2_FS_POSIX_ACL=y  CONFIG_EXT2_FS_SECURITY=y  # CONFIG_EXT2_FS_XIP is not set  CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set  CONFIG_EXT3_FS_XATTR=y  CONFIG_EXT3_FS_POSIX_ACL=y  CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set  CONFIG_JBD=y -CONFIG_JBD_DEBUG=y +CONFIG_JBD2=y  CONFIG_FS_MBCACHE=y  # CONFIG_REISERFS_FS is not set  # CONFIG_JFS_FS is not set  CONFIG_FS_POSIX_ACL=y  CONFIG_XFS_FS=m  CONFIG_XFS_QUOTA=y -CONFIG_XFS_SECURITY=y  CONFIG_XFS_POSIX_ACL=y  # CONFIG_XFS_RT is not set +# CONFIG_XFS_DEBUG is not set  # CONFIG_GFS2_FS is not set  # CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y  CONFIG_INOTIFY=y  CONFIG_INOTIFY_USER=y  # CONFIG_QUOTA is not set +CONFIG_QUOTA_NETLINK_INTERFACE=y  CONFIG_QUOTACTL=y -CONFIG_DNOTIFY=y  CONFIG_AUTOFS_FS=m  # CONFIG_AUTOFS4_FS is not set  CONFIG_FUSE_FS=m +CONFIG_CUSE=m  CONFIG_GENERIC_ACL=y  # +# Caches +# +CONFIG_FSCACHE=m +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +#  # CD-ROM/DVD Filesystems  #  # CONFIG_ISO9660_FS is not set @@ -840,16 +1303,13 @@ CONFIG_GENERIC_ACL=y  CONFIG_PROC_FS=y  CONFIG_PROC_KCORE=y  CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y  CONFIG_SYSFS=y  CONFIG_TMPFS=y  CONFIG_TMPFS_POSIX_ACL=y  # CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y  CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# +CONFIG_MISC_FILESYSTEMS=y  # CONFIG_ADFS_FS is not set  # CONFIG_AFFS_FS is not set  # CONFIG_ECRYPT_FS is not set @@ -859,28 +1319,32 @@ CONFIG_CONFIGFS_FS=m  # CONFIG_BFS_FS is not set  # CONFIG_EFS_FS is not set  # CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3  # CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_OMFS_FS=m  # CONFIG_HPFS_FS is not set  # CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set  # CONFIG_SYSV_FS is not set  # CONFIG_UFS_FS is not set - -# -# Network File Systems -# +CONFIG_EXOFS_FS=m +# CONFIG_EXOFS_DEBUG is not set +CONFIG_NETWORK_FILESYSTEMS=y  CONFIG_NFS_FS=y  CONFIG_NFS_V3=y  # CONFIG_NFS_V3_ACL is not set  # CONFIG_NFS_V4 is not set -# CONFIG_NFS_DIRECTIO is not set -# CONFIG_NFSD is not set  # CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set  CONFIG_LOCKD=y  CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m  CONFIG_NFS_COMMON=y  CONFIG_SUNRPC=y  CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set  CONFIG_RPCSEC_GSS_KRB5=y  # CONFIG_RPCSEC_GSS_SPKM3 is not set  # CONFIG_SMB_FS is not set @@ -910,35 +1374,37 @@ CONFIG_SGI_PARTITION=y  # CONFIG_KARMA_PARTITION is not set  # CONFIG_EFI_PARTITION is not set  # CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -#  # CONFIG_NLS is not set - -# -# Distributed Lock Manager -#  CONFIG_DLM=m  # CONFIG_DLM_DEBUG is not set  # -# Profiling support -# -# CONFIG_PROFILING is not set - -#  # Kernel hacking  #  CONFIG_TRACE_IRQFLAGS_SUPPORT=y  # CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y  CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=2048  # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set  # CONFIG_UNUSED_SYMBOLS is not set  # CONFIG_DEBUG_FS is not set  # CONFIG_HEADERS_CHECK is not set  # CONFIG_DEBUG_KERNEL is not set -CONFIG_CROSSCOMPILE=y +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_EARLY_PRINTK=y  # CONFIG_CMDLINE_BOOL is not set  # @@ -947,65 +1413,140 @@ CONFIG_CROSSCOMPILE=y  CONFIG_KEYS=y  CONFIG_KEYS_DEBUG_PROC_KEYS=y  # CONFIG_SECURITY is not set -CONFIG_XOR_BLOCKS=m -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m +CONFIG_SECURITYFS=y +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_XOR_BLOCKS=y +CONFIG_ASYNC_CORE=y +CONFIG_ASYNC_MEMCPY=y +CONFIG_ASYNC_XOR=y +CONFIG_ASYNC_PQ=y +CONFIG_ASYNC_RAID6_RECOV=y  CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_FIPS=y  CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y  CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y  CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=m +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y  CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=m + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=m + +# +# Hash modes +#  CONFIG_CRYPTO_HMAC=y  CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_VMAC=m + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_GHASH=m  CONFIG_CRYPTO_MD4=m  CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m  CONFIG_CRYPTO_SHA1=m  CONFIG_CRYPTO_SHA256=m  CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m  CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +#  CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m  CONFIG_CRYPTO_CAST5=m  CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m  CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m + +# +# Compression +#  CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m  CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_HIFN_795X=m +# CONFIG_CRYPTO_DEV_HIFN_795X_RNG is not set +# CONFIG_BINARY_PRINTF is not set  #  # Library routines  #  CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y  CONFIG_CRC_CCITT=m -# CONFIG_CRC16 is not set -# CONFIG_CRC_ITU_T is not set +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=m +CONFIG_CRC_ITU_T=m  CONFIG_CRC32=y -# CONFIG_CRC7 is not set +CONFIG_CRC7=m  CONFIG_LIBCRC32C=m  CONFIG_ZLIB_INFLATE=m  CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m  CONFIG_HAS_IOMEM=y  CONFIG_HAS_IOPORT=y  CONFIG_HAS_DMA=y +CONFIG_NLATTR=y diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 9c187a64649b..758ad426c57f 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -287,9 +287,9 @@ static inline int __cpu_has_fpu(void)  static inline void cpu_probe_vmbits(struct cpuinfo_mips *c)  {  #ifdef __NEED_VMBITS_PROBE -	write_c0_entryhi(0x3ffffffffffff000ULL); +	write_c0_entryhi(0x3fffffffffffe000ULL);  	back_to_back_c0_hazard(); -	c->vmbits = fls64(read_c0_entryhi() & 0x3ffffffffffff000ULL); +	c->vmbits = fls64(read_c0_entryhi() & 0x3fffffffffffe000ULL);  #endif  } diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 338dfe8ed002..31b204b26ba0 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -1501,6 +1501,7 @@ void __cpuinit per_cpu_trap_init(void)  			cp0_perfcount_irq = -1;  	} else {  		cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ; +		cp0_compare_irq_shift = cp0_compare_irq;  		cp0_perfcount_irq = -1;  	} diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c index 94e05e5733c1..e06f1af760a7 100644 --- a/arch/mips/mm/c-octeon.c +++ b/arch/mips/mm/c-octeon.c @@ -174,7 +174,7 @@ static void octeon_flush_cache_page(struct vm_area_struct *vma,   * Probe Octeon's caches   *   */ -static void __devinit probe_octeon(void) +static void __cpuinit probe_octeon(void)  {  	unsigned long icache_size;  	unsigned long dcache_size; @@ -235,7 +235,7 @@ static void __devinit probe_octeon(void)   * Setup the Octeon cache flush routines   *   */ -void __devinit octeon_cache_init(void) +void __cpuinit octeon_cache_init(void)  {  	extern unsigned long ebase;  	extern char except_vec2_octeon; diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 102b2dfa542a..e716cafc346d 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c @@ -155,7 +155,7 @@ static inline void setup_protection_map(void)  	protection_map[15] = PAGE_SHARED;  } -void __devinit cpu_cache_init(void) +void __cpuinit cpu_cache_init(void)  {  	if (cpu_has_3k_cache) {  		extern void __weak r3k_cache_init(void); diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c index 46f00691f448..31e2583ec622 100644 --- a/arch/mips/sni/rm200.c +++ b/arch/mips/sni/rm200.c @@ -404,7 +404,7 @@ void __init sni_rm200_i8259_irqs(void)  	if (!rm200_pic_master)  		return;  	rm200_pic_slave = ioremap_nocache(0x160000a0, 4); -	if (!rm200_pic_master) { +	if (!rm200_pic_slave) {  		iounmap(rm200_pic_master);  		return;  	} diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index fb37ac52e46c..35c827e94e31 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -468,7 +468,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	recalc_sigpending();  	spin_unlock_irq(¤t->sighand->siglock); -	tracehook_signal_handler(sig, info, ka, regs, 0); +	tracehook_signal_handler(sig, info, ka, regs,  +		test_thread_flag(TIF_SINGLESTEP) || +		test_thread_flag(TIF_BLOCKSTEP));  	return 1;  } diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c index 2830b415e214..c49865b30719 100644 --- a/arch/sparc/kernel/process_32.c +++ b/arch/sparc/kernel/process_32.c @@ -526,7 +526,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,  			 * Set some valid stack frames to give to the child.  			 */  			childstack = (struct sparc_stackf __user *) -				(sp & ~0x7UL); +				(sp & ~0xfUL);  			parentstack = (struct sparc_stackf __user *)  				regs->u_regs[UREG_FP]; diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c index c3f1cce0e95e..cb70476bd8f5 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c @@ -398,11 +398,11 @@ static unsigned long clone_stackframe(unsigned long csp, unsigned long psp)  	} else  		__get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6])); -	/* Now 8-byte align the stack as this is mandatory in the -	 * Sparc ABI due to how register windows work.  This hides -	 * the restriction from thread libraries etc.  -DaveM +	/* Now align the stack as this is mandatory in the Sparc ABI +	 * due to how register windows work.  This hides the +	 * restriction from thread libraries etc.  	 */ -	csp &= ~7UL; +	csp &= ~15UL;  	distance = fp - psp;  	rval = (csp - distance); diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c index ba5b09ad6666..ea22cd373c64 100644 --- a/arch/sparc/kernel/signal32.c +++ b/arch/sparc/kernel/signal32.c @@ -120,8 +120,8 @@ struct rt_signal_frame32 {  };  /* Align macros */ -#define SF_ALIGNEDSZ  (((sizeof(struct signal_frame32) + 7) & (~7))) -#define RT_ALIGNEDSZ  (((sizeof(struct rt_signal_frame32) + 7) & (~7))) +#define SF_ALIGNEDSZ  (((sizeof(struct signal_frame32) + 15) & (~15))) +#define RT_ALIGNEDSZ  (((sizeof(struct rt_signal_frame32) + 15) & (~15)))  int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)  { @@ -420,15 +420,17 @@ static void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, uns  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c index 7ce1a1005b1d..9882df92ba0a 100644 --- a/arch/sparc/kernel/signal_32.c +++ b/arch/sparc/kernel/signal_32.c @@ -267,15 +267,17 @@ static inline void __user *get_sigframe(struct sigaction *sa, struct pt_regs *re  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static inline int diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c index 647afbda7ae1..9fa48c30037e 100644 --- a/arch/sparc/kernel/signal_64.c +++ b/arch/sparc/kernel/signal_64.c @@ -353,7 +353,7 @@ segv:  /* Checks if the fp is valid */  static int invalid_frame_pointer(void __user *fp, int fplen)  { -	if (((unsigned long) fp) & 7) +	if (((unsigned long) fp) & 15)  		return 1;  	return 0;  } @@ -396,15 +396,17 @@ static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *  			sp = current->sas_ss_sp + current->sas_ss_size;  	} +	sp -= framesize; +  	/* Always align the stack frame.  This handles two cases.  First,  	 * sigaltstack need not be mindful of platform specific stack  	 * alignment.  Second, if we took this signal because the stack  	 * is not aligned properly, we'd like to take the signal cleanly  	 * and report that.  	 */ -	sp &= ~7UL; +	sp &= ~15UL; -	return (void __user *)(sp - framesize); +	return (void __user *) sp;  }  static inline void diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h index ecb544e65382..e04740f7a0bb 100644 --- a/arch/x86/include/asm/system.h +++ b/arch/x86/include/asm/system.h @@ -11,9 +11,9 @@  #include <linux/irqflags.h>  /* entries in ARCH_DLINFO: */ -#ifdef CONFIG_IA32_EMULATION +#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)  # define AT_VECTOR_SIZE_ARCH 2 -#else +#else /* else it's non-compat x86-64 */  # define AT_VECTOR_SIZE_ARCH 1  #endif diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 036d28adf59d..0acbcdfa5ca4 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -1185,9 +1185,6 @@ static void __init acpi_process_madt(void)  		if (!error) {  			acpi_lapic = 1; -#ifdef CONFIG_X86_BIGSMP -			generic_bigsmp_probe(); -#endif  			/*  			 * Parse MADT IO-APIC entries  			 */ @@ -1197,8 +1194,6 @@ static void __init acpi_process_madt(void)  				acpi_ioapic = 1;  				smp_found_config = 1; -				if (apic->setup_apic_routing) -					apic->setup_apic_routing();  			}  		}  		if (error == -EINVAL) { diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 3987e4408f75..dfca210f6a10 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1641,9 +1641,7 @@ int __init APIC_init_uniprocessor(void)  #endif  	enable_IR_x2apic(); -#ifdef CONFIG_X86_64  	default_setup_apic_routing(); -#endif  	verify_local_APIC();  	connect_bsp_APIC(); @@ -1891,21 +1889,6 @@ void __cpuinit generic_processor_info(int apicid, int version)  	if (apicid > max_physical_apicid)  		max_physical_apicid = apicid; -#ifdef CONFIG_X86_32 -	if (num_processors > 8) { -		switch (boot_cpu_data.x86_vendor) { -		case X86_VENDOR_INTEL: -			if (!APIC_XAPIC(version)) { -				def_to_bigsmp = 0; -				break; -			} -			/* If P4 and above fall through */ -		case X86_VENDOR_AMD: -			def_to_bigsmp = 1; -		} -	} -#endif -  #if defined(CONFIG_SMP) || defined(CONFIG_X86_64)  	early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;  	early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid; diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c index 1a6559f6768c..99d2fe016084 100644 --- a/arch/x86/kernel/apic/probe_32.c +++ b/arch/x86/kernel/apic/probe_32.c @@ -52,7 +52,32 @@ static int __init print_ipi_mode(void)  }  late_initcall(print_ipi_mode); -void default_setup_apic_routing(void) +void __init default_setup_apic_routing(void) +{ +	int version = apic_version[boot_cpu_physical_apicid]; + +	if (num_possible_cpus() > 8) { +		switch (boot_cpu_data.x86_vendor) { +		case X86_VENDOR_INTEL: +			if (!APIC_XAPIC(version)) { +				def_to_bigsmp = 0; +				break; +			} +			/* If P4 and above fall through */ +		case X86_VENDOR_AMD: +			def_to_bigsmp = 1; +		} +	} + +#ifdef CONFIG_X86_BIGSMP +	generic_bigsmp_probe(); +#endif + +	if (apic->setup_apic_routing) +		apic->setup_apic_routing(); +} + +static void setup_apic_flat_routing(void)  {  #ifdef CONFIG_X86_IO_APIC  	printk(KERN_INFO @@ -103,7 +128,7 @@ struct apic apic_default = {  	.init_apic_ldr			= default_init_apic_ldr,  	.ioapic_phys_id_map		= default_ioapic_phys_id_map, -	.setup_apic_routing		= default_setup_apic_routing, +	.setup_apic_routing		= setup_apic_flat_routing,  	.multi_timer_check		= NULL,  	.apicid_to_node			= default_apicid_to_node,  	.cpu_to_logical_apicid		= default_cpu_to_logical_apicid, diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c index 450fe2064a14..83e9be4778e2 100644 --- a/arch/x86/kernel/apic/probe_64.c +++ b/arch/x86/kernel/apic/probe_64.c @@ -67,7 +67,7 @@ void __init default_setup_apic_routing(void)  	}  #endif -	if (apic == &apic_flat && num_processors > 8) +	if (apic == &apic_flat && num_possible_cpus() > 8)  			apic = &apic_physflat;  	printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 40b54ceb68b5..a2c1edd2d3ac 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c @@ -359,13 +359,6 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)  		x86_init.mpparse.mpc_record(1);  	} -#ifdef CONFIG_X86_BIGSMP -	generic_bigsmp_probe(); -#endif - -	if (apic->setup_apic_routing) -		apic->setup_apic_routing(); -  	if (!num_processors)  		printk(KERN_ERR "MPTABLE: no processors registered!\n");  	return num_processors; diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 678d0b8c26f3..b4e870cbdc60 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1083,9 +1083,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)  	set_cpu_sibling_map(0);  	enable_IR_x2apic(); -#ifdef CONFIG_X86_64  	default_setup_apic_routing(); -#endif  	if (smp_sanity_check(max_cpus) < 0) {  		printk(KERN_INFO "SMP disabled\n"); diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c index 71da1bca13cb..738e6593799d 100644 --- a/arch/x86/mm/gup.c +++ b/arch/x86/mm/gup.c @@ -18,7 +18,7 @@ static inline pte_t gup_get_pte(pte_t *ptep)  #else  	/*  	 * With get_user_pages_fast, we walk down the pagetables without taking -	 * any locks.  For this we would like to load the pointers atoimcally, +	 * any locks.  For this we would like to load the pointers atomically,  	 * but that is not possible (without expensive cmpxchg8b) on PAE.  What  	 * we do have is the guarantee that a pte will only either go from not  	 * present to present, or present to not present or both -- it will not diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 17b768d0d42f..023f4e69a337 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -42,16 +42,13 @@ static const int cfq_hist_divisor = 4;   */  #define CFQ_MIN_TT		(2) -/* - * Allow merged cfqqs to perform this amount of seeky I/O before - * deciding to break the queues up again. - */ -#define CFQQ_COOP_TOUT		(HZ) -  #define CFQ_SLICE_SCALE		(5)  #define CFQ_HW_QUEUE_MIN	(5)  #define CFQ_SERVICE_SHIFT       12 +#define CFQQ_SEEK_THR		8 * 1024 +#define CFQQ_SEEKY(cfqq)	((cfqq)->seek_mean > CFQQ_SEEK_THR) +  #define RQ_CIC(rq)		\  	((struct cfq_io_context *) (rq)->elevator_private)  #define RQ_CFQQ(rq)		(struct cfq_queue *) ((rq)->elevator_private2) @@ -137,7 +134,6 @@ struct cfq_queue {  	u64 seek_total;  	sector_t seek_mean;  	sector_t last_request_pos; -	unsigned long seeky_start;  	pid_t pid; @@ -314,6 +310,7 @@ enum cfqq_state_flags {  	CFQ_CFQQ_FLAG_slice_new,	/* no requests dispatched in slice */  	CFQ_CFQQ_FLAG_sync,		/* synchronous queue */  	CFQ_CFQQ_FLAG_coop,		/* cfqq is shared */ +	CFQ_CFQQ_FLAG_split_coop,	/* shared cfqq will be splitted */  	CFQ_CFQQ_FLAG_deep,		/* sync cfqq experienced large depth */  	CFQ_CFQQ_FLAG_wait_busy,	/* Waiting for next request */  }; @@ -342,6 +339,7 @@ CFQ_CFQQ_FNS(prio_changed);  CFQ_CFQQ_FNS(slice_new);  CFQ_CFQQ_FNS(sync);  CFQ_CFQQ_FNS(coop); +CFQ_CFQQ_FNS(split_coop);  CFQ_CFQQ_FNS(deep);  CFQ_CFQQ_FNS(wait_busy);  #undef CFQ_CFQQ_FNS @@ -1566,6 +1564,15 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,  	cfq_clear_cfqq_wait_busy(cfqq);  	/* +	 * If this cfqq is shared between multiple processes, check to +	 * make sure that those processes are still issuing I/Os within +	 * the mean seek distance.  If not, it may be time to break the +	 * queues apart again. +	 */ +	if (cfq_cfqq_coop(cfqq) && CFQQ_SEEKY(cfqq)) +		cfq_mark_cfqq_split_coop(cfqq); + +	/*  	 * store what was left of this slice, if the queue idled/timed out  	 */  	if (timed_out && !cfq_cfqq_slice_new(cfqq)) { @@ -1663,9 +1670,6 @@ static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd,  		return cfqd->last_position - blk_rq_pos(rq);  } -#define CFQQ_SEEK_THR		8 * 1024 -#define CFQQ_SEEKY(cfqq)	((cfqq)->seek_mean > CFQQ_SEEK_THR) -  static inline int cfq_rq_close(struct cfq_data *cfqd, struct cfq_queue *cfqq,  			       struct request *rq, bool for_preempt)  { @@ -3000,19 +3004,6 @@ cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_queue *cfqq,  	total = cfqq->seek_total + (cfqq->seek_samples/2);  	do_div(total, cfqq->seek_samples);  	cfqq->seek_mean = (sector_t)total; - -	/* -	 * If this cfqq is shared between multiple processes, check to -	 * make sure that those processes are still issuing I/Os within -	 * the mean seek distance.  If not, it may be time to break the -	 * queues apart again. -	 */ -	if (cfq_cfqq_coop(cfqq)) { -		if (CFQQ_SEEKY(cfqq) && !cfqq->seeky_start) -			cfqq->seeky_start = jiffies; -		else if (!CFQQ_SEEKY(cfqq)) -			cfqq->seeky_start = 0; -	}  }  /* @@ -3453,14 +3444,6 @@ cfq_merge_cfqqs(struct cfq_data *cfqd, struct cfq_io_context *cic,  	return cic_to_cfqq(cic, 1);  } -static int should_split_cfqq(struct cfq_queue *cfqq) -{ -	if (cfqq->seeky_start && -	    time_after(jiffies, cfqq->seeky_start + CFQQ_COOP_TOUT)) -		return 1; -	return 0; -} -  /*   * Returns NULL if a new cfqq should be allocated, or the old cfqq if this   * was the last process referring to said cfqq. @@ -3469,9 +3452,9 @@ static struct cfq_queue *  split_cfqq(struct cfq_io_context *cic, struct cfq_queue *cfqq)  {  	if (cfqq_process_refs(cfqq) == 1) { -		cfqq->seeky_start = 0;  		cfqq->pid = current->pid;  		cfq_clear_cfqq_coop(cfqq); +		cfq_clear_cfqq_split_coop(cfqq);  		return cfqq;  	} @@ -3510,7 +3493,7 @@ new_queue:  		/*  		 * If the queue was seeky for too long, break it apart.  		 */ -		if (cfq_cfqq_coop(cfqq) && should_split_cfqq(cfqq)) { +		if (cfq_cfqq_coop(cfqq) && cfq_cfqq_split_coop(cfqq)) {  			cfq_log_cfqq(cfqd, cfqq, "breaking apart cfqq");  			cfqq = split_cfqq(cic, cfqq);  			if (!cfqq) diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 873e594860d3..9291614ac6b7 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -337,6 +337,9 @@ static int cciss_seq_show(struct seq_file *seq, void *v)  	if (*pos > h->highest_lun)  		return 0; +	if (drv == NULL) /* it's possible for h->drv[] to have holes. */ +		return 0; +  	if (drv->heads == 0)  		return 0; diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 34cf04e21795..fd50ead59c79 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c @@ -767,16 +767,19 @@ int __init agp_amd64_init(void)  static int __init agp_amd64_mod_init(void)  { +#ifndef MODULE  	if (gart_iommu_aperture)  		return agp_bridges_found ? 0 : -ENODEV; - +#endif  	return agp_amd64_init();  }  static void __exit agp_amd64_cleanup(void)  { +#ifndef MODULE  	if (gart_iommu_aperture)  		return; +#endif  	if (aperture_resource)  		release_resource(aperture_resource);  	pci_unregister_driver(&agp_amd64_pci_driver); diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c index ecba4942fc8e..f58440791e65 100644 --- a/drivers/char/tpm/tpm_infineon.c +++ b/drivers/char/tpm/tpm_infineon.c @@ -39,12 +39,12 @@  struct tpm_inf_dev {  	int iotype; -	void __iomem *mem_base;		/* MMIO ioremap'd addr */ -	unsigned long map_base;		/* phys MMIO base */ -	unsigned long map_size;		/* MMIO region size */ -	unsigned int index_off;		/* index register offset */ +	void __iomem *mem_base;	/* MMIO ioremap'd addr */ +	unsigned long map_base;	/* phys MMIO base */ +	unsigned long map_size;	/* MMIO region size */ +	unsigned int index_off;	/* index register offset */ -	unsigned int data_regs;		/* Data registers */ +	unsigned int data_regs;	/* Data registers */  	unsigned int data_size;  	unsigned int config_port;	/* IO Port config index reg */ @@ -406,14 +406,14 @@ static const struct tpm_vendor_specific tpm_inf = {  	.miscdev = {.fops = &inf_ops,},  }; -static const struct pnp_device_id tpm_pnp_tbl[] = { +static const struct pnp_device_id tpm_inf_pnp_tbl[] = {  	/* Infineon TPMs */  	{"IFX0101", 0},  	{"IFX0102", 0},  	{"", 0}  }; -MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl); +MODULE_DEVICE_TABLE(pnp, tpm_inf_pnp_tbl);  static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  				       const struct pnp_device_id *dev_id) @@ -430,7 +430,7 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  	if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) &&  	    !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) { -	    	tpm_dev.iotype = TPM_INF_IO_PORT; +		tpm_dev.iotype = TPM_INF_IO_PORT;  		tpm_dev.config_port = pnp_port_start(dev, 0);  		tpm_dev.config_size = pnp_port_len(dev, 0); @@ -459,9 +459,9 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  			goto err_last;  		}  	} else if (pnp_mem_valid(dev, 0) && -	           !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { +		   !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { -	    	tpm_dev.iotype = TPM_INF_IO_MEM; +		tpm_dev.iotype = TPM_INF_IO_MEM;  		tpm_dev.map_base = pnp_mem_start(dev, 0);  		tpm_dev.map_size = pnp_mem_len(dev, 0); @@ -563,11 +563,11 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,  			 "product id 0x%02x%02x"  			 "%s\n",  			 tpm_dev.iotype == TPM_INF_IO_PORT ? -				tpm_dev.config_port : -				tpm_dev.map_base + tpm_dev.index_off, +			 tpm_dev.config_port : +			 tpm_dev.map_base + tpm_dev.index_off,  			 tpm_dev.iotype == TPM_INF_IO_PORT ? -				tpm_dev.data_regs : -				tpm_dev.map_base + tpm_dev.data_regs, +			 tpm_dev.data_regs : +			 tpm_dev.map_base + tpm_dev.data_regs,  			 version[0], version[1],  			 vendorid[0], vendorid[1],  			 productid[0], productid[1], chipname); @@ -607,20 +607,55 @@ static __devexit void tpm_inf_pnp_remove(struct pnp_dev *dev)  			iounmap(tpm_dev.mem_base);  			release_mem_region(tpm_dev.map_base, tpm_dev.map_size);  		} +		tpm_dev_vendor_release(chip);  		tpm_remove_hardware(chip->dev);  	}  } +static int tpm_inf_pnp_suspend(struct pnp_dev *dev, pm_message_t pm_state) +{ +	struct tpm_chip *chip = pnp_get_drvdata(dev); +	int rc; +	if (chip) { +		u8 savestate[] = { +			0, 193,	/* TPM_TAG_RQU_COMMAND */ +			0, 0, 0, 10,	/* blob length (in bytes) */ +			0, 0, 0, 152	/* TPM_ORD_SaveState */ +		}; +		dev_info(&dev->dev, "saving TPM state\n"); +		rc = tpm_inf_send(chip, savestate, sizeof(savestate)); +		if (rc < 0) { +			dev_err(&dev->dev, "error while saving TPM state\n"); +			return rc; +		} +	} +	return 0; +} + +static int tpm_inf_pnp_resume(struct pnp_dev *dev) +{ +	/* Re-configure TPM after suspending */ +	tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR); +	tpm_config_out(IOLIMH, TPM_INF_ADDR); +	tpm_config_out((tpm_dev.data_regs >> 8) & 0xff, TPM_INF_DATA); +	tpm_config_out(IOLIML, TPM_INF_ADDR); +	tpm_config_out((tpm_dev.data_regs & 0xff), TPM_INF_DATA); +	/* activate register */ +	tpm_config_out(TPM_DAR, TPM_INF_ADDR); +	tpm_config_out(0x01, TPM_INF_DATA); +	tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); +	/* disable RESET, LP and IRQC */ +	tpm_data_out(RESET_LP_IRQC_DISABLE, CMD); +	return tpm_pm_resume(&dev->dev); +} +  static struct pnp_driver tpm_inf_pnp_driver = {  	.name = "tpm_inf_pnp", -	.driver = { -		.owner = THIS_MODULE, -		.suspend = tpm_pm_suspend, -		.resume = tpm_pm_resume, -	}, -	.id_table = tpm_pnp_tbl, +	.id_table = tpm_inf_pnp_tbl,  	.probe = tpm_inf_pnp_probe, -	.remove = __devexit_p(tpm_inf_pnp_remove), +	.suspend = tpm_inf_pnp_suspend, +	.resume = tpm_inf_pnp_resume, +	.remove = __devexit_p(tpm_inf_pnp_remove)  };  static int __init init_inf(void) @@ -638,5 +673,5 @@ module_exit(cleanup_inf);  MODULE_AUTHOR("Marcel Selhorst <m.selhorst@sirrix.com>");  MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); -MODULE_VERSION("1.9"); +MODULE_VERSION("1.9.2");  MODULE_LICENSE("GPL"); diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c index b5f2ee0f8e2c..64a937262a40 100644 --- a/drivers/dma/coh901318.c +++ b/drivers/dma/coh901318.c @@ -613,8 +613,6 @@ static void dma_tasklet(unsigned long data)  	cohd_fin->pending_irqs--;  	cohc->completed = cohd_fin->desc.cookie; -	BUG_ON(cohc->nbr_active_done && cohd_fin == NULL); -  	if (cohc->nbr_active_done == 0)  		return; diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 6f51a0a7a8bb..e7a3230fb7d5 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -826,6 +826,7 @@ void dma_async_device_unregister(struct dma_device *device)  		chan->dev->chan = NULL;  		mutex_unlock(&dma_list_mutex);  		device_unregister(&chan->dev->device); +		free_percpu(chan->local);  	}  }  EXPORT_SYMBOL(dma_async_device_unregister); diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 8b905161fbf4..948d563941c9 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -467,7 +467,7 @@ err_srcs:  	if (iterations > 0)  		while (!kthread_should_stop()) { -			DECLARE_WAIT_QUEUE_HEAD(wait_dmatest_exit); +			DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit);  			interruptible_sleep_on(&wait_dmatest_exit);  		} diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c index 5f7a500e18d0..5cc37afe2bc1 100644 --- a/drivers/dma/ioat/dma_v2.c +++ b/drivers/dma/ioat/dma_v2.c @@ -249,7 +249,7 @@ int ioat2_quiesce(struct ioat_chan_common *chan, unsigned long tmo)  	if (is_ioat_active(status) || is_ioat_idle(status))  		ioat_suspend(chan);  	while (is_ioat_active(status) || is_ioat_idle(status)) { -		if (end && time_after(jiffies, end)) { +		if (tmo && time_after(jiffies, end)) {  			err = -ETIMEDOUT;  			break;  		} diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c index 9a5bc1a7389e..e80bae1673fa 100644 --- a/drivers/dma/ipu/ipu_idmac.c +++ b/drivers/dma/ipu/ipu_idmac.c @@ -761,12 +761,10 @@ static void ipu_select_buffer(enum ipu_channel channel, int buffer_n)   * @buffer_n:	buffer number to update.   *		0 or 1 are the only valid values.   * @phyaddr:	buffer physical address. - * @return:	Returns 0 on success or negative error code on failure. This - *              function will fail if the buffer is set to ready.   */  /* Called under spin_lock(_irqsave)(&ichan->lock) */ -static int ipu_update_channel_buffer(struct idmac_channel *ichan, -				     int buffer_n, dma_addr_t phyaddr) +static void ipu_update_channel_buffer(struct idmac_channel *ichan, +				      int buffer_n, dma_addr_t phyaddr)  {  	enum ipu_channel channel = ichan->dma_chan.chan_id;  	uint32_t reg; @@ -806,8 +804,6 @@ static int ipu_update_channel_buffer(struct idmac_channel *ichan,  	}  	spin_unlock_irqrestore(&ipu_data.lock, flags); - -	return 0;  }  /* Called under spin_lock_irqsave(&ichan->lock) */ @@ -816,7 +812,6 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,  {  	unsigned int chan_id = ichan->dma_chan.chan_id;  	struct device *dev = &ichan->dma_chan.dev->device; -	int ret;  	if (async_tx_test_ack(&desc->txd))  		return -EINTR; @@ -827,14 +822,7 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,  	 * could make it conditional on status >= IPU_CHANNEL_ENABLED, but  	 * doing it again shouldn't hurt either.  	 */ -	ret = ipu_update_channel_buffer(ichan, buf_idx, -					sg_dma_address(sg)); - -	if (ret < 0) { -		dev_err(dev, "Updating sg %p on channel 0x%x buffer %d failed!\n", -			sg, chan_id, buf_idx); -		return ret; -	} +	ipu_update_channel_buffer(ichan, buf_idx, sg_dma_address(sg));  	ipu_select_buffer(chan_id, buf_idx);  	dev_dbg(dev, "Updated sg %p on channel 0x%x buffer %d\n", @@ -1379,10 +1367,11 @@ static irqreturn_t idmac_interrupt(int irq, void *dev_id)  	if (likely(sgnew) &&  	    ipu_submit_buffer(ichan, descnew, sgnew, ichan->active_buffer) < 0) { -		callback = desc->txd.callback; -		callback_param = desc->txd.callback_param; +		callback = descnew->txd.callback; +		callback_param = descnew->txd.callback_param;  		spin_unlock(&ichan->lock); -		callback(callback_param); +		if (callback) +			callback(callback_param);  		spin_lock(&ichan->lock);  	} diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 000dc67b85b7..3391e6739d06 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -2658,10 +2658,11 @@ static void amd64_restore_ecc_error_reporting(struct amd64_pvt *pvt)   * the memory system completely. A command line option allows to force-enable   * hardware ECC later in amd64_enable_ecc_error_reporting().   */ -static const char *ecc_warning = -	"WARNING: ECC is disabled by BIOS. Module will NOT be loaded.\n" -	" Either Enable ECC in the BIOS, or set 'ecc_enable_override'.\n" -	" Also, use of the override can cause unknown side effects.\n"; +static const char *ecc_msg = +	"ECC disabled in the BIOS or no ECC capability, module will not load.\n" +	" Either enable ECC checking or force module loading by setting " +	"'ecc_enable_override'.\n" +	" (Note that use of the override may cause unknown side effects.)\n";  static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  { @@ -2673,7 +2674,7 @@ static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  	ecc_enabled = !!(value & K8_NBCFG_ECC_ENABLE);  	if (!ecc_enabled) -		amd64_printk(KERN_WARNING, "This node reports that Memory ECC " +		amd64_printk(KERN_NOTICE, "This node reports that Memory ECC "  			     "is currently disabled, set F3x%x[22] (%s).\n",  			     K8_NBCFG, pci_name(pvt->misc_f3_ctl));  	else @@ -2681,13 +2682,13 @@ static int amd64_check_ecc_enabled(struct amd64_pvt *pvt)  	nb_mce_en = amd64_nb_mce_bank_enabled_on_node(pvt->mc_node_id);  	if (!nb_mce_en) -		amd64_printk(KERN_WARNING, "NB MCE bank disabled, set MSR " +		amd64_printk(KERN_NOTICE, "NB MCE bank disabled, set MSR "  			     "0x%08x[4] on node %d to enable.\n",  			     MSR_IA32_MCG_CTL, pvt->mc_node_id);  	if (!ecc_enabled || !nb_mce_en) {  		if (!ecc_enable_override) { -			amd64_printk(KERN_WARNING, "%s", ecc_warning); +			amd64_printk(KERN_NOTICE, "%s", ecc_msg);  			return -ENODEV;  		}  		ecc_enable_override = 0; diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c index cf27402af97b..ecd5928d7110 100644 --- a/drivers/edac/mpc85xx_edac.c +++ b/drivers/edac/mpc85xx_edac.c @@ -804,8 +804,8 @@ static void __devinit mpc85xx_init_csrows(struct mem_ctl_info *mci)  		end   <<= (24 - PAGE_SHIFT);  		end    |= (1 << (24 - PAGE_SHIFT)) - 1; -		csrow->first_page = start >> PAGE_SHIFT; -		csrow->last_page = end >> PAGE_SHIFT; +		csrow->first_page = start; +		csrow->last_page = end;  		csrow->nr_pages = end + 1 - start;  		csrow->grain = 8;  		csrow->mtype = mtype; @@ -892,10 +892,6 @@ static int __devinit mpc85xx_mc_err_probe(struct of_device *op,  	mpc85xx_init_csrows(mci); -#ifdef CONFIG_EDAC_DEBUG -	edac_mc_register_mcidev_debug((struct attribute **)debug_attr); -#endif -  	/* store the original error disable bits */  	orig_ddr_err_disable =  	    in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DISABLE); diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c index 1cf488247a16..48227e744753 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c @@ -90,21 +90,21 @@ int nouveau_hybrid_setup(struct drm_device *dev)  {  	int result; -	if (nouveau_dsm(dev, NOUVEAU_DSM_ACTIVE, NOUVEAU_DSM_ACTIVE_QUERY, +	if (nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STATE,  								&result))  		return -ENODEV;  	NV_INFO(dev, "_DSM hardware status gave 0x%x\n", result); -	if (result & 0x1) {	/* Stamina mode - disable the external GPU */ +	if (result) { /* Ensure that the external GPU is enabled */ +		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_SPEED, NULL); +		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_SPEED, +									NULL); +	} else { /* Stamina mode - disable the external GPU */  		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_STAMINA,  									NULL);  		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STAMINA,  									NULL); -	} else {		/* Ensure that the external GPU is enabled */ -		nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_SPEED, NULL); -		nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_SPEED, -									NULL);  	}  	return 0; diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c index d7f8d8b4a4b8..2cd0fad17dac 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.c +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c @@ -1865,7 +1865,7 @@ init_compute_mem(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)  	struct drm_nouveau_private *dev_priv = bios->dev->dev_private; -	if (dev_priv->card_type >= NV_50) +	if (dev_priv->card_type >= NV_40)  		return 1;  	/* @@ -3765,7 +3765,6 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  	 */  	struct drm_nouveau_private *dev_priv = dev->dev_private; -	struct init_exec iexec = {true, false};  	struct nvbios *bios = &dev_priv->VBIOS;  	uint8_t *table = &bios->data[bios->display.script_table_ptr];  	uint8_t *otable = NULL; @@ -3845,8 +3844,6 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  	} -	bios->display.output = dcbent; -  	if (pxclk == 0) {  		script = ROM16(otable[6]);  		if (!script) { @@ -3855,7 +3852,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 0\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk == -1) {  		script = ROM16(otable[8]); @@ -3865,7 +3862,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 1\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk == -2) {  		if (table[4] >= 12) @@ -3878,7 +3875,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing output script 2\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk > 0) {  		script = ROM16(otable[table[4] + i*6 + 2]); @@ -3890,7 +3887,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing clock script 0\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	} else  	if (pxclk < 0) {  		script = ROM16(otable[table[4] + i*6 + 4]); @@ -3902,7 +3899,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,  		}  		NV_TRACE(dev, "0x%04X: parsing clock script 1\n", script); -		parse_init_table(bios, script, &iexec); +		nouveau_bios_run_init_table(dev, script, dcbent);  	}  	return 0; @@ -5864,10 +5861,13 @@ nouveau_bios_run_init_table(struct drm_device *dev, uint16_t table,  	struct drm_nouveau_private *dev_priv = dev->dev_private;  	struct nvbios *bios = &dev_priv->VBIOS;  	struct init_exec iexec = { true, false }; +	unsigned long flags; +	spin_lock_irqsave(&bios->lock, flags);  	bios->display.output = dcbent;  	parse_init_table(bios, table, &iexec);  	bios->display.output = NULL; +	spin_unlock_irqrestore(&bios->lock, flags);  }  static bool NVInitVBIOS(struct drm_device *dev) @@ -5876,6 +5876,7 @@ static bool NVInitVBIOS(struct drm_device *dev)  	struct nvbios *bios = &dev_priv->VBIOS;  	memset(bios, 0, sizeof(struct nvbios)); +	spin_lock_init(&bios->lock);  	bios->dev = dev;  	if (!NVShadowVBIOS(dev, bios->data)) diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.h b/drivers/gpu/drm/nouveau/nouveau_bios.h index 058e98c76d89..68446fd4146b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.h +++ b/drivers/gpu/drm/nouveau/nouveau_bios.h @@ -205,6 +205,8 @@ struct nvbios {  	struct drm_device *dev;  	struct nouveau_bios_info pub; +	spinlock_t lock; +  	uint8_t data[NV_PROM_SIZE];  	unsigned int length;  	bool execute; diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index db0ed4c13f98..028719fddf76 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -65,8 +65,10 @@ nouveau_bo_fixup_align(struct drm_device *dev,  	/*  	 * Some of the tile_flags have a periodic structure of N*4096 bytes, -	 * align to to that as well as the page size. Overallocate memory to -	 * avoid corruption of other buffer objects. +	 * align to to that as well as the page size. Align the size to the +	 * appropriate boundaries. This does imply that sizes are rounded up +	 * 3-7 pages, so be aware of this and do not waste memory by allocating +	 * many small buffers.  	 */  	if (dev_priv->card_type == NV_50) {  		uint32_t block_size = nouveau_mem_fb_amount(dev) >> 15; @@ -77,22 +79,20 @@ nouveau_bo_fixup_align(struct drm_device *dev,  		case 0x2800:  		case 0x4800:  		case 0x7a00: -			*size = roundup(*size, block_size);  			if (is_power_of_2(block_size)) { -				*size += 3 * block_size;  				for (i = 1; i < 10; i++) {  					*align = 12 * i * block_size;  					if (!(*align % 65536))  						break;  				}  			} else { -				*size += 6 * block_size;  				for (i = 1; i < 10; i++) {  					*align = 8 * i * block_size;  					if (!(*align % 65536))  						break;  				}  			} +			*size = roundup(*size, *align);  			break;  		default:  			break; diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c index 343d718a9667..2281f99da7fc 100644 --- a/drivers/gpu/drm/nouveau/nouveau_channel.c +++ b/drivers/gpu/drm/nouveau/nouveau_channel.c @@ -278,12 +278,11 @@ nouveau_channel_free(struct nouveau_channel *chan)  	/* Ensure the channel is no longer active on the GPU */  	pfifo->reassign(dev, false); -	if (pgraph->channel(dev) == chan) { -		pgraph->fifo_access(dev, false); +	pgraph->fifo_access(dev, false); +	if (pgraph->channel(dev) == chan)  		pgraph->unload_context(dev); -		pgraph->fifo_access(dev, true); -	}  	pgraph->destroy_context(chan); +	pgraph->fifo_access(dev, true);  	if (pfifo->channel_id(dev) == chan->id) {  		pfifo->disable(dev); diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 7e6d673f3a23..d2f63353ea97 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -88,13 +88,14 @@ nouveau_connector_destroy(struct drm_connector *drm_connector)  {  	struct nouveau_connector *nv_connector =  		nouveau_connector(drm_connector); -	struct drm_device *dev = nv_connector->base.dev; - -	NV_DEBUG_KMS(dev, "\n"); +	struct drm_device *dev;  	if (!nv_connector)  		return; +	dev = nv_connector->base.dev; +	NV_DEBUG_KMS(dev, "\n"); +  	kfree(nv_connector->edid);  	drm_sysfs_connector_remove(drm_connector);  	drm_connector_cleanup(drm_connector); diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index dd4937224220..f954ad93e81f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -502,12 +502,12 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,  			break;  	} -	if ((stat & NV50_AUXCH_STAT_COUNT) != data_nr) { -		ret = -EREMOTEIO; -		goto out; -	} -  	if (cmd & 1) { +		if ((stat & NV50_AUXCH_STAT_COUNT) != data_nr) { +			ret = -EREMOTEIO; +			goto out; +		} +  		for (i = 0; i < 4; i++) {  			data32[i] = nv_rd32(dev, NV50_AUXCH_DATA_IN(index, i));  			NV_DEBUG_KMS(dev, "rd %d: 0x%08x\n", i, data32[i]); diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c index 343ab7f17ccc..da3b93b84502 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.c +++ b/drivers/gpu/drm/nouveau/nouveau_drv.c @@ -56,7 +56,7 @@ int nouveau_vram_pushbuf;  module_param_named(vram_pushbuf, nouveau_vram_pushbuf, int, 0400);  MODULE_PARM_DESC(vram_notify, "Force DMA notifiers to be in VRAM"); -int nouveau_vram_notify; +int nouveau_vram_notify = 1;  module_param_named(vram_notify, nouveau_vram_notify, int, 0400);  MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (>=GeForce 8)"); @@ -75,6 +75,14 @@ MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status");  int nouveau_ignorelid = 0;  module_param_named(ignorelid, nouveau_ignorelid, int, 0400); +MODULE_PARM_DESC(noagp, "Disable all acceleration"); +int nouveau_noaccel = 0; +module_param_named(noaccel, nouveau_noaccel, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable fbcon acceleration"); +int nouveau_nofbaccel = 0; +module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400); +  MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"  		 "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"  		 "\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n" diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h index 6b9690418bc7..5445cefdd03e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -678,6 +678,8 @@ extern int nouveau_reg_debug;  extern char *nouveau_vbios;  extern int nouveau_ctxfw;  extern int nouveau_ignorelid; +extern int nouveau_nofbaccel; +extern int nouveau_noaccel;  /* nouveau_state.c */  extern void nouveau_preclose(struct drm_device *dev, struct drm_file *); diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c index 0b05c869e0e7..ea879a2efef3 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c @@ -107,6 +107,34 @@ static struct fb_ops nouveau_fbcon_ops = {  	.fb_setcmap = drm_fb_helper_setcmap,  }; +static struct fb_ops nv04_fbcon_ops = { +	.owner = THIS_MODULE, +	.fb_check_var = drm_fb_helper_check_var, +	.fb_set_par = drm_fb_helper_set_par, +	.fb_setcolreg = drm_fb_helper_setcolreg, +	.fb_fillrect = nv04_fbcon_fillrect, +	.fb_copyarea = nv04_fbcon_copyarea, +	.fb_imageblit = nv04_fbcon_imageblit, +	.fb_sync = nouveau_fbcon_sync, +	.fb_pan_display = drm_fb_helper_pan_display, +	.fb_blank = drm_fb_helper_blank, +	.fb_setcmap = drm_fb_helper_setcmap, +}; + +static struct fb_ops nv50_fbcon_ops = { +	.owner = THIS_MODULE, +	.fb_check_var = drm_fb_helper_check_var, +	.fb_set_par = drm_fb_helper_set_par, +	.fb_setcolreg = drm_fb_helper_setcolreg, +	.fb_fillrect = nv50_fbcon_fillrect, +	.fb_copyarea = nv50_fbcon_copyarea, +	.fb_imageblit = nv50_fbcon_imageblit, +	.fb_sync = nouveau_fbcon_sync, +	.fb_pan_display = drm_fb_helper_pan_display, +	.fb_blank = drm_fb_helper_blank, +	.fb_setcmap = drm_fb_helper_setcmap, +}; +  static void nouveau_fbcon_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,  				    u16 blue, int regno)  { @@ -267,8 +295,12 @@ nouveau_fbcon_create(struct drm_device *dev, uint32_t fb_width,  	dev_priv->fbdev_info = info;  	strcpy(info->fix.id, "nouveaufb"); -	info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | -		      FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; +	if (nouveau_nofbaccel) +		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_DISABLED; +	else +		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | +			      FBINFO_HWACCEL_FILLRECT | +			      FBINFO_HWACCEL_IMAGEBLIT;  	info->fbops = &nouveau_fbcon_ops;  	info->fix.smem_start = dev->mode_config.fb_base + nvbo->bo.offset -  			       dev_priv->vm_vram_base; @@ -316,13 +348,15 @@ nouveau_fbcon_create(struct drm_device *dev, uint32_t fb_width,  	par->nouveau_fb = nouveau_fb;  	par->dev = dev; -	if (dev_priv->channel) { +	if (dev_priv->channel && !nouveau_nofbaccel) {  		switch (dev_priv->card_type) {  		case NV_50:  			nv50_fbcon_accel_init(info); +			info->fbops = &nv50_fbcon_ops;  			break;  		default:  			nv04_fbcon_accel_init(info); +			info->fbops = &nv04_fbcon_ops;  			break;  		};  	} diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.h b/drivers/gpu/drm/nouveau/nouveau_fbcon.h index 462e0b87b4bd..f9c34e1a8c11 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.h +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.h @@ -40,7 +40,13 @@ int nouveau_fbcon_remove(struct drm_device *dev, struct drm_framebuffer *fb);  void nouveau_fbcon_restore(void);  void nouveau_fbcon_zfill(struct drm_device *dev); +void nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);  int nv04_fbcon_accel_init(struct fb_info *info); +void nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);  int nv50_fbcon_accel_init(struct fb_info *info);  void nouveau_fbcon_gpu_lockup(struct fb_info *info); diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 6ac804b0c9f9..70cc30803e3b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -925,7 +925,9 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data,  	}  	if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) { +		spin_lock(&nvbo->bo.lock);  		ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait); +		spin_unlock(&nvbo->bo.lock);  	} else {  		ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait);  		if (ret == 0) diff --git a/drivers/gpu/drm/nouveau/nouveau_grctx.c b/drivers/gpu/drm/nouveau/nouveau_grctx.c index 419f4c2b3b89..c7ebec696747 100644 --- a/drivers/gpu/drm/nouveau/nouveau_grctx.c +++ b/drivers/gpu/drm/nouveau/nouveau_grctx.c @@ -97,8 +97,8 @@ nouveau_grctx_prog_load(struct drm_device *dev)  		}  		pgraph->ctxvals = kmalloc(fw->size, GFP_KERNEL); -		if (!pgraph->ctxprog) { -			NV_ERROR(dev, "OOM copying ctxprog\n"); +		if (!pgraph->ctxvals) { +			NV_ERROR(dev, "OOM copying ctxvals\n");  			release_firmware(fw);  			nouveau_grctx_fini(dev);  			return -ENOMEM; diff --git a/drivers/gpu/drm/nouveau/nouveau_irq.c b/drivers/gpu/drm/nouveau/nouveau_irq.c index 3b9bad66162a..447f9f69d6b1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_irq.c +++ b/drivers/gpu/drm/nouveau/nouveau_irq.c @@ -211,6 +211,20 @@ nouveau_fifo_irq_handler(struct drm_device *dev)  								get + 4);  		} +		if (status & NV_PFIFO_INTR_SEMAPHORE) { +			uint32_t sem; + +			status &= ~NV_PFIFO_INTR_SEMAPHORE; +			nv_wr32(dev, NV03_PFIFO_INTR_0, +				NV_PFIFO_INTR_SEMAPHORE); + +			sem = nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE); +			nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, sem | 0x1); + +			nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); +			nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); +		} +  		if (status) {  			NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n",  				status, chid); @@ -566,86 +580,99 @@ nouveau_pgraph_irq_handler(struct drm_device *dev)  static void  nv50_pgraph_irq_handler(struct drm_device *dev)  { -	uint32_t status, nsource; +	uint32_t status; -	status = nv_rd32(dev, NV03_PGRAPH_INTR); -	nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); +	while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { +		uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); -	if (status & 0x00000001) { -		nouveau_pgraph_intr_notify(dev, nsource); -		status &= ~0x00000001; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); -	} +		if (status & 0x00000001) { +			nouveau_pgraph_intr_notify(dev, nsource); +			status &= ~0x00000001; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); +		} -	if (status & 0x00000010) { -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD); +		if (status & 0x00000010) { +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD); -		status &= ~0x00000010; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); -	} +			status &= ~0x00000010; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); +		} -	if (status & 0x00001000) { -		nv_wr32(dev, 0x400500, 0x00000000); -		nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_CONTEXT_SWITCH); -		nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, -			NV40_PGRAPH_INTR_EN) & ~NV_PGRAPH_INTR_CONTEXT_SWITCH); -		nv_wr32(dev, 0x400500, 0x00010001); +		if (status & 0x00001000) { +			nv_wr32(dev, 0x400500, 0x00000000); +			nv_wr32(dev, NV03_PGRAPH_INTR, +				NV_PGRAPH_INTR_CONTEXT_SWITCH); +			nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, +				NV40_PGRAPH_INTR_EN) & +				~NV_PGRAPH_INTR_CONTEXT_SWITCH); +			nv_wr32(dev, 0x400500, 0x00010001); -		nv50_graph_context_switch(dev); +			nv50_graph_context_switch(dev); -		status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; -	} +			status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; +		} -	if (status & 0x00100000) { -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_DATA_ERROR); +		if (status & 0x00100000) { +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_DATA_ERROR); -		status &= ~0x00100000; -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); -	} +			status &= ~0x00100000; +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); +		} -	if (status & 0x00200000) { -		int r; - -		nouveau_pgraph_intr_error(dev, nsource | -					  NV03_PGRAPH_NSOURCE_PROTECTION_ERROR); - -		NV_ERROR(dev, "magic set 1:\n"); -		for (r = 0x408900; r <= 0x408910; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x408900, nv_rd32(dev, 0x408904) | 0xc0000000); -		for (r = 0x408e08; r <= 0x408e24; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x408e08, nv_rd32(dev, 0x408e08) | 0xc0000000); - -		NV_ERROR(dev, "magic set 2:\n"); -		for (r = 0x409900; r <= 0x409910; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x409900, nv_rd32(dev, 0x409904) | 0xc0000000); -		for (r = 0x409e08; r <= 0x409e24; r += 4) -			NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, nv_rd32(dev, r)); -		nv_wr32(dev, 0x409e08, nv_rd32(dev, 0x409e08) | 0xc0000000); - -		status &= ~0x00200000; -		nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource); -		nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); -	} +		if (status & 0x00200000) { +			int r; + +			nouveau_pgraph_intr_error(dev, nsource | +					NV03_PGRAPH_NSOURCE_PROTECTION_ERROR); + +			NV_ERROR(dev, "magic set 1:\n"); +			for (r = 0x408900; r <= 0x408910; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x408900, +				nv_rd32(dev, 0x408904) | 0xc0000000); +			for (r = 0x408e08; r <= 0x408e24; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +							nv_rd32(dev, r)); +			nv_wr32(dev, 0x408e08, +				nv_rd32(dev, 0x408e08) | 0xc0000000); + +			NV_ERROR(dev, "magic set 2:\n"); +			for (r = 0x409900; r <= 0x409910; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x409900, +				nv_rd32(dev, 0x409904) | 0xc0000000); +			for (r = 0x409e08; r <= 0x409e24; r += 4) +				NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +					nv_rd32(dev, r)); +			nv_wr32(dev, 0x409e08, +				nv_rd32(dev, 0x409e08) | 0xc0000000); + +			status &= ~0x00200000; +			nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource); +			nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); +		} -	if (status) { -		NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", status); -		nv_wr32(dev, NV03_PGRAPH_INTR, status); -	} +		if (status) { +			NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", +				status); +			nv_wr32(dev, NV03_PGRAPH_INTR, status); +		} -	{ -		const int isb = (1 << 16) | (1 << 0); +		{ +			const int isb = (1 << 16) | (1 << 0); -		if ((nv_rd32(dev, 0x400500) & isb) != isb) -			nv_wr32(dev, 0x400500, nv_rd32(dev, 0x400500) | isb); -		nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +			if ((nv_rd32(dev, 0x400500) & isb) != isb) +				nv_wr32(dev, 0x400500, +					nv_rd32(dev, 0x400500) | isb); +		}  	}  	nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); +	nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31));  }  static void diff --git a/drivers/gpu/drm/nouveau/nouveau_notifier.c b/drivers/gpu/drm/nouveau/nouveau_notifier.c index 6c66a34b6345..d99dc087f9b1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_notifier.c +++ b/drivers/gpu/drm/nouveau/nouveau_notifier.c @@ -34,15 +34,20 @@ nouveau_notifier_init_channel(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev;  	struct nouveau_bo *ntfy = NULL; +	uint32_t flags;  	int ret; -	ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, nouveau_vram_notify ? -			      TTM_PL_FLAG_VRAM : TTM_PL_FLAG_TT, +	if (nouveau_vram_notify) +		flags = TTM_PL_FLAG_VRAM; +	else +		flags = TTM_PL_FLAG_TT; + +	ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, flags,  			      0, 0x0000, false, true, &ntfy);  	if (ret)  		return ret; -	ret = nouveau_bo_pin(ntfy, TTM_PL_FLAG_VRAM); +	ret = nouveau_bo_pin(ntfy, flags);  	if (ret)  		goto out_err; @@ -128,6 +133,8 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle,  			target = NV_DMA_TARGET_PCI;  		} else {  			target = NV_DMA_TARGET_AGP; +			if (dev_priv->card_type >= NV_50) +				offset += dev_priv->vm_gart_base;  		}  	} else {  		NV_ERROR(dev, "Bad DMA target, mem_type %d!\n", diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c index 6c2cf81716df..e7c100ba63a1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_object.c +++ b/drivers/gpu/drm/nouveau/nouveau_object.c @@ -885,11 +885,12 @@ int  nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class,  		      struct nouveau_gpuobj **gpuobj_ret)  { -	struct drm_nouveau_private *dev_priv = chan->dev->dev_private; +	struct drm_nouveau_private *dev_priv;  	struct nouveau_gpuobj *gpuobj;  	if (!chan || !gpuobj_ret || *gpuobj_ret != NULL)  		return -EINVAL; +	dev_priv = chan->dev->dev_private;  	gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL);  	if (!gpuobj) diff --git a/drivers/gpu/drm/nouveau/nouveau_reg.h b/drivers/gpu/drm/nouveau/nouveau_reg.h index 251f1b3b38b9..aa9b310e41be 100644 --- a/drivers/gpu/drm/nouveau/nouveau_reg.h +++ b/drivers/gpu/drm/nouveau/nouveau_reg.h @@ -99,6 +99,7 @@   * the card will hang early on in the X init process.   */  #    define NV_PMC_ENABLE_UNK13                               (1<<13) +#define NV40_PMC_GRAPH_UNITS				   0x00001540  #define NV40_PMC_BACKLIGHT				   0x000015f0  #	define NV40_PMC_BACKLIGHT_MASK			   0x001f0000  #define NV40_PMC_1700                                      0x00001700 diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index 4c7f1e403e80..ed1590577b6c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c @@ -54,11 +54,12 @@ static void  nouveau_sgdma_clear(struct ttm_backend *be)  {  	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; -	struct drm_device *dev = nvbe->dev; - -	NV_DEBUG(nvbe->dev, "\n"); +	struct drm_device *dev;  	if (nvbe && nvbe->pages) { +		dev = nvbe->dev; +		NV_DEBUG(dev, "\n"); +  		if (nvbe->bound)  			be->func->unbind(be); diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index f2d0187ba152..a4851af5b05e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c @@ -310,6 +310,14 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)  static unsigned int  nouveau_vga_set_decode(void *priv, bool state)  { +	struct drm_device *dev = priv; +	struct drm_nouveau_private *dev_priv = dev->dev_private; + +	if (dev_priv->chipset >= 0x40) +		nv_wr32(dev, 0x88054, state); +	else +		nv_wr32(dev, 0x1854, state); +  	if (state)  		return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |  		       VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; @@ -427,15 +435,19 @@ nouveau_card_init(struct drm_device *dev)  	if (ret)  		goto out_timer; -	/* PGRAPH */ -	ret = engine->graph.init(dev); -	if (ret) -		goto out_fb; +	if (nouveau_noaccel) +		engine->graph.accel_blocked = true; +	else { +		/* PGRAPH */ +		ret = engine->graph.init(dev); +		if (ret) +			goto out_fb; -	/* PFIFO */ -	ret = engine->fifo.init(dev); -	if (ret) -		goto out_graph; +		/* PFIFO */ +		ret = engine->fifo.init(dev); +		if (ret) +			goto out_graph; +	}  	/* this call irq_preinstall, register irq handler and  	 * call irq_postinstall @@ -479,9 +491,11 @@ nouveau_card_init(struct drm_device *dev)  out_irq:  	drm_irq_uninstall(dev);  out_fifo: -	engine->fifo.takedown(dev); +	if (!nouveau_noaccel) +		engine->fifo.takedown(dev);  out_graph: -	engine->graph.takedown(dev); +	if (!nouveau_noaccel) +		engine->graph.takedown(dev);  out_fb:  	engine->fb.takedown(dev);  out_timer: @@ -518,8 +532,10 @@ static void nouveau_card_takedown(struct drm_device *dev)  			dev_priv->channel = NULL;  		} -		engine->fifo.takedown(dev); -		engine->graph.takedown(dev); +		if (!nouveau_noaccel) { +			engine->fifo.takedown(dev); +			engine->graph.takedown(dev); +		}  		engine->fb.takedown(dev);  		engine->timer.takedown(dev);  		engine->mc.takedown(dev); @@ -817,6 +833,15 @@ int nouveau_ioctl_getparam(struct drm_device *dev, void *data,  	case NOUVEAU_GETPARAM_VM_VRAM_BASE:  		getparam->value = dev_priv->vm_vram_base;  		break; +	case NOUVEAU_GETPARAM_GRAPH_UNITS: +		/* NV40 and NV50 versions are quite different, but register +		 * address is the same. User is supposed to know the card +		 * family anyway... */ +		if (dev_priv->chipset >= 0x40) { +			getparam->value = nv_rd32(dev, NV40_PMC_GRAPH_UNITS); +			break; +		} +		/* FALLTHRU */  	default:  		NV_ERROR(dev, "unknown parameter %lld\n", getparam->param);  		return -EINVAL; diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c index d910873c1368..fd01caabd5c3 100644 --- a/drivers/gpu/drm/nouveau/nv04_fbcon.c +++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c @@ -27,7 +27,7 @@  #include "nouveau_dma.h"  #include "nouveau_fbcon.h" -static void +void  nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  {  	struct nouveau_fbcon_par *par = info->par; @@ -54,7 +54,7 @@ nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  	FIRE_RING(chan);  } -static void +void  nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  {  	struct nouveau_fbcon_par *par = info->par; @@ -88,7 +88,7 @@ nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  	FIRE_RING(chan);  } -static void +void  nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)  {  	struct nouveau_fbcon_par *par = info->par; @@ -307,9 +307,6 @@ nv04_fbcon_accel_init(struct fb_info *info)  	FIRE_RING(chan); -	info->fbops->fb_fillrect = nv04_fbcon_fillrect; -	info->fbops->fb_copyarea = nv04_fbcon_copyarea; -	info->fbops->fb_imageblit = nv04_fbcon_imageblit;  	return 0;  } diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c index 40b7360841f8..d1a651e3400c 100644 --- a/drivers/gpu/drm/nouveau/nv50_crtc.c +++ b/drivers/gpu/drm/nouveau/nv50_crtc.c @@ -298,14 +298,17 @@ nv50_crtc_set_clock(struct drm_device *dev, int head, int pclk)  static void  nv50_crtc_destroy(struct drm_crtc *crtc)  { -	struct drm_device *dev = crtc->dev; -	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); - -	NV_DEBUG_KMS(dev, "\n"); +	struct drm_device *dev; +	struct nouveau_crtc *nv_crtc;  	if (!crtc)  		return; +	dev = crtc->dev; +	nv_crtc = nouveau_crtc(crtc); + +	NV_DEBUG_KMS(dev, "\n"); +  	drm_crtc_cleanup(&nv_crtc->base);  	nv50_cursor_fini(nv_crtc); diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c index e4f279ee61cf..0f57cdf7ccb2 100644 --- a/drivers/gpu/drm/nouveau/nv50_fbcon.c +++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c @@ -3,7 +3,7 @@  #include "nouveau_dma.h"  #include "nouveau_fbcon.h" -static void +void  nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  {  	struct nouveau_fbcon_par *par = info->par; @@ -46,7 +46,7 @@ nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)  	FIRE_RING(chan);  } -static void +void  nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  {  	struct nouveau_fbcon_par *par = info->par; @@ -81,7 +81,7 @@ nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)  	FIRE_RING(chan);  } -static void +void  nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)  {  	struct nouveau_fbcon_par *par = info->par; @@ -262,9 +262,6 @@ nv50_fbcon_accel_init(struct fb_info *info)  	OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys +  			 dev_priv->vm_vram_base); -	info->fbops->fb_fillrect = nv50_fbcon_fillrect; -	info->fbops->fb_copyarea = nv50_fbcon_copyarea; -	info->fbops->fb_imageblit = nv50_fbcon_imageblit;  	return 0;  } diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c index 32b244bcb482..204a79ff10f4 100644 --- a/drivers/gpu/drm/nouveau/nv50_fifo.c +++ b/drivers/gpu/drm/nouveau/nv50_fifo.c @@ -317,17 +317,20 @@ void  nv50_fifo_destroy_context(struct nouveau_channel *chan)  {  	struct drm_device *dev = chan->dev; +	struct nouveau_gpuobj_ref *ramfc = chan->ramfc;  	NV_DEBUG(dev, "ch%d\n", chan->id); -	nouveau_gpuobj_ref_del(dev, &chan->ramfc); -	nouveau_gpuobj_ref_del(dev, &chan->cache); - +	/* This will ensure the channel is seen as disabled. */ +	chan->ramfc = NULL;  	nv50_fifo_channel_disable(dev, chan->id, false);  	/* Dummy channel, also used on ch 127 */  	if (chan->id == 0)  		nv50_fifo_channel_disable(dev, 127, false); + +	nouveau_gpuobj_ref_del(dev, &ramfc); +	nouveau_gpuobj_ref_del(dev, &chan->cache);  }  int diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c index 20319e59d368..6d504801b514 100644 --- a/drivers/gpu/drm/nouveau/nv50_graph.c +++ b/drivers/gpu/drm/nouveau/nv50_graph.c @@ -165,6 +165,12 @@ nv50_graph_channel(struct drm_device *dev)  	uint32_t inst;  	int i; +	/* Be sure we're not in the middle of a context switch or bad things +	 * will happen, such as unloading the wrong pgraph context. +	 */ +	if (!nv_wait(0x400300, 0x00000001, 0x00000000)) +		NV_ERROR(dev, "Ctxprog is still running\n"); +  	inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);  	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED))  		return NULL; @@ -275,7 +281,7 @@ nv50_graph_load_context(struct nouveau_channel *chan)  int  nv50_graph_unload_context(struct drm_device *dev)  { -	uint32_t inst, fifo = nv_rd32(dev, 0x400500); +	uint32_t inst;  	inst  = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);  	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED)) @@ -283,12 +289,10 @@ nv50_graph_unload_context(struct drm_device *dev)  	inst &= NV50_PGRAPH_CTXCTL_CUR_INSTANCE;  	nouveau_wait_for_idle(dev); -	nv_wr32(dev, 0x400500, fifo & ~1);  	nv_wr32(dev, 0x400784, inst);  	nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) | 0x20);  	nv_wr32(dev, 0x400304, nv_rd32(dev, 0x400304) | 0x01);  	nouveau_wait_for_idle(dev); -	nv_wr32(dev, 0x400500, fifo);  	nv_wr32(dev, NV50_PGRAPH_CTXCTL_CUR, inst);  	return 0; diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c index ecf1936b8224..c2fff543b06f 100644 --- a/drivers/gpu/drm/nouveau/nv50_sor.c +++ b/drivers/gpu/drm/nouveau/nv50_sor.c @@ -101,6 +101,7 @@ nv50_sor_dpms(struct drm_encoder *encoder, int mode)  		struct nouveau_encoder *nvenc = nouveau_encoder(enc);  		if (nvenc == nv_encoder || +		    nvenc->disconnect != nv50_sor_disconnect ||  		    nvenc->dcb->or != nv_encoder->dcb->or)  			continue; diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig index 5982321be4d5..1c02d23f6fcc 100644 --- a/drivers/gpu/drm/radeon/Kconfig +++ b/drivers/gpu/drm/radeon/Kconfig @@ -1,10 +1,14 @@  config DRM_RADEON_KMS -	bool "Enable modesetting on radeon by default" +	bool "Enable modesetting on radeon by default - NEW DRIVER"  	depends on DRM_RADEON  	help -	  Choose this option if you want kernel modesetting enabled by default, -	  and you have a new enough userspace to support this. Running old -	  userspaces with this enabled will cause pain. +	  Choose this option if you want kernel modesetting enabled by default. + +	  This is a completely new driver. It's only part of the existing drm +	  for compatibility reasons. It requires an entirely different graphics +	  stack above it and works very differently from the old drm stack. +	  i.e. don't enable this unless you know what you are doing it may +	  cause issues or bugs compared to the previous userspace driver stack.  	  When kernel modesetting is enabled the IOCTL of radeon/drm  	  driver are considered as invalid and an error message is printed diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index 71060114d5de..b32eeea5bb8b 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c @@ -332,11 +332,13 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,  	PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION args;  	int index = GetIndexIntoMasterTable(COMMAND, ProcessAuxChannelTransaction);  	unsigned char *base; +	int retry_count = 0;  	memset(&args, 0, sizeof(args));  	base = (unsigned char *)rdev->mode_info.atom_context->scratch; +retry:  	memcpy(base, req_bytes, num_bytes);  	args.lpAuxRequest = 0; @@ -347,10 +349,12 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); -	if (args.ucReplyStatus) { -		DRM_DEBUG("failed to get auxch %02x%02x %02x %02x 0x%02x %02x\n", +	if (args.ucReplyStatus && !args.ucDataOutLen) { +		if (args.ucReplyStatus == 0x20 && retry_count < 10) +			goto retry; +		DRM_DEBUG("failed to get auxch %02x%02x %02x %02x 0x%02x %02x after %d retries\n",  			  req_bytes[1], req_bytes[0], req_bytes[2], req_bytes[3], -			  chan->rec.i2c_id, args.ucReplyStatus); +			  chan->rec.i2c_id, args.ucReplyStatus, retry_count);  		return false;  	} diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index a1198d99cdf9..2ffcf5a03551 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c @@ -1950,6 +1950,13 @@ int r600_resume(struct radeon_device *rdev)  		DRM_ERROR("radeon: failled testing IB (%d).\n", r);  		return r;  	} + +	r = r600_audio_init(rdev); +	if (r) { +		DRM_ERROR("radeon: audio resume failed\n"); +		return r; +	} +  	return r;  } @@ -1957,6 +1964,7 @@ int r600_suspend(struct radeon_device *rdev)  {  	int r; +	r600_audio_fini(rdev);  	/* FIXME: we should wait for ring to be empty */  	r600_cp_stop(rdev);  	rdev->cp.ready = false; diff --git a/drivers/gpu/drm/radeon/r600_audio.c b/drivers/gpu/drm/radeon/r600_audio.c index b1c1d3433454..0dcb6904c4ff 100644 --- a/drivers/gpu/drm/radeon/r600_audio.c +++ b/drivers/gpu/drm/radeon/r600_audio.c @@ -261,7 +261,6 @@ void r600_audio_fini(struct radeon_device *rdev)  	if (!r600_audio_chipset_supported(rdev))  		return; -	WREG32_P(R600_AUDIO_ENABLE, 0x0, ~0x81000000); -  	del_timer(&rdev->audio_timer); +	WREG32_P(R600_AUDIO_ENABLE, 0x0, ~0x81000000);  } diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index fa82ca74324e..2dcda6115874 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c @@ -287,6 +287,15 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,  			*connector_type = DRM_MODE_CONNECTOR_DVID;  	} +	/* XFX Pine Group device rv730 reports no VGA DDC lines +	 * even though they are wired up to record 0x93 +	 */ +	if ((dev->pdev->device == 0x9498) && +	    (dev->pdev->subsystem_vendor == 0x1682) && +	    (dev->pdev->subsystem_device == 0x2452)) { +		struct radeon_device *rdev = dev->dev_private; +		*i2c_bus = radeon_lookup_i2c_gpio(rdev, 0x93); +	}  	return true;  } diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 4ddfd4b5bc51..7932dc4d6b90 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -65,31 +65,42 @@ void radeon_benchmark_move(struct radeon_device *rdev, unsigned bsize,  	if (r) {  		goto out_cleanup;  	} -	start_jiffies = jiffies; -	for (i = 0; i < n; i++) { -		r = radeon_fence_create(rdev, &fence); -		if (r) { -			goto out_cleanup; + +	/* r100 doesn't have dma engine so skip the test */ +	if (rdev->asic->copy_dma) { + +		start_jiffies = jiffies; +		for (i = 0; i < n; i++) { +			r = radeon_fence_create(rdev, &fence); +			if (r) { +				goto out_cleanup; +			} + +			r = radeon_copy_dma(rdev, saddr, daddr, +					size / RADEON_GPU_PAGE_SIZE, fence); + +			if (r) { +				goto out_cleanup; +			} +			r = radeon_fence_wait(fence, false); +			if (r) { +				goto out_cleanup; +			} +			radeon_fence_unref(&fence);  		} -		r = radeon_copy_dma(rdev, saddr, daddr, size / RADEON_GPU_PAGE_SIZE, fence); -		if (r) { -			goto out_cleanup; +		end_jiffies = jiffies; +		time = end_jiffies - start_jiffies; +		time = jiffies_to_msecs(time); +		if (time > 0) { +			i = ((n * size) >> 10) / time; +			printk(KERN_INFO "radeon: dma %u bo moves of %ukb from" +					" %d to %d in %lums (%ukb/ms %ukb/s %uM/s)\n", +					n, size >> 10, +					sdomain, ddomain, time, +					i, i * 1000, (i * 1000) / 1024);  		} -		r = radeon_fence_wait(fence, false); -		if (r) { -			goto out_cleanup; -		} -		radeon_fence_unref(&fence); -	} -	end_jiffies = jiffies; -	time = end_jiffies - start_jiffies; -	time = jiffies_to_msecs(time); -	if (time > 0) { -		i = ((n * size) >> 10) / time; -		printk(KERN_INFO "radeon: dma %u bo moves of %ukb from %d to %d" -		       " in %lums (%ukb/ms %ukb/s %uM/s)\n", n, size >> 10, -		       sdomain, ddomain, time, i, i * 1000, (i * 1000) / 1024);  	} +  	start_jiffies = jiffies;  	for (i = 0; i < n; i++) {  		r = radeon_fence_create(rdev, &fence); diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 2d8e5a70f284..238188540017 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -580,16 +580,18 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect  	struct radeon_connector *radeon_connector = to_radeon_connector(connector);  	struct drm_encoder *encoder;  	struct drm_encoder_helper_funcs *encoder_funcs; -	bool dret; +	bool dret = false;  	enum drm_connector_status ret = connector_status_disconnected;  	encoder = radeon_best_single_encoder(connector);  	if (!encoder)  		ret = connector_status_disconnected; -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); -	dret = radeon_ddc_probe(radeon_connector); -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	if (radeon_connector->ddc_bus) { +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); +		dret = radeon_ddc_probe(radeon_connector); +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	}  	if (dret) {  		if (radeon_connector->edid) {  			kfree(radeon_connector->edid); @@ -740,11 +742,13 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect  	struct drm_mode_object *obj;  	int i;  	enum drm_connector_status ret = connector_status_disconnected; -	bool dret; +	bool dret = false; -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); -	dret = radeon_ddc_probe(radeon_connector); -	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	if (radeon_connector->ddc_bus) { +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); +		dret = radeon_ddc_probe(radeon_connector); +		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); +	}  	if (dret) {  		if (radeon_connector->edid) {  			kfree(radeon_connector->edid); diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 6a92f994cc26..7e17a362b54b 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -278,7 +278,7 @@ static void radeon_print_display_setup(struct drm_device *dev)  		DRM_INFO("  %s\n", connector_names[connector->connector_type]);  		if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)  			DRM_INFO("  %s\n", hpd_names[radeon_connector->hpd.hpd]); -		if (radeon_connector->ddc_bus) +		if (radeon_connector->ddc_bus) {  			DRM_INFO("  DDC: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",  				 radeon_connector->ddc_bus->rec.mask_clk_reg,  				 radeon_connector->ddc_bus->rec.mask_data_reg, @@ -288,6 +288,15 @@ static void radeon_print_display_setup(struct drm_device *dev)  				 radeon_connector->ddc_bus->rec.en_data_reg,  				 radeon_connector->ddc_bus->rec.y_clk_reg,  				 radeon_connector->ddc_bus->rec.y_data_reg); +		} else { +			if (connector->connector_type == DRM_MODE_CONNECTOR_VGA || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVII || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVID || +			    connector->connector_type == DRM_MODE_CONNECTOR_DVIA || +			    connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || +			    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) +				DRM_INFO("  DDC: no ddc bus - possible BIOS bug - please report to xorg-driver-ati@lists.x.org\n"); +		}  		DRM_INFO("  Encoders:\n");  		list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {  			radeon_encoder = to_radeon_encoder(encoder); diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c index 3ba213d1b06c..d71e346e9ab5 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c @@ -248,7 +248,7 @@ int radeonfb_create(struct drm_device *dev,  	if (ret)  		goto out_unref; -	memset_io(fbptr, 0xff, aligned_size); +	memset_io(fbptr, 0x0, aligned_size);  	strcpy(info->fix.id, "radeondrmfb"); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 135be9688c90..356dc935ec13 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -39,10 +39,10 @@  #include "ttm/ttm_execbuf_util.h"  #include "ttm/ttm_module.h" -#define VMWGFX_DRIVER_DATE "20090724" -#define VMWGFX_DRIVER_MAJOR 0 -#define VMWGFX_DRIVER_MINOR 1 -#define VMWGFX_DRIVER_PATCHLEVEL 2 +#define VMWGFX_DRIVER_DATE "20100209" +#define VMWGFX_DRIVER_MAJOR 1 +#define VMWGFX_DRIVER_MINOR 0 +#define VMWGFX_DRIVER_PATCHLEVEL 0  #define VMWGFX_FILE_PAGE_OFFSET 0x00100000  #define VMWGFX_FIFO_STATIC_SIZE (1024*1024)  #define VMWGFX_MAX_RELOCATIONS 2048 @@ -113,6 +113,7 @@ struct vmw_fifo_state {  	unsigned long static_buffer_size;  	bool using_bounce_buffer;  	uint32_t capabilities; +	struct mutex fifo_mutex;  	struct rw_semaphore rwsem;  }; @@ -213,7 +214,7 @@ struct vmw_private {  	 * Fencing and IRQs.  	 */ -	uint32_t fence_seq; +	atomic_t fence_seq;  	wait_queue_head_t fence_queue;  	wait_queue_head_t fifo_queue;  	atomic_t fence_queue_waiters; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c index 4157547cc6e4..39d43a01d846 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c @@ -74,6 +74,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)  	fifo->reserved_size = 0;  	fifo->using_bounce_buffer = false; +	mutex_init(&fifo->fifo_mutex);  	init_rwsem(&fifo->rwsem);  	/* @@ -117,7 +118,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)  		 (unsigned int) min,  		 (unsigned int) fifo->capabilities); -	dev_priv->fence_seq = dev_priv->last_read_sequence; +	atomic_set(&dev_priv->fence_seq, dev_priv->last_read_sequence);  	iowrite32(dev_priv->last_read_sequence, fifo_mem + SVGA_FIFO_FENCE);  	return vmw_fifo_send_fence(dev_priv, &dummy); @@ -283,7 +284,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)  	uint32_t reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE;  	int ret; -	down_write(&fifo_state->rwsem); +	mutex_lock(&fifo_state->fifo_mutex);  	max = ioread32(fifo_mem + SVGA_FIFO_MAX);  	min = ioread32(fifo_mem + SVGA_FIFO_MIN);  	next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); @@ -351,7 +352,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)  	}  out_err:  	fifo_state->reserved_size = 0; -	up_write(&fifo_state->rwsem); +	mutex_unlock(&fifo_state->fifo_mutex);  	return NULL;  } @@ -426,6 +427,7 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)  	} +	down_write(&fifo_state->rwsem);  	if (fifo_state->using_bounce_buffer || reserveable) {  		next_cmd += bytes;  		if (next_cmd >= max) @@ -437,8 +439,9 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)  	if (reserveable)  		iowrite32(0, fifo_mem + SVGA_FIFO_RESERVED);  	mb(); -	vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC);  	up_write(&fifo_state->rwsem); +	vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); +	mutex_unlock(&fifo_state->fifo_mutex);  }  int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence) @@ -451,9 +454,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)  	fm = vmw_fifo_reserve(dev_priv, bytes);  	if (unlikely(fm == NULL)) { -		down_write(&fifo_state->rwsem); -		*sequence = dev_priv->fence_seq; -		up_write(&fifo_state->rwsem); +		*sequence = atomic_read(&dev_priv->fence_seq);  		ret = -ENOMEM;  		(void)vmw_fallback_wait(dev_priv, false, true, *sequence,  					false, 3*HZ); @@ -461,7 +462,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)  	}  	do { -		*sequence = dev_priv->fence_seq++; +		*sequence = atomic_add_return(1, &dev_priv->fence_seq);  	} while (*sequence == 0);  	if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c index 778851f9f1d6..1c7a316454d8 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c @@ -48,6 +48,12 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,  	case DRM_VMW_PARAM_FIFO_OFFSET:  		param->value = dev_priv->mmio_start;  		break; +	case DRM_VMW_PARAM_HW_CAPS: +		param->value = dev_priv->capabilities; +		break; +	case DRM_VMW_PARAM_FIFO_CAPS: +		param->value = dev_priv->fifo.capabilities; +		break;  	default:  		DRM_ERROR("Illegal vmwgfx get param request: %d\n",  			  param->param); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c b/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c index d40086fc8647..4d7cb5393860 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c @@ -85,19 +85,12 @@ bool vmw_fence_signaled(struct vmw_private *dev_priv,  		return true;  	/** -	 * Below is to signal stale fences that have wrapped. -	 * First, block fence submission. -	 */ - -	down_read(&fifo_state->rwsem); - -	/**  	 * Then check if the sequence is higher than what we've actually  	 * emitted. Then the fence is stale and signaled.  	 */ -	ret = ((dev_priv->fence_seq - sequence) > VMW_FENCE_WRAP); -	up_read(&fifo_state->rwsem); +	ret = ((atomic_read(&dev_priv->fence_seq) - sequence) +	       > VMW_FENCE_WRAP);  	return ret;  } @@ -127,7 +120,7 @@ int vmw_fallback_wait(struct vmw_private *dev_priv,  	if (fifo_idle)  		down_read(&fifo_state->rwsem); -	signal_seq = dev_priv->fence_seq; +	signal_seq = atomic_read(&dev_priv->fence_seq);  	ret = 0;  	for (;;) { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index eeba6d1d06e4..31f9afed0a63 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -769,10 +769,10 @@ int vmw_kms_init(struct vmw_private *dev_priv)  	drm_mode_config_init(dev);  	dev->mode_config.funcs = &vmw_kms_funcs; -	dev->mode_config.min_width = 640; -	dev->mode_config.min_height = 480; -	dev->mode_config.max_width = 2048; -	dev->mode_config.max_height = 2048; +	dev->mode_config.min_width = 1; +	dev->mode_config.min_height = 1; +	dev->mode_config.max_width = dev_priv->fb_max_width; +	dev->mode_config.max_height = dev_priv->fb_max_height;  	ret = vmw_kms_init_legacy_display_system(dev_priv); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index c7efbd47ab84..f8fbbc67a406 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -35,11 +35,6 @@  #define VMW_RES_SURFACE ttm_driver_type1  #define VMW_RES_STREAM ttm_driver_type2 -/* XXX: This isn't a real hardware flag, but just a hack for kernel to - * know about primary surfaces. Find a better way to accomplish this. - */ -#define SVGA3D_SURFACE_HINT_SCANOUT (1 << 9) -  struct vmw_user_context {  	struct ttm_base_object base;  	struct vmw_resource res; @@ -579,6 +574,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	srf->flags = req->flags;  	srf->format = req->format; +	srf->scanout = req->scanout;  	memcpy(srf->mip_levels, req->mip_levels, sizeof(srf->mip_levels));  	srf->num_sizes = 0;  	for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) @@ -604,16 +600,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	if (unlikely(ret != 0))  		goto out_err1; -	if (srf->flags & SVGA3D_SURFACE_HINT_SCANOUT) { -		/* we should not send this flag down to hardware since -		 * its not a official one -		 */ -		srf->flags &= ~SVGA3D_SURFACE_HINT_SCANOUT; -		srf->scanout = true; -	} else { -		srf->scanout = false; -	} -  	if (srf->scanout &&  	    srf->num_sizes == 1 &&  	    srf->sizes[0].width == 64 && diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index 1ac0c93603c9..24b56dc54597 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c @@ -961,7 +961,7 @@ static ssize_t vga_arb_write(struct file *file, const char __user * buf,  		remaining -= 7;  		pr_devel("client 0x%p called 'target'\n", priv);  		/* if target is default */ -		if (!strncmp(buf, "default", 7)) +		if (!strncmp(kbuf, "default", 7))  			pdev = pci_dev_get(vga_default_device());  		else {  			if (!vga_pci_str_to_vars(curr_pos, remaining, diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index cc9b5940fa97..875e34e0b235 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -2115,9 +2115,7 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)  	if (ret)  		goto err1; -	if (cma_loopback_addr(addr)) { -		ret = cma_bind_loopback(id_priv); -	} else if (!cma_zero_addr(addr)) { +	if (!cma_any_addr(addr)) {  		ret = rdma_translate_ip(addr, &id->route.addr.dev_addr);  		if (ret)  			goto err1; diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 9774bdfaa482..d8c0c8d6992c 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c @@ -1141,7 +1141,14 @@ static void psmouse_cleanup(struct serio *serio)  		psmouse_deactivate(parent);  	} -	psmouse_deactivate(psmouse); +	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); + +	/* +	 * Disable stream mode so cleanup routine can proceed undisturbed. +	 */ +	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) +		printk(KERN_WARNING "psmouse.c: Failed to disable mouse on %s\n", +			psmouse->ps2dev.serio->phys);  	if (psmouse->cleanup)  		psmouse->cleanup(psmouse); diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 57752751712b..81279b3d694c 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c @@ -1796,7 +1796,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)  		dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: "  		   "Command not in the active list! (sc=%p)\n", ioc->name,  		   SCpnt)); -		retval = 0; +		retval = SUCCESS;  		goto out;  	} diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c index b9f1e84897cc..e7f8027165e6 100644 --- a/drivers/mmc/card/mmc_test.c +++ b/drivers/mmc/card/mmc_test.c @@ -74,6 +74,9 @@ static void mmc_test_prepare_mrq(struct mmc_test_card *test,  	}  	mrq->cmd->arg = dev_addr; +	if (!mmc_card_blockaddr(test->card)) +		mrq->cmd->arg <<= 9; +  	mrq->cmd->flags = MMC_RSP_R1 | MMC_CMD_ADTC;  	if (blocks == 1) @@ -190,7 +193,7 @@ static int __mmc_test_prepare(struct mmc_test_card *test, int write)  	}  	for (i = 0;i < BUFFER_SIZE / 512;i++) { -		ret = mmc_test_buffer_transfer(test, test->buffer, i * 512, 512, 1); +		ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1);  		if (ret)  			return ret;  	} @@ -219,7 +222,7 @@ static int mmc_test_cleanup(struct mmc_test_card *test)  	memset(test->buffer, 0, 512);  	for (i = 0;i < BUFFER_SIZE / 512;i++) { -		ret = mmc_test_buffer_transfer(test, test->buffer, i * 512, 512, 1); +		ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1);  		if (ret)  			return ret;  	} @@ -426,7 +429,7 @@ static int mmc_test_transfer(struct mmc_test_card *test,  		for (i = 0;i < sectors;i++) {  			ret = mmc_test_buffer_transfer(test,  				test->buffer + i * 512, -				dev_addr + i * 512, 512, 0); +				dev_addr + i, 512, 0);  			if (ret)  				return ret;  		} diff --git a/drivers/power/wm97xx_battery.c b/drivers/power/wm97xx_battery.c index fa39e759a275..6ea3cb5837c7 100644 --- a/drivers/power/wm97xx_battery.c +++ b/drivers/power/wm97xx_battery.c @@ -175,8 +175,14 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)  		dev_err(&dev->dev, "Do not pass platform_data through "  			"wm97xx_bat_set_pdata!\n");  		return -EINVAL; -	} else -		pdata = wmdata->batt_pdata; +	} + +	if (!wmdata) { +		dev_err(&dev->dev, "No platform data supplied\n"); +		return -EINVAL; +	} + +	pdata = wmdata->batt_pdata;  	if (dev->id != -1)  		return -EINVAL; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 686ef270ecf7..b60a4c9f8f16 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -661,7 +661,7 @@ static int suspend_prepare(struct regulator_dev *rdev, suspend_state_t state)  static void print_constraints(struct regulator_dev *rdev)  {  	struct regulation_constraints *constraints = rdev->constraints; -	char buf[80]; +	char buf[80] = "";  	int count = 0;  	int ret; diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c index 76d08c282f9c..4f33a0f4a179 100644 --- a/drivers/regulator/lp3971.c +++ b/drivers/regulator/lp3971.c @@ -183,7 +183,7 @@ static int lp3971_ldo_set_voltage(struct regulator_dev *dev,  		if (vol_map[val] >= min_vol)  			break; -	if (vol_map[val] > max_vol) +	if (val > LDO_VOL_MAX_IDX || vol_map[val] > max_vol)  		return -EINVAL;  	return lp3971_set_bits(lp3971, LP3971_LDO_VOL_CONTR_REG(ldo), @@ -272,7 +272,7 @@ static int lp3971_dcdc_set_voltage(struct regulator_dev *dev,  		if (vol_map[val] >= min_vol)  			break; -	if (vol_map[val] > max_vol) +	if (val > BUCK_TARGET_VOL_MAX_IDX || vol_map[val] > max_vol)  		return -EINVAL;  	ret = lp3971_set_bits(lp3971, LP3971_BUCK_TARGET_VOL1_REG(buck), diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 0f7b493fb105..271399f62f1b 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c @@ -671,12 +671,11 @@ static void zfcp_fc_ct_els_job_handler(void *data)  {  	struct fc_bsg_job *job = data;  	struct zfcp_fsf_ct_els *zfcp_ct_els = job->dd_data; -	int status = zfcp_ct_els->status; -	int reply_status; +	struct fc_bsg_reply *jr = job->reply; -	reply_status = status ? FC_CTELS_STATUS_REJECT : FC_CTELS_STATUS_OK; -	job->reply->reply_data.ctels_reply.status = reply_status; -	job->reply->reply_payload_rcv_len = job->reply_payload.payload_len; +	jr->reply_payload_rcv_len = job->reply_payload.payload_len; +	jr->reply_data.ctels_reply.status = FC_CTELS_STATUS_OK; +	jr->result = zfcp_ct_els->status ? -EIO : 0;  	job->job_done(job);  } diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index f61fb8d01330..8bc6f53691e9 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -453,6 +453,5 @@ extern void qla24xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla25xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla25xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t);  extern void qla24xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); -extern struct scsi_qla_host * qla25xx_get_host(struct rsp_que *);  #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index ffd0efdff40e..6fc63b98818c 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1917,6 +1917,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)  	struct rsp_que *rsp;  	struct device_reg_24xx __iomem *reg;  	struct scsi_qla_host *vha; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1927,15 +1928,15 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)  	ha = rsp->hw;  	reg = &ha->iobase->isp24; -	spin_lock_irq(&ha->hardware_lock); +	spin_lock_irqsave(&ha->hardware_lock, flags); -	vha = qla25xx_get_host(rsp); +	vha = pci_get_drvdata(ha->pdev);  	qla24xx_process_response_queue(vha, rsp);  	if (!ha->flags.disable_msix_handshake) {  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  		RD_REG_DWORD_RELAXED(®->hccr);  	} -	spin_unlock_irq(&ha->hardware_lock); +	spin_unlock_irqrestore(&ha->hardware_lock, flags);  	return IRQ_HANDLED;  } @@ -1946,6 +1947,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)  	struct qla_hw_data *ha;  	struct rsp_que *rsp;  	struct device_reg_24xx __iomem *reg; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1958,10 +1960,10 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)  	/* Clear the interrupt, if enabled, for this response queue */  	if (rsp->options & ~BIT_6) {  		reg = &ha->iobase->isp24; -		spin_lock_irq(&ha->hardware_lock); +		spin_lock_irqsave(&ha->hardware_lock, flags);  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  		RD_REG_DWORD_RELAXED(®->hccr); -		spin_unlock_irq(&ha->hardware_lock); +		spin_unlock_irqrestore(&ha->hardware_lock, flags);  	}  	queue_work_on((int) (rsp->id - 1), ha->wq, &rsp->q_work); @@ -1979,6 +1981,7 @@ qla24xx_msix_default(int irq, void *dev_id)  	uint32_t	stat;  	uint32_t	hccr;  	uint16_t	mb[4]; +	unsigned long flags;  	rsp = (struct rsp_que *) dev_id;  	if (!rsp) { @@ -1990,7 +1993,7 @@ qla24xx_msix_default(int irq, void *dev_id)  	reg = &ha->iobase->isp24;  	status = 0; -	spin_lock_irq(&ha->hardware_lock); +	spin_lock_irqsave(&ha->hardware_lock, flags);  	vha = pci_get_drvdata(ha->pdev);  	do {  		stat = RD_REG_DWORD(®->host_status); @@ -2039,7 +2042,7 @@ qla24xx_msix_default(int irq, void *dev_id)  		}  		WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);  	} while (0); -	spin_unlock_irq(&ha->hardware_lock); +	spin_unlock_irqrestore(&ha->hardware_lock, flags);  	if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&  	    (status & MBX_INTERRUPT) && ha->flags.mbox_int) { @@ -2277,30 +2280,3 @@ int qla25xx_request_irq(struct rsp_que *rsp)  	msix->rsp = rsp;  	return ret;  } - -struct scsi_qla_host * -qla25xx_get_host(struct rsp_que *rsp) -{ -	srb_t *sp; -	struct qla_hw_data *ha = rsp->hw; -	struct scsi_qla_host *vha = NULL; -	struct sts_entry_24xx *pkt; -	struct req_que *req; -	uint16_t que; -	uint32_t handle; - -	pkt = (struct sts_entry_24xx *) rsp->ring_ptr; -	que = MSW(pkt->handle); -	handle = (uint32_t) LSW(pkt->handle); -	req = ha->req_q_map[que]; -	if (handle < MAX_OUTSTANDING_COMMANDS) { -		sp = req->outstanding_cmds[handle]; -		if (sp) -			return  sp->fcport->vha; -		else -			goto base_que; -	} -base_que: -	vha = pci_get_drvdata(ha->pdev); -	return vha; -} diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index b901aa267e7d..ff17dee28613 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -636,13 +636,15 @@ failed:  static void qla_do_work(struct work_struct *work)  { +	unsigned long flags;  	struct rsp_que *rsp = container_of(work, struct rsp_que, q_work);  	struct scsi_qla_host *vha; +	struct qla_hw_data *ha = rsp->hw; -	spin_lock_irq(&rsp->hw->hardware_lock); -	vha = qla25xx_get_host(rsp); +	spin_lock_irqsave(&rsp->hw->hardware_lock, flags); +	vha = pci_get_drvdata(ha->pdev);  	qla24xx_process_response_queue(vha, rsp); -	spin_unlock_irq(&rsp->hw->hardware_lock); +	spin_unlock_irqrestore(&rsp->hw->hardware_lock, flags);  }  /* create response queue */ diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index c5c45de1a2ee..0ca9ec4a79c3 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -301,6 +301,12 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,  	u32 data;  	void __user *dxferp;  	int err; +	int interface_id; + +	if (get_user(interface_id, &sgio32->interface_id)) +		return -EFAULT; +	if (interface_id != 'S') +		return sys_ioctl(fd, cmd, (unsigned long)sgio32);  	if (get_user(iovec_count, &sgio32->iovec_count))  		return -EFAULT; @@ -936,6 +942,7 @@ COMPATIBLE_IOCTL(TCSETSF)  COMPATIBLE_IOCTL(TIOCLINUX)  COMPATIBLE_IOCTL(TIOCSBRK)  COMPATIBLE_IOCTL(TIOCCBRK) +COMPATIBLE_IOCTL(TIOCGSID)  COMPATIBLE_IOCTL(TIOCGICOUNT)  /* Little t */  COMPATIBLE_IOCTL(TIOCGETD) @@ -1038,6 +1045,8 @@ COMPATIBLE_IOCTL(FIOQSIZE)  #ifdef CONFIG_BLOCK  /* loop */  IGNORE_IOCTL(LOOP_CLR_FD) +/* md calls this on random blockdevs */ +IGNORE_IOCTL(RAID_VERSION)  /* SG stuff */  COMPATIBLE_IOCTL(SG_SET_TIMEOUT)  COMPATIBLE_IOCTL(SG_GET_TIMEOUT) diff --git a/fs/exec.c b/fs/exec.c index 0790a107ff7e..e95c692ef0e4 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -571,6 +571,9 @@ int setup_arg_pages(struct linux_binprm *bprm,  	struct vm_area_struct *prev = NULL;  	unsigned long vm_flags;  	unsigned long stack_base; +	unsigned long stack_size; +	unsigned long stack_expand; +	unsigned long rlim_stack;  #ifdef CONFIG_STACK_GROWSUP  	/* Limit stack size to 1GB */ @@ -627,10 +630,24 @@ int setup_arg_pages(struct linux_binprm *bprm,  			goto out_unlock;  	} +	stack_expand = EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	stack_size = vma->vm_end - vma->vm_start; +	/* +	 * Align this down to a page boundary as expand_stack +	 * will align it up. +	 */ +	rlim_stack = rlimit(RLIMIT_STACK) & PAGE_MASK; +	rlim_stack = min(rlim_stack, stack_size);  #ifdef CONFIG_STACK_GROWSUP -	stack_base = vma->vm_end + EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	if (stack_size + stack_expand > rlim_stack) +		stack_base = vma->vm_start + rlim_stack; +	else +		stack_base = vma->vm_end + stack_expand;  #else -	stack_base = vma->vm_start - EXTRA_STACK_VM_PAGES * PAGE_SIZE; +	if (stack_size + stack_expand > rlim_stack) +		stack_base = vma->vm_end - rlim_stack; +	else +		stack_base = vma->vm_start - stack_expand;  #endif  	ret = expand_stack(vma, stack_base);  	if (ret) diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 6d47379e794b..583e823307ae 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -541,7 +541,7 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock,  				*ptr++ = cpu_to_be64(bn++);  			break;  		} -	} while (state != ALLOC_DATA); +	} while ((state != ALLOC_DATA) || !dblock);  	ip->i_height = height;  	gfs2_add_inode_blocks(&ip->i_inode, alloced); diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 8a102f731003..a86ed6381566 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c @@ -725,7 +725,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)  		goto fail;  	} -	error = -EINVAL; +	error = -EUSERS;  	if (!gfs2_jindex_size(sdp)) {  		fs_err(sdp, "no journals!\n");  		goto fail_jindex; diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c index fa588006588d..237874f1af23 100644 --- a/fs/nfs/fscache.c +++ b/fs/nfs/fscache.c @@ -354,12 +354,11 @@ void nfs_fscache_reset_inode_cookie(struct inode *inode)   */  int nfs_fscache_release_page(struct page *page, gfp_t gfp)  { -	struct nfs_inode *nfsi = NFS_I(page->mapping->host); -	struct fscache_cookie *cookie = nfsi->fscache; - -	BUG_ON(!cookie); -  	if (PageFsCache(page)) { +		struct nfs_inode *nfsi = NFS_I(page->mapping->host); +		struct fscache_cookie *cookie = nfsi->fscache; + +		BUG_ON(!cookie);  		dfprintk(FSCACHE, "NFS: fscache releasepage (0x%p/0x%p/0x%p)\n",  			 cookie, page, nfsi); diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index 0adefc40cc89..59047f8d7d72 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c @@ -120,7 +120,7 @@ static struct {  	{ .status = MNT3ERR_INVAL,		.errno = -EINVAL,	},  	{ .status = MNT3ERR_NAMETOOLONG,	.errno = -ENAMETOOLONG,	},  	{ .status = MNT3ERR_NOTSUPP,		.errno = -ENOTSUPP,	}, -	{ .status = MNT3ERR_SERVERFAULT,	.errno = -ESERVERFAULT,	}, +	{ .status = MNT3ERR_SERVERFAULT,	.errno = -EREMOTEIO,	},  };  struct mountres { diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index 5e078b222b4e..7bc2da8efd4a 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -699,7 +699,7 @@ static struct {  	{ NFSERR_BAD_COOKIE,	-EBADCOOKIE	},  	{ NFSERR_NOTSUPP,	-ENOTSUPP	},  	{ NFSERR_TOOSMALL,	-ETOOSMALL	}, -	{ NFSERR_SERVERFAULT,	-ESERVERFAULT	}, +	{ NFSERR_SERVERFAULT,	-EREMOTEIO	},  	{ NFSERR_BADTYPE,	-EBADTYPE	},  	{ NFSERR_JUKEBOX,	-EJUKEBOX	},  	{ -1,			-EIO		} diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index e437fd6a819f..5cd5184b56db 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -4631,7 +4631,7 @@ static int decode_sequence(struct xdr_stream *xdr,  	 * If the server returns different values for sessionID, slotID or  	 * sequence number, the server is looney tunes.  	 */ -	status = -ESERVERFAULT; +	status = -EREMOTEIO;  	if (memcmp(id.data, res->sr_session->sess_id.data,  		   NFS4_MAX_SESSIONID_LEN)) { @@ -5774,7 +5774,7 @@ static struct {  	{ NFS4ERR_BAD_COOKIE,	-EBADCOOKIE	},  	{ NFS4ERR_NOTSUPP,	-ENOTSUPP	},  	{ NFS4ERR_TOOSMALL,	-ETOOSMALL	}, -	{ NFS4ERR_SERVERFAULT,	-ESERVERFAULT	}, +	{ NFS4ERR_SERVERFAULT,	-EREMOTEIO	},  	{ NFS4ERR_BADTYPE,	-EBADTYPE	},  	{ NFS4ERR_LOCKED,	-EAGAIN		},  	{ NFS4ERR_SYMLINK,	-ELOOP		}, @@ -5801,7 +5801,7 @@ nfs4_stat_to_errno(int stat)  	}  	if (stat <= 10000 || stat > 10100) {  		/* The server is looney tunes. */ -		return -ESERVERFAULT; +		return -EREMOTEIO;  	}  	/* If we cannot translate the error, the recovery routines should  	 * handle it. diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 7b54b8bb101f..d63d964a0392 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1598,8 +1598,7 @@ int nfs_migrate_page(struct address_space *mapping, struct page *newpage,  	struct nfs_page *req;  	int ret; -	if (PageFsCache(page)) -		nfs_fscache_release_page(page, GFP_KERNEL); +	nfs_fscache_release_page(page, GFP_KERNEL);  	req = nfs_find_and_lock_request(page);  	ret = PTR_ERR(req); diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h index 1e67c441ea82..f745948b61e4 100644 --- a/include/drm/nouveau_drm.h +++ b/include/drm/nouveau_drm.h @@ -77,6 +77,7 @@ struct drm_nouveau_gpuobj_free {  #define NOUVEAU_GETPARAM_PCI_PHYSICAL    10  #define NOUVEAU_GETPARAM_CHIPSET_ID      11  #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12 +#define NOUVEAU_GETPARAM_GRAPH_UNITS     13  struct drm_nouveau_getparam {  	uint64_t param;  	uint64_t value; diff --git a/include/drm/vmwgfx_drm.h b/include/drm/vmwgfx_drm.h index 2be7e1249b6f..c7645f480d12 100644 --- a/include/drm/vmwgfx_drm.h +++ b/include/drm/vmwgfx_drm.h @@ -68,7 +68,8 @@  #define DRM_VMW_PARAM_NUM_FREE_STREAMS 1  #define DRM_VMW_PARAM_3D               2  #define DRM_VMW_PARAM_FIFO_OFFSET      3 - +#define DRM_VMW_PARAM_HW_CAPS          4 +#define DRM_VMW_PARAM_FIFO_CAPS        5  /**   * struct drm_vmw_getparam_arg @@ -181,6 +182,8 @@ struct drm_vmw_context_arg {   * The size of the array should equal the total number of mipmap levels.   * @shareable: Boolean whether other clients (as identified by file descriptors)   * may reference this surface. + * @scanout: Boolean whether the surface is intended to be used as a + * scanout.   *   * Input data to the DRM_VMW_CREATE_SURFACE Ioctl.   * Output data from the DRM_VMW_REF_SURFACE Ioctl. @@ -192,7 +195,7 @@ struct drm_vmw_surface_create_req {  	uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES];  	uint64_t size_addr;  	int32_t shareable; -	uint32_t pad64; +	int32_t scanout;  };  /** @@ -295,17 +298,28 @@ union drm_vmw_surface_reference_arg {   *   * @commands: User-space address of a command buffer cast to an uint64_t.   * @command-size: Size in bytes of the command buffer. + * @throttle-us: Sleep until software is less than @throttle_us + * microseconds ahead of hardware. The driver may round this value + * to the nearest kernel tick.   * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an   * uint64_t. + * @version: Allows expanding the execbuf ioctl parameters without breaking + * backwards compatibility, since user-space will always tell the kernel + * which version it uses. + * @flags: Execbuf flags. None currently.   *   * Argument to the DRM_VMW_EXECBUF Ioctl.   */ +#define DRM_VMW_EXECBUF_VERSION 0 +  struct drm_vmw_execbuf_arg {  	uint64_t commands;  	uint32_t command_size; -	uint32_t pad64; +	uint32_t throttle_us;  	uint64_t fence_rep; +	 uint32_t version; +	 uint32_t flags;  };  /** diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index b8faa6dc5abe..e767c3f395ab 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1893,6 +1893,12 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)  	if (!bdl_pos_adj[chip->dev_index])  		return 1; /* no delayed ack */ +	if (azx_dev->period_bytes == 0) { +		printk(KERN_WARNING +		       "hda-intel: Divide by zero was avoided " +		       "in azx_dev->period_bytes.\n"); +		return 0; +	}  	if (pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)  		return 0; /* NG - it's below the period boundary */  	return 1; /* OK, it's fine */  | 

