From 16b24be5d5fada76b23d330149a5b0e8d0961848 Mon Sep 17 00:00:00 2001 From: Maximilian Attems Date: Thu, 5 Jun 2008 09:32:12 +0000 Subject: [PATCH] update to 2.6.26-rc5 no new conflicts svn path=/dists/trunk/linux-2.6/; revision=11522 --- debian/changelog | 2 +- .../patches/bugfix/all/patch-2.6.26-rc4-git4 | 7538 ----------------- debian/patches/series/1~experimental.1 | 2 +- 3 files changed, 2 insertions(+), 7540 deletions(-) delete mode 100644 debian/patches/bugfix/all/patch-2.6.26-rc4-git4 diff --git a/debian/changelog b/debian/changelog index 88baffe50..a771b28f3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -linux-2.6 (2.6.26~rc4-1~experimental.1) UNRELEASED; urgency=low +linux-2.6 (2.6.26~rc5-1~experimental.1) UNRELEASED; urgency=low * New upstream release - UDF 2.50 support. (closes: #480910) diff --git a/debian/patches/bugfix/all/patch-2.6.26-rc4-git4 b/debian/patches/bugfix/all/patch-2.6.26-rc4-git4 deleted file mode 100644 index 6794979c9..000000000 --- a/debian/patches/bugfix/all/patch-2.6.26-rc4-git4 +++ /dev/null @@ -1,7538 +0,0 @@ -diff --git a/arch/avr32/configs/atngw100_defconfig b/arch/avr32/configs/atngw100_defconfig -index 0604607..119edb8 100644 ---- a/arch/avr32/configs/atngw100_defconfig -+++ b/arch/avr32/configs/atngw100_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.24-rc7 --# Wed Jan 9 23:20:41 2008 -+# Linux kernel version: 2.6.26-rc3 -+# Mon May 26 13:30:59 2008 - # - CONFIG_AVR32=y - CONFIG_GENERIC_GPIO=y -@@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y - CONFIG_GENERIC_IRQ_PROBE=y - CONFIG_RWSEM_GENERIC_SPINLOCK=y - CONFIG_GENERIC_TIME=y -+CONFIG_GENERIC_CLOCKEVENTS=y - # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - # CONFIG_ARCH_HAS_ILOG2_U32 is not set - # CONFIG_ARCH_HAS_ILOG2_U64 is not set --CONFIG_ARCH_SUPPORTS_OPROFILE=y - CONFIG_GENERIC_HWEIGHT=y - CONFIG_GENERIC_CALIBRATE_DELAY=y - CONFIG_GENERIC_BUG=y -@@ -37,17 +37,15 @@ CONFIG_POSIX_MQUEUE=y - CONFIG_BSD_PROCESS_ACCT=y - CONFIG_BSD_PROCESS_ACCT_V3=y - # CONFIG_TASKSTATS is not set --# CONFIG_USER_NS is not set --# CONFIG_PID_NS is not set - # CONFIG_AUDIT is not set - # CONFIG_IKCONFIG is not set - CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_CGROUPS is not set --CONFIG_FAIR_GROUP_SCHED=y --CONFIG_FAIR_USER_SCHED=y --# CONFIG_FAIR_CGROUP_SCHED is not set -+# CONFIG_GROUP_SCHED is not set - CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y - # CONFIG_RELAY is not set -+# CONFIG_NAMESPACES is not set - CONFIG_BLK_DEV_INITRD=y - CONFIG_INITRAMFS_SOURCE="" - CONFIG_CC_OPTIMIZE_FOR_SIZE=y -@@ -61,11 +59,13 @@ CONFIG_HOTPLUG=y - CONFIG_PRINTK=y - CONFIG_BUG=y - CONFIG_ELF_CORE=y -+# CONFIG_COMPAT_BRK is not set - # CONFIG_BASE_FULL is not set - CONFIG_FUTEX=y - CONFIG_ANON_INODES=y - CONFIG_EPOLL=y - CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y - CONFIG_EVENTFD=y - CONFIG_SHMEM=y - CONFIG_VM_EVENT_COUNTERS=y -@@ -73,11 +73,21 @@ CONFIG_SLUB_DEBUG=y - # CONFIG_SLAB is not set - CONFIG_SLUB=y - # CONFIG_SLOB is not set -+CONFIG_PROFILING=y -+# CONFIG_MARKERS is not set -+CONFIG_OPROFILE=m -+CONFIG_HAVE_OPROFILE=y -+CONFIG_KPROBES=y -+CONFIG_HAVE_KPROBES=y -+# CONFIG_HAVE_KRETPROBES is not set -+# CONFIG_HAVE_DMA_ATTRS is not set -+CONFIG_PROC_PAGE_MONITOR=y - CONFIG_SLABINFO=y - CONFIG_RT_MUTEXES=y - # CONFIG_TINY_SHMEM is not set - CONFIG_BASE_SMALL=1 - CONFIG_MODULES=y -+# CONFIG_MODULE_FORCE_LOAD is not set - CONFIG_MODULE_UNLOAD=y - CONFIG_MODULE_FORCE_UNLOAD=y - # CONFIG_MODVERSIONS is not set -@@ -101,10 +111,15 @@ CONFIG_IOSCHED_CFQ=y - CONFIG_DEFAULT_CFQ=y - # CONFIG_DEFAULT_NOOP is not set - CONFIG_DEFAULT_IOSCHED="cfq" -+CONFIG_CLASSIC_RCU=y - - # - # System Type and features - # -+CONFIG_TICK_ONESHOT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y -+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y - CONFIG_SUBARCH_AVR32B=y - CONFIG_MMU=y - CONFIG_PERFORMANCE_COUNTERS=y -@@ -141,16 +156,19 @@ CONFIG_FLATMEM=y - CONFIG_FLAT_NODE_MEM_MAP=y - # CONFIG_SPARSEMEM_STATIC is not set - # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -+CONFIG_PAGEFLAGS_EXTENDED=y - CONFIG_SPLIT_PTLOCK_CPUS=4 - # CONFIG_RESOURCES_64BIT is not set - CONFIG_ZONE_DMA_FLAG=0 - CONFIG_VIRT_TO_BUS=y - # CONFIG_OWNERSHIP_TRACE is not set -+CONFIG_NMI_DEBUGGING=y - # CONFIG_HZ_100 is not set - CONFIG_HZ_250=y - # CONFIG_HZ_300 is not set - # CONFIG_HZ_1000 is not set - CONFIG_HZ=250 -+# CONFIG_SCHED_HRTICK is not set - CONFIG_CMDLINE="" - - # -@@ -164,9 +182,10 @@ CONFIG_CPU_FREQ=y - CONFIG_CPU_FREQ_TABLE=y - # CONFIG_CPU_FREQ_DEBUG is not set - # CONFIG_CPU_FREQ_STAT is not set --CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set - # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set --# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y - # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set - CONFIG_CPU_FREQ_GOV_PERFORMANCE=y - # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -@@ -202,6 +221,7 @@ CONFIG_XFRM=y - CONFIG_XFRM_USER=y - # CONFIG_XFRM_SUB_POLICY is not set - # CONFIG_XFRM_MIGRATE is not set -+# CONFIG_XFRM_STATISTICS is not set - CONFIG_NET_KEY=y - # CONFIG_NET_KEY_MIGRATE is not set - CONFIG_INET=y -@@ -255,87 +275,40 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=y - CONFIG_INET6_XFRM_MODE_BEET=y - # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set - CONFIG_IPV6_SIT=y -+CONFIG_IPV6_NDISC_NODETYPE=y - # CONFIG_IPV6_TUNNEL is not set - # CONFIG_IPV6_MULTIPLE_TABLES is not set -+# CONFIG_IPV6_MROUTE is not set - # CONFIG_NETWORK_SECMARK is not set - CONFIG_NETFILTER=y - # CONFIG_NETFILTER_DEBUG is not set --CONFIG_BRIDGE_NETFILTER=y -+# CONFIG_NETFILTER_ADVANCED is not set - - # - # Core Netfilter Configuration - # --# CONFIG_NETFILTER_NETLINK is not set --CONFIG_NF_CONNTRACK_ENABLED=m -+CONFIG_NETFILTER_NETLINK=m -+CONFIG_NETFILTER_NETLINK_LOG=m - CONFIG_NF_CONNTRACK=m --CONFIG_NF_CT_ACCT=y --CONFIG_NF_CONNTRACK_MARK=y --# CONFIG_NF_CONNTRACK_EVENTS is not set --CONFIG_NF_CT_PROTO_GRE=m --# CONFIG_NF_CT_PROTO_SCTP is not set --# CONFIG_NF_CT_PROTO_UDPLITE is not set --CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m --CONFIG_NF_CONNTRACK_H323=m - CONFIG_NF_CONNTRACK_IRC=m --CONFIG_NF_CONNTRACK_NETBIOS_NS=m --CONFIG_NF_CONNTRACK_PPTP=m --CONFIG_NF_CONNTRACK_SANE=m - CONFIG_NF_CONNTRACK_SIP=m --CONFIG_NF_CONNTRACK_TFTP=m -+CONFIG_NF_CT_NETLINK=m - CONFIG_NETFILTER_XTABLES=y --CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m --# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set --# CONFIG_NETFILTER_XT_TARGET_DSCP is not set - CONFIG_NETFILTER_XT_TARGET_MARK=m --CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m - CONFIG_NETFILTER_XT_TARGET_NFLOG=m --# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set --# CONFIG_NETFILTER_XT_TARGET_TRACE is not set - CONFIG_NETFILTER_XT_TARGET_TCPMSS=m --CONFIG_NETFILTER_XT_MATCH_COMMENT=m --CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m --# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set --CONFIG_NETFILTER_XT_MATCH_CONNMARK=m - CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m --# CONFIG_NETFILTER_XT_MATCH_DCCP is not set --# CONFIG_NETFILTER_XT_MATCH_DSCP is not set --CONFIG_NETFILTER_XT_MATCH_ESP=m --CONFIG_NETFILTER_XT_MATCH_HELPER=m --CONFIG_NETFILTER_XT_MATCH_LENGTH=m --CONFIG_NETFILTER_XT_MATCH_LIMIT=m --CONFIG_NETFILTER_XT_MATCH_MAC=m - CONFIG_NETFILTER_XT_MATCH_MARK=m - CONFIG_NETFILTER_XT_MATCH_POLICY=m --CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m --# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set --CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m --CONFIG_NETFILTER_XT_MATCH_QUOTA=m --CONFIG_NETFILTER_XT_MATCH_REALM=m --# CONFIG_NETFILTER_XT_MATCH_SCTP is not set - CONFIG_NETFILTER_XT_MATCH_STATE=m --CONFIG_NETFILTER_XT_MATCH_STATISTIC=m --CONFIG_NETFILTER_XT_MATCH_STRING=m --CONFIG_NETFILTER_XT_MATCH_TCPMSS=m --# CONFIG_NETFILTER_XT_MATCH_TIME is not set --# CONFIG_NETFILTER_XT_MATCH_U32 is not set --CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - - # - # IP: Netfilter Configuration - # - CONFIG_NF_CONNTRACK_IPV4=m - CONFIG_NF_CONNTRACK_PROC_COMPAT=y --# CONFIG_IP_NF_QUEUE is not set - CONFIG_IP_NF_IPTABLES=m --CONFIG_IP_NF_MATCH_IPRANGE=m --CONFIG_IP_NF_MATCH_TOS=m --CONFIG_IP_NF_MATCH_RECENT=m --CONFIG_IP_NF_MATCH_ECN=m --CONFIG_IP_NF_MATCH_AH=m --CONFIG_IP_NF_MATCH_TTL=m --CONFIG_IP_NF_MATCH_OWNER=m --CONFIG_IP_NF_MATCH_ADDRTYPE=m - CONFIG_IP_NF_FILTER=m - CONFIG_IP_NF_TARGET_REJECT=m - CONFIG_IP_NF_TARGET_LOG=m -@@ -343,54 +316,25 @@ CONFIG_IP_NF_TARGET_LOG=m - CONFIG_NF_NAT=m - CONFIG_NF_NAT_NEEDED=y - CONFIG_IP_NF_TARGET_MASQUERADE=m --CONFIG_IP_NF_TARGET_REDIRECT=m --CONFIG_IP_NF_TARGET_NETMAP=m --CONFIG_IP_NF_TARGET_SAME=m --CONFIG_NF_NAT_SNMP_BASIC=m --CONFIG_NF_NAT_PROTO_GRE=m - CONFIG_NF_NAT_FTP=m - CONFIG_NF_NAT_IRC=m --CONFIG_NF_NAT_TFTP=m --CONFIG_NF_NAT_AMANDA=m --CONFIG_NF_NAT_PPTP=m --CONFIG_NF_NAT_H323=m -+# CONFIG_NF_NAT_TFTP is not set -+# CONFIG_NF_NAT_AMANDA is not set -+# CONFIG_NF_NAT_PPTP is not set -+# CONFIG_NF_NAT_H323 is not set - CONFIG_NF_NAT_SIP=m - CONFIG_IP_NF_MANGLE=m --CONFIG_IP_NF_TARGET_TOS=m --CONFIG_IP_NF_TARGET_ECN=m --CONFIG_IP_NF_TARGET_TTL=m --CONFIG_IP_NF_TARGET_CLUSTERIP=m --CONFIG_IP_NF_RAW=m --CONFIG_IP_NF_ARPTABLES=m --CONFIG_IP_NF_ARPFILTER=m --CONFIG_IP_NF_ARP_MANGLE=m - - # --# IPv6: Netfilter Configuration (EXPERIMENTAL) -+# IPv6: Netfilter Configuration - # - CONFIG_NF_CONNTRACK_IPV6=m --CONFIG_IP6_NF_QUEUE=m - CONFIG_IP6_NF_IPTABLES=m --CONFIG_IP6_NF_MATCH_RT=m --CONFIG_IP6_NF_MATCH_OPTS=m --CONFIG_IP6_NF_MATCH_FRAG=m --CONFIG_IP6_NF_MATCH_HL=m --CONFIG_IP6_NF_MATCH_OWNER=m - CONFIG_IP6_NF_MATCH_IPV6HEADER=m --CONFIG_IP6_NF_MATCH_AH=m --CONFIG_IP6_NF_MATCH_MH=m --CONFIG_IP6_NF_MATCH_EUI64=m - CONFIG_IP6_NF_FILTER=m - CONFIG_IP6_NF_TARGET_LOG=m - CONFIG_IP6_NF_TARGET_REJECT=m - CONFIG_IP6_NF_MANGLE=m --CONFIG_IP6_NF_TARGET_HL=m --CONFIG_IP6_NF_RAW=m -- --# --# Bridge: Netfilter Configuration --# --# CONFIG_BRIDGE_NF_EBTABLES is not set - # CONFIG_IP_DCCP is not set - # CONFIG_IP_SCTP is not set - # CONFIG_TIPC is not set -@@ -407,7 +351,6 @@ CONFIG_LLC=m - # CONFIG_ECONET is not set - # CONFIG_WAN_ROUTER is not set - # CONFIG_NET_SCHED is not set --CONFIG_NET_CLS_ROUTE=y - - # - # Network testing -@@ -415,6 +358,7 @@ CONFIG_NET_CLS_ROUTE=y - # CONFIG_NET_PKTGEN is not set - # CONFIG_NET_TCPPROBE 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 -@@ -450,6 +394,7 @@ CONFIG_MTD=y - CONFIG_MTD_PARTITIONS=y - # CONFIG_MTD_REDBOOT_PARTS is not set - CONFIG_MTD_CMDLINE_PARTS=y -+# CONFIG_MTD_AR7_PARTS is not set - - # - # User Modules And Translation Layers -@@ -531,11 +476,18 @@ CONFIG_BLK_DEV_NBD=m - CONFIG_BLK_DEV_RAM=m - CONFIG_BLK_DEV_RAM_COUNT=16 - CONFIG_BLK_DEV_RAM_SIZE=4096 --CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -+# CONFIG_BLK_DEV_XIP is not set - # CONFIG_CDROM_PKTCDVD is not set - # CONFIG_ATA_OVER_ETH is not set --# CONFIG_MISC_DEVICES is not set --# CONFIG_IDE is not set -+CONFIG_MISC_DEVICES=y -+# CONFIG_ATMEL_PWM is not set -+CONFIG_ATMEL_TCLIB=y -+CONFIG_ATMEL_TCB_CLKSRC=y -+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 -+# CONFIG_EEPROM_93CX6 is not set -+# CONFIG_ATMEL_SSC is not set -+# CONFIG_ENCLOSURE_SERVICES is not set -+# CONFIG_HAVE_IDE is not set - - # - # SCSI device support -@@ -568,11 +520,13 @@ CONFIG_PHYLIB=y - # CONFIG_SMSC_PHY is not set - # CONFIG_BROADCOM_PHY is not set - # CONFIG_ICPLUS_PHY is not set -+# CONFIG_REALTEK_PHY is not set - # CONFIG_FIXED_PHY is not set - # CONFIG_MDIO_BITBANG is not set - CONFIG_NET_ETHERNET=y - # CONFIG_MII is not set - CONFIG_MACB=y -+# CONFIG_ENC28J60 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 -@@ -586,6 +540,7 @@ CONFIG_MACB=y - # - # CONFIG_WLAN_PRE80211 is not set - # CONFIG_WLAN_80211 is not set -+# CONFIG_IWLWIFI_LEDS is not set - # CONFIG_WAN is not set - CONFIG_PPP=m - # CONFIG_PPP_MULTILINK is not set -@@ -599,7 +554,6 @@ CONFIG_PPPOE=m - # CONFIG_PPPOL2TP is not set - # CONFIG_SLIP is not set - CONFIG_SLHC=m --# CONFIG_SHAPER is not set - # CONFIG_NETCONSOLE is not set - # CONFIG_NETPOLL is not set - # CONFIG_NET_POLL_CONTROLLER is not set -@@ -621,6 +575,7 @@ CONFIG_SLHC=m - # Character devices - # - # CONFIG_VT is not set -+# CONFIG_DEVKMEM is not set - # CONFIG_SERIAL_NONSTANDARD is not set - - # -@@ -633,6 +588,7 @@ CONFIG_SLHC=m - # - CONFIG_SERIAL_ATMEL=y - CONFIG_SERIAL_ATMEL_CONSOLE=y -+CONFIG_SERIAL_ATMEL_PDC=y - # CONFIG_SERIAL_ATMEL_TTYAT is not set - CONFIG_SERIAL_CORE=y - CONFIG_SERIAL_CORE_CONSOLE=y -@@ -640,21 +596,13 @@ CONFIG_UNIX98_PTYS=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_IPMI_HANDLER is not set - # CONFIG_HW_RANDOM is not set --# CONFIG_RTC is not set --# CONFIG_GEN_RTC is not set - # CONFIG_R3964 is not set - # CONFIG_RAW_DRIVER is not set - # CONFIG_TCG_TPM is not set - CONFIG_I2C=m - CONFIG_I2C_BOARDINFO=y - CONFIG_I2C_CHARDEV=m -- --# --# I2C Algorithms --# - CONFIG_I2C_ALGOBIT=m --# CONFIG_I2C_ALGOPCF is not set --# CONFIG_I2C_ALGOPCA is not set - - # - # I2C Hardware Bus support -@@ -665,27 +613,23 @@ CONFIG_I2C_GPIO=m - # CONFIG_I2C_SIMTEC is not set - # CONFIG_I2C_TAOS_EVM is not set - # CONFIG_I2C_STUB is not set -+# CONFIG_I2C_PCA_PLATFORM is not set - - # - # Miscellaneous I2C Chip support - # --# CONFIG_SENSORS_DS1337 is not set --# CONFIG_SENSORS_DS1374 is not set - # CONFIG_DS1682 is not set - # CONFIG_SENSORS_EEPROM is not set - # CONFIG_SENSORS_PCF8574 is not set --# CONFIG_SENSORS_PCA9539 is not set -+# CONFIG_PCF8575 is not set - # CONFIG_SENSORS_PCF8591 is not set -+# CONFIG_TPS65010 is not set - # CONFIG_SENSORS_MAX6875 is not set - # CONFIG_SENSORS_TSL2550 is not set - # CONFIG_I2C_DEBUG_CORE is not set - # CONFIG_I2C_DEBUG_ALGO is not set - # CONFIG_I2C_DEBUG_BUS is not set - # CONFIG_I2C_DEBUG_CHIP is not set -- --# --# SPI support --# - CONFIG_SPI=y - # CONFIG_SPI_DEBUG is not set - CONFIG_SPI_MASTER=y -@@ -702,9 +646,27 @@ CONFIG_SPI_ATMEL=y - # CONFIG_SPI_AT25 is not set - CONFIG_SPI_SPIDEV=m - # CONFIG_SPI_TLE62X0 is not set -+CONFIG_HAVE_GPIO_LIB=y -+ -+# -+# GPIO Support -+# -+# CONFIG_DEBUG_GPIO is not set -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MCP23S08 is not set - # CONFIG_W1 is not set - # CONFIG_POWER_SUPPLY is not set - # CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set - CONFIG_WATCHDOG=y - # CONFIG_WATCHDOG_NOWAYOUT is not set - -@@ -724,12 +686,22 @@ CONFIG_SSB_POSSIBLE=y - # Multifunction device drivers - # - # CONFIG_MFD_SM501 is not set -+# CONFIG_HTC_PASIC3 is not set - - # - # Multimedia devices - # -+ -+# -+# Multimedia core support -+# - # CONFIG_VIDEO_DEV is not set - # CONFIG_DVB_CORE is not set -+# CONFIG_VIDEO_MEDIA is not set -+ -+# -+# Multimedia drivers -+# - # CONFIG_DAB is not set - - # -@@ -753,14 +725,12 @@ CONFIG_USB_SUPPORT=y - # CONFIG_USB_ARCH_HAS_HCD is not set - # CONFIG_USB_ARCH_HAS_OHCI is not set - # CONFIG_USB_ARCH_HAS_EHCI 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' - # -- --# --# USB Gadget Support --# - CONFIG_USB_GADGET=y - # CONFIG_USB_GADGET_DEBUG is not set - # CONFIG_USB_GADGET_DEBUG_FILES is not set -@@ -772,6 +742,7 @@ CONFIG_USB_ATMEL_USBA=y - # CONFIG_USB_GADGET_NET2280 is not set - # CONFIG_USB_GADGET_PXA2XX is not set - # CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_PXA27X is not set - # CONFIG_USB_GADGET_GOKU is not set - # CONFIG_USB_GADGET_LH7A40X is not set - # CONFIG_USB_GADGET_OMAP is not set -@@ -787,6 +758,7 @@ CONFIG_USB_FILE_STORAGE=m - # CONFIG_USB_FILE_STORAGE_TEST is not set - CONFIG_USB_G_SERIAL=m - # CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set - CONFIG_MMC=m - # CONFIG_MMC_DEBUG is not set - # CONFIG_MMC_UNSAFE_RESUME is not set -@@ -797,11 +769,13 @@ CONFIG_MMC=m - CONFIG_MMC_BLOCK=m - CONFIG_MMC_BLOCK_BOUNCE=y - # CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set - - # - # MMC/SD Host Controller Drivers - # - CONFIG_MMC_SPI=m -+# CONFIG_MEMSTICK is not set - CONFIG_NEW_LEDS=y - CONFIG_LEDS_CLASS=y - -@@ -816,6 +790,8 @@ CONFIG_LEDS_GPIO=y - CONFIG_LEDS_TRIGGERS=y - CONFIG_LEDS_TRIGGER_TIMER=y - CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -+# CONFIG_ACCESSIBILITY is not set - CONFIG_RTC_LIB=y - CONFIG_RTC_CLASS=y - CONFIG_RTC_HCTOSYS=y -@@ -844,19 +820,22 @@ CONFIG_RTC_INTF_DEV=y - # CONFIG_RTC_DRV_PCF8563 is not set - # CONFIG_RTC_DRV_PCF8583 is not set - # CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_S35390A is not set - - # - # SPI RTC drivers - # --# CONFIG_RTC_DRV_RS5C348 is not set - # CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set - - # - # Platform RTC drivers - # -+# CONFIG_RTC_DRV_DS1511 is not set - # CONFIG_RTC_DRV_DS1553 is not set --# CONFIG_RTC_DRV_STK17TA8 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_M48T59 is not set - # CONFIG_RTC_DRV_V3020 is not set -@@ -865,10 +844,6 @@ CONFIG_RTC_INTF_DEV=y - # on-CPU RTC drivers - # - CONFIG_RTC_DRV_AT32AP700X=y -- --# --# Userspace I/O --# - # CONFIG_UIO is not set - - # -@@ -885,14 +860,11 @@ CONFIG_JBD=m - # CONFIG_JFS_FS is not set - # CONFIG_FS_POSIX_ACL is not set - # CONFIG_XFS_FS 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_DNOTIFY is not set - CONFIG_INOTIFY=y - CONFIG_INOTIFY_USER=y - # CONFIG_QUOTA is not set --# CONFIG_DNOTIFY is not set - # CONFIG_AUTOFS_FS is not set - # CONFIG_AUTOFS4_FS is not set - CONFIG_FUSE_FS=m -@@ -948,8 +920,10 @@ CONFIG_JFFS2_RTIME=y - # CONFIG_JFFS2_RUBIN is not set - # CONFIG_CRAMFS is not set - # CONFIG_VXFS_FS is not set -+# CONFIG_MINIX_FS is not set - # 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 - CONFIG_NETWORK_FILESYSTEMS=y -@@ -957,12 +931,10 @@ 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=m - CONFIG_NFSD_V3=y - # CONFIG_NFSD_V3_ACL is not set - # CONFIG_NFSD_V4 is not set --CONFIG_NFSD_TCP=y - CONFIG_ROOT_NFS=y - CONFIG_LOCKD=y - CONFIG_LOCKD_V4=y -@@ -1030,11 +1002,6 @@ CONFIG_NLS_ISO8859_1=m - # CONFIG_NLS_KOI8_U is not set - CONFIG_NLS_UTF8=m - # CONFIG_DLM is not set --CONFIG_INSTRUMENTATION=y --CONFIG_PROFILING=y --CONFIG_OPROFILE=m --CONFIG_KPROBES=y --# CONFIG_MARKERS is not set - - # - # Kernel hacking -@@ -1042,6 +1009,7 @@ CONFIG_KPROBES=y - # CONFIG_PRINTK_TIME is not set - CONFIG_ENABLE_WARN_DEPRECATED=y - CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 - CONFIG_MAGIC_SYSRQ=y - # CONFIG_UNUSED_SYMBOLS is not set - # CONFIG_DEBUG_FS is not set -@@ -1052,7 +1020,9 @@ CONFIG_DETECT_SOFTLOCKUP=y - CONFIG_SCHED_DEBUG=y - # CONFIG_SCHEDSTATS is not set - # CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_OBJECTS is not set - # CONFIG_SLUB_DEBUG_ON is not set -+# CONFIG_SLUB_STATS is not set - # CONFIG_DEBUG_RT_MUTEXES is not set - # CONFIG_RT_MUTEX_TESTER is not set - # CONFIG_DEBUG_SPINLOCK is not set -@@ -1066,12 +1036,14 @@ CONFIG_SCHED_DEBUG=y - CONFIG_DEBUG_BUGVERBOSE=y - # CONFIG_DEBUG_INFO is not set - # CONFIG_DEBUG_VM is not set -+# CONFIG_DEBUG_WRITECOUNT is not set - # CONFIG_DEBUG_LIST is not set - # CONFIG_DEBUG_SG is not set - CONFIG_FRAME_POINTER=y --# CONFIG_FORCED_INLINING is not set - # CONFIG_BOOT_PRINTK_DELAY is not set - # CONFIG_RCU_TORTURE_TEST is not set -+# CONFIG_KPROBES_SANITY_TEST is not set -+# CONFIG_BACKTRACE_SELF_TEST is not set - # CONFIG_LKDTM is not set - # CONFIG_FAULT_INJECTION is not set - # CONFIG_SAMPLES is not set -@@ -1083,52 +1055,90 @@ CONFIG_FRAME_POINTER=y - # CONFIG_SECURITY is not set - # CONFIG_SECURITY_FILE_CAPABILITIES is not set - CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# - CONFIG_CRYPTO_ALGAPI=y -+CONFIG_CRYPTO_AEAD=y - CONFIG_CRYPTO_BLKCIPHER=y - CONFIG_CRYPTO_HASH=y - CONFIG_CRYPTO_MANAGER=y -+# CONFIG_CRYPTO_GF128MUL is not set -+# CONFIG_CRYPTO_NULL is not set -+# CONFIG_CRYPTO_CRYPTD is not set -+CONFIG_CRYPTO_AUTHENC=y -+# CONFIG_CRYPTO_TEST is not set -+ -+# -+# Authenticated Encryption with Associated Data -+# -+# CONFIG_CRYPTO_CCM is not set -+# CONFIG_CRYPTO_GCM is not set -+# CONFIG_CRYPTO_SEQIV is not set -+ -+# -+# Block modes -+# -+CONFIG_CRYPTO_CBC=y -+# CONFIG_CRYPTO_CTR is not set -+# CONFIG_CRYPTO_CTS is not set -+CONFIG_CRYPTO_ECB=m -+# CONFIG_CRYPTO_LRW is not set -+CONFIG_CRYPTO_PCBC=m -+# CONFIG_CRYPTO_XTS is not set -+ -+# -+# Hash modes -+# - CONFIG_CRYPTO_HMAC=y - # CONFIG_CRYPTO_XCBC is not set --# CONFIG_CRYPTO_NULL is not set -+ -+# -+# Digest -+# -+# CONFIG_CRYPTO_CRC32C is not set - # CONFIG_CRYPTO_MD4 is not set - CONFIG_CRYPTO_MD5=y -+# CONFIG_CRYPTO_MICHAEL_MIC is not set - CONFIG_CRYPTO_SHA1=y - # CONFIG_CRYPTO_SHA256 is not set - # CONFIG_CRYPTO_SHA512 is not set --# CONFIG_CRYPTO_WP512 is not set - # CONFIG_CRYPTO_TGR192 is not set --# CONFIG_CRYPTO_GF128MUL is not set --CONFIG_CRYPTO_ECB=m --CONFIG_CRYPTO_CBC=y --CONFIG_CRYPTO_PCBC=m --# CONFIG_CRYPTO_LRW is not set --# CONFIG_CRYPTO_XTS is not set --# CONFIG_CRYPTO_CRYPTD is not set --CONFIG_CRYPTO_DES=y --# CONFIG_CRYPTO_FCRYPT is not set --# CONFIG_CRYPTO_BLOWFISH is not set --# CONFIG_CRYPTO_TWOFISH is not set --# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_WP512 is not set -+ -+# -+# Ciphers -+# - # CONFIG_CRYPTO_AES is not set -+# CONFIG_CRYPTO_ANUBIS is not set -+CONFIG_CRYPTO_ARC4=m -+# CONFIG_CRYPTO_BLOWFISH is not set -+# CONFIG_CRYPTO_CAMELLIA is not set - # CONFIG_CRYPTO_CAST5 is not set - # CONFIG_CRYPTO_CAST6 is not set --# CONFIG_CRYPTO_TEA is not set --CONFIG_CRYPTO_ARC4=m -+CONFIG_CRYPTO_DES=y -+# CONFIG_CRYPTO_FCRYPT is not set - # CONFIG_CRYPTO_KHAZAD is not set --# CONFIG_CRYPTO_ANUBIS is not set -+# CONFIG_CRYPTO_SALSA20 is not set - # CONFIG_CRYPTO_SEED is not set -+# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_TEA is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+ -+# -+# Compression -+# - CONFIG_CRYPTO_DEFLATE=y --# CONFIG_CRYPTO_MICHAEL_MIC is not set --# CONFIG_CRYPTO_CRC32C is not set --# CONFIG_CRYPTO_CAMELLIA is not set --# CONFIG_CRYPTO_TEST is not set --# CONFIG_CRYPTO_AUTHENC is not set -+# CONFIG_CRYPTO_LZO is not set - CONFIG_CRYPTO_HW=y - - # - # Library routines - # - CONFIG_BITREVERSE=y -+# CONFIG_GENERIC_FIND_FIRST_BIT is not set -+# CONFIG_GENERIC_FIND_NEXT_BIT is not set - CONFIG_CRC_CCITT=m - # CONFIG_CRC16 is not set - CONFIG_CRC_ITU_T=m -@@ -1137,10 +1147,6 @@ CONFIG_CRC7=m - # CONFIG_LIBCRC32C is not set - CONFIG_ZLIB_INFLATE=y - CONFIG_ZLIB_DEFLATE=y --CONFIG_TEXTSEARCH=y --CONFIG_TEXTSEARCH_KMP=m --CONFIG_TEXTSEARCH_BM=m --CONFIG_TEXTSEARCH_FSM=m - CONFIG_PLIST=y - CONFIG_HAS_IOMEM=y - CONFIG_HAS_IOPORT=y -diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig -index 2fb2ede..c6d02ea 100644 ---- a/arch/avr32/configs/atstk1002_defconfig -+++ b/arch/avr32/configs/atstk1002_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.24-rc7 --# Wed Jan 9 23:07:43 2008 -+# Linux kernel version: 2.6.26-rc3 -+# Mon May 26 13:30:20 2008 - # - CONFIG_AVR32=y - CONFIG_GENERIC_GPIO=y -@@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y - CONFIG_GENERIC_IRQ_PROBE=y - CONFIG_RWSEM_GENERIC_SPINLOCK=y - CONFIG_GENERIC_TIME=y -+CONFIG_GENERIC_CLOCKEVENTS=y - # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - # CONFIG_ARCH_HAS_ILOG2_U32 is not set - # CONFIG_ARCH_HAS_ILOG2_U64 is not set --CONFIG_ARCH_SUPPORTS_OPROFILE=y - CONFIG_GENERIC_HWEIGHT=y - CONFIG_GENERIC_CALIBRATE_DELAY=y - CONFIG_GENERIC_BUG=y -@@ -36,15 +36,15 @@ CONFIG_SYSVIPC_SYSCTL=y - CONFIG_POSIX_MQUEUE=y - # CONFIG_BSD_PROCESS_ACCT is not set - # CONFIG_TASKSTATS is not set --# CONFIG_USER_NS is not set --# CONFIG_PID_NS is not set - # CONFIG_AUDIT is not set - # CONFIG_IKCONFIG is not set - CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_CGROUPS is not set --# CONFIG_FAIR_GROUP_SCHED is not set -+# CONFIG_GROUP_SCHED is not set - CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y - CONFIG_RELAY=y -+# CONFIG_NAMESPACES is not set - CONFIG_BLK_DEV_INITRD=y - CONFIG_INITRAMFS_SOURCE="" - CONFIG_CC_OPTIMIZE_FOR_SIZE=y -@@ -58,11 +58,13 @@ CONFIG_HOTPLUG=y - CONFIG_PRINTK=y - CONFIG_BUG=y - CONFIG_ELF_CORE=y -+# CONFIG_COMPAT_BRK is not set - # CONFIG_BASE_FULL is not set - CONFIG_FUTEX=y - CONFIG_ANON_INODES=y - CONFIG_EPOLL=y - CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y - CONFIG_EVENTFD=y - CONFIG_SHMEM=y - CONFIG_VM_EVENT_COUNTERS=y -@@ -70,11 +72,21 @@ CONFIG_SLUB_DEBUG=y - # CONFIG_SLAB is not set - CONFIG_SLUB=y - # CONFIG_SLOB is not set -+CONFIG_PROFILING=y -+# CONFIG_MARKERS is not set -+CONFIG_OPROFILE=m -+CONFIG_HAVE_OPROFILE=y -+CONFIG_KPROBES=y -+CONFIG_HAVE_KPROBES=y -+# CONFIG_HAVE_KRETPROBES is not set -+# CONFIG_HAVE_DMA_ATTRS is not set -+CONFIG_PROC_PAGE_MONITOR=y - CONFIG_SLABINFO=y - CONFIG_RT_MUTEXES=y - # CONFIG_TINY_SHMEM is not set - CONFIG_BASE_SMALL=1 - 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 -@@ -98,10 +110,15 @@ CONFIG_IOSCHED_CFQ=y - CONFIG_DEFAULT_CFQ=y - # CONFIG_DEFAULT_NOOP is not set - CONFIG_DEFAULT_IOSCHED="cfq" -+CONFIG_CLASSIC_RCU=y - - # - # System Type and features - # -+CONFIG_TICK_ONESHOT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y -+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y - CONFIG_SUBARCH_AVR32B=y - CONFIG_MMU=y - CONFIG_PERFORMANCE_COUNTERS=y -@@ -147,16 +164,19 @@ CONFIG_FLATMEM=y - CONFIG_FLAT_NODE_MEM_MAP=y - # CONFIG_SPARSEMEM_STATIC is not set - # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -+CONFIG_PAGEFLAGS_EXTENDED=y - CONFIG_SPLIT_PTLOCK_CPUS=4 - # CONFIG_RESOURCES_64BIT is not set - CONFIG_ZONE_DMA_FLAG=0 - CONFIG_VIRT_TO_BUS=y - # CONFIG_OWNERSHIP_TRACE is not set -+CONFIG_NMI_DEBUGGING=y - # CONFIG_HZ_100 is not set - CONFIG_HZ_250=y - # CONFIG_HZ_300 is not set - # CONFIG_HZ_1000 is not set - CONFIG_HZ=250 -+# CONFIG_SCHED_HRTICK is not set - CONFIG_CMDLINE="" - - # -@@ -170,9 +190,10 @@ CONFIG_CPU_FREQ=y - CONFIG_CPU_FREQ_TABLE=y - # CONFIG_CPU_FREQ_DEBUG is not set - # CONFIG_CPU_FREQ_STAT is not set --CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set - # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set --# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y - # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set - CONFIG_CPU_FREQ_GOV_PERFORMANCE=y - # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -@@ -208,6 +229,7 @@ CONFIG_XFRM=y - CONFIG_XFRM_USER=m - # CONFIG_XFRM_SUB_POLICY is not set - # CONFIG_XFRM_MIGRATE is not set -+# CONFIG_XFRM_STATISTICS is not set - CONFIG_NET_KEY=m - # CONFIG_NET_KEY_MIGRATE is not set - CONFIG_INET=y -@@ -252,8 +274,10 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m - CONFIG_INET6_XFRM_MODE_BEET=m - # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set - CONFIG_IPV6_SIT=m -+CONFIG_IPV6_NDISC_NODETYPE=y - CONFIG_IPV6_TUNNEL=m - # CONFIG_IPV6_MULTIPLE_TABLES is not set -+# CONFIG_IPV6_MROUTE is not set - # CONFIG_NETWORK_SECMARK is not set - # CONFIG_NETFILTER is not set - # CONFIG_IP_DCCP is not set -@@ -279,6 +303,7 @@ CONFIG_LLC=m - # CONFIG_NET_PKTGEN is not set - # CONFIG_NET_TCPPROBE 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 -@@ -314,6 +339,7 @@ CONFIG_MTD=y - CONFIG_MTD_PARTITIONS=y - # CONFIG_MTD_REDBOOT_PARTS is not set - CONFIG_MTD_CMDLINE_PARTS=y -+# CONFIG_MTD_AR7_PARTS is not set - - # - # User Modules And Translation Layers -@@ -368,6 +394,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 - # - CONFIG_MTD_DATAFLASH=m - CONFIG_MTD_M25P80=m -+CONFIG_M25PXX_USE_FAST_READ=y - # CONFIG_MTD_SLRAM is not set - # CONFIG_MTD_PHRAM is not set - # CONFIG_MTD_MTDRAM is not set -@@ -395,13 +422,18 @@ CONFIG_BLK_DEV_NBD=m - CONFIG_BLK_DEV_RAM=m - CONFIG_BLK_DEV_RAM_COUNT=16 - CONFIG_BLK_DEV_RAM_SIZE=4096 --CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -+# CONFIG_BLK_DEV_XIP is not set - # CONFIG_CDROM_PKTCDVD is not set - # CONFIG_ATA_OVER_ETH is not set - CONFIG_MISC_DEVICES=y -+CONFIG_ATMEL_PWM=m -+CONFIG_ATMEL_TCLIB=y -+CONFIG_ATMEL_TCB_CLKSRC=y -+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 - # CONFIG_EEPROM_93CX6 is not set - CONFIG_ATMEL_SSC=m --# CONFIG_IDE is not set -+# CONFIG_ENCLOSURE_SERVICES is not set -+# CONFIG_HAVE_IDE is not set - - # - # SCSI device support -@@ -444,6 +476,9 @@ CONFIG_SCSI_WAIT_SCAN=m - # CONFIG_SCSI_LOWLEVEL is not set - CONFIG_ATA=m - # CONFIG_ATA_NONSTANDARD is not set -+# CONFIG_SATA_PMP is not set -+CONFIG_ATA_SFF=y -+# CONFIG_SATA_MV is not set - CONFIG_PATA_AT32=m - # CONFIG_PATA_PLATFORM is not set - # CONFIG_MD is not set -@@ -469,11 +504,13 @@ CONFIG_PHYLIB=y - # CONFIG_SMSC_PHY is not set - # CONFIG_BROADCOM_PHY is not set - # CONFIG_ICPLUS_PHY is not set -+# CONFIG_REALTEK_PHY is not set - # CONFIG_FIXED_PHY is not set - # CONFIG_MDIO_BITBANG is not set - CONFIG_NET_ETHERNET=y - # CONFIG_MII is not set - CONFIG_MACB=y -+# CONFIG_ENC28J60 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 -@@ -487,6 +524,7 @@ CONFIG_MACB=y - # - # CONFIG_WLAN_PRE80211 is not set - # CONFIG_WLAN_80211 is not set -+# CONFIG_IWLWIFI_LEDS is not set - # CONFIG_WAN is not set - CONFIG_PPP=m - # CONFIG_PPP_MULTILINK is not set -@@ -500,7 +538,6 @@ CONFIG_PPP_BSDCOMP=m - # CONFIG_PPPOL2TP is not set - # CONFIG_SLIP is not set - CONFIG_SLHC=m --# CONFIG_SHAPER is not set - # CONFIG_NETCONSOLE is not set - # CONFIG_NETPOLL is not set - # CONFIG_NET_POLL_CONTROLLER is not set -@@ -556,6 +593,7 @@ CONFIG_MOUSE_GPIO=m - # Character devices - # - # CONFIG_VT is not set -+# CONFIG_DEVKMEM is not set - # CONFIG_SERIAL_NONSTANDARD is not set - - # -@@ -568,6 +606,7 @@ CONFIG_MOUSE_GPIO=m - # - CONFIG_SERIAL_ATMEL=y - CONFIG_SERIAL_ATMEL_CONSOLE=y -+CONFIG_SERIAL_ATMEL_PDC=y - # CONFIG_SERIAL_ATMEL_TTYAT is not set - CONFIG_SERIAL_CORE=y - CONFIG_SERIAL_CORE_CONSOLE=y -@@ -575,21 +614,13 @@ CONFIG_UNIX98_PTYS=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_IPMI_HANDLER is not set - # CONFIG_HW_RANDOM is not set --# CONFIG_RTC is not set --# CONFIG_GEN_RTC is not set - # CONFIG_R3964 is not set - # CONFIG_RAW_DRIVER is not set - # CONFIG_TCG_TPM is not set - CONFIG_I2C=m - CONFIG_I2C_BOARDINFO=y - CONFIG_I2C_CHARDEV=m -- --# --# I2C Algorithms --# - CONFIG_I2C_ALGOBIT=m --# CONFIG_I2C_ALGOPCF is not set --# CONFIG_I2C_ALGOPCA is not set - - # - # I2C Hardware Bus support -@@ -600,27 +631,23 @@ CONFIG_I2C_GPIO=m - # CONFIG_I2C_SIMTEC is not set - # CONFIG_I2C_TAOS_EVM is not set - # CONFIG_I2C_STUB is not set -+# CONFIG_I2C_PCA_PLATFORM is not set - - # - # Miscellaneous I2C Chip support - # --# CONFIG_SENSORS_DS1337 is not set --# CONFIG_SENSORS_DS1374 is not set - # CONFIG_DS1682 is not set - # CONFIG_SENSORS_EEPROM is not set - # CONFIG_SENSORS_PCF8574 is not set --# CONFIG_SENSORS_PCA9539 is not set -+# CONFIG_PCF8575 is not set - # CONFIG_SENSORS_PCF8591 is not set -+# CONFIG_TPS65010 is not set - # CONFIG_SENSORS_MAX6875 is not set - # CONFIG_SENSORS_TSL2550 is not set - # CONFIG_I2C_DEBUG_CORE is not set - # CONFIG_I2C_DEBUG_ALGO is not set - # CONFIG_I2C_DEBUG_BUS is not set - # CONFIG_I2C_DEBUG_CHIP is not set -- --# --# SPI support --# - CONFIG_SPI=y - # CONFIG_SPI_DEBUG is not set - CONFIG_SPI_MASTER=y -@@ -637,9 +664,27 @@ CONFIG_SPI_ATMEL=y - # CONFIG_SPI_AT25 is not set - CONFIG_SPI_SPIDEV=m - # CONFIG_SPI_TLE62X0 is not set -+CONFIG_HAVE_GPIO_LIB=y -+ -+# -+# GPIO Support -+# -+# CONFIG_DEBUG_GPIO is not set -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MCP23S08 is not set - # CONFIG_W1 is not set - # CONFIG_POWER_SUPPLY is not set - # CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set - CONFIG_WATCHDOG=y - # CONFIG_WATCHDOG_NOWAYOUT is not set - -@@ -659,12 +704,22 @@ CONFIG_SSB_POSSIBLE=y - # Multifunction device drivers - # - # CONFIG_MFD_SM501 is not set -+# CONFIG_HTC_PASIC3 is not set - - # - # Multimedia devices - # -+ -+# -+# Multimedia core support -+# - # CONFIG_VIDEO_DEV is not set - # CONFIG_DVB_CORE is not set -+# CONFIG_VIDEO_MEDIA is not set -+ -+# -+# Multimedia drivers -+# - # CONFIG_DAB is not set - - # -@@ -682,8 +737,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y - # CONFIG_FB_SYS_FILLRECT is not set - # CONFIG_FB_SYS_COPYAREA is not set - # CONFIG_FB_SYS_IMAGEBLIT is not set -+# CONFIG_FB_FOREIGN_ENDIAN is not set - # CONFIG_FB_SYS_FOPS is not set --CONFIG_FB_DEFERRED_IO=y - # CONFIG_FB_SVGALIB is not set - # CONFIG_FB_MACMODES is not set - # CONFIG_FB_BACKLIGHT is not set -@@ -749,7 +804,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 - # CONFIG_SND_SOC is not set - - # --# SoC Audio support for SuperH -+# ALSA SoC audio for Freescale SOCs -+# -+ -+# -+# SoC Audio for the Texas Instruments OMAP - # - - # -@@ -761,14 +820,12 @@ CONFIG_USB_SUPPORT=y - # CONFIG_USB_ARCH_HAS_HCD is not set - # CONFIG_USB_ARCH_HAS_OHCI is not set - # CONFIG_USB_ARCH_HAS_EHCI 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' - # -- --# --# USB Gadget Support --# - CONFIG_USB_GADGET=y - # CONFIG_USB_GADGET_DEBUG is not set - # CONFIG_USB_GADGET_DEBUG_FILES is not set -@@ -781,6 +838,7 @@ CONFIG_USB_ATMEL_USBA=y - # CONFIG_USB_GADGET_NET2280 is not set - # CONFIG_USB_GADGET_PXA2XX is not set - # CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_PXA27X is not set - # CONFIG_USB_GADGET_GOKU is not set - # CONFIG_USB_GADGET_LH7A40X is not set - # CONFIG_USB_GADGET_OMAP is not set -@@ -796,6 +854,7 @@ CONFIG_USB_FILE_STORAGE=m - # CONFIG_USB_FILE_STORAGE_TEST is not set - CONFIG_USB_G_SERIAL=m - # CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set - CONFIG_MMC=m - # CONFIG_MMC_DEBUG is not set - # CONFIG_MMC_UNSAFE_RESUME is not set -@@ -806,17 +865,20 @@ CONFIG_MMC=m - CONFIG_MMC_BLOCK=m - CONFIG_MMC_BLOCK_BOUNCE=y - # CONFIG_SDIO_UART is not set -+CONFIG_MMC_TEST=m - - # - # MMC/SD Host Controller Drivers - # - CONFIG_MMC_SPI=m -+# CONFIG_MEMSTICK is not set - CONFIG_NEW_LEDS=y - CONFIG_LEDS_CLASS=m - - # - # LED drivers - # -+CONFIG_LEDS_ATMEL_PWM=m - CONFIG_LEDS_GPIO=m - - # -@@ -825,6 +887,8 @@ CONFIG_LEDS_GPIO=m - CONFIG_LEDS_TRIGGERS=y - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -+# CONFIG_ACCESSIBILITY is not set - CONFIG_RTC_LIB=y - CONFIG_RTC_CLASS=y - CONFIG_RTC_HCTOSYS=y -@@ -853,19 +917,22 @@ CONFIG_RTC_INTF_DEV=y - # CONFIG_RTC_DRV_PCF8563 is not set - # CONFIG_RTC_DRV_PCF8583 is not set - # CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_S35390A is not set - - # - # SPI RTC drivers - # --# CONFIG_RTC_DRV_RS5C348 is not set - # CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set - - # - # Platform RTC drivers - # -+# CONFIG_RTC_DRV_DS1511 is not set - # CONFIG_RTC_DRV_DS1553 is not set --# CONFIG_RTC_DRV_STK17TA8 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_M48T59 is not set - # CONFIG_RTC_DRV_V3020 is not set -@@ -874,10 +941,6 @@ CONFIG_RTC_INTF_DEV=y - # on-CPU RTC drivers - # - CONFIG_RTC_DRV_AT32AP700X=y -- --# --# Userspace I/O --# - # CONFIG_UIO is not set - - # -@@ -895,14 +958,11 @@ CONFIG_JBD=m - # CONFIG_JFS_FS is not set - # CONFIG_FS_POSIX_ACL is not set - # CONFIG_XFS_FS is not set --# CONFIG_GFS2_FS is not set - # CONFIG_OCFS2_FS is not set --CONFIG_MINIX_FS=m --# CONFIG_ROMFS_FS is not set -+# CONFIG_DNOTIFY is not set - CONFIG_INOTIFY=y - CONFIG_INOTIFY_USER=y - # CONFIG_QUOTA is not set --# CONFIG_DNOTIFY is not set - # CONFIG_AUTOFS_FS is not set - # CONFIG_AUTOFS4_FS is not set - CONFIG_FUSE_FS=m -@@ -957,8 +1017,10 @@ CONFIG_JFFS2_RTIME=y - # CONFIG_JFFS2_RUBIN is not set - # CONFIG_CRAMFS is not set - # CONFIG_VXFS_FS is not set -+CONFIG_MINIX_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 - CONFIG_NETWORK_FILESYSTEMS=y -@@ -966,7 +1028,6 @@ 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=y - CONFIG_LOCKD=y -@@ -1028,11 +1089,6 @@ CONFIG_NLS_ISO8859_1=m - # CONFIG_NLS_KOI8_U is not set - CONFIG_NLS_UTF8=m - # CONFIG_DLM is not set --CONFIG_INSTRUMENTATION=y --CONFIG_PROFILING=y --CONFIG_OPROFILE=m --CONFIG_KPROBES=y --# CONFIG_MARKERS is not set - - # - # Kernel hacking -@@ -1040,6 +1096,7 @@ CONFIG_KPROBES=y - # CONFIG_PRINTK_TIME is not set - CONFIG_ENABLE_WARN_DEPRECATED=y - CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 - CONFIG_MAGIC_SYSRQ=y - # CONFIG_UNUSED_SYMBOLS is not set - CONFIG_DEBUG_FS=y -@@ -1050,7 +1107,9 @@ CONFIG_DETECT_SOFTLOCKUP=y - CONFIG_SCHED_DEBUG=y - # CONFIG_SCHEDSTATS is not set - # CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_OBJECTS is not set - # CONFIG_SLUB_DEBUG_ON is not set -+# CONFIG_SLUB_STATS is not set - # CONFIG_DEBUG_RT_MUTEXES is not set - # CONFIG_RT_MUTEX_TESTER is not set - # CONFIG_DEBUG_SPINLOCK is not set -@@ -1064,12 +1123,14 @@ CONFIG_SCHED_DEBUG=y - CONFIG_DEBUG_BUGVERBOSE=y - # CONFIG_DEBUG_INFO is not set - # CONFIG_DEBUG_VM is not set -+# CONFIG_DEBUG_WRITECOUNT is not set - # CONFIG_DEBUG_LIST is not set - # CONFIG_DEBUG_SG is not set - CONFIG_FRAME_POINTER=y --CONFIG_FORCED_INLINING=y - # CONFIG_BOOT_PRINTK_DELAY is not set - # CONFIG_RCU_TORTURE_TEST is not set -+# CONFIG_KPROBES_SANITY_TEST is not set -+# CONFIG_BACKTRACE_SELF_TEST is not set - # CONFIG_LKDTM is not set - # CONFIG_FAULT_INJECTION is not set - # CONFIG_SAMPLES is not set -@@ -1081,52 +1142,90 @@ CONFIG_FORCED_INLINING=y - # CONFIG_SECURITY is not set - # CONFIG_SECURITY_FILE_CAPABILITIES is not set - CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# - CONFIG_CRYPTO_ALGAPI=m -+CONFIG_CRYPTO_AEAD=m - CONFIG_CRYPTO_BLKCIPHER=m - CONFIG_CRYPTO_HASH=m - CONFIG_CRYPTO_MANAGER=m -+# CONFIG_CRYPTO_GF128MUL is not set -+# CONFIG_CRYPTO_NULL is not set -+# CONFIG_CRYPTO_CRYPTD is not set -+CONFIG_CRYPTO_AUTHENC=m -+# CONFIG_CRYPTO_TEST is not set -+ -+# -+# Authenticated Encryption with Associated Data -+# -+# CONFIG_CRYPTO_CCM is not set -+# CONFIG_CRYPTO_GCM is not set -+# CONFIG_CRYPTO_SEQIV is not set -+ -+# -+# Block modes -+# -+CONFIG_CRYPTO_CBC=m -+# CONFIG_CRYPTO_CTR is not set -+# CONFIG_CRYPTO_CTS is not set -+# CONFIG_CRYPTO_ECB is not set -+# CONFIG_CRYPTO_LRW is not set -+# CONFIG_CRYPTO_PCBC is not set -+# CONFIG_CRYPTO_XTS is not set -+ -+# -+# Hash modes -+# - CONFIG_CRYPTO_HMAC=m - # CONFIG_CRYPTO_XCBC is not set --# CONFIG_CRYPTO_NULL is not set -+ -+# -+# Digest -+# -+# CONFIG_CRYPTO_CRC32C is not set - # CONFIG_CRYPTO_MD4 is not set - CONFIG_CRYPTO_MD5=m -+# CONFIG_CRYPTO_MICHAEL_MIC is not set - CONFIG_CRYPTO_SHA1=m - # CONFIG_CRYPTO_SHA256 is not set - # CONFIG_CRYPTO_SHA512 is not set --# CONFIG_CRYPTO_WP512 is not set - # CONFIG_CRYPTO_TGR192 is not set --# CONFIG_CRYPTO_GF128MUL is not set --# CONFIG_CRYPTO_ECB is not set --CONFIG_CRYPTO_CBC=m --# CONFIG_CRYPTO_PCBC is not set --# CONFIG_CRYPTO_LRW is not set --# CONFIG_CRYPTO_XTS is not set --# CONFIG_CRYPTO_CRYPTD is not set --CONFIG_CRYPTO_DES=m --# CONFIG_CRYPTO_FCRYPT is not set --# CONFIG_CRYPTO_BLOWFISH is not set --# CONFIG_CRYPTO_TWOFISH is not set --# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_WP512 is not set -+ -+# -+# Ciphers -+# - # CONFIG_CRYPTO_AES is not set -+# CONFIG_CRYPTO_ANUBIS is not set -+# CONFIG_CRYPTO_ARC4 is not set -+# CONFIG_CRYPTO_BLOWFISH is not set -+# CONFIG_CRYPTO_CAMELLIA is not set - # CONFIG_CRYPTO_CAST5 is not set - # CONFIG_CRYPTO_CAST6 is not set --# CONFIG_CRYPTO_TEA is not set --# CONFIG_CRYPTO_ARC4 is not set -+CONFIG_CRYPTO_DES=m -+# CONFIG_CRYPTO_FCRYPT is not set - # CONFIG_CRYPTO_KHAZAD is not set --# CONFIG_CRYPTO_ANUBIS is not set -+# CONFIG_CRYPTO_SALSA20 is not set - # CONFIG_CRYPTO_SEED is not set -+# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_TEA is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+ -+# -+# Compression -+# - CONFIG_CRYPTO_DEFLATE=m --# CONFIG_CRYPTO_MICHAEL_MIC is not set --# CONFIG_CRYPTO_CRC32C is not set --# CONFIG_CRYPTO_CAMELLIA is not set --# CONFIG_CRYPTO_TEST is not set --# CONFIG_CRYPTO_AUTHENC is not set -+# CONFIG_CRYPTO_LZO is not set - # CONFIG_CRYPTO_HW is not set - - # - # Library routines - # - CONFIG_BITREVERSE=y -+# CONFIG_GENERIC_FIND_FIRST_BIT is not set -+# CONFIG_GENERIC_FIND_NEXT_BIT is not set - CONFIG_CRC_CCITT=m - # CONFIG_CRC16 is not set - CONFIG_CRC_ITU_T=m -diff --git a/arch/avr32/configs/atstk1003_defconfig b/arch/avr32/configs/atstk1003_defconfig -index 45e23e0..5a4ae6b 100644 ---- a/arch/avr32/configs/atstk1003_defconfig -+++ b/arch/avr32/configs/atstk1003_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.24-rc7 --# Wed Jan 9 22:54:34 2008 -+# Linux kernel version: 2.6.26-rc3 -+# Mon May 26 13:33:05 2008 - # - CONFIG_AVR32=y - CONFIG_GENERIC_GPIO=y -@@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y - CONFIG_GENERIC_IRQ_PROBE=y - CONFIG_RWSEM_GENERIC_SPINLOCK=y - CONFIG_GENERIC_TIME=y -+CONFIG_GENERIC_CLOCKEVENTS=y - # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - # CONFIG_ARCH_HAS_ILOG2_U32 is not set - # CONFIG_ARCH_HAS_ILOG2_U64 is not set --CONFIG_ARCH_SUPPORTS_OPROFILE=y - CONFIG_GENERIC_HWEIGHT=y - CONFIG_GENERIC_CALIBRATE_DELAY=y - CONFIG_GENERIC_BUG=y -@@ -39,17 +39,15 @@ CONFIG_BSD_PROCESS_ACCT_V3=y - CONFIG_TASKSTATS=y - CONFIG_TASK_DELAY_ACCT=y - # CONFIG_TASK_XACCT is not set --# CONFIG_USER_NS is not set --# CONFIG_PID_NS is not set - CONFIG_AUDIT=y - # CONFIG_IKCONFIG is not set - CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_CGROUPS is not set --CONFIG_FAIR_GROUP_SCHED=y --CONFIG_FAIR_USER_SCHED=y --# CONFIG_FAIR_CGROUP_SCHED is not set -+# CONFIG_GROUP_SCHED is not set - CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y - CONFIG_RELAY=y -+# CONFIG_NAMESPACES is not set - CONFIG_BLK_DEV_INITRD=y - CONFIG_INITRAMFS_SOURCE="" - CONFIG_CC_OPTIMIZE_FOR_SIZE=y -@@ -63,11 +61,13 @@ CONFIG_HOTPLUG=y - CONFIG_PRINTK=y - CONFIG_BUG=y - CONFIG_ELF_CORE=y -+# CONFIG_COMPAT_BRK is not set - # CONFIG_BASE_FULL is not set - CONFIG_FUTEX=y - CONFIG_ANON_INODES=y - CONFIG_EPOLL=y - CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y - CONFIG_EVENTFD=y - CONFIG_SHMEM=y - CONFIG_VM_EVENT_COUNTERS=y -@@ -75,11 +75,20 @@ CONFIG_VM_EVENT_COUNTERS=y - # CONFIG_SLAB is not set - CONFIG_SLUB=y - # CONFIG_SLOB is not set --CONFIG_SLABINFO=y -+CONFIG_PROFILING=y -+# CONFIG_MARKERS is not set -+CONFIG_OPROFILE=m -+CONFIG_HAVE_OPROFILE=y -+CONFIG_KPROBES=y -+CONFIG_HAVE_KPROBES=y -+# CONFIG_HAVE_KRETPROBES is not set -+# CONFIG_HAVE_DMA_ATTRS is not set -+CONFIG_PROC_PAGE_MONITOR=y - CONFIG_RT_MUTEXES=y - # CONFIG_TINY_SHMEM is not set - CONFIG_BASE_SMALL=1 - 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 -@@ -103,10 +112,15 @@ CONFIG_IOSCHED_CFQ=y - CONFIG_DEFAULT_CFQ=y - # CONFIG_DEFAULT_NOOP is not set - CONFIG_DEFAULT_IOSCHED="cfq" -+CONFIG_CLASSIC_RCU=y - - # - # System Type and features - # -+CONFIG_TICK_ONESHOT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y -+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y - CONFIG_SUBARCH_AVR32B=y - CONFIG_MMU=y - CONFIG_PERFORMANCE_COUNTERS=y -@@ -152,16 +166,19 @@ CONFIG_FLATMEM=y - CONFIG_FLAT_NODE_MEM_MAP=y - # CONFIG_SPARSEMEM_STATIC is not set - # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -+CONFIG_PAGEFLAGS_EXTENDED=y - CONFIG_SPLIT_PTLOCK_CPUS=4 - # CONFIG_RESOURCES_64BIT is not set - CONFIG_ZONE_DMA_FLAG=0 - CONFIG_VIRT_TO_BUS=y - # CONFIG_OWNERSHIP_TRACE is not set -+CONFIG_NMI_DEBUGGING=y - # CONFIG_HZ_100 is not set - CONFIG_HZ_250=y - # CONFIG_HZ_300 is not set - # CONFIG_HZ_1000 is not set - CONFIG_HZ=250 -+# CONFIG_SCHED_HRTICK is not set - CONFIG_CMDLINE="" - - # -@@ -175,9 +192,10 @@ CONFIG_CPU_FREQ=y - CONFIG_CPU_FREQ_TABLE=y - # CONFIG_CPU_FREQ_DEBUG is not set - # CONFIG_CPU_FREQ_STAT is not set --CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set - # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set --# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y - # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set - CONFIG_CPU_FREQ_GOV_PERFORMANCE=y - # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -@@ -234,8 +252,6 @@ CONFIG_TCP_CONG_CUBIC=y - CONFIG_DEFAULT_TCP_CONG="cubic" - # CONFIG_TCP_MD5SIG is not set - # CONFIG_IPV6 is not set --# CONFIG_INET6_XFRM_TUNNEL is not set --# CONFIG_INET6_TUNNEL is not set - # CONFIG_NETWORK_SECMARK is not set - # CONFIG_NETFILTER is not set - # CONFIG_IP_DCCP is not set -@@ -260,6 +276,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" - # CONFIG_NET_PKTGEN is not set - # CONFIG_NET_TCPPROBE 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 -@@ -295,6 +312,7 @@ CONFIG_MTD=y - CONFIG_MTD_PARTITIONS=y - # CONFIG_MTD_REDBOOT_PARTS is not set - CONFIG_MTD_CMDLINE_PARTS=y -+# CONFIG_MTD_AR7_PARTS is not set - - # - # User Modules And Translation Layers -@@ -349,6 +367,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 - # - CONFIG_MTD_DATAFLASH=m - CONFIG_MTD_M25P80=m -+CONFIG_M25PXX_USE_FAST_READ=y - # CONFIG_MTD_SLRAM is not set - # CONFIG_MTD_PHRAM is not set - # CONFIG_MTD_MTDRAM is not set -@@ -376,13 +395,18 @@ CONFIG_BLK_DEV_NBD=m - CONFIG_BLK_DEV_RAM=m - CONFIG_BLK_DEV_RAM_COUNT=16 - CONFIG_BLK_DEV_RAM_SIZE=4096 --CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -+# CONFIG_BLK_DEV_XIP is not set - # CONFIG_CDROM_PKTCDVD is not set - # CONFIG_ATA_OVER_ETH is not set - CONFIG_MISC_DEVICES=y -+CONFIG_ATMEL_PWM=m -+CONFIG_ATMEL_TCLIB=y -+CONFIG_ATMEL_TCB_CLKSRC=y -+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 - # CONFIG_EEPROM_93CX6 is not set - CONFIG_ATMEL_SSC=m --# CONFIG_IDE is not set -+# CONFIG_ENCLOSURE_SERVICES is not set -+# CONFIG_HAVE_IDE is not set - - # - # SCSI device support -@@ -427,6 +451,9 @@ CONFIG_SCSI_LOWLEVEL=y - # CONFIG_SCSI_DEBUG is not set - CONFIG_ATA=m - # CONFIG_ATA_NONSTANDARD is not set -+# CONFIG_SATA_PMP is not set -+CONFIG_ATA_SFF=y -+# CONFIG_SATA_MV is not set - CONFIG_PATA_AT32=m - # CONFIG_PATA_PLATFORM is not set - # CONFIG_MD is not set -@@ -447,6 +474,7 @@ CONFIG_NETDEVICES=y - # - # CONFIG_WLAN_PRE80211 is not set - # CONFIG_WLAN_80211 is not set -+# CONFIG_IWLWIFI_LEDS is not set - # CONFIG_WAN is not set - CONFIG_PPP=m - # CONFIG_PPP_MULTILINK is not set -@@ -460,7 +488,6 @@ CONFIG_PPP_BSDCOMP=m - # CONFIG_PPPOL2TP is not set - # CONFIG_SLIP is not set - CONFIG_SLHC=m --# CONFIG_SHAPER is not set - # CONFIG_NETCONSOLE is not set - # CONFIG_NETPOLL is not set - # CONFIG_NET_POLL_CONTROLLER is not set -@@ -516,6 +543,7 @@ CONFIG_MOUSE_GPIO=m - # Character devices - # - # CONFIG_VT is not set -+# CONFIG_DEVKMEM is not set - # CONFIG_SERIAL_NONSTANDARD is not set - - # -@@ -528,6 +556,7 @@ CONFIG_MOUSE_GPIO=m - # - CONFIG_SERIAL_ATMEL=y - CONFIG_SERIAL_ATMEL_CONSOLE=y -+CONFIG_SERIAL_ATMEL_PDC=y - # CONFIG_SERIAL_ATMEL_TTYAT is not set - CONFIG_SERIAL_CORE=y - CONFIG_SERIAL_CORE_CONSOLE=y -@@ -535,21 +564,13 @@ CONFIG_UNIX98_PTYS=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_IPMI_HANDLER is not set - # CONFIG_HW_RANDOM is not set --# CONFIG_RTC is not set --# CONFIG_GEN_RTC is not set - # CONFIG_R3964 is not set - # CONFIG_RAW_DRIVER is not set - # CONFIG_TCG_TPM is not set - CONFIG_I2C=m - CONFIG_I2C_BOARDINFO=y - CONFIG_I2C_CHARDEV=m -- --# --# I2C Algorithms --# - CONFIG_I2C_ALGOBIT=m --# CONFIG_I2C_ALGOPCF is not set --# CONFIG_I2C_ALGOPCA is not set - - # - # I2C Hardware Bus support -@@ -560,27 +581,23 @@ CONFIG_I2C_GPIO=m - # CONFIG_I2C_SIMTEC is not set - # CONFIG_I2C_TAOS_EVM is not set - # CONFIG_I2C_STUB is not set -+# CONFIG_I2C_PCA_PLATFORM is not set - - # - # Miscellaneous I2C Chip support - # --# CONFIG_SENSORS_DS1337 is not set --# CONFIG_SENSORS_DS1374 is not set - # CONFIG_DS1682 is not set - # CONFIG_SENSORS_EEPROM is not set - # CONFIG_SENSORS_PCF8574 is not set --# CONFIG_SENSORS_PCA9539 is not set -+# CONFIG_PCF8575 is not set - # CONFIG_SENSORS_PCF8591 is not set -+# CONFIG_TPS65010 is not set - # CONFIG_SENSORS_MAX6875 is not set - # CONFIG_SENSORS_TSL2550 is not set - # CONFIG_I2C_DEBUG_CORE is not set - # CONFIG_I2C_DEBUG_ALGO is not set - # CONFIG_I2C_DEBUG_BUS is not set - # CONFIG_I2C_DEBUG_CHIP is not set -- --# --# SPI support --# - CONFIG_SPI=y - # CONFIG_SPI_DEBUG is not set - CONFIG_SPI_MASTER=y -@@ -597,9 +614,27 @@ CONFIG_SPI_ATMEL=y - # CONFIG_SPI_AT25 is not set - CONFIG_SPI_SPIDEV=m - # CONFIG_SPI_TLE62X0 is not set -+CONFIG_HAVE_GPIO_LIB=y -+ -+# -+# GPIO Support -+# -+# CONFIG_DEBUG_GPIO is not set -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MCP23S08 is not set - # CONFIG_W1 is not set - # CONFIG_POWER_SUPPLY is not set - # CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set - CONFIG_WATCHDOG=y - # CONFIG_WATCHDOG_NOWAYOUT is not set - -@@ -619,12 +654,22 @@ CONFIG_SSB_POSSIBLE=y - # Multifunction device drivers - # - # CONFIG_MFD_SM501 is not set -+# CONFIG_HTC_PASIC3 is not set - - # - # Multimedia devices - # -+ -+# -+# Multimedia core support -+# - # CONFIG_VIDEO_DEV is not set - # CONFIG_DVB_CORE is not set -+# CONFIG_VIDEO_MEDIA is not set -+ -+# -+# Multimedia drivers -+# - # CONFIG_DAB is not set - - # -@@ -682,7 +727,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 - # CONFIG_SND_SOC is not set - - # --# SoC Audio support for SuperH -+# ALSA SoC audio for Freescale SOCs -+# -+ -+# -+# SoC Audio for the Texas Instruments OMAP - # - - # -@@ -694,14 +743,12 @@ CONFIG_USB_SUPPORT=y - # CONFIG_USB_ARCH_HAS_HCD is not set - # CONFIG_USB_ARCH_HAS_OHCI is not set - # CONFIG_USB_ARCH_HAS_EHCI 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' - # -- --# --# USB Gadget Support --# - CONFIG_USB_GADGET=y - # CONFIG_USB_GADGET_DEBUG is not set - # CONFIG_USB_GADGET_DEBUG_FILES is not set -@@ -714,6 +761,7 @@ CONFIG_USB_ATMEL_USBA=y - # CONFIG_USB_GADGET_NET2280 is not set - # CONFIG_USB_GADGET_PXA2XX is not set - # CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_PXA27X is not set - # CONFIG_USB_GADGET_GOKU is not set - # CONFIG_USB_GADGET_LH7A40X is not set - # CONFIG_USB_GADGET_OMAP is not set -@@ -729,6 +777,7 @@ CONFIG_USB_FILE_STORAGE=m - # CONFIG_USB_FILE_STORAGE_TEST is not set - CONFIG_USB_G_SERIAL=m - # CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set - CONFIG_MMC=m - # CONFIG_MMC_DEBUG is not set - # CONFIG_MMC_UNSAFE_RESUME is not set -@@ -739,17 +788,20 @@ CONFIG_MMC=m - CONFIG_MMC_BLOCK=m - # CONFIG_MMC_BLOCK_BOUNCE is not set - # CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set - - # - # MMC/SD Host Controller Drivers - # - CONFIG_MMC_SPI=m -+# CONFIG_MEMSTICK is not set - CONFIG_NEW_LEDS=y - CONFIG_LEDS_CLASS=y - - # - # LED drivers - # -+CONFIG_LEDS_ATMEL_PWM=m - CONFIG_LEDS_GPIO=y - - # -@@ -758,6 +810,8 @@ CONFIG_LEDS_GPIO=y - CONFIG_LEDS_TRIGGERS=y - CONFIG_LEDS_TRIGGER_TIMER=y - CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -+# CONFIG_ACCESSIBILITY is not set - CONFIG_RTC_LIB=y - CONFIG_RTC_CLASS=y - CONFIG_RTC_HCTOSYS=y -@@ -786,19 +840,22 @@ CONFIG_RTC_INTF_DEV=y - # CONFIG_RTC_DRV_PCF8563 is not set - # CONFIG_RTC_DRV_PCF8583 is not set - # CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_S35390A is not set - - # - # SPI RTC drivers - # --# CONFIG_RTC_DRV_RS5C348 is not set - # CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set - - # - # Platform RTC drivers - # -+# CONFIG_RTC_DRV_DS1511 is not set - # CONFIG_RTC_DRV_DS1553 is not set --# CONFIG_RTC_DRV_STK17TA8 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_M48T59 is not set - # CONFIG_RTC_DRV_V3020 is not set -@@ -807,11 +864,8 @@ CONFIG_RTC_INTF_DEV=y - # on-CPU RTC drivers - # - CONFIG_RTC_DRV_AT32AP700X=y -- --# --# Userspace I/O --# - CONFIG_UIO=m -+# CONFIG_UIO_SMX is not set - - # - # File systems -@@ -828,14 +882,11 @@ CONFIG_JBD=m - # CONFIG_JFS_FS is not set - # CONFIG_FS_POSIX_ACL is not set - # CONFIG_XFS_FS 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_DNOTIFY is not set - CONFIG_INOTIFY=y - CONFIG_INOTIFY_USER=y - # CONFIG_QUOTA is not set --# CONFIG_DNOTIFY is not set - # CONFIG_AUTOFS_FS is not set - # CONFIG_AUTOFS4_FS is not set - CONFIG_FUSE_FS=m -@@ -891,8 +942,10 @@ CONFIG_JFFS2_RTIME=y - # CONFIG_JFFS2_RUBIN is not set - # CONFIG_CRAMFS is not set - # CONFIG_VXFS_FS is not set -+# CONFIG_MINIX_FS is not set - # 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 - # CONFIG_NETWORK_FILESYSTEMS is not set -@@ -943,11 +996,6 @@ CONFIG_NLS_ISO8859_1=m - # CONFIG_NLS_KOI8_U is not set - CONFIG_NLS_UTF8=m - # CONFIG_DLM is not set --CONFIG_INSTRUMENTATION=y --CONFIG_PROFILING=y --CONFIG_OPROFILE=m --CONFIG_KPROBES=y --# CONFIG_MARKERS is not set - - # - # Kernel hacking -@@ -955,6 +1003,7 @@ CONFIG_KPROBES=y - # CONFIG_PRINTK_TIME is not set - CONFIG_ENABLE_WARN_DEPRECATED=y - CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 - CONFIG_MAGIC_SYSRQ=y - # CONFIG_UNUSED_SYMBOLS is not set - CONFIG_DEBUG_FS=y -@@ -965,6 +1014,7 @@ CONFIG_DETECT_SOFTLOCKUP=y - CONFIG_SCHED_DEBUG=y - # CONFIG_SCHEDSTATS is not set - # CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_OBJECTS is not set - # CONFIG_DEBUG_RT_MUTEXES is not set - # CONFIG_RT_MUTEX_TESTER is not set - # CONFIG_DEBUG_SPINLOCK is not set -@@ -978,12 +1028,14 @@ CONFIG_SCHED_DEBUG=y - CONFIG_DEBUG_BUGVERBOSE=y - # CONFIG_DEBUG_INFO is not set - # CONFIG_DEBUG_VM is not set -+# CONFIG_DEBUG_WRITECOUNT is not set - # CONFIG_DEBUG_LIST is not set - # CONFIG_DEBUG_SG is not set - CONFIG_FRAME_POINTER=y --CONFIG_FORCED_INLINING=y - # CONFIG_BOOT_PRINTK_DELAY is not set - # CONFIG_RCU_TORTURE_TEST is not set -+# CONFIG_KPROBES_SANITY_TEST is not set -+# CONFIG_BACKTRACE_SELF_TEST is not set - # CONFIG_LKDTM is not set - # CONFIG_FAULT_INJECTION is not set - # CONFIG_SAMPLES is not set -@@ -1000,6 +1052,8 @@ CONFIG_FORCED_INLINING=y - # Library routines - # - CONFIG_BITREVERSE=y -+# CONFIG_GENERIC_FIND_FIRST_BIT is not set -+# CONFIG_GENERIC_FIND_NEXT_BIT is not set - CONFIG_CRC_CCITT=m - # CONFIG_CRC16 is not set - CONFIG_CRC_ITU_T=m -diff --git a/arch/avr32/configs/atstk1004_defconfig b/arch/avr32/configs/atstk1004_defconfig -index 634c527..a0912fb 100644 ---- a/arch/avr32/configs/atstk1004_defconfig -+++ b/arch/avr32/configs/atstk1004_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.24-rc7 --# Wed Jan 9 23:04:20 2008 -+# Linux kernel version: 2.6.26-rc3 -+# Mon May 26 13:34:57 2008 - # - CONFIG_AVR32=y - CONFIG_GENERIC_GPIO=y -@@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y - CONFIG_GENERIC_IRQ_PROBE=y - CONFIG_RWSEM_GENERIC_SPINLOCK=y - CONFIG_GENERIC_TIME=y -+CONFIG_GENERIC_CLOCKEVENTS=y - # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - # CONFIG_ARCH_HAS_ILOG2_U32 is not set - # CONFIG_ARCH_HAS_ILOG2_U64 is not set --CONFIG_ARCH_SUPPORTS_OPROFILE=y - CONFIG_GENERIC_HWEIGHT=y - CONFIG_GENERIC_CALIBRATE_DELAY=y - CONFIG_GENERIC_BUG=y -@@ -34,15 +34,15 @@ CONFIG_LOCALVERSION="" - # CONFIG_POSIX_MQUEUE is not set - # CONFIG_BSD_PROCESS_ACCT is not set - # CONFIG_TASKSTATS is not set --# CONFIG_USER_NS is not set --# CONFIG_PID_NS is not set - # CONFIG_AUDIT is not set - # CONFIG_IKCONFIG is not set - CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_CGROUPS is not set --# CONFIG_FAIR_GROUP_SCHED is not set -+# CONFIG_GROUP_SCHED is not set - CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y - # CONFIG_RELAY is not set -+# CONFIG_NAMESPACES is not set - # CONFIG_BLK_DEV_INITRD is not set - CONFIG_CC_OPTIMIZE_FOR_SIZE=y - CONFIG_SYSCTL=y -@@ -54,24 +54,38 @@ CONFIG_HOTPLUG=y - CONFIG_PRINTK=y - CONFIG_BUG=y - CONFIG_ELF_CORE=y -+# CONFIG_COMPAT_BRK is not set - # CONFIG_BASE_FULL is not set - # CONFIG_FUTEX is not set - # CONFIG_EPOLL is not set - # CONFIG_SIGNALFD is not set -+# CONFIG_TIMERFD is not set - # CONFIG_EVENTFD is not set - CONFIG_SHMEM=y - CONFIG_VM_EVENT_COUNTERS=y - # CONFIG_SLAB is not set - # CONFIG_SLUB is not set - CONFIG_SLOB=y -+# CONFIG_PROFILING is not set -+# CONFIG_MARKERS is not set -+CONFIG_HAVE_OPROFILE=y -+CONFIG_HAVE_KPROBES=y -+# CONFIG_HAVE_KRETPROBES is not set -+# CONFIG_HAVE_DMA_ATTRS is not set -+# CONFIG_PROC_PAGE_MONITOR is not set - # CONFIG_TINY_SHMEM is not set - CONFIG_BASE_SMALL=1 - # CONFIG_MODULES is not set - # CONFIG_BLOCK is not set -+CONFIG_CLASSIC_RCU=y - - # - # System Type and features - # -+# CONFIG_TICK_ONESHOT is not set -+# CONFIG_NO_HZ is not set -+# CONFIG_HIGH_RES_TIMERS is not set -+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y - CONFIG_SUBARCH_AVR32B=y - CONFIG_MMU=y - CONFIG_PERFORMANCE_COUNTERS=y -@@ -115,16 +129,19 @@ CONFIG_FLATMEM=y - CONFIG_FLAT_NODE_MEM_MAP=y - # CONFIG_SPARSEMEM_STATIC is not set - # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -+CONFIG_PAGEFLAGS_EXTENDED=y - CONFIG_SPLIT_PTLOCK_CPUS=4 - # CONFIG_RESOURCES_64BIT is not set - CONFIG_ZONE_DMA_FLAG=0 - CONFIG_VIRT_TO_BUS=y - # CONFIG_OWNERSHIP_TRACE is not set -+# CONFIG_NMI_DEBUGGING is not set - # CONFIG_HZ_100 is not set - CONFIG_HZ_250=y - # CONFIG_HZ_300 is not set - # CONFIG_HZ_1000 is not set - CONFIG_HZ=250 -+# CONFIG_SCHED_HRTICK is not set - CONFIG_CMDLINE="" - - # -@@ -134,20 +151,7 @@ CONFIG_CMDLINE="" - # - # CPU Frequency scaling - # --CONFIG_CPU_FREQ=y --CONFIG_CPU_FREQ_TABLE=y --# CONFIG_CPU_FREQ_DEBUG is not set --# CONFIG_CPU_FREQ_STAT is not set --CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y --# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set --# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set --# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set --CONFIG_CPU_FREQ_GOV_PERFORMANCE=y --# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set --CONFIG_CPU_FREQ_GOV_USERSPACE=y --CONFIG_CPU_FREQ_GOV_ONDEMAND=y --# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set --CONFIG_CPU_FREQ_AT32AP=y -+# CONFIG_CPU_FREQ is not set - - # - # Bus options -@@ -197,8 +201,6 @@ CONFIG_TCP_CONG_CUBIC=y - CONFIG_DEFAULT_TCP_CONG="cubic" - # CONFIG_TCP_MD5SIG is not set - # CONFIG_IPV6 is not set --# CONFIG_INET6_XFRM_TUNNEL is not set --# CONFIG_INET6_TUNNEL is not set - # CONFIG_NETWORK_SECMARK is not set - # CONFIG_NETFILTER is not set - # CONFIG_IP_DCCP is not set -@@ -222,6 +224,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" - # - # 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 -@@ -255,6 +258,7 @@ CONFIG_MTD=y - CONFIG_MTD_PARTITIONS=y - # CONFIG_MTD_REDBOOT_PARTS is not set - CONFIG_MTD_CMDLINE_PARTS=y -+# CONFIG_MTD_AR7_PARTS is not set - - # - # User Modules And Translation Layers -@@ -321,6 +325,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 - # CONFIG_MTD_UBI is not set - # CONFIG_PARPORT is not set - # CONFIG_MISC_DEVICES is not set -+# CONFIG_HAVE_IDE is not set - - # - # SCSI device support -@@ -346,6 +351,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 - # Character devices - # - # CONFIG_VT is not set -+# CONFIG_DEVKMEM is not set - # CONFIG_SERIAL_NONSTANDARD is not set - - # -@@ -358,6 +364,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 - # - CONFIG_SERIAL_ATMEL=y - CONFIG_SERIAL_ATMEL_CONSOLE=y -+# CONFIG_SERIAL_ATMEL_PDC is not set - # CONFIG_SERIAL_ATMEL_TTYAT is not set - CONFIG_SERIAL_CORE=y - CONFIG_SERIAL_CORE_CONSOLE=y -@@ -365,15 +372,9 @@ CONFIG_UNIX98_PTYS=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_IPMI_HANDLER is not set - # CONFIG_HW_RANDOM is not set --# CONFIG_RTC is not set --# CONFIG_GEN_RTC is not set - # CONFIG_R3964 is not set - # CONFIG_TCG_TPM is not set - # CONFIG_I2C is not set -- --# --# SPI support --# - CONFIG_SPI=y - CONFIG_SPI_MASTER=y - -@@ -389,9 +390,24 @@ CONFIG_SPI_ATMEL=y - # CONFIG_SPI_AT25 is not set - # CONFIG_SPI_SPIDEV is not set - # CONFIG_SPI_TLE62X0 is not set -+CONFIG_HAVE_GPIO_LIB=y -+ -+# -+# GPIO Support -+# -+ -+# -+# I2C GPIO expanders: -+# -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MCP23S08 is not set - # CONFIG_W1 is not set - # CONFIG_POWER_SUPPLY is not set - # CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set - CONFIG_WATCHDOG=y - # CONFIG_WATCHDOG_NOWAYOUT is not set - -@@ -411,12 +427,22 @@ CONFIG_SSB_POSSIBLE=y - # Multifunction device drivers - # - # CONFIG_MFD_SM501 is not set -+# CONFIG_HTC_PASIC3 is not set - - # - # Multimedia devices - # -+ -+# -+# Multimedia core support -+# - # CONFIG_VIDEO_DEV is not set - # CONFIG_DVB_CORE is not set -+# CONFIG_VIDEO_MEDIA is not set -+ -+# -+# Multimedia drivers -+# - # CONFIG_DAB is not set - - # -@@ -434,8 +460,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y - # CONFIG_FB_SYS_FILLRECT is not set - # CONFIG_FB_SYS_COPYAREA is not set - # CONFIG_FB_SYS_IMAGEBLIT is not set -+# CONFIG_FB_FOREIGN_ENDIAN is not set - # CONFIG_FB_SYS_FOPS is not set --CONFIG_FB_DEFERRED_IO=y - # CONFIG_FB_SVGALIB is not set - # CONFIG_FB_MACMODES is not set - # CONFIG_FB_BACKLIGHT is not set -@@ -467,14 +493,12 @@ CONFIG_USB_SUPPORT=y - # CONFIG_USB_ARCH_HAS_HCD is not set - # CONFIG_USB_ARCH_HAS_OHCI is not set - # CONFIG_USB_ARCH_HAS_EHCI 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' - # -- --# --# USB Gadget Support --# - CONFIG_USB_GADGET=y - # CONFIG_USB_GADGET_DEBUG_FILES is not set - CONFIG_USB_GADGET_SELECTED=y -@@ -485,6 +509,7 @@ CONFIG_USB_ATMEL_USBA=y - # CONFIG_USB_GADGET_NET2280 is not set - # CONFIG_USB_GADGET_PXA2XX is not set - # CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_PXA27X is not set - # CONFIG_USB_GADGET_GOKU is not set - # CONFIG_USB_GADGET_LH7A40X is not set - # CONFIG_USB_GADGET_OMAP is not set -@@ -499,8 +524,11 @@ CONFIG_USB_ETH=y - # CONFIG_USB_FILE_STORAGE is not set - # CONFIG_USB_G_SERIAL is not set - # CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set - # CONFIG_MMC is not set -+# CONFIG_MEMSTICK is not set - # CONFIG_NEW_LEDS is not set -+# CONFIG_ACCESSIBILITY is not set - CONFIG_RTC_LIB=y - CONFIG_RTC_CLASS=y - CONFIG_RTC_HCTOSYS=y -@@ -519,15 +547,17 @@ CONFIG_RTC_INTF_DEV=y - # - # SPI RTC drivers - # --# CONFIG_RTC_DRV_RS5C348 is not set - # CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set - - # - # Platform RTC drivers - # -+# CONFIG_RTC_DRV_DS1511 is not set - # CONFIG_RTC_DRV_DS1553 is not set --# CONFIG_RTC_DRV_STK17TA8 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_M48T59 is not set - # CONFIG_RTC_DRV_V3020 is not set -@@ -536,18 +566,14 @@ CONFIG_RTC_INTF_DEV=y - # on-CPU RTC drivers - # - CONFIG_RTC_DRV_AT32AP700X=y -- --# --# Userspace I/O --# - # CONFIG_UIO is not set - - # - # File systems - # -+# CONFIG_DNOTIFY is not set - # CONFIG_INOTIFY is not set - # CONFIG_QUOTA is not set --# CONFIG_DNOTIFY is not set - # CONFIG_AUTOFS_FS is not set - # CONFIG_AUTOFS4_FS is not set - # CONFIG_FUSE_FS is not set -@@ -580,7 +606,6 @@ CONFIG_JFFS2_RTIME=y - # CONFIG_NETWORK_FILESYSTEMS is not set - # CONFIG_NLS is not set - # CONFIG_DLM is not set --# CONFIG_INSTRUMENTATION is not set - - # - # Kernel hacking -@@ -588,6 +613,7 @@ CONFIG_JFFS2_RTIME=y - # CONFIG_PRINTK_TIME is not set - CONFIG_ENABLE_WARN_DEPRECATED=y - CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 - CONFIG_MAGIC_SYSRQ=y - # CONFIG_UNUSED_SYMBOLS is not set - # CONFIG_DEBUG_FS is not set -@@ -608,6 +634,8 @@ CONFIG_MAGIC_SYSRQ=y - # Library routines - # - CONFIG_BITREVERSE=y -+# CONFIG_GENERIC_FIND_FIRST_BIT is not set -+# CONFIG_GENERIC_FIND_NEXT_BIT is not set - # CONFIG_CRC_CCITT is not set - # CONFIG_CRC16 is not set - # CONFIG_CRC_ITU_T is not set -diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c -index 80f55f8..84a7d44 100644 ---- a/arch/avr32/kernel/avr32_ksyms.c -+++ b/arch/avr32/kernel/avr32_ksyms.c -@@ -29,7 +29,9 @@ EXPORT_SYMBOL(__avr32_asr64); - */ - EXPORT_SYMBOL(memset); - EXPORT_SYMBOL(memcpy); -+ - EXPORT_SYMBOL(clear_page); -+EXPORT_SYMBOL(copy_page); - - /* - * Userspace access stuff. -@@ -41,6 +43,8 @@ EXPORT_SYMBOL(strncpy_from_user); - EXPORT_SYMBOL(__strncpy_from_user); - EXPORT_SYMBOL(clear_user); - EXPORT_SYMBOL(__clear_user); -+EXPORT_SYMBOL(strnlen_user); -+ - EXPORT_SYMBOL(csum_partial); - EXPORT_SYMBOL(csum_partial_copy_generic); - -diff --git a/arch/avr32/mach-at32ap/cpufreq.c b/arch/avr32/mach-at32ap/cpufreq.c -index 235524b..5dd8d25 100644 ---- a/arch/avr32/mach-at32ap/cpufreq.c -+++ b/arch/avr32/mach-at32ap/cpufreq.c -@@ -108,5 +108,4 @@ static int __init at32_cpufreq_init(void) - { - return cpufreq_register_driver(&at32_driver); - } -- --arch_initcall(at32_cpufreq_init); -+late_initcall(at32_cpufreq_init); -diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S -index 6678c49..80b44ea 100644 ---- a/arch/ia64/kernel/ivt.S -+++ b/arch/ia64/kernel/ivt.S -@@ -1076,48 +1076,6 @@ END(ia64_syscall_setup) - DBG_FAULT(15) - FAULT(15) - -- /* -- * Squatting in this space ... -- * -- * This special case dispatcher for illegal operation faults allows preserved -- * registers to be modified through a callback function (asm only) that is handed -- * back from the fault handler in r8. Up to three arguments can be passed to the -- * callback function by returning an aggregate with the callback as its first -- * element, followed by the arguments. -- */ --ENTRY(dispatch_illegal_op_fault) -- .prologue -- .body -- SAVE_MIN_WITH_COVER -- ssm psr.ic | PSR_DEFAULT_BITS -- ;; -- srlz.i // guarantee that interruption collection is on -- ;; --(p15) ssm psr.i // restore psr.i -- adds r3=8,r2 // set up second base pointer for SAVE_REST -- ;; -- alloc r14=ar.pfs,0,0,1,0 // must be first in insn group -- mov out0=ar.ec -- ;; -- SAVE_REST -- PT_REGS_UNWIND_INFO(0) -- ;; -- br.call.sptk.many rp=ia64_illegal_op_fault --.ret0: ;; -- alloc r14=ar.pfs,0,0,3,0 // must be first in insn group -- mov out0=r9 -- mov out1=r10 -- mov out2=r11 -- movl r15=ia64_leave_kernel -- ;; -- mov rp=r15 -- mov b6=r8 -- ;; -- cmp.ne p6,p0=0,r8 --(p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel -- br.sptk.many ia64_leave_kernel --END(dispatch_illegal_op_fault) -- - .org ia64_ivt+0x4000 - ///////////////////////////////////////////////////////////////////////////////////////// - // 0x4000 Entry 16 (size 64 bundles) Reserved -@@ -1715,6 +1673,48 @@ END(ia32_interrupt) - DBG_FAULT(67) - FAULT(67) - -+ /* -+ * Squatting in this space ... -+ * -+ * This special case dispatcher for illegal operation faults allows preserved -+ * registers to be modified through a callback function (asm only) that is handed -+ * back from the fault handler in r8. Up to three arguments can be passed to the -+ * callback function by returning an aggregate with the callback as its first -+ * element, followed by the arguments. -+ */ -+ENTRY(dispatch_illegal_op_fault) -+ .prologue -+ .body -+ SAVE_MIN_WITH_COVER -+ ssm psr.ic | PSR_DEFAULT_BITS -+ ;; -+ srlz.i // guarantee that interruption collection is on -+ ;; -+(p15) ssm psr.i // restore psr.i -+ adds r3=8,r2 // set up second base pointer for SAVE_REST -+ ;; -+ alloc r14=ar.pfs,0,0,1,0 // must be first in insn group -+ mov out0=ar.ec -+ ;; -+ SAVE_REST -+ PT_REGS_UNWIND_INFO(0) -+ ;; -+ br.call.sptk.many rp=ia64_illegal_op_fault -+.ret0: ;; -+ alloc r14=ar.pfs,0,0,3,0 // must be first in insn group -+ mov out0=r9 -+ mov out1=r10 -+ mov out2=r11 -+ movl r15=ia64_leave_kernel -+ ;; -+ mov rp=r15 -+ mov b6=r8 -+ ;; -+ cmp.ne p6,p0=0,r8 -+(p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel -+ br.sptk.many ia64_leave_kernel -+END(dispatch_illegal_op_fault) -+ - #ifdef CONFIG_IA32_SUPPORT - - /* -diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h -index 7c548ac..74b6d67 100644 ---- a/arch/ia64/kernel/minstate.h -+++ b/arch/ia64/kernel/minstate.h -@@ -15,6 +15,9 @@ - #define ACCOUNT_SYS_ENTER - #endif - -+.section ".data.patch.rse", "a" -+.previous -+ - /* - * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves - * the minimum state necessary that allows us to turn psr.ic back -@@ -40,7 +43,7 @@ - * Note that psr.ic is NOT turned on by this macro. This is so that - * we can pass interruption state as arguments to a handler. - */ --#define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \ -+#define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA,WORKAROUND) \ - mov r16=IA64_KR(CURRENT); /* M */ \ - mov r27=ar.rsc; /* M */ \ - mov r20=r1; /* A */ \ -@@ -87,6 +90,7 @@ - tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \ - mov r29=b0 \ - ;; \ -+ WORKAROUND; \ - adds r16=PT(R8),r1; /* initialize first base pointer */ \ - adds r17=PT(R9),r1; /* initialize second base pointer */ \ - (pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \ -@@ -206,6 +210,40 @@ - st8 [r25]=r10; /* ar.ssd */ \ - ;; - --#define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs,) --#define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19) --#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, ) -+#define RSE_WORKAROUND \ -+(pUStk) extr.u r17=r18,3,6; \ -+(pUStk) sub r16=r18,r22; \ -+[1:](pKStk) br.cond.sptk.many 1f; \ -+ .xdata4 ".data.patch.rse",1b-. \ -+ ;; \ -+ cmp.ge p6,p7 = 33,r17; \ -+ ;; \ -+(p6) mov r17=0x310; \ -+(p7) mov r17=0x308; \ -+ ;; \ -+ cmp.leu p1,p0=r16,r17; \ -+(p1) br.cond.sptk.many 1f; \ -+ dep.z r17=r26,0,62; \ -+ movl r16=2f; \ -+ ;; \ -+ mov ar.pfs=r17; \ -+ dep r27=r0,r27,16,14; \ -+ mov b0=r16; \ -+ ;; \ -+ br.ret.sptk b0; \ -+ ;; \ -+2: \ -+ mov ar.rsc=r0 \ -+ ;; \ -+ flushrs; \ -+ ;; \ -+ mov ar.bspstore=r22 \ -+ ;; \ -+ mov r18=ar.bsp; \ -+ ;; \ -+1: \ -+ .pred.rel "mutex", pKStk, pUStk -+ -+#define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs, , RSE_WORKAROUND) -+#define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19, RSE_WORKAROUND) -+#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, , ) -diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c -index e0dca87..b83b2c5 100644 ---- a/arch/ia64/kernel/patch.c -+++ b/arch/ia64/kernel/patch.c -@@ -115,6 +115,29 @@ ia64_patch_vtop (unsigned long start, unsigned long end) - ia64_srlz_i(); - } - -+/* -+ * Disable the RSE workaround by turning the conditional branch -+ * that we tagged in each place the workaround was used into an -+ * unconditional branch. -+ */ -+void __init -+ia64_patch_rse (unsigned long start, unsigned long end) -+{ -+ s32 *offp = (s32 *) start; -+ u64 ip, *b; -+ -+ while (offp < (s32 *) end) { -+ ip = (u64) offp + *offp; -+ -+ b = (u64 *)(ip & -16); -+ b[1] &= ~0xf800000L; -+ ia64_fc((void *) ip); -+ ++offp; -+ } -+ ia64_sync_i(); -+ ia64_srlz_i(); -+} -+ - void __init - ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) - { -diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c -index e9596cd..f48a809 100644 ---- a/arch/ia64/kernel/setup.c -+++ b/arch/ia64/kernel/setup.c -@@ -560,6 +560,17 @@ setup_arch (char **cmdline_p) - /* process SAL system table: */ - ia64_sal_init(__va(efi.sal_systab)); - -+#ifdef CONFIG_ITANIUM -+ ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); -+#else -+ { -+ u64 num_phys_stacked; -+ -+ if (ia64_pal_rse_info(&num_phys_stacked, 0) == 0 && num_phys_stacked > 96) -+ ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); -+ } -+#endif -+ - #ifdef CONFIG_SMP - cpu_physical_id(0) = hard_smp_processor_id(); - #endif -diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S -index 80622ac..5929ab1 100644 ---- a/arch/ia64/kernel/vmlinux.lds.S -+++ b/arch/ia64/kernel/vmlinux.lds.S -@@ -156,6 +156,13 @@ SECTIONS - __end___vtop_patchlist = .; - } - -+ .data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) -+ { -+ __start___rse_patchlist = .; -+ *(.data.patch.rse) -+ __end___rse_patchlist = .; -+ } -+ - .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) - { - __start___mckinley_e9_bundles = .; -diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig -index 1d03508..93acb3c 100644 ---- a/arch/s390/Kconfig -+++ b/arch/s390/Kconfig -@@ -308,6 +308,9 @@ config ARCH_SPARSEMEM_ENABLE - config ARCH_SPARSEMEM_DEFAULT - def_bool y - -+config ARCH_SELECT_MEMORY_MODEL -+ def_bool y -+ - source "mm/Kconfig" - - comment "I/O subsystem configuration" -diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c -index 655d525..ad40729 100644 ---- a/arch/s390/appldata/appldata_base.c -+++ b/arch/s390/appldata/appldata_base.c -@@ -130,6 +130,7 @@ static void appldata_work_fn(struct work_struct *work) - - P_DEBUG(" -= Work Queue =-\n"); - i = 0; -+ get_online_cpus(); - spin_lock(&appldata_ops_lock); - list_for_each(lh, &appldata_ops_list) { - ops = list_entry(lh, struct appldata_ops, list); -@@ -140,6 +141,7 @@ static void appldata_work_fn(struct work_struct *work) - } - } - spin_unlock(&appldata_ops_lock); -+ put_online_cpus(); - } - - /* -@@ -266,12 +268,14 @@ appldata_timer_handler(ctl_table *ctl, int write, struct file *filp, - len = *lenp; - if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) - return -EFAULT; -+ get_online_cpus(); - spin_lock(&appldata_timer_lock); - if (buf[0] == '1') - __appldata_vtimer_setup(APPLDATA_ADD_TIMER); - else if (buf[0] == '0') - __appldata_vtimer_setup(APPLDATA_DEL_TIMER); - spin_unlock(&appldata_timer_lock); -+ put_online_cpus(); - out: - *lenp = len; - *ppos += len; -@@ -314,10 +318,12 @@ appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, - return -EINVAL; - } - -+ get_online_cpus(); - spin_lock(&appldata_timer_lock); - appldata_interval = interval; - __appldata_vtimer_setup(APPLDATA_MOD_TIMER); - spin_unlock(&appldata_timer_lock); -+ put_online_cpus(); - - P_INFO("Monitoring CPU interval set to %u milliseconds.\n", - interval); -@@ -556,8 +562,10 @@ static int __init appldata_init(void) - return -ENOMEM; - } - -+ get_online_cpus(); - for_each_online_cpu(i) - appldata_online_cpu(i); -+ put_online_cpus(); - - /* Register cpu hotplug notifier */ - register_hotcpu_notifier(&appldata_nb); -diff --git a/arch/s390/defconfig b/arch/s390/defconfig -index aa341d0..c5cdb97 100644 ---- a/arch/s390/defconfig -+++ b/arch/s390/defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.25 --# Wed Apr 30 11:07:45 2008 -+# Linux kernel version: 2.6.26-rc4 -+# Fri May 30 09:49:33 2008 - # - CONFIG_SCHED_MC=y - CONFIG_MMU=y -@@ -103,6 +103,7 @@ 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=y -@@ -173,6 +174,7 @@ CONFIG_PREEMPT=y - # CONFIG_PREEMPT_RCU is not set - CONFIG_ARCH_SPARSEMEM_ENABLE=y - CONFIG_ARCH_SPARSEMEM_DEFAULT=y -+CONFIG_ARCH_SELECT_MEMORY_MODEL=y - CONFIG_SELECT_MEMORY_MODEL=y - # CONFIG_FLATMEM_MANUAL is not set - # CONFIG_DISCONTIGMEM_MANUAL is not set -@@ -210,6 +212,7 @@ CONFIG_FORCE_MAX_ZONEORDER=9 - CONFIG_PFAULT=y - # CONFIG_SHARED_KERNEL is not set - # CONFIG_CMM is not set -+# CONFIG_PAGE_STATES is not set - CONFIG_VIRT_TIMER=y - CONFIG_VIRT_CPU_ACCOUNTING=y - # CONFIG_APPLDATA_BASE is not set -@@ -620,6 +623,7 @@ CONFIG_S390_VMUR=m - # - # CONFIG_MEMSTICK is not set - # CONFIG_NEW_LEDS is not set -+CONFIG_ACCESSIBILITY=y - - # - # File systems -@@ -754,11 +758,12 @@ CONFIG_FRAME_WARN=2048 - CONFIG_MAGIC_SYSRQ=y - # CONFIG_UNUSED_SYMBOLS is not set - CONFIG_DEBUG_FS=y --CONFIG_HEADERS_CHECK=y -+# CONFIG_HEADERS_CHECK is not set - CONFIG_DEBUG_KERNEL=y - # CONFIG_SCHED_DEBUG is not set - # CONFIG_SCHEDSTATS is not set - # CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_OBJECTS is not set - # CONFIG_DEBUG_SLAB is not set - CONFIG_DEBUG_PREEMPT=y - # CONFIG_DEBUG_RT_MUTEXES is not set -diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c -index c14a336..d2f270c 100644 ---- a/arch/s390/kernel/dis.c -+++ b/arch/s390/kernel/dis.c -@@ -208,7 +208,7 @@ static const unsigned char formats[][7] = { - [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ - [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ - [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ -- [INSTR_RRF_R0RR] = { 0xff, R_24,R_28,R_16,0,0,0 }, /* e.g. idte */ -+ [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, /* e.g. idte */ - [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ - [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ - [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */ -diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c -index 1f42289..42b1d12 100644 ---- a/arch/s390/kernel/smp.c -+++ b/arch/s390/kernel/smp.c -@@ -1089,7 +1089,7 @@ out: - - #ifdef CONFIG_HOTPLUG_CPU - --int smp_rescan_cpus(void) -+int __ref smp_rescan_cpus(void) - { - cpumask_t newcpus; - int cpu; -diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c -index 29f3a63..0559864 100644 ---- a/arch/s390/mm/init.c -+++ b/arch/s390/mm/init.c -@@ -44,37 +44,34 @@ char empty_zero_page[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); - - void show_mem(void) - { -- int i, total = 0, reserved = 0; -- int shared = 0, cached = 0; -+ unsigned long i, total = 0, reserved = 0; -+ unsigned long shared = 0, cached = 0; -+ unsigned long flags; - struct page *page; -+ pg_data_t *pgdat; - - printk("Mem-info:\n"); - show_free_areas(); -- i = max_mapnr; -- while (i-- > 0) { -- if (!pfn_valid(i)) -- continue; -- page = pfn_to_page(i); -- total++; -- if (PageReserved(page)) -- reserved++; -- else if (PageSwapCache(page)) -- cached++; -- else if (page_count(page)) -- shared += page_count(page) - 1; -+ for_each_online_pgdat(pgdat) { -+ pgdat_resize_lock(pgdat, &flags); -+ for (i = 0; i < pgdat->node_spanned_pages; i++) { -+ if (!pfn_valid(pgdat->node_start_pfn + i)) -+ continue; -+ page = pfn_to_page(pgdat->node_start_pfn + i); -+ total++; -+ if (PageReserved(page)) -+ reserved++; -+ else if (PageSwapCache(page)) -+ cached++; -+ else if (page_count(page)) -+ shared += page_count(page) - 1; -+ } -+ pgdat_resize_unlock(pgdat, &flags); - } -- printk("%d pages of RAM\n", total); -- printk("%d reserved pages\n", reserved); -- printk("%d pages shared\n", shared); -- printk("%d pages swap cached\n", cached); -- -- printk("%lu pages dirty\n", global_page_state(NR_FILE_DIRTY)); -- printk("%lu pages writeback\n", global_page_state(NR_WRITEBACK)); -- printk("%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); -- printk("%lu pages slab\n", -- global_page_state(NR_SLAB_RECLAIMABLE) + -- global_page_state(NR_SLAB_UNRECLAIMABLE)); -- printk("%lu pages pagetables\n", global_page_state(NR_PAGETABLE)); -+ printk("%ld pages of RAM\n", total); -+ printk("%ld reserved pages\n", reserved); -+ printk("%ld pages shared\n", shared); -+ printk("%ld pages swap cached\n", cached); - } - - /* -diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c -index ea28048..f591188 100644 ---- a/arch/s390/mm/vmem.c -+++ b/arch/s390/mm/vmem.c -@@ -27,12 +27,19 @@ struct memory_segment { - - static LIST_HEAD(mem_segs); - --static pud_t *vmem_pud_alloc(void) -+static void __ref *vmem_alloc_pages(unsigned int order) -+{ -+ if (slab_is_available()) -+ return (void *)__get_free_pages(GFP_KERNEL, order); -+ return alloc_bootmem_pages((1 << order) * PAGE_SIZE); -+} -+ -+static inline pud_t *vmem_pud_alloc(void) - { - pud_t *pud = NULL; - - #ifdef CONFIG_64BIT -- pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0); -+ pud = vmem_alloc_pages(2); - if (!pud) - return NULL; - clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); -@@ -40,12 +47,12 @@ static pud_t *vmem_pud_alloc(void) - return pud; - } - --static pmd_t *vmem_pmd_alloc(void) -+static inline pmd_t *vmem_pmd_alloc(void) - { - pmd_t *pmd = NULL; - - #ifdef CONFIG_64BIT -- pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0); -+ pmd = vmem_alloc_pages(2); - if (!pmd) - return NULL; - clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); -@@ -207,13 +214,14 @@ int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node) - if (pte_none(*pt_dir)) { - unsigned long new_page; - -- new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0)); -+ new_page =__pa(vmem_alloc_pages(0)); - if (!new_page) - goto out; - pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); - *pt_dir = pte; - } - } -+ memset(start, 0, nr * sizeof(struct page)); - ret = 0; - out: - flush_tlb_kernel_range(start_addr, end_addr); -diff --git a/block/blk-core.c b/block/blk-core.c -index 6a9cc0d..1905aab 100644 ---- a/block/blk-core.c -+++ b/block/blk-core.c -@@ -806,35 +806,32 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, - rq = get_request(q, rw_flags, bio, GFP_NOIO); - while (!rq) { - DEFINE_WAIT(wait); -+ struct io_context *ioc; - struct request_list *rl = &q->rq; - - prepare_to_wait_exclusive(&rl->wait[rw], &wait, - TASK_UNINTERRUPTIBLE); - -- rq = get_request(q, rw_flags, bio, GFP_NOIO); -- -- if (!rq) { -- struct io_context *ioc; -+ blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); - -- blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); -- -- __generic_unplug_device(q); -- spin_unlock_irq(q->queue_lock); -- io_schedule(); -+ __generic_unplug_device(q); -+ spin_unlock_irq(q->queue_lock); -+ io_schedule(); - -- /* -- * After sleeping, we become a "batching" process and -- * will be able to allocate at least one request, and -- * up to a big batch of them for a small period time. -- * See ioc_batching, ioc_set_batching -- */ -- ioc = current_io_context(GFP_NOIO, q->node); -- ioc_set_batching(q, ioc); -+ /* -+ * After sleeping, we become a "batching" process and -+ * will be able to allocate at least one request, and -+ * up to a big batch of them for a small period time. -+ * See ioc_batching, ioc_set_batching -+ */ -+ ioc = current_io_context(GFP_NOIO, q->node); -+ ioc_set_batching(q, ioc); - -- spin_lock_irq(q->queue_lock); -- } -+ spin_lock_irq(q->queue_lock); - finish_wait(&rl->wait[rw], &wait); -- } -+ -+ rq = get_request(q, rw_flags, bio, GFP_NOIO); -+ }; - - return rq; - } -diff --git a/block/blktrace.c b/block/blktrace.c -index b2cbb4e..7ae87cc 100644 ---- a/block/blktrace.c -+++ b/block/blktrace.c -@@ -75,6 +75,23 @@ static void trace_note_time(struct blk_trace *bt) - local_irq_restore(flags); - } - -+void __trace_note_message(struct blk_trace *bt, const char *fmt, ...) -+{ -+ int n; -+ va_list args; -+ char *buf; -+ -+ preempt_disable(); -+ buf = per_cpu_ptr(bt->msg_data, smp_processor_id()); -+ va_start(args, fmt); -+ n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args); -+ va_end(args); -+ -+ trace_note(bt, 0, BLK_TN_MESSAGE, buf, n); -+ preempt_enable(); -+} -+EXPORT_SYMBOL_GPL(__trace_note_message); -+ - static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector, - pid_t pid) - { -@@ -232,6 +249,7 @@ static void blk_trace_cleanup(struct blk_trace *bt) - debugfs_remove(bt->dropped_file); - blk_remove_tree(bt->dir); - free_percpu(bt->sequence); -+ free_percpu(bt->msg_data); - kfree(bt); - } - -@@ -346,6 +364,10 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, - if (!bt->sequence) - goto err; - -+ bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG); -+ if (!bt->msg_data) -+ goto err; -+ - ret = -ENOENT; - dir = blk_create_tree(buts->name); - if (!dir) -@@ -392,6 +414,7 @@ err: - if (bt->dropped_file) - debugfs_remove(bt->dropped_file); - free_percpu(bt->sequence); -+ free_percpu(bt->msg_data); - if (bt->rchan) - relay_close(bt->rchan); - kfree(bt); -diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c -index b399c62..d01b411 100644 ---- a/block/cfq-iosched.c -+++ b/block/cfq-iosched.c -@@ -124,6 +124,8 @@ struct cfq_data { - struct cfq_queue { - /* reference count */ - atomic_t ref; -+ /* various state flags, see below */ -+ unsigned int flags; - /* parent cfq_data */ - struct cfq_data *cfqd; - /* service_tree member */ -@@ -138,14 +140,14 @@ struct cfq_queue { - int queued[2]; - /* currently allocated requests */ - int allocated[2]; -- /* pending metadata requests */ -- int meta_pending; - /* fifo list of requests in sort_list */ - struct list_head fifo; - - unsigned long slice_end; - long slice_resid; - -+ /* pending metadata requests */ -+ int meta_pending; - /* number of requests that are on the dispatch list or inside driver */ - int dispatched; - -@@ -153,8 +155,6 @@ struct cfq_queue { - unsigned short ioprio, org_ioprio; - unsigned short ioprio_class, org_ioprio_class; - -- /* various state flags, see below */ -- unsigned int flags; - }; - - enum cfqq_state_flags { -@@ -1142,6 +1142,9 @@ static void cfq_put_queue(struct cfq_queue *cfqq) - kmem_cache_free(cfq_pool, cfqq); - } - -+/* -+ * Must always be called with the rcu_read_lock() held -+ */ - static void - __call_for_each_cic(struct io_context *ioc, - void (*func)(struct io_context *, struct cfq_io_context *)) -@@ -1197,6 +1200,11 @@ static void cic_free_func(struct io_context *ioc, struct cfq_io_context *cic) - cfq_cic_free(cic); - } - -+/* -+ * Must be called with rcu_read_lock() held or preemption otherwise disabled. -+ * Only two callers of this - ->dtor() which is called with the rcu_read_lock(), -+ * and ->trim() which is called with the task lock held -+ */ - static void cfq_free_io_context(struct io_context *ioc) - { - /* -@@ -1502,20 +1510,24 @@ static struct cfq_io_context * - cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) - { - struct cfq_io_context *cic; -+ unsigned long flags; - void *k; - - if (unlikely(!ioc)) - return NULL; - -+ rcu_read_lock(); -+ - /* - * we maintain a last-hit cache, to avoid browsing over the tree - */ - cic = rcu_dereference(ioc->ioc_data); -- if (cic && cic->key == cfqd) -+ if (cic && cic->key == cfqd) { -+ rcu_read_unlock(); - return cic; -+ } - - do { -- rcu_read_lock(); - cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd); - rcu_read_unlock(); - if (!cic) -@@ -1524,10 +1536,13 @@ cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) - k = cic->key; - if (unlikely(!k)) { - cfq_drop_dead_cic(cfqd, ioc, cic); -+ rcu_read_lock(); - continue; - } - -+ spin_lock_irqsave(&ioc->lock, flags); - rcu_assign_pointer(ioc->ioc_data, cic); -+ spin_unlock_irqrestore(&ioc->lock, flags); - break; - } while (1); - -@@ -2134,6 +2149,10 @@ static void *cfq_init_queue(struct request_queue *q) - - static void cfq_slab_kill(void) - { -+ /* -+ * Caller already ensured that pending RCU callbacks are completed, -+ * so we should have no busy allocations at this point. -+ */ - if (cfq_pool) - kmem_cache_destroy(cfq_pool); - if (cfq_ioc_pool) -@@ -2292,6 +2311,11 @@ static void __exit cfq_exit(void) - ioc_gone = &all_gone; - /* ioc_gone's update must be visible before reading ioc_count */ - smp_wmb(); -+ -+ /* -+ * this also protects us from entering cfq_slab_kill() with -+ * pending RCU callbacks -+ */ - if (elv_ioc_count_read(ioc_count)) - wait_for_completion(ioc_gone); - cfq_slab_kill(); -diff --git a/block/elevator.c b/block/elevator.c -index 980f8ae..902dd13 100644 ---- a/block/elevator.c -+++ b/block/elevator.c -@@ -1110,6 +1110,8 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) - queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); - spin_unlock_irq(q->queue_lock); - -+ blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name); -+ - return 1; - - fail_register: -diff --git a/drivers/base/core.c b/drivers/base/core.c -index 72eccae..422cfca 100644 ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -760,6 +760,21 @@ static void device_remove_class_symlinks(struct device *dev) - } - - /** -+ * dev_set_name - set a device name -+ * @dev: device -+ */ -+int dev_set_name(struct device *dev, const char *fmt, ...) -+{ -+ va_list vargs; -+ -+ va_start(vargs, fmt); -+ vsnprintf(dev->bus_id, sizeof(dev->bus_id), fmt, vargs); -+ va_end(vargs); -+ return 0; -+} -+EXPORT_SYMBOL_GPL(dev_set_name); -+ -+/** - * device_add - add device to device hierarchy. - * @dev: device. - * -diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c -index 7fce038..86f0a24 100644 ---- a/drivers/cpufreq/cpufreq.c -+++ b/drivers/cpufreq/cpufreq.c -@@ -928,13 +928,13 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) - policy->user_policy.policy = policy->policy; - policy->user_policy.governor = policy->governor; - -- unlock_policy_rwsem_write(cpu); -- - if (ret) { - dprintk("setting policy failed\n"); - goto err_out_unregister; - } - -+ unlock_policy_rwsem_write(cpu); -+ - kobject_uevent(&policy->kobj, KOBJ_ADD); - module_put(cpufreq_driver->owner); - dprintk("initialization complete\n"); -diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c -index 3f28f6e..a0ce0b2 100644 ---- a/drivers/misc/thinkpad_acpi.c -+++ b/drivers/misc/thinkpad_acpi.c -@@ -3821,7 +3821,7 @@ TPACPI_HANDLE(led, ec, "SLED", /* 570 */ - #define TPACPI_LED_NUMLEDS 8 - static struct tpacpi_led_classdev *tpacpi_leds; - static enum led_status_t tpacpi_led_state_cache[TPACPI_LED_NUMLEDS]; --static const char const *tpacpi_led_names[TPACPI_LED_NUMLEDS] = { -+static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = { - /* there's a limit of 19 chars + NULL before 2.6.26 */ - "tpacpi::power", - "tpacpi:orange:batt", -@@ -3860,10 +3860,10 @@ static int led_get_status(unsigned int led) - static int led_set_status(unsigned int led, enum led_status_t ledstatus) - { - /* off, on, blink. Index is led_status_t */ -- static const int const led_sled_arg1[] = { 0, 1, 3 }; -- static const int const led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ -- static const int const led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ -- static const int const led_led_arg1[] = { 0, 0x80, 0xc0 }; -+ static const int led_sled_arg1[] = { 0, 1, 3 }; -+ static const int led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ -+ static const int led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ -+ static const int led_led_arg1[] = { 0, 0x80, 0xc0 }; - - int rc = 0; - -diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c -index 59d8fb4..effaf7c 100644 ---- a/drivers/mtd/maps/ck804xrom.c -+++ b/drivers/mtd/maps/ck804xrom.c -@@ -331,15 +331,15 @@ static void __devexit ck804xrom_remove_one (struct pci_dev *pdev) - } - - static struct pci_device_id ck804xrom_pci_tbl[] = { -- { PCI_VENDOR_ID_NVIDIA, 0x0051, PCI_ANY_ID, PCI_ANY_ID, DEV_CK804 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0360, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0361, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0362, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0363, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0364, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0365, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0366, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -- { PCI_VENDOR_ID_NVIDIA, 0x0367, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0051), .driver_data = DEV_CK804 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0360), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0361), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0362), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0363), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0364), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0365), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0366), .driver_data = DEV_MCP55 }, -+ { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0367), .driver_data = DEV_MCP55 }, - { 0, } - }; - -diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h -index 37783cd..dfa4bdd 100644 ---- a/drivers/net/wireless/b43/b43.h -+++ b/drivers/net/wireless/b43/b43.h -@@ -737,6 +737,7 @@ struct b43_wl { - struct ieee80211_tx_control beacon_txctl; - bool beacon0_uploaded; - bool beacon1_uploaded; -+ bool beacon_templates_virgin; /* Never wrote the templates? */ - struct work_struct beacon_update_trigger; - - /* The current QOS parameters for the 4 queues. -diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c -index 8fdba94..6c3d9ea 100644 ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev, - kfree(probe_resp_data); - } - -+static void b43_upload_beacon0(struct b43_wldev *dev) -+{ -+ struct b43_wl *wl = dev->wl; -+ -+ if (wl->beacon0_uploaded) -+ return; -+ b43_write_beacon_template(dev, 0x68, 0x18); -+ /* FIXME: Probe resp upload doesn't really belong here, -+ * but we don't use that feature anyway. */ -+ b43_write_probe_resp_template(dev, 0x268, 0x4A, -+ &__b43_ratetable[3]); -+ wl->beacon0_uploaded = 1; -+} -+ -+static void b43_upload_beacon1(struct b43_wldev *dev) -+{ -+ struct b43_wl *wl = dev->wl; -+ -+ if (wl->beacon1_uploaded) -+ return; -+ b43_write_beacon_template(dev, 0x468, 0x1A); -+ wl->beacon1_uploaded = 1; -+} -+ - static void handle_irq_beacon(struct b43_wldev *dev) - { - struct b43_wl *wl = dev->wl; -@@ -1568,24 +1592,27 @@ static void handle_irq_beacon(struct b43_wldev *dev) - return; - } - -- if (!beacon0_valid) { -- if (!wl->beacon0_uploaded) { -- b43_write_beacon_template(dev, 0x68, 0x18); -- b43_write_probe_resp_template(dev, 0x268, 0x4A, -- &__b43_ratetable[3]); -- wl->beacon0_uploaded = 1; -- } -+ if (unlikely(wl->beacon_templates_virgin)) { -+ /* We never uploaded a beacon before. -+ * Upload both templates now, but only mark one valid. */ -+ wl->beacon_templates_virgin = 0; -+ b43_upload_beacon0(dev); -+ b43_upload_beacon1(dev); - cmd = b43_read32(dev, B43_MMIO_MACCMD); - cmd |= B43_MACCMD_BEACON0_VALID; - b43_write32(dev, B43_MMIO_MACCMD, cmd); -- } else if (!beacon1_valid) { -- if (!wl->beacon1_uploaded) { -- b43_write_beacon_template(dev, 0x468, 0x1A); -- wl->beacon1_uploaded = 1; -+ } else { -+ if (!beacon0_valid) { -+ b43_upload_beacon0(dev); -+ cmd = b43_read32(dev, B43_MMIO_MACCMD); -+ cmd |= B43_MACCMD_BEACON0_VALID; -+ b43_write32(dev, B43_MMIO_MACCMD, cmd); -+ } else if (!beacon1_valid) { -+ b43_upload_beacon1(dev); -+ cmd = b43_read32(dev, B43_MMIO_MACCMD); -+ cmd |= B43_MACCMD_BEACON1_VALID; -+ b43_write32(dev, B43_MMIO_MACCMD, cmd); - } -- cmd = b43_read32(dev, B43_MMIO_MACCMD); -- cmd |= B43_MACCMD_BEACON1_VALID; -- b43_write32(dev, B43_MMIO_MACCMD, cmd); - } - } - -@@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw) - wl->filter_flags = 0; - wl->radiotap_enabled = 0; - b43_qos_clear(wl); -+ wl->beacon0_uploaded = 0; -+ wl->beacon1_uploaded = 0; -+ wl->beacon_templates_virgin = 1; - - /* First register RFkill. - * LEDs that are registered later depend on it. */ -@@ -4241,7 +4271,9 @@ static void b43_chip_reset(struct work_struct *work) - goto out; - } - } -- out: -+out: -+ if (err) -+ wl->current_dev = NULL; /* Failed to init the dev. */ - mutex_unlock(&wl->mutex); - if (err) - b43err(wl, "Controller restart FAILED\n"); -@@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev) - struct b43_wldev *wldev; - struct b43_wl *wl; - -+ /* Do not cancel ieee80211-workqueue based work here. -+ * See comment in b43_remove(). */ -+ - wldev = ssb_get_drvdata(dev); - wl = wldev->wl; -- cancel_work_sync(&wldev->restart_work); - b43_debugfs_remove_device(wldev); - b43_wireless_core_detach(wldev); - list_del(&wldev->list); -@@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev) - struct b43_wl *wl = ssb_get_devtypedata(dev); - struct b43_wldev *wldev = ssb_get_drvdata(dev); - -+ /* We must cancel any work here before unregistering from ieee80211, -+ * as the ieee80211 unreg will destroy the workqueue. */ -+ cancel_work_sync(&wldev->restart_work); -+ - B43_WARN_ON(!wl); - if (wl->current_dev == wldev) - ieee80211_unregister_hw(wl->hw); -diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c -index c9847b1..3a7f0cb 100644 ---- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c -+++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c -@@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, - - /* Higher rate not available, use the original */ - } else { -- new_rate = rate; - break; - } - } -@@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, - * 2) Not just finishing up a search - * 3) Allowing a new search - */ -- if (!update_lq && !done_search && !lq_sta->stay_in_tbl) { -+ if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { - /* Save current throughput to compare with "search" throughput*/ - lq_sta->last_tpt = current_tpt; - -diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c -index d0b1fb1..18c9931 100644 ---- a/drivers/net/wireless/rndis_wlan.c -+++ b/drivers/net/wireless/rndis_wlan.c -@@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval, - #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) - #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) - #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) -+#define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f) - #define OID_802_11_PMKID ccpu2(0x0d010123) - #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) - #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) -@@ -271,6 +272,26 @@ struct ndis_config_param { - __le32 value_length; - } __attribute__((packed)); - -+struct ndis_80211_assoc_info { -+ __le32 length; -+ __le16 req_ies; -+ struct req_ie { -+ __le16 capa; -+ __le16 listen_interval; -+ u8 cur_ap_address[6]; -+ } req_ie; -+ __le32 req_ie_length; -+ __le32 offset_req_ies; -+ __le16 resp_ies; -+ struct resp_ie { -+ __le16 capa; -+ __le16 status_code; -+ __le16 assoc_id; -+ } resp_ie; -+ __le32 resp_ie_length; -+ __le32 offset_resp_ies; -+} __attribute__((packed)); -+ - /* these have to match what is in wpa_supplicant */ - enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; - enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, -@@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN]) - return ret; - } - -+static int get_association_info(struct usbnet *usbdev, -+ struct ndis_80211_assoc_info *info, int len) -+{ -+ return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION, -+ info, &len); -+} - - static int is_associated(struct usbnet *usbdev) - { -@@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work) - struct usbnet *usbdev = priv->usbdev; - union iwreq_data evt; - unsigned char bssid[ETH_ALEN]; -- int ret; -+ struct ndis_80211_assoc_info *info; -+ int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32; -+ int ret, offset; - - if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { -- ret = get_bssid(usbdev, bssid); -+ info = kzalloc(assoc_size, GFP_KERNEL); -+ if (!info) -+ goto get_bssid; -+ -+ /* Get association info IEs from device and send them back to -+ * userspace. */ -+ ret = get_association_info(usbdev, info, assoc_size); -+ if (!ret) { -+ evt.data.length = le32_to_cpu(info->req_ie_length); -+ if (evt.data.length > 0) { -+ offset = le32_to_cpu(info->offset_req_ies); -+ wireless_send_event(usbdev->net, -+ IWEVASSOCREQIE, &evt, -+ (char *)info + offset); -+ } -+ -+ evt.data.length = le32_to_cpu(info->resp_ie_length); -+ if (evt.data.length > 0) { -+ offset = le32_to_cpu(info->offset_resp_ies); -+ wireless_send_event(usbdev->net, -+ IWEVASSOCRESPIE, &evt, -+ (char *)info + offset); -+ } -+ } -+ -+ kfree(info); - -+get_bssid: -+ ret = get_bssid(usbdev, bssid); - if (!ret) { - evt.data.flags = 0; - evt.data.length = 0; -@@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev) - else if (priv->param_power_save > 2) - priv->param_power_save = 2; - -+ if (priv->param_power_output < 0) -+ priv->param_power_output = 0; -+ else if (priv->param_power_output > 3) -+ priv->param_power_output = 3; -+ - if (priv->param_roamtrigger < -80) - priv->param_roamtrigger = -80; - else if (priv->param_roamtrigger > -60) -diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h -index 57bdc15..611d983 100644 ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link) - return DEFAULT_RSSI; - } - -+static inline void rt2x00_reset_link_ant_rssi(struct link *link) -+{ -+ link->ant.rssi_ant = 0; -+} -+ - static inline int rt2x00_get_link_ant_rssi_history(struct link *link, - enum antenna ant) - { -diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c -index a9930a0..48608e8 100644 ---- a/drivers/net/wireless/rt2x00/rt2x00config.c -+++ b/drivers/net/wireless/rt2x00/rt2x00config.c -@@ -129,6 +129,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, - */ - rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA); - rt2x00lib_reset_link_tuner(rt2x00dev); -+ rt2x00_reset_link_ant_rssi(&rt2x00dev->link); - - rt2x00dev->link.ant.active.rx = libconf.ant.rx; - rt2x00dev->link.ant.active.tx = libconf.ant.tx; -diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c -index b22c027..2673d56 100644 ---- a/drivers/net/wireless/rt2x00/rt2x00dev.c -+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -483,9 +483,9 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev) - if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) - return; - -- ieee80211_iterate_active_interfaces(rt2x00dev->hw, -- rt2x00lib_beacondone_iter, -- rt2x00dev); -+ ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw, -+ rt2x00lib_beacondone_iter, -+ rt2x00dev); - - queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); - } -@@ -507,7 +507,7 @@ void rt2x00lib_txdone(struct queue_entry *entry, - * Update TX statistics. - */ - rt2x00dev->link.qual.tx_success += success; -- rt2x00dev->link.qual.tx_failed += txdesc->retry + fail; -+ rt2x00dev->link.qual.tx_failed += fail; - - /* - * Initialize TX status -diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c -index c206b50..87e280a 100644 ---- a/drivers/net/wireless/rt2x00/rt2x00mac.c -+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c -@@ -93,6 +93,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb, - */ - if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) { - ieee80211_stop_queues(hw); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - -diff --git a/drivers/net/wireless/rtl8180_grf5101.c b/drivers/net/wireless/rtl8180_grf5101.c -index 5d47935..947ee55 100644 ---- a/drivers/net/wireless/rtl8180_grf5101.c -+++ b/drivers/net/wireless/rtl8180_grf5101.c -@@ -88,7 +88,7 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev, - write_grf5101(dev, 0x0B, chan); - write_grf5101(dev, 0x07, 0x1000); - -- grf5101_write_phy_antenna(dev, chan); -+ grf5101_write_phy_antenna(dev, channel); - } - - static void grf5101_rf_stop(struct ieee80211_hw *dev) -diff --git a/drivers/net/wireless/rtl8180_max2820.c b/drivers/net/wireless/rtl8180_max2820.c -index a34dfd3..6c825fd 100644 ---- a/drivers/net/wireless/rtl8180_max2820.c -+++ b/drivers/net/wireless/rtl8180_max2820.c -@@ -78,7 +78,8 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, - struct ieee80211_conf *conf) - { - struct rtl8180_priv *priv = dev->priv; -- int channel = ieee80211_frequency_to_channel(conf->channel->center_freq); -+ int channel = conf ? -+ ieee80211_frequency_to_channel(conf->channel->center_freq) : 1; - unsigned int chan_idx = channel - 1; - u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; - u32 chan = max2820_chan[chan_idx]; -@@ -87,7 +88,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, - * sa2400, for MAXIM we do this directly from BB */ - rtl8180_write_phy(dev, 3, txpw); - -- max2820_write_phy_antenna(dev, chan); -+ max2820_write_phy_antenna(dev, channel); - write_max2820(dev, 3, chan); - } - -diff --git a/drivers/net/wireless/rtl8180_sa2400.c b/drivers/net/wireless/rtl8180_sa2400.c -index 0311b4e..cea4e0c 100644 ---- a/drivers/net/wireless/rtl8180_sa2400.c -+++ b/drivers/net/wireless/rtl8180_sa2400.c -@@ -86,7 +86,7 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev, - - write_sa2400(dev, 7, txpw); - -- sa2400_write_phy_antenna(dev, chan); -+ sa2400_write_phy_antenna(dev, channel); - - write_sa2400(dev, 0, chan); - write_sa2400(dev, 1, 0xbb50); -diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c -index 925ba16..a11021e 100644 ---- a/drivers/pci/hotplug/pci_hotplug_core.c -+++ b/drivers/pci/hotplug/pci_hotplug_core.c -@@ -619,6 +619,7 @@ static struct hotplug_slot *get_slot_from_name (const char *name) - int pci_hp_register (struct hotplug_slot *slot) - { - int result; -+ struct hotplug_slot *tmp; - - if (slot == NULL) - return -ENODEV; -@@ -630,7 +631,11 @@ int pci_hp_register (struct hotplug_slot *slot) - return -EINVAL; - } - -- /* this can fail if we have already registered a slot with the same name */ -+ /* Check if we have already registered a slot with the same name. */ -+ tmp = get_slot_from_name(slot->name); -+ if (tmp) -+ return -EEXIST; -+ - slot->kobj.kset = pci_hotplug_slots_kset; - result = kobject_init_and_add(&slot->kobj, &hotplug_slot_ktype, NULL, - "%s", slot->name); -diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h -index 8264a76..79c9dda 100644 ---- a/drivers/pci/hotplug/pciehp.h -+++ b/drivers/pci/hotplug/pciehp.h -@@ -97,6 +97,7 @@ struct controller { - u8 cap_base; - struct timer_list poll_timer; - volatile int cmd_busy; -+ unsigned int no_cmd_complete:1; - }; - - #define INT_BUTTON_IGNORE 0 -@@ -135,6 +136,7 @@ struct controller { - #define PWR_LED_PRSN 0x00000010 - #define HP_SUPR_RM_SUP 0x00000020 - #define EMI_PRSN 0x00020000 -+#define NO_CMD_CMPL_SUP 0x00040000 - - #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & ATTN_BUTTN_PRSN) - #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PWR_CTRL_PRSN) -@@ -143,13 +145,14 @@ struct controller { - #define PWR_LED(ctrl) ((ctrl)->slot_cap & PWR_LED_PRSN) - #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & HP_SUPR_RM_SUP) - #define EMI(ctrl) ((ctrl)->slot_cap & EMI_PRSN) -+#define NO_CMD_CMPL(ctrl) ((ctrl)->slot_cap & NO_CMD_CMPL_SUP) - - extern int pciehp_sysfs_enable_slot(struct slot *slot); - extern int pciehp_sysfs_disable_slot(struct slot *slot); --extern u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl); --extern u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl); --extern u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl); --extern u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl); -+extern u8 pciehp_handle_attention_button(struct slot *p_slot); -+ extern u8 pciehp_handle_switch_change(struct slot *p_slot); -+extern u8 pciehp_handle_presence_change(struct slot *p_slot); -+extern u8 pciehp_handle_power_fault(struct slot *p_slot); - extern int pciehp_configure_device(struct slot *p_slot); - extern int pciehp_unconfigure_device(struct slot *p_slot); - extern void pciehp_queue_pushbutton_work(struct work_struct *work); -diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c -index 43d8ddb..48a2ed3 100644 ---- a/drivers/pci/hotplug/pciehp_core.c -+++ b/drivers/pci/hotplug/pciehp_core.c -@@ -254,7 +254,11 @@ static int init_slots(struct controller *ctrl) - slot->hp_slot, slot->number, ctrl->slot_device_offset); - retval = pci_hp_register(hotplug_slot); - if (retval) { -- err ("pci_hp_register failed with error %d\n", retval); -+ err("pci_hp_register failed with error %d\n", retval); -+ if (retval == -EEXIST) -+ err("Failed to register slot because of name " -+ "collision. Try \'pciehp_slot_with_bus\' " -+ "module option.\n"); - goto error_info; - } - /* create additional sysfs entries */ -diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c -index 0a7aa62..96a5d55 100644 ---- a/drivers/pci/hotplug/pciehp_ctrl.c -+++ b/drivers/pci/hotplug/pciehp_ctrl.c -@@ -55,16 +55,13 @@ static int queue_interrupt_event(struct slot *p_slot, u32 event_type) - return 0; - } - --u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) -+u8 pciehp_handle_attention_button(struct slot *p_slot) - { -- struct slot *p_slot; - u32 event_type; - - /* Attention Button Change */ - dbg("pciehp: Attention button interrupt received.\n"); - -- p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); -- - /* - * Button pressed - See if need to TAKE ACTION!!! - */ -@@ -76,18 +73,15 @@ u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) - return 0; - } - --u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) -+u8 pciehp_handle_switch_change(struct slot *p_slot) - { -- struct slot *p_slot; - u8 getstatus; - u32 event_type; - - /* Switch Change */ - dbg("pciehp: Switch interrupt received.\n"); - -- p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); -- - if (getstatus) { - /* - * Switch opened -@@ -107,17 +101,14 @@ u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) - return 1; - } - --u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) -+u8 pciehp_handle_presence_change(struct slot *p_slot) - { -- struct slot *p_slot; - u32 event_type; - u8 presence_save; - - /* Presence Change */ - dbg("pciehp: Presence/Notify input change.\n"); - -- p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); -- - /* Switch is open, assume a presence change - * Save the presence state - */ -@@ -141,16 +132,13 @@ u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) - return 1; - } - --u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) -+u8 pciehp_handle_power_fault(struct slot *p_slot) - { -- struct slot *p_slot; - u32 event_type; - - /* power fault */ - dbg("pciehp: Power fault interrupt received.\n"); - -- p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); -- - if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { - /* - * power fault Cleared -@@ -163,7 +151,7 @@ u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) - */ - info("Power fault on Slot(%s)\n", p_slot->name); - event_type = INT_POWER_FAULT; -- info("power fault bit %x set\n", hp_slot); -+ info("power fault bit %x set\n", 0); - } - - queue_interrupt_event(p_slot, event_type); -@@ -186,6 +174,13 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) - } - } - -+ /* -+ * After turning power off, we must wait for at least 1 second -+ * before taking any action that relies on power having been -+ * removed from the slot/adapter. -+ */ -+ msleep(1000); -+ - if (PWR_LED(ctrl)) - pslot->hpc_ops->green_led_off(pslot); - -@@ -289,6 +284,13 @@ static int remove_board(struct slot *p_slot) - } - } - -+ /* -+ * After turning power off, we must wait for at least 1 second -+ * before taking any action that relies on power having been -+ * removed from the slot/adapter. -+ */ -+ msleep(1000); -+ - if (PWR_LED(ctrl)) - /* turn off Green LED */ - p_slot->hpc_ops->green_led_off(p_slot); -diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c -index 891f81a..79f1049 100644 ---- a/drivers/pci/hotplug/pciehp_hpc.c -+++ b/drivers/pci/hotplug/pciehp_hpc.c -@@ -247,14 +247,38 @@ static inline void pciehp_free_irq(struct controller *ctrl) - free_irq(ctrl->pci_dev->irq, ctrl); - } - --static inline int pcie_wait_cmd(struct controller *ctrl) -+static inline int pcie_poll_cmd(struct controller *ctrl) -+{ -+ u16 slot_status; -+ int timeout = 1000; -+ -+ if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) -+ if (slot_status & CMD_COMPLETED) -+ goto completed; -+ for (timeout = 1000; timeout > 0; timeout -= 100) { -+ msleep(100); -+ if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) -+ if (slot_status & CMD_COMPLETED) -+ goto completed; -+ } -+ return 0; /* timeout */ -+ -+completed: -+ pciehp_writew(ctrl, SLOTSTATUS, CMD_COMPLETED); -+ return timeout; -+} -+ -+static inline int pcie_wait_cmd(struct controller *ctrl, int poll) - { - int retval = 0; - unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; - unsigned long timeout = msecs_to_jiffies(msecs); - int rc; - -- rc = wait_event_interruptible_timeout(ctrl->queue, -+ if (poll) -+ rc = pcie_poll_cmd(ctrl); -+ else -+ rc = wait_event_interruptible_timeout(ctrl->queue, - !ctrl->cmd_busy, timeout); - if (!rc) - dbg("Command not completed in 1000 msec\n"); -@@ -286,12 +310,28 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) - goto out; - } - -- if ((slot_status & CMD_COMPLETED) == CMD_COMPLETED ) { -- /* After 1 sec and CMD_COMPLETED still not set, just -- proceed forward to issue the next command according -- to spec. Just print out the error message */ -- dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", -- __func__); -+ if (slot_status & CMD_COMPLETED) { -+ if (!ctrl->no_cmd_complete) { -+ /* -+ * After 1 sec and CMD_COMPLETED still not set, just -+ * proceed forward to issue the next command according -+ * to spec. Just print out the error message. -+ */ -+ dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", -+ __func__); -+ } else if (!NO_CMD_CMPL(ctrl)) { -+ /* -+ * This controller semms to notify of command completed -+ * event even though it supports none of power -+ * controller, attention led, power led and EMI. -+ */ -+ dbg("%s: Unexpected CMD_COMPLETED. Need to wait for " -+ "command completed event.\n", __func__); -+ ctrl->no_cmd_complete = 0; -+ } else { -+ dbg("%s: Unexpected CMD_COMPLETED. Maybe the " -+ "controller is broken.\n", __func__); -+ } - } - - retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -@@ -315,8 +355,18 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) - /* - * Wait for command completion. - */ -- if (!retval) -- retval = pcie_wait_cmd(ctrl); -+ if (!retval && !ctrl->no_cmd_complete) { -+ int poll = 0; -+ /* -+ * if hotplug interrupt is not enabled or command -+ * completed interrupt is not enabled, we need to poll -+ * command completed event. -+ */ -+ if (!(slot_ctrl & HP_INTR_ENABLE) || -+ !(slot_ctrl & CMD_CMPL_INTR_ENABLE)) -+ poll = 1; -+ retval = pcie_wait_cmd(ctrl, poll); -+ } - out: - mutex_unlock(&ctrl->ctrl_lock); - return retval; -@@ -704,13 +754,6 @@ static int hpc_power_off_slot(struct slot * slot) - } - dbg("%s: SLOTCTRL %x write cmd %x\n", - __func__, ctrl->cap_base + SLOTCTRL, slot_cmd); -- -- /* -- * After turning power off, we must wait for at least 1 second -- * before taking any action that relies on power having been -- * removed from the slot/adapter. -- */ -- msleep(1000); - out: - if (changed) - pcie_unmask_bad_dllp(ctrl); -@@ -722,6 +765,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) - { - struct controller *ctrl = (struct controller *)dev_id; - u16 detected, intr_loc; -+ struct slot *p_slot; - - /* - * In order to guarantee that all interrupt events are -@@ -756,21 +800,38 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) - wake_up_interruptible(&ctrl->queue); - } - -+ if (!(intr_loc & ~CMD_COMPLETED)) -+ return IRQ_HANDLED; -+ -+ /* -+ * Return without handling events if this handler routine is -+ * called before controller initialization is done. This may -+ * happen if hotplug event or another interrupt that shares -+ * the IRQ with pciehp arrives before slot initialization is -+ * done after interrupt handler is registered. -+ * -+ * FIXME - Need more structural fixes. We need to be ready to -+ * handle the event before installing interrupt handler. -+ */ -+ p_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset); -+ if (!p_slot || !p_slot->hpc_ops) -+ return IRQ_HANDLED; -+ - /* Check MRL Sensor Changed */ - if (intr_loc & MRL_SENS_CHANGED) -- pciehp_handle_switch_change(0, ctrl); -+ pciehp_handle_switch_change(p_slot); - - /* Check Attention Button Pressed */ - if (intr_loc & ATTN_BUTTN_PRESSED) -- pciehp_handle_attention_button(0, ctrl); -+ pciehp_handle_attention_button(p_slot); - - /* Check Presence Detect Changed */ - if (intr_loc & PRSN_DETECT_CHANGED) -- pciehp_handle_presence_change(0, ctrl); -+ pciehp_handle_presence_change(p_slot); - - /* Check Power Fault Detected */ - if (intr_loc & PWR_FAULT_DETECTED) -- pciehp_handle_power_fault(0, ctrl); -+ pciehp_handle_power_fault(p_slot); - - return IRQ_HANDLED; - } -@@ -1028,6 +1089,12 @@ static int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev) - static int pcie_init_hardware_part1(struct controller *ctrl, - struct pcie_device *dev) - { -+ /* Clear all remaining event bits in Slot Status register */ -+ if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { -+ err("%s: Cannot write to SLOTSTATUS register\n", __func__); -+ return -1; -+ } -+ - /* Mask Hot-plug Interrupt Enable */ - if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) { - err("%s: Cannot mask hotplug interrupt enable\n", __func__); -@@ -1040,16 +1107,6 @@ int pcie_init_hardware_part2(struct controller *ctrl, struct pcie_device *dev) - { - u16 cmd, mask; - -- /* -- * We need to clear all events before enabling hotplug interrupt -- * notification mechanism in order for hotplug controler to -- * generate interrupts. -- */ -- if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { -- err("%s: Cannot write to SLOTSTATUS register\n", __FUNCTION__); -- return -1; -- } -- - cmd = PRSN_DETECT_ENABLE; - if (ATTN_BUTTN(ctrl)) - cmd |= ATTN_BUTTN_ENABLE; -@@ -1116,6 +1173,7 @@ static inline void dbg_ctrl(struct controller *ctrl) - dbg(" Power Indicator : %3s\n", PWR_LED(ctrl) ? "yes" : "no"); - dbg(" Hot-Plug Surprise : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no"); - dbg(" EMI Present : %3s\n", EMI(ctrl) ? "yes" : "no"); -+ dbg(" Comamnd Completed : %3s\n", NO_CMD_CMPL(ctrl)? "no" : "yes"); - pciehp_readw(ctrl, SLOTSTATUS, ®16); - dbg("Slot Status : 0x%04x\n", reg16); - pciehp_readw(ctrl, SLOTSTATUS, ®16); -@@ -1147,6 +1205,15 @@ int pcie_init(struct controller *ctrl, struct pcie_device *dev) - mutex_init(&ctrl->ctrl_lock); - init_waitqueue_head(&ctrl->queue); - dbg_ctrl(ctrl); -+ /* -+ * Controller doesn't notify of command completion if the "No -+ * Command Completed Support" bit is set in Slot Capability -+ * register or the controller supports none of power -+ * controller, attention led, power led and EMI. -+ */ -+ if (NO_CMD_CMPL(ctrl) || -+ !(POWER_CTRL(ctrl) | ATTN_LED(ctrl) | PWR_LED(ctrl) | EMI(ctrl))) -+ ctrl->no_cmd_complete = 1; - - info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", - pdev->vendor, pdev->device, -diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c -index 1648076..9784865 100644 ---- a/drivers/pci/hotplug/shpchp_core.c -+++ b/drivers/pci/hotplug/shpchp_core.c -@@ -162,6 +162,10 @@ static int init_slots(struct controller *ctrl) - retval = pci_hp_register(slot->hotplug_slot); - if (retval) { - err("pci_hp_register failed with error %d\n", retval); -+ if (retval == -EEXIST) -+ err("Failed to register slot because of name " -+ "collision. Try \'shpchp_slot_with_bus\' " -+ "module option.\n"); - goto error_info; - } - -diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c -index 61fedb2..f824955 100644 ---- a/drivers/pci/pcie/aspm.c -+++ b/drivers/pci/pcie/aspm.c -@@ -506,6 +506,23 @@ static void free_link_state(struct pci_dev *pdev) - pdev->link_state = NULL; - } - -+static int pcie_aspm_sanity_check(struct pci_dev *pdev) -+{ -+ struct pci_dev *child_dev; -+ int child_pos; -+ -+ /* -+ * Some functions in a slot might not all be PCIE functions, very -+ * strange. Disable ASPM for the whole slot -+ */ -+ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) { -+ child_pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP); -+ if (!child_pos) -+ return -EINVAL; -+ } -+ return 0; -+} -+ - /* - * pcie_aspm_init_link_state: Initiate PCI express link state. - * It is called after the pcie and its children devices are scaned. -@@ -526,6 +543,9 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev) - if (list_empty(&pdev->subordinate->devices)) - goto out; - -+ if (pcie_aspm_sanity_check(pdev)) -+ goto out; -+ - mutex_lock(&aspm_lock); - - link_state = kzalloc(sizeof(*link_state), GFP_KERNEL); -diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c -index 8ba3f13..1a40256 100644 ---- a/drivers/s390/block/dasd.c -+++ b/drivers/s390/block/dasd.c -@@ -63,6 +63,7 @@ static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); - */ - static wait_queue_head_t dasd_init_waitq; - static wait_queue_head_t dasd_flush_wq; -+static wait_queue_head_t generic_waitq; - - /* - * Allocate memory for a new device structure. -@@ -1151,11 +1152,15 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, - struct list_head *l, *n; - struct dasd_ccw_req *cqr; - struct dasd_block *block; -+ void (*callback)(struct dasd_ccw_req *, void *data); -+ void *callback_data; - - list_for_each_safe(l, n, final_queue) { - cqr = list_entry(l, struct dasd_ccw_req, devlist); - list_del_init(&cqr->devlist); - block = cqr->block; -+ callback = cqr->callback; -+ callback_data = cqr->callback_data; - if (block) - spin_lock_bh(&block->queue_lock); - switch (cqr->status) { -@@ -1176,7 +1181,7 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, - BUG(); - } - if (cqr->callback != NULL) -- (cqr->callback)(cqr, cqr->callback_data); -+ (callback)(cqr, callback_data); - if (block) - spin_unlock_bh(&block->queue_lock); - } -@@ -1406,17 +1411,15 @@ static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) - */ - int dasd_sleep_on(struct dasd_ccw_req *cqr) - { -- wait_queue_head_t wait_q; - struct dasd_device *device; - int rc; - - device = cqr->startdev; - -- init_waitqueue_head (&wait_q); - cqr->callback = dasd_wakeup_cb; -- cqr->callback_data = (void *) &wait_q; -+ cqr->callback_data = (void *) &generic_waitq; - dasd_add_request_tail(cqr); -- wait_event(wait_q, _wait_for_wakeup(cqr)); -+ wait_event(generic_waitq, _wait_for_wakeup(cqr)); - - /* Request status is either done or failed. */ - rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; -@@ -1429,20 +1432,18 @@ int dasd_sleep_on(struct dasd_ccw_req *cqr) - */ - int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) - { -- wait_queue_head_t wait_q; - struct dasd_device *device; - int rc; - - device = cqr->startdev; -- init_waitqueue_head (&wait_q); - cqr->callback = dasd_wakeup_cb; -- cqr->callback_data = (void *) &wait_q; -+ cqr->callback_data = (void *) &generic_waitq; - dasd_add_request_tail(cqr); -- rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); -+ rc = wait_event_interruptible(generic_waitq, _wait_for_wakeup(cqr)); - if (rc == -ERESTARTSYS) { - dasd_cancel_req(cqr); - /* wait (non-interruptible) for final status */ -- wait_event(wait_q, _wait_for_wakeup(cqr)); -+ wait_event(generic_waitq, _wait_for_wakeup(cqr)); - } - rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; - return rc; -@@ -1466,7 +1467,6 @@ static inline int _dasd_term_running_cqr(struct dasd_device *device) - - int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) - { -- wait_queue_head_t wait_q; - struct dasd_device *device; - int rc; - -@@ -1478,9 +1478,8 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) - return rc; - } - -- init_waitqueue_head (&wait_q); - cqr->callback = dasd_wakeup_cb; -- cqr->callback_data = (void *) &wait_q; -+ cqr->callback_data = (void *) &generic_waitq; - cqr->status = DASD_CQR_QUEUED; - list_add(&cqr->devlist, &device->ccw_queue); - -@@ -1489,7 +1488,7 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) - - spin_unlock_irq(get_ccwdev_lock(device->cdev)); - -- wait_event(wait_q, _wait_for_wakeup(cqr)); -+ wait_event(generic_waitq, _wait_for_wakeup(cqr)); - - /* Request status is either done or failed. */ - rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; -@@ -2430,6 +2429,7 @@ static int __init dasd_init(void) - - init_waitqueue_head(&dasd_init_waitq); - init_waitqueue_head(&dasd_flush_wq); -+ init_waitqueue_head(&generic_waitq); - - /* register 'common' DASD debug area, used for all DBF_XXX calls */ - dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); -diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c -index 0d98f1f..848ef7e 100644 ---- a/drivers/s390/char/raw3270.c -+++ b/drivers/s390/char/raw3270.c -@@ -549,7 +549,6 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, - struct raw3270_request *rq) - { - unsigned long flags; -- wait_queue_head_t wq; - int rc; - - #ifdef CONFIG_TN3270_CONSOLE -@@ -566,20 +565,20 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, - return rq->rc; - } - #endif -- init_waitqueue_head(&wq); - rq->callback = raw3270_wake_init; -- rq->callback_data = &wq; -+ rq->callback_data = &raw3270_wait_queue; - spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); - rc = __raw3270_start(rp, view, rq); - spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); - if (rc) - return rc; - /* Now wait for the completion. */ -- rc = wait_event_interruptible(wq, raw3270_request_final(rq)); -+ rc = wait_event_interruptible(raw3270_wait_queue, -+ raw3270_request_final(rq)); - if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ - raw3270_halt_io(view->dev, rq); - /* No wait for the halt to complete. */ -- wait_event(wq, raw3270_request_final(rq)); -+ wait_event(raw3270_wait_queue, raw3270_request_final(rq)); - return -ERESTARTSYS; - } - return rq->rc; -diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c -index 9e784d5..ad05a87 100644 ---- a/drivers/s390/char/sclp_config.c -+++ b/drivers/s390/char/sclp_config.c -@@ -40,7 +40,7 @@ static void sclp_cpu_capability_notify(struct work_struct *work) - put_online_cpus(); - } - --static void sclp_cpu_change_notify(struct work_struct *work) -+static void __ref sclp_cpu_change_notify(struct work_struct *work) - { - smp_rescan_cpus(); - } -diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c -index 35707c0..62576af 100644 ---- a/drivers/s390/char/sclp_vt220.c -+++ b/drivers/s390/char/sclp_vt220.c -@@ -71,9 +71,6 @@ static struct list_head sclp_vt220_outqueue; - /* Number of requests in outqueue */ - static int sclp_vt220_outqueue_count; - --/* Wait queue used to delay write requests while we've run out of buffers */ --static wait_queue_head_t sclp_vt220_waitq; -- - /* Timer used for delaying write requests to merge subsequent messages into - * a single buffer */ - static struct timer_list sclp_vt220_timer; -@@ -133,7 +130,6 @@ sclp_vt220_process_queue(struct sclp_vt220_request *request) - } while (request && __sclp_vt220_emit(request)); - if (request == NULL && sclp_vt220_flush_later) - sclp_vt220_emit_current(); -- wake_up(&sclp_vt220_waitq); - /* Check if the tty needs a wake up call */ - if (sclp_vt220_tty != NULL) { - tty_wakeup(sclp_vt220_tty); -@@ -383,7 +379,7 @@ sclp_vt220_timeout(unsigned long data) - */ - static int - __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, -- int convertlf, int may_schedule) -+ int convertlf, int may_fail) - { - unsigned long flags; - void *page; -@@ -395,15 +391,14 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, - overall_written = 0; - spin_lock_irqsave(&sclp_vt220_lock, flags); - do { -- /* Create a sclp output buffer if none exists yet */ -+ /* Create an sclp output buffer if none exists yet */ - if (sclp_vt220_current_request == NULL) { - while (list_empty(&sclp_vt220_empty)) { - spin_unlock_irqrestore(&sclp_vt220_lock, flags); -- if (in_interrupt() || !may_schedule) -- sclp_sync_wait(); -+ if (may_fail) -+ goto out; - else -- wait_event(sclp_vt220_waitq, -- !list_empty(&sclp_vt220_empty)); -+ sclp_sync_wait(); - spin_lock_irqsave(&sclp_vt220_lock, flags); - } - page = (void *) sclp_vt220_empty.next; -@@ -437,6 +432,7 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, - add_timer(&sclp_vt220_timer); - } - spin_unlock_irqrestore(&sclp_vt220_lock, flags); -+out: - return overall_written; - } - -@@ -520,19 +516,11 @@ sclp_vt220_close(struct tty_struct *tty, struct file *filp) - * character to the tty device. If the kernel uses this routine, - * it must call the flush_chars() routine (if defined) when it is - * done stuffing characters into the driver. -- * -- * NOTE: include/linux/tty_driver.h specifies that a character should be -- * ignored if there is no room in the queue. This driver implements a different -- * semantic in that it will block when there is no more room left. -- * -- * FIXME: putchar can currently be called from BH and other non blocking -- * handlers so this semantic isn't a good idea. - */ - static int - sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) - { -- __sclp_vt220_write(&ch, 1, 0, 0, 1); -- return 1; -+ return __sclp_vt220_write(&ch, 1, 0, 0, 1); - } - - /* -@@ -653,7 +641,6 @@ static int __init __sclp_vt220_init(void) - spin_lock_init(&sclp_vt220_lock); - INIT_LIST_HEAD(&sclp_vt220_empty); - INIT_LIST_HEAD(&sclp_vt220_outqueue); -- init_waitqueue_head(&sclp_vt220_waitq); - init_timer(&sclp_vt220_timer); - sclp_vt220_current_request = NULL; - sclp_vt220_buffered_chars = 0; -diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h -index dddf8d6..d0d565a 100644 ---- a/drivers/s390/char/tape.h -+++ b/drivers/s390/char/tape.h -@@ -231,6 +231,9 @@ struct tape_device { - /* Request queue. */ - struct list_head req_queue; - -+ /* Request wait queue. */ -+ wait_queue_head_t wait_queue; -+ - /* Each tape device has (currently) two minor numbers. */ - int first_minor; - -diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c -index ddc4a11..95da72b 100644 ---- a/drivers/s390/char/tape_block.c -+++ b/drivers/s390/char/tape_block.c -@@ -179,11 +179,11 @@ tapeblock_requeue(struct work_struct *work) { - tapeblock_end_request(req, -EIO); - continue; - } -+ blkdev_dequeue_request(req); -+ nr_queued++; - spin_unlock_irq(&device->blk_data.request_queue_lock); - rc = tapeblock_start_request(device, req); - spin_lock_irq(&device->blk_data.request_queue_lock); -- blkdev_dequeue_request(req); -- nr_queued++; - } - spin_unlock_irq(&device->blk_data.request_queue_lock); - atomic_set(&device->blk_data.requeue_scheduled, 0); -diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c -index 76e44eb..c20e3c5 100644 ---- a/drivers/s390/char/tape_core.c -+++ b/drivers/s390/char/tape_core.c -@@ -449,6 +449,7 @@ tape_alloc_device(void) - INIT_LIST_HEAD(&device->req_queue); - INIT_LIST_HEAD(&device->node); - init_waitqueue_head(&device->state_change_wq); -+ init_waitqueue_head(&device->wait_queue); - device->tape_state = TS_INIT; - device->medium_state = MS_UNKNOWN; - *device->modeset_byte = 0; -@@ -954,21 +955,19 @@ __tape_wake_up(struct tape_request *request, void *data) - int - tape_do_io(struct tape_device *device, struct tape_request *request) - { -- wait_queue_head_t wq; - int rc; - -- init_waitqueue_head(&wq); - spin_lock_irq(get_ccwdev_lock(device->cdev)); - /* Setup callback */ - request->callback = __tape_wake_up; -- request->callback_data = &wq; -+ request->callback_data = &device->wait_queue; - /* Add request to request queue and try to start it. */ - rc = __tape_start_request(device, request); - spin_unlock_irq(get_ccwdev_lock(device->cdev)); - if (rc) - return rc; - /* Request added to the queue. Wait for its completion. */ -- wait_event(wq, (request->callback == NULL)); -+ wait_event(device->wait_queue, (request->callback == NULL)); - /* Get rc from request */ - return request->rc; - } -@@ -989,20 +988,19 @@ int - tape_do_io_interruptible(struct tape_device *device, - struct tape_request *request) - { -- wait_queue_head_t wq; - int rc; - -- init_waitqueue_head(&wq); - spin_lock_irq(get_ccwdev_lock(device->cdev)); - /* Setup callback */ - request->callback = __tape_wake_up_interruptible; -- request->callback_data = &wq; -+ request->callback_data = &device->wait_queue; - rc = __tape_start_request(device, request); - spin_unlock_irq(get_ccwdev_lock(device->cdev)); - if (rc) - return rc; - /* Request added to the queue. Wait for its completion. */ -- rc = wait_event_interruptible(wq, (request->callback == NULL)); -+ rc = wait_event_interruptible(device->wait_queue, -+ (request->callback == NULL)); - if (rc != -ERESTARTSYS) - /* Request finished normally. */ - return request->rc; -@@ -1015,7 +1013,7 @@ tape_do_io_interruptible(struct tape_device *device, - /* Wait for the interrupt that acknowledges the halt. */ - do { - rc = wait_event_interruptible( -- wq, -+ device->wait_queue, - (request->callback == NULL) - ); - } while (rc == -ERESTARTSYS); -diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c -index c1cb94e..7e912f2 100644 ---- a/drivers/usb/core/generic.c -+++ b/drivers/usb/core/generic.c -@@ -155,9 +155,6 @@ static int generic_probe(struct usb_device *udev) - { - int err, c; - -- /* put device-specific files into sysfs */ -- usb_create_sysfs_dev_files(udev); -- - /* Choose and set the configuration. This registers the interfaces - * with the driver core and lets interface drivers bind to them. - */ -@@ -189,8 +186,6 @@ static void generic_disconnect(struct usb_device *udev) - * unconfigure the device */ - if (udev->actconfig) - usb_set_configuration(udev, -1); -- -- usb_remove_sysfs_dev_files(udev); - } - - #ifdef CONFIG_PM -diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h -index 1e4b81e..a0bf5df 100644 ---- a/drivers/usb/core/hcd.h -+++ b/drivers/usb/core/hcd.h -@@ -213,6 +213,8 @@ struct hc_driver { - - /* force handover of high-speed port to full-speed companion */ - void (*relinquish_port)(struct usb_hcd *, int); -+ /* has a port been handed over to a companion? */ -+ int (*port_handed_over)(struct usb_hcd *, int); - }; - - extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index eb57fcc..8eb4da3 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -1326,6 +1326,12 @@ void usb_disconnect(struct usb_device **pdev) - - usb_unlock_device(udev); - -+ /* Remove the device-specific files from sysfs. This must be -+ * done with udev unlocked, because some of the attribute -+ * routines try to acquire the device lock. -+ */ -+ usb_remove_sysfs_dev_files(udev); -+ - /* Unregister the device. The device driver is responsible - * for removing the device files from usbfs and sysfs and for - * de-configuring the device. -@@ -1541,6 +1547,9 @@ int usb_new_device(struct usb_device *udev) - goto fail; - } - -+ /* put device-specific files into sysfs */ -+ usb_create_sysfs_dev_files(udev); -+ - /* Tell the world! */ - announce_device(udev); - return err; -@@ -2744,7 +2753,11 @@ loop: - if ((status == -ENOTCONN) || (status == -ENOTSUPP)) - break; - } -- dev_err(hub_dev, "unable to enumerate USB device on port %d\n", port1); -+ if (hub->hdev->parent || -+ !hcd->driver->port_handed_over || -+ !(hcd->driver->port_handed_over)(hcd, port1)) -+ dev_err(hub_dev, "unable to enumerate USB device on port %d\n", -+ port1); - - done: - hub_port_disable(hub, port1, 1); -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 2e20193..3da1ab4 100644 ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -47,6 +47,10 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Edirol SD-20 */ - { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Avision AV600U */ -+ { USB_DEVICE(0x0638, 0x0a13), .driver_info = -+ USB_QUIRK_STRING_FETCH_255 }, -+ - /* M-Systems Flash Disk Pioneers */ - { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, - -diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c -index c783cb1..5e1f5d5 100644 ---- a/drivers/usb/core/sysfs.c -+++ b/drivers/usb/core/sysfs.c -@@ -588,35 +588,33 @@ read_descriptors(struct kobject *kobj, struct bin_attribute *attr, - container_of(kobj, struct device, kobj)); - size_t nleft = count; - size_t srclen, n; -+ int cfgno; -+ void *src; - -- usb_lock_device(udev); -- -- /* The binary attribute begins with the device descriptor */ -- srclen = sizeof(struct usb_device_descriptor); -- if (off < srclen) { -- n = min_t(size_t, nleft, srclen - off); -- memcpy(buf, off + (char *) &udev->descriptor, n); -- nleft -= n; -- buf += n; -- off = 0; -- } else { -- off -= srclen; -- } -- -- /* Then follows the raw descriptor entry for the current -- * configuration (config plus subsidiary descriptors). -+ /* The binary attribute begins with the device descriptor. -+ * Following that are the raw descriptor entries for all the -+ * configurations (config plus subsidiary descriptors). - */ -- if (udev->actconfig) { -- int cfgno = udev->actconfig - udev->config; -- -- srclen = __le16_to_cpu(udev->actconfig->desc.wTotalLength); -+ for (cfgno = -1; cfgno < udev->descriptor.bNumConfigurations && -+ nleft > 0; ++cfgno) { -+ if (cfgno < 0) { -+ src = &udev->descriptor; -+ srclen = sizeof(struct usb_device_descriptor); -+ } else { -+ src = udev->rawdescriptors[cfgno]; -+ srclen = __le16_to_cpu(udev->config[cfgno].desc. -+ wTotalLength); -+ } - if (off < srclen) { -- n = min_t(size_t, nleft, srclen - off); -- memcpy(buf, off + udev->rawdescriptors[cfgno], n); -+ n = min(nleft, srclen - (size_t) off); -+ memcpy(buf, src + off, n); - nleft -= n; -+ buf += n; -+ off = 0; -+ } else { -+ off -= srclen; - } - } -- usb_unlock_device(udev); - return count - nleft; - } - -diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c -index 651b827..1868754 100644 ---- a/drivers/usb/gadget/fsl_usb2_udc.c -+++ b/drivers/usb/gadget/fsl_usb2_udc.c -@@ -1627,7 +1627,9 @@ static int reset_queues(struct fsl_udc *udc) - udc_reset_ep_queue(udc, pipe); - - /* report disconnect; the driver is already quiesced */ -+ spin_unlock(&udc->lock); - udc->driver->disconnect(&udc->gadget); -+ spin_lock(&udc->lock); - - return 0; - } -diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c -index 8b5f991..08a4335 100644 ---- a/drivers/usb/host/ehci-au1xxx.c -+++ b/drivers/usb/host/ehci-au1xxx.c -@@ -223,6 +223,7 @@ static const struct hc_driver ehci_au1xxx_hc_driver = { - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - /*-------------------------------------------------------------------------*/ -diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c -index 6d9bed6..7370d61 100644 ---- a/drivers/usb/host/ehci-fsl.c -+++ b/drivers/usb/host/ehci-fsl.c -@@ -269,7 +269,7 @@ static int ehci_fsl_setup(struct usb_hcd *hcd) - if (retval) - return retval; - -- ehci->is_tdi_rh_tt = 1; -+ hcd->has_tt = 1; - - ehci->sbrn = 0x20; - -@@ -295,10 +295,6 @@ static const struct hc_driver ehci_fsl_hc_driver = { - */ - .reset = ehci_fsl_setup, - .start = ehci_run, --#ifdef CONFIG_PM -- .suspend = ehci_bus_suspend, -- .resume = ehci_bus_resume, --#endif - .stop = ehci_stop, - .shutdown = ehci_shutdown, - -@@ -322,6 +318,7 @@ static const struct hc_driver ehci_fsl_hc_driver = { - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - static int ehci_fsl_drv_probe(struct platform_device *pdev) -diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c -index 382587c..740835b 100644 ---- a/drivers/usb/host/ehci-hub.c -+++ b/drivers/usb/host/ehci-hub.c -@@ -609,7 +609,7 @@ static int ehci_hub_control ( - } - break; - case USB_PORT_FEAT_C_SUSPEND: -- /* we auto-clear this feature */ -+ clear_bit(wIndex, &ehci->port_c_suspend); - break; - case USB_PORT_FEAT_POWER: - if (HCS_PPC (ehci->hcs_params)) -@@ -688,7 +688,7 @@ static int ehci_hub_control ( - /* resume completed? */ - else if (time_after_eq(jiffies, - ehci->reset_done[wIndex])) { -- status |= 1 << USB_PORT_FEAT_C_SUSPEND; -+ set_bit(wIndex, &ehci->port_c_suspend); - ehci->reset_done[wIndex] = 0; - - /* stop resume signaling */ -@@ -765,6 +765,8 @@ static int ehci_hub_control ( - status |= 1 << USB_PORT_FEAT_RESET; - if (temp & PORT_POWER) - status |= 1 << USB_PORT_FEAT_POWER; -+ if (test_bit(wIndex, &ehci->port_c_suspend)) -+ status |= 1 << USB_PORT_FEAT_C_SUSPEND; - - #ifndef VERBOSE_DEBUG - if (status & ~0xffff) /* only if wPortChange is interesting */ -@@ -875,3 +877,13 @@ static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) - set_owner(ehci, --portnum, PORT_OWNER); - } - -+static int ehci_port_handed_over(struct usb_hcd *hcd, int portnum) -+{ -+ struct ehci_hcd *ehci = hcd_to_ehci(hcd); -+ u32 __iomem *reg; -+ -+ if (ehci_is_TDI(ehci)) -+ return 0; -+ reg = &ehci->regs->port_status[portnum - 1]; -+ return ehci_readl(ehci, reg) & PORT_OWNER; -+} -diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c -index 601c879..9d042f2 100644 ---- a/drivers/usb/host/ehci-ixp4xx.c -+++ b/drivers/usb/host/ehci-ixp4xx.c -@@ -26,7 +26,7 @@ static int ixp4xx_ehci_init(struct usb_hcd *hcd) - + HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); - ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); - -- ehci->is_tdi_rh_tt = 1; -+ hcd->has_tt = 1; - ehci_reset(ehci); - - retval = ehci_init(hcd); -@@ -58,6 +58,8 @@ static const struct hc_driver ixp4xx_ehci_hc_driver = { - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - #endif -+ .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - static int ixp4xx_ehci_probe(struct platform_device *pdev) -diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c -index 3adfda8..ab625f0 100644 ---- a/drivers/usb/host/ehci-orion.c -+++ b/drivers/usb/host/ehci-orion.c -@@ -139,10 +139,6 @@ static const struct hc_driver ehci_orion_hc_driver = { - */ - .reset = ehci_orion_setup, - .start = ehci_run, --#ifdef CONFIG_PM -- .suspend = ehci_bus_suspend, -- .resume = ehci_bus_resume, --#endif - .stop = ehci_stop, - .shutdown = ehci_shutdown, - -@@ -165,6 +161,8 @@ static const struct hc_driver ehci_orion_hc_driver = { - .hub_control = ehci_hub_control, - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, -+ .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - static void __init -@@ -250,7 +248,7 @@ static int __init ehci_orion_drv_probe(struct platform_device *pdev) - ehci->regs = hcd->regs + 0x100 + - HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); - ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); -- ehci->is_tdi_rh_tt = 1; -+ hcd->has_tt = 1; - ehci->sbrn = 0x20; - - /* -diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c -index 5bb7f6b..c46a58f 100644 ---- a/drivers/usb/host/ehci-pci.c -+++ b/drivers/usb/host/ehci-pci.c -@@ -129,7 +129,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd) - switch (pdev->vendor) { - case PCI_VENDOR_ID_TDI: - if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { -- ehci->is_tdi_rh_tt = 1; - hcd->has_tt = 1; - tdi_reset(ehci); - } -@@ -379,7 +378,8 @@ static const struct hc_driver ehci_pci_hc_driver = { - .hub_control = ehci_hub_control, - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, -- .relinquish_port = ehci_relinquish_port, -+ .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - /*-------------------------------------------------------------------------*/ -diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c -index ee305b1..b018dee 100644 ---- a/drivers/usb/host/ehci-ppc-of.c -+++ b/drivers/usb/host/ehci-ppc-of.c -@@ -76,6 +76,8 @@ static const struct hc_driver ehci_ppc_of_hc_driver = { - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - #endif -+ .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - -diff --git a/drivers/usb/host/ehci-ppc-soc.c b/drivers/usb/host/ehci-ppc-soc.c -index 6c76036..529590e 100644 ---- a/drivers/usb/host/ehci-ppc-soc.c -+++ b/drivers/usb/host/ehci-ppc-soc.c -@@ -163,6 +163,7 @@ static const struct hc_driver ehci_ppc_soc_hc_driver = { - .bus_suspend = ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) -diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c -index 6978222..37e6abe 100644 ---- a/drivers/usb/host/ehci-ps3.c -+++ b/drivers/usb/host/ehci-ps3.c -@@ -73,6 +73,7 @@ static const struct hc_driver ps3_ehci_hc_driver = { - .bus_resume = ehci_bus_resume, - #endif - .relinquish_port = ehci_relinquish_port, -+ .port_handed_over = ehci_port_handed_over, - }; - - static int ps3_ehci_probe(struct ps3_system_bus_device *dev) -diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c -index be575e4..b7853c8 100644 ---- a/drivers/usb/host/ehci-sched.c -+++ b/drivers/usb/host/ehci-sched.c -@@ -1349,18 +1349,27 @@ iso_stream_schedule ( - /* when's the last uframe this urb could start? */ - max = now + mod; - -- /* typical case: reuse current schedule. stream is still active, -- * and no gaps from host falling behind (irq delays etc) -+ /* Typical case: reuse current schedule, stream is still active. -+ * Hopefully there are no gaps from the host falling behind -+ * (irq delays etc), but if there are we'll take the next -+ * slot in the schedule, implicitly assuming URB_ISO_ASAP. - */ - if (likely (!list_empty (&stream->td_list))) { - start = stream->next_uframe; - if (start < now) - start += mod; -- if (likely ((start + sched->span) < max)) -- goto ready; -- /* else fell behind; someday, try to reschedule */ -- status = -EL2NSYNC; -- goto fail; -+ -+ /* Fell behind (by up to twice the slop amount)? */ -+ if (start >= max - 2 * 8 * SCHEDULE_SLOP) -+ start += stream->interval * DIV_ROUND_UP( -+ max - start, stream->interval) - mod; -+ -+ /* Tried to schedule too far into the future? */ -+ if (unlikely((start + sched->span) >= max)) { -+ status = -EFBIG; -+ goto fail; -+ } -+ goto ready; - } - - /* need to schedule; when's the next (u)frame we could start? -@@ -1613,6 +1622,9 @@ itd_complete ( - } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { - desc->status = 0; - desc->actual_length = EHCI_ITD_LENGTH (t); -+ } else { -+ /* URB was too late */ -+ desc->status = -EXDEV; - } - } - -@@ -2095,7 +2107,7 @@ done: - static void - scan_periodic (struct ehci_hcd *ehci) - { -- unsigned frame, clock, now_uframe, mod; -+ unsigned now_uframe, frame, clock, clock_frame, mod; - unsigned modified; - - mod = ehci->periodic_size << 3; -@@ -2111,6 +2123,7 @@ scan_periodic (struct ehci_hcd *ehci) - else - clock = now_uframe + mod - 1; - clock %= mod; -+ clock_frame = clock >> 3; - - for (;;) { - union ehci_shadow q, *q_p; -@@ -2157,22 +2170,26 @@ restart: - case Q_TYPE_ITD: - /* If this ITD is still active, leave it for - * later processing ... check the next entry. -+ * No need to check for activity unless the -+ * frame is current. - */ -- rmb (); -- for (uf = 0; uf < 8 && live; uf++) { -- if (0 == (q.itd->hw_transaction [uf] -- & ITD_ACTIVE(ehci))) -- continue; -- incomplete = true; -- q_p = &q.itd->itd_next; -- hw_p = &q.itd->hw_next; -- type = Q_NEXT_TYPE(ehci, -+ if (frame == clock_frame && live) { -+ rmb(); -+ for (uf = 0; uf < 8; uf++) { -+ if (q.itd->hw_transaction[uf] & -+ ITD_ACTIVE(ehci)) -+ break; -+ } -+ if (uf < 8) { -+ incomplete = true; -+ q_p = &q.itd->itd_next; -+ hw_p = &q.itd->hw_next; -+ type = Q_NEXT_TYPE(ehci, - q.itd->hw_next); -- q = *q_p; -- break; -+ q = *q_p; -+ break; -+ } - } -- if (uf < 8 && live) -- break; - - /* Take finished ITDs out of the schedule - * and process them: recycle, maybe report -@@ -2189,9 +2206,12 @@ restart: - case Q_TYPE_SITD: - /* If this SITD is still active, leave it for - * later processing ... check the next entry. -+ * No need to check for activity unless the -+ * frame is current. - */ -- if ((q.sitd->hw_results & SITD_ACTIVE(ehci)) -- && live) { -+ if (frame == clock_frame && live && -+ (q.sitd->hw_results & -+ SITD_ACTIVE(ehci))) { - incomplete = true; - q_p = &q.sitd->sitd_next; - hw_p = &q.sitd->hw_next; -@@ -2260,6 +2280,7 @@ restart: - - /* rescan the rest of this frame, then ... */ - clock = now; -+ clock_frame = clock >> 3; - } else { - now_uframe++; - now_uframe %= mod; -diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h -index bf92d20..35a0309 100644 ---- a/drivers/usb/host/ehci.h -+++ b/drivers/usb/host/ehci.h -@@ -97,6 +97,8 @@ struct ehci_hcd { /* one per controller */ - dedicated to the companion controller */ - unsigned long owned_ports; /* which ports are - owned by the companion during a bus suspend */ -+ unsigned long port_c_suspend; /* which ports have -+ the change-suspend feature turned on */ - - /* per-HC memory pools (could be per-bus, but ...) */ - struct dma_pool *qh_pool; /* qh per active urb */ -@@ -112,7 +114,6 @@ struct ehci_hcd { /* one per controller */ - u32 command; - - /* SILICON QUIRKS */ -- unsigned is_tdi_rh_tt:1; /* TDI roothub with TT */ - unsigned no_selective_suspend:1; - unsigned has_fsl_port_bug:1; /* FreeScale */ - unsigned big_endian_mmio:1; -@@ -678,7 +679,7 @@ struct ehci_fstn { - * needed (mostly in root hub code). - */ - --#define ehci_is_TDI(e) ((e)->is_tdi_rh_tt) -+#define ehci_is_TDI(e) (ehci_to_hcd(e)->has_tt) - - /* Returns the speed of a device attached to a port on the root hub. */ - static inline unsigned int -diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig -index a53db1d..eb6c069 100644 ---- a/drivers/usb/misc/Kconfig -+++ b/drivers/usb/misc/Kconfig -@@ -269,3 +269,14 @@ config USB_TEST - See for more information, - including sample test device firmware and "how to use it". - -+config USB_ISIGHTFW -+ tristate "iSight firmware loading support" -+ depends on USB -+ help -+ This driver loads firmware for USB Apple iSight cameras, allowing -+ them to be driven by the USB video class driver available at -+ http://linux-uvc.berlios.de -+ -+ The firmware for this driver must be extracted from the MacOS -+ driver beforehand. Tools for doing so are available at -+ http://bersace03.free.fr -diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile -index b68e6b7..aba091c 100644 ---- a/drivers/usb/misc/Makefile -+++ b/drivers/usb/misc/Makefile -@@ -14,6 +14,7 @@ obj-$(CONFIG_USB_EMI62) += emi62.o - obj-$(CONFIG_USB_FTDI_ELAN) += ftdi-elan.o - obj-$(CONFIG_USB_IDMOUSE) += idmouse.o - obj-$(CONFIG_USB_IOWARRIOR) += iowarrior.o -+obj-$(CONFIG_USB_ISIGHTFW) += isight_firmware.o - obj-$(CONFIG_USB_LCD) += usblcd.o - obj-$(CONFIG_USB_LD) += ldusb.o - obj-$(CONFIG_USB_LED) += usbled.o -diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c -new file mode 100644 -index 0000000..390e048 ---- /dev/null -+++ b/drivers/usb/misc/isight_firmware.c -@@ -0,0 +1,131 @@ -+/* -+ * Driver for loading USB isight firmware -+ * -+ * Copyright (C) 2008 Matthew Garrett -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the Free -+ * Software Foundation, version 2. -+ * -+ * The USB isight cameras in recent Apples are roughly compatible with the USB -+ * video class specification, and can be driven by uvcvideo. However, they -+ * need firmware to be loaded beforehand. After firmware loading, the device -+ * detaches from the USB bus and reattaches with a new device ID. It can then -+ * be claimed by the uvc driver. -+ * -+ * The firmware is non-free and must be extracted by the user. Tools to do this -+ * are available at http://bersace03.free.fr/ift/ -+ * -+ * The isight firmware loading was reverse engineered by Johannes Berg -+ * , and this driver is based on code by Ronald -+ * Bultje -+ */ -+ -+#include -+#include -+#include -+#include -+ -+static struct usb_device_id id_table[] = { -+ {USB_DEVICE(0x05ac, 0x8300)}, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(usb, id_table); -+ -+static int isight_firmware_load(struct usb_interface *intf, -+ const struct usb_device_id *id) -+{ -+ struct usb_device *dev = interface_to_usbdev(intf); -+ int llen, len, req, ret = 0; -+ const struct firmware *firmware; -+ unsigned char *buf; -+ unsigned char data[4]; -+ char *ptr; -+ -+ if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) { -+ printk(KERN_ERR "Unable to load isight firmware\n"); -+ return -ENODEV; -+ } -+ -+ ptr = firmware->data; -+ -+ if (usb_control_msg -+ (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\1", 1, -+ 300) != 1) { -+ printk(KERN_ERR -+ "Failed to initialise isight firmware loader\n"); -+ ret = -ENODEV; -+ goto out; -+ } -+ -+ while (1) { -+ memcpy(data, ptr, 4); -+ len = (data[0] << 8 | data[1]); -+ req = (data[2] << 8 | data[3]); -+ ptr += 4; -+ -+ if (len == 0x8001) -+ break; /* success */ -+ else if (len == 0) -+ continue; -+ -+ for (; len > 0; req += 50) { -+ llen = len > 50 ? 50 : len; -+ len -= llen; -+ -+ buf = kmalloc(llen, GFP_KERNEL); -+ memcpy(buf, ptr, llen); -+ -+ ptr += llen; -+ -+ if (usb_control_msg -+ (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, req, 0, -+ buf, llen, 300) != llen) { -+ printk(KERN_ERR -+ "Failed to load isight firmware\n"); -+ kfree(buf); -+ ret = -ENODEV; -+ goto out; -+ } -+ -+ kfree(buf); -+ } -+ } -+ if (usb_control_msg -+ (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\0", 1, -+ 300) != 1) { -+ printk(KERN_ERR "isight firmware loading completion failed\n"); -+ ret = -ENODEV; -+ } -+out: -+ release_firmware(firmware); -+ return ret; -+} -+ -+static void isight_firmware_disconnect(struct usb_interface *intf) -+{ -+} -+ -+static struct usb_driver isight_firmware_driver = { -+ .name = "isight_firmware", -+ .probe = isight_firmware_load, -+ .disconnect = isight_firmware_disconnect, -+ .id_table = id_table, -+}; -+ -+static int __init isight_firmware_init(void) -+{ -+ return usb_register(&isight_firmware_driver); -+} -+ -+static void __exit isight_firmware_exit(void) -+{ -+ usb_deregister(&isight_firmware_driver); -+} -+ -+module_init(isight_firmware_init); -+module_exit(isight_firmware_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Matthew Garrett "); -diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c -index 3cee6fe..5234e7a 100644 ---- a/drivers/usb/serial/ftdi_sio.c -+++ b/drivers/usb/serial/ftdi_sio.c -@@ -174,8 +174,270 @@ static struct usb_device_id id_table_combined [] = { - { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) }, - { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, - { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, -- { USB_DEVICE(MTXORB_VK_VID, MTXORB_VK_PID), -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0100_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0101_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0102_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0103_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0104_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0105_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0106_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0107_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0108_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0109_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0110_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0111_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0112_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0113_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0114_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0115_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0116_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0117_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0118_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0119_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0120_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0121_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0122_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0123_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0124_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0125_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0126_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0127_PID), - .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0128_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0129_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012C_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0130_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0131_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0132_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0133_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0134_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0135_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0136_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0137_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0138_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0139_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0140_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0141_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0142_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0143_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0144_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0145_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0146_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0147_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0148_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0149_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0150_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0151_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0152_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0153_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0154_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0155_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0156_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0157_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0158_PID), -+ .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0159_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0160_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0161_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0162_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0163_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0164_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0165_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0166_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0167_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0168_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0169_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0170_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0171_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0172_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0173_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0174_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0175_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0176_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0177_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0178_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0179_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0180_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0181_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0182_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0183_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0184_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0185_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0186_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0187_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0188_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0189_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0190_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0191_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0192_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0193_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0194_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0195_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0196_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0197_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0198_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0199_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019A_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019B_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019C_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019D_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019E_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019F_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AD_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AF_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BD_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BF_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CD_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CF_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DD_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DF_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01ED_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EF_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F0_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F1_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F2_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F3_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F4_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F5_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F6_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F7_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F8_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F9_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FA_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FB_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FC_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FD_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FE_PID) }, -+ { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FF_PID) }, - { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, - { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, - { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, -diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h -index a72f2c8..06e0eca 100644 ---- a/drivers/usb/serial/ftdi_sio.h -+++ b/drivers/usb/serial/ftdi_sio.h -@@ -114,11 +114,268 @@ - #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ - - /* -- * The following are the values for the Matrix Orbital VK204-25-USB -- * display, which use the FT232RL. -- */ --#define MTXORB_VK_VID 0x1b3d --#define MTXORB_VK_PID 0x0158 -+ * The following are the values for the Matrix Orbital FTDI Range -+ * Anything in this range will use an FT232RL. -+ */ -+#define MTXORB_VID 0x1B3D -+#define MTXORB_FTDI_RANGE_0100_PID 0x0100 -+#define MTXORB_FTDI_RANGE_0101_PID 0x0101 -+#define MTXORB_FTDI_RANGE_0102_PID 0x0102 -+#define MTXORB_FTDI_RANGE_0103_PID 0x0103 -+#define MTXORB_FTDI_RANGE_0104_PID 0x0104 -+#define MTXORB_FTDI_RANGE_0105_PID 0x0105 -+#define MTXORB_FTDI_RANGE_0106_PID 0x0106 -+#define MTXORB_FTDI_RANGE_0107_PID 0x0107 -+#define MTXORB_FTDI_RANGE_0108_PID 0x0108 -+#define MTXORB_FTDI_RANGE_0109_PID 0x0109 -+#define MTXORB_FTDI_RANGE_010A_PID 0x010A -+#define MTXORB_FTDI_RANGE_010B_PID 0x010B -+#define MTXORB_FTDI_RANGE_010C_PID 0x010C -+#define MTXORB_FTDI_RANGE_010D_PID 0x010D -+#define MTXORB_FTDI_RANGE_010E_PID 0x010E -+#define MTXORB_FTDI_RANGE_010F_PID 0x010F -+#define MTXORB_FTDI_RANGE_0110_PID 0x0110 -+#define MTXORB_FTDI_RANGE_0111_PID 0x0111 -+#define MTXORB_FTDI_RANGE_0112_PID 0x0112 -+#define MTXORB_FTDI_RANGE_0113_PID 0x0113 -+#define MTXORB_FTDI_RANGE_0114_PID 0x0114 -+#define MTXORB_FTDI_RANGE_0115_PID 0x0115 -+#define MTXORB_FTDI_RANGE_0116_PID 0x0116 -+#define MTXORB_FTDI_RANGE_0117_PID 0x0117 -+#define MTXORB_FTDI_RANGE_0118_PID 0x0118 -+#define MTXORB_FTDI_RANGE_0119_PID 0x0119 -+#define MTXORB_FTDI_RANGE_011A_PID 0x011A -+#define MTXORB_FTDI_RANGE_011B_PID 0x011B -+#define MTXORB_FTDI_RANGE_011C_PID 0x011C -+#define MTXORB_FTDI_RANGE_011D_PID 0x011D -+#define MTXORB_FTDI_RANGE_011E_PID 0x011E -+#define MTXORB_FTDI_RANGE_011F_PID 0x011F -+#define MTXORB_FTDI_RANGE_0120_PID 0x0120 -+#define MTXORB_FTDI_RANGE_0121_PID 0x0121 -+#define MTXORB_FTDI_RANGE_0122_PID 0x0122 -+#define MTXORB_FTDI_RANGE_0123_PID 0x0123 -+#define MTXORB_FTDI_RANGE_0124_PID 0x0124 -+#define MTXORB_FTDI_RANGE_0125_PID 0x0125 -+#define MTXORB_FTDI_RANGE_0126_PID 0x0126 -+#define MTXORB_FTDI_RANGE_0127_PID 0x0127 -+#define MTXORB_FTDI_RANGE_0128_PID 0x0128 -+#define MTXORB_FTDI_RANGE_0129_PID 0x0129 -+#define MTXORB_FTDI_RANGE_012A_PID 0x012A -+#define MTXORB_FTDI_RANGE_012B_PID 0x012B -+#define MTXORB_FTDI_RANGE_012C_PID 0x012C -+#define MTXORB_FTDI_RANGE_012D_PID 0x012D -+#define MTXORB_FTDI_RANGE_012E_PID 0x012E -+#define MTXORB_FTDI_RANGE_012F_PID 0x012F -+#define MTXORB_FTDI_RANGE_0130_PID 0x0130 -+#define MTXORB_FTDI_RANGE_0131_PID 0x0131 -+#define MTXORB_FTDI_RANGE_0132_PID 0x0132 -+#define MTXORB_FTDI_RANGE_0133_PID 0x0133 -+#define MTXORB_FTDI_RANGE_0134_PID 0x0134 -+#define MTXORB_FTDI_RANGE_0135_PID 0x0135 -+#define MTXORB_FTDI_RANGE_0136_PID 0x0136 -+#define MTXORB_FTDI_RANGE_0137_PID 0x0137 -+#define MTXORB_FTDI_RANGE_0138_PID 0x0138 -+#define MTXORB_FTDI_RANGE_0139_PID 0x0139 -+#define MTXORB_FTDI_RANGE_013A_PID 0x013A -+#define MTXORB_FTDI_RANGE_013B_PID 0x013B -+#define MTXORB_FTDI_RANGE_013C_PID 0x013C -+#define MTXORB_FTDI_RANGE_013D_PID 0x013D -+#define MTXORB_FTDI_RANGE_013E_PID 0x013E -+#define MTXORB_FTDI_RANGE_013F_PID 0x013F -+#define MTXORB_FTDI_RANGE_0140_PID 0x0140 -+#define MTXORB_FTDI_RANGE_0141_PID 0x0141 -+#define MTXORB_FTDI_RANGE_0142_PID 0x0142 -+#define MTXORB_FTDI_RANGE_0143_PID 0x0143 -+#define MTXORB_FTDI_RANGE_0144_PID 0x0144 -+#define MTXORB_FTDI_RANGE_0145_PID 0x0145 -+#define MTXORB_FTDI_RANGE_0146_PID 0x0146 -+#define MTXORB_FTDI_RANGE_0147_PID 0x0147 -+#define MTXORB_FTDI_RANGE_0148_PID 0x0148 -+#define MTXORB_FTDI_RANGE_0149_PID 0x0149 -+#define MTXORB_FTDI_RANGE_014A_PID 0x014A -+#define MTXORB_FTDI_RANGE_014B_PID 0x014B -+#define MTXORB_FTDI_RANGE_014C_PID 0x014C -+#define MTXORB_FTDI_RANGE_014D_PID 0x014D -+#define MTXORB_FTDI_RANGE_014E_PID 0x014E -+#define MTXORB_FTDI_RANGE_014F_PID 0x014F -+#define MTXORB_FTDI_RANGE_0150_PID 0x0150 -+#define MTXORB_FTDI_RANGE_0151_PID 0x0151 -+#define MTXORB_FTDI_RANGE_0152_PID 0x0152 -+#define MTXORB_FTDI_RANGE_0153_PID 0x0153 -+#define MTXORB_FTDI_RANGE_0154_PID 0x0154 -+#define MTXORB_FTDI_RANGE_0155_PID 0x0155 -+#define MTXORB_FTDI_RANGE_0156_PID 0x0156 -+#define MTXORB_FTDI_RANGE_0157_PID 0x0157 -+#define MTXORB_FTDI_RANGE_0158_PID 0x0158 -+#define MTXORB_FTDI_RANGE_0159_PID 0x0159 -+#define MTXORB_FTDI_RANGE_015A_PID 0x015A -+#define MTXORB_FTDI_RANGE_015B_PID 0x015B -+#define MTXORB_FTDI_RANGE_015C_PID 0x015C -+#define MTXORB_FTDI_RANGE_015D_PID 0x015D -+#define MTXORB_FTDI_RANGE_015E_PID 0x015E -+#define MTXORB_FTDI_RANGE_015F_PID 0x015F -+#define MTXORB_FTDI_RANGE_0160_PID 0x0160 -+#define MTXORB_FTDI_RANGE_0161_PID 0x0161 -+#define MTXORB_FTDI_RANGE_0162_PID 0x0162 -+#define MTXORB_FTDI_RANGE_0163_PID 0x0163 -+#define MTXORB_FTDI_RANGE_0164_PID 0x0164 -+#define MTXORB_FTDI_RANGE_0165_PID 0x0165 -+#define MTXORB_FTDI_RANGE_0166_PID 0x0166 -+#define MTXORB_FTDI_RANGE_0167_PID 0x0167 -+#define MTXORB_FTDI_RANGE_0168_PID 0x0168 -+#define MTXORB_FTDI_RANGE_0169_PID 0x0169 -+#define MTXORB_FTDI_RANGE_016A_PID 0x016A -+#define MTXORB_FTDI_RANGE_016B_PID 0x016B -+#define MTXORB_FTDI_RANGE_016C_PID 0x016C -+#define MTXORB_FTDI_RANGE_016D_PID 0x016D -+#define MTXORB_FTDI_RANGE_016E_PID 0x016E -+#define MTXORB_FTDI_RANGE_016F_PID 0x016F -+#define MTXORB_FTDI_RANGE_0170_PID 0x0170 -+#define MTXORB_FTDI_RANGE_0171_PID 0x0171 -+#define MTXORB_FTDI_RANGE_0172_PID 0x0172 -+#define MTXORB_FTDI_RANGE_0173_PID 0x0173 -+#define MTXORB_FTDI_RANGE_0174_PID 0x0174 -+#define MTXORB_FTDI_RANGE_0175_PID 0x0175 -+#define MTXORB_FTDI_RANGE_0176_PID 0x0176 -+#define MTXORB_FTDI_RANGE_0177_PID 0x0177 -+#define MTXORB_FTDI_RANGE_0178_PID 0x0178 -+#define MTXORB_FTDI_RANGE_0179_PID 0x0179 -+#define MTXORB_FTDI_RANGE_017A_PID 0x017A -+#define MTXORB_FTDI_RANGE_017B_PID 0x017B -+#define MTXORB_FTDI_RANGE_017C_PID 0x017C -+#define MTXORB_FTDI_RANGE_017D_PID 0x017D -+#define MTXORB_FTDI_RANGE_017E_PID 0x017E -+#define MTXORB_FTDI_RANGE_017F_PID 0x017F -+#define MTXORB_FTDI_RANGE_0180_PID 0x0180 -+#define MTXORB_FTDI_RANGE_0181_PID 0x0181 -+#define MTXORB_FTDI_RANGE_0182_PID 0x0182 -+#define MTXORB_FTDI_RANGE_0183_PID 0x0183 -+#define MTXORB_FTDI_RANGE_0184_PID 0x0184 -+#define MTXORB_FTDI_RANGE_0185_PID 0x0185 -+#define MTXORB_FTDI_RANGE_0186_PID 0x0186 -+#define MTXORB_FTDI_RANGE_0187_PID 0x0187 -+#define MTXORB_FTDI_RANGE_0188_PID 0x0188 -+#define MTXORB_FTDI_RANGE_0189_PID 0x0189 -+#define MTXORB_FTDI_RANGE_018A_PID 0x018A -+#define MTXORB_FTDI_RANGE_018B_PID 0x018B -+#define MTXORB_FTDI_RANGE_018C_PID 0x018C -+#define MTXORB_FTDI_RANGE_018D_PID 0x018D -+#define MTXORB_FTDI_RANGE_018E_PID 0x018E -+#define MTXORB_FTDI_RANGE_018F_PID 0x018F -+#define MTXORB_FTDI_RANGE_0190_PID 0x0190 -+#define MTXORB_FTDI_RANGE_0191_PID 0x0191 -+#define MTXORB_FTDI_RANGE_0192_PID 0x0192 -+#define MTXORB_FTDI_RANGE_0193_PID 0x0193 -+#define MTXORB_FTDI_RANGE_0194_PID 0x0194 -+#define MTXORB_FTDI_RANGE_0195_PID 0x0195 -+#define MTXORB_FTDI_RANGE_0196_PID 0x0196 -+#define MTXORB_FTDI_RANGE_0197_PID 0x0197 -+#define MTXORB_FTDI_RANGE_0198_PID 0x0198 -+#define MTXORB_FTDI_RANGE_0199_PID 0x0199 -+#define MTXORB_FTDI_RANGE_019A_PID 0x019A -+#define MTXORB_FTDI_RANGE_019B_PID 0x019B -+#define MTXORB_FTDI_RANGE_019C_PID 0x019C -+#define MTXORB_FTDI_RANGE_019D_PID 0x019D -+#define MTXORB_FTDI_RANGE_019E_PID 0x019E -+#define MTXORB_FTDI_RANGE_019F_PID 0x019F -+#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0 -+#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1 -+#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2 -+#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3 -+#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4 -+#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5 -+#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6 -+#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7 -+#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8 -+#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9 -+#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA -+#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB -+#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC -+#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD -+#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE -+#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF -+#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0 -+#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1 -+#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2 -+#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3 -+#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4 -+#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5 -+#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6 -+#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7 -+#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8 -+#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9 -+#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA -+#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB -+#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC -+#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD -+#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE -+#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF -+#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0 -+#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1 -+#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2 -+#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3 -+#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4 -+#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5 -+#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6 -+#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7 -+#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8 -+#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9 -+#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA -+#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB -+#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC -+#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD -+#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE -+#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF -+#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0 -+#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1 -+#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2 -+#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3 -+#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4 -+#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5 -+#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6 -+#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7 -+#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8 -+#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9 -+#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA -+#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB -+#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC -+#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD -+#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE -+#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF -+#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0 -+#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1 -+#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2 -+#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3 -+#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4 -+#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5 -+#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6 -+#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7 -+#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8 -+#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9 -+#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA -+#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB -+#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC -+#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED -+#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE -+#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF -+#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0 -+#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1 -+#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2 -+#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3 -+#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4 -+#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5 -+#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6 -+#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7 -+#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8 -+#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9 -+#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA -+#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB -+#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC -+#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD -+#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE -+#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF -+ -+ - - /* Interbiometrics USB I/O Board */ - /* Developed for Interbiometrics by Rudolf Gugler */ -diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c -index 6cecd2c..43cfde8 100644 ---- a/drivers/usb/serial/option.c -+++ b/drivers/usb/serial/option.c -@@ -236,25 +236,25 @@ static struct usb_device_id option_ids[] = { - { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, - { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, - { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) }, -- { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) }, - { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ -diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c -index 234c5ee..103195a 100644 ---- a/drivers/usb/serial/pl2303.c -+++ b/drivers/usb/serial/pl2303.c -@@ -56,6 +56,7 @@ static struct usb_device_id id_table [] = { - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, - { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, -+ { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, - { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, - { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, - { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, -diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h -index 3bdefe0..cff160a 100644 ---- a/drivers/usb/serial/pl2303.h -+++ b/drivers/usb/serial/pl2303.h -@@ -14,6 +14,7 @@ - #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 - #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 - #define PL2303_PRODUCT_ID_ALDIGA 0x0611 -+#define PL2303_PRODUCT_ID_MMX 0x0612 - - #define ATEN_VENDOR_ID 0x0557 - #define ATEN_VENDOR_ID2 0x0547 -diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h -index 1b09578..45fe366 100644 ---- a/drivers/usb/storage/unusual_devs.h -+++ b/drivers/usb/storage/unusual_devs.h -@@ -405,7 +405,7 @@ UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x0100, - UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, - "Cypress", - "Cypress AT2LP", -- US_SC_CYP_ATACB, US_PR_BULK, NULL, -+ US_SC_CYP_ATACB, US_PR_DEVICE, NULL, - 0), - #endif - -@@ -1522,7 +1522,7 @@ UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000, - "Sony Ericsson", - "M600i", - US_SC_DEVICE, US_PR_DEVICE, NULL, -- US_FL_FIX_CAPACITY ), -+ US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - - /* Reported by Kevin Cernekee - * Tested on hardware version 1.10. -@@ -1716,10 +1716,12 @@ UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001, - /* - * Patch by Pete Zaitcev - * Report by Mark Patton. Red Hat bz#208928. -+ * Added support for rev 0x0002 (Motorola ROKR W5) -+ * by Javier Smaldone - */ --UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0001, -+UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0002, - "Motorola", -- "RAZR V3i", -+ "RAZR V3i/ROKR W5", - US_SC_DEVICE, US_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -diff --git a/fs/splice.c b/fs/splice.c -index 7815003..aa5f6f6 100644 ---- a/fs/splice.c -+++ b/fs/splice.c -@@ -58,8 +58,8 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, - */ - wait_on_page_writeback(page); - -- if (PagePrivate(page)) -- try_to_release_page(page, GFP_KERNEL); -+ if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL)) -+ goto out_unlock; - - /* - * If we succeeded in removing the mapping, set LRU flag -@@ -75,6 +75,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, - * Raced with truncate or failed to remove page from current - * address space, unlock and return failure. - */ -+out_unlock: - unlock_page(page); - return 1; - } -@@ -983,7 +984,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, - - while (len) { - size_t read_len; -- loff_t pos = sd->pos; -+ loff_t pos = sd->pos, prev_pos = pos; - - ret = do_splice_to(in, &pos, pipe, len, flags); - if (unlikely(ret <= 0)) -@@ -998,15 +999,19 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, - * could get stuck data in the internal pipe: - */ - ret = actor(pipe, sd); -- if (unlikely(ret <= 0)) -+ if (unlikely(ret <= 0)) { -+ sd->pos = prev_pos; - goto out_release; -+ } - - bytes += ret; - len -= ret; - sd->pos = pos; - -- if (ret < read_len) -+ if (ret < read_len) { -+ sd->pos = prev_pos + ret; - goto out_release; -+ } - } - - done: -@@ -1072,7 +1077,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, - - ret = splice_direct_to_actor(in, &sd, direct_splice_actor); - if (ret > 0) -- *ppos += ret; -+ *ppos = sd.pos; - - return ret; - } -diff --git a/include/asm-frv/mem-layout.h b/include/asm-frv/mem-layout.h -index 734a1d0..2947764 100644 ---- a/include/asm-frv/mem-layout.h -+++ b/include/asm-frv/mem-layout.h -@@ -31,6 +31,13 @@ - - #define PAGE_MASK (~(PAGE_SIZE-1)) - -+/* -+ * the slab must be aligned such that load- and store-double instructions don't -+ * fault if used -+ */ -+#define ARCH_KMALLOC_MINALIGN 8 -+#define ARCH_SLAB_MINALIGN 8 -+ - /*****************************************************************************/ - /* - * virtual memory layout from kernel's point of view -diff --git a/include/asm-ia64/patch.h b/include/asm-ia64/patch.h -index a715430..295fe6a 100644 ---- a/include/asm-ia64/patch.h -+++ b/include/asm-ia64/patch.h -@@ -21,6 +21,7 @@ extern void ia64_patch_imm60 (u64 insn_addr, u64 val); /* patch "brl" w/ip-rel - extern void ia64_patch_mckinley_e9 (unsigned long start, unsigned long end); - extern void ia64_patch_vtop (unsigned long start, unsigned long end); - extern void ia64_patch_phys_stack_reg(unsigned long val); -+extern void ia64_patch_rse (unsigned long start, unsigned long end); - extern void ia64_patch_gate (void); - - #endif /* _ASM_IA64_PATCH_H */ -diff --git a/include/asm-ia64/ptrace.h b/include/asm-ia64/ptrace.h -index 4b2a8d4..15f8dcf 100644 ---- a/include/asm-ia64/ptrace.h -+++ b/include/asm-ia64/ptrace.h -@@ -76,7 +76,7 @@ - # define KERNEL_STACK_SIZE_ORDER 0 - #endif - --#define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 15) & ~15) -+#define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 31) & ~31) - #define IA64_STK_OFFSET ((1 << KERNEL_STACK_SIZE_ORDER)*PAGE_SIZE) - - #define KERNEL_STACK_SIZE IA64_STK_OFFSET -diff --git a/include/asm-ia64/sections.h b/include/asm-ia64/sections.h -index dc42a35..7286e4a 100644 ---- a/include/asm-ia64/sections.h -+++ b/include/asm-ia64/sections.h -@@ -10,6 +10,7 @@ - - extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; - extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; -+extern char __start___rse_patchlist[], __end___rse_patchlist[]; - extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; - extern char __start___phys_stack_reg_patchlist[], __end___phys_stack_reg_patchlist[]; - extern char __start_gate_section[]; -diff --git a/include/asm-mn10300/ipcbuf.h b/include/asm-mn10300/ipcbuf.h -index efbbef8..f6f63d4 100644 ---- a/include/asm-mn10300/ipcbuf.h -+++ b/include/asm-mn10300/ipcbuf.h -@@ -1,4 +1,4 @@ --#ifndef _ASM_IPCBUF_H_ -+#ifndef _ASM_IPCBUF_H - #define _ASM_IPCBUF_H - - /* -diff --git a/include/asm-s390/types.h b/include/asm-s390/types.h -index 0e959e2..41c5476 100644 ---- a/include/asm-s390/types.h -+++ b/include/asm-s390/types.h -@@ -40,7 +40,13 @@ typedef __signed__ long saddr_t; - - #ifndef __ASSEMBLY__ - -+typedef u64 dma64_addr_t; -+#ifdef __s390x__ -+/* DMA addresses come in 32-bit and 64-bit flavours. */ -+typedef u64 dma_addr_t; -+#else - typedef u32 dma_addr_t; -+#endif - - #ifndef __s390x__ - typedef union { -diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h -index cfc3147..e3ef903 100644 ---- a/include/linux/blktrace_api.h -+++ b/include/linux/blktrace_api.h -@@ -55,6 +55,7 @@ enum blktrace_act { - enum blktrace_notify { - __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ - __BLK_TN_TIMESTAMP, /* include system clock */ -+ __BLK_TN_MESSAGE, /* Character string message */ - }; - - -@@ -79,6 +80,7 @@ enum blktrace_notify { - - #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) - #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) -+#define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY)) - - #define BLK_IO_TRACE_MAGIC 0x65617400 - #define BLK_IO_TRACE_VERSION 0x07 -@@ -119,6 +121,7 @@ struct blk_trace { - int trace_state; - struct rchan *rchan; - unsigned long *sequence; -+ unsigned char *msg_data; - u16 act_mask; - u64 start_lba; - u64 end_lba; -@@ -149,7 +152,28 @@ extern void blk_trace_shutdown(struct request_queue *); - extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); - extern int do_blk_trace_setup(struct request_queue *q, - char *name, dev_t dev, struct blk_user_trace_setup *buts); -+extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); - -+/** -+ * blk_add_trace_msg - Add a (simple) message to the blktrace stream -+ * @q: queue the io is for -+ * @fmt: format to print message in -+ * args... Variable argument list for format -+ * -+ * Description: -+ * Records a (simple) message onto the blktrace stream. -+ * -+ * NOTE: BLK_TN_MAX_MSG characters are output at most. -+ * NOTE: Can not use 'static inline' due to presence of var args... -+ * -+ **/ -+#define blk_add_trace_msg(q, fmt, ...) \ -+ do { \ -+ struct blk_trace *bt = (q)->blk_trace; \ -+ if (unlikely(bt)) \ -+ __trace_note_message(bt, fmt, ##__VA_ARGS__); \ -+ } while (0) -+#define BLK_TN_MAX_MSG 128 - - /** - * blk_add_trace_rq - Add a trace for a request oriented action -@@ -299,6 +323,8 @@ extern int blk_trace_remove(struct request_queue *q); - #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) - #define blk_trace_startstop(q, start) (-ENOTTY) - #define blk_trace_remove(q) (-ENOTTY) -+#define blk_add_trace_msg(q, fmt, ...) do { } while (0) -+ - #endif /* CONFIG_BLK_DEV_IO_TRACE */ - #endif /* __KERNEL__ */ - #endif -diff --git a/include/linux/device.h b/include/linux/device.h -index 14616e8..6a2d04c 100644 ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -385,6 +385,9 @@ static inline const char *dev_name(struct device *dev) - return dev->bus_id; - } - -+extern int dev_set_name(struct device *dev, const char *name, ...) -+ __attribute__((format(printf, 2, 3))); -+ - #ifdef CONFIG_NUMA - static inline int dev_to_node(struct device *dev) - { -diff --git a/include/linux/sched.h b/include/linux/sched.h -index 3e05e54..ae0be3c 100644 ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -766,7 +766,6 @@ struct sched_domain { - struct sched_domain *child; /* bottom domain must be null terminated */ - struct sched_group *groups; /* the balancing groups of the domain */ - cpumask_t span; /* span of all CPUs in this domain */ -- int first_cpu; /* cache of the first cpu in this domain */ - unsigned long min_interval; /* Minimum balance interval ms */ - unsigned long max_interval; /* Maximum balance interval ms */ - unsigned int busy_factor; /* less balancing by factor if busy */ -diff --git a/include/linux/topology.h b/include/linux/topology.h -index 4bb7074..24f3d22 100644 ---- a/include/linux/topology.h -+++ b/include/linux/topology.h -@@ -166,7 +166,9 @@ void arch_update_cpu_topology(void); - .busy_idx = 3, \ - .idle_idx = 3, \ - .flags = SD_LOAD_BALANCE \ -- | SD_SERIALIZE, \ -+ | SD_BALANCE_NEWIDLE \ -+ | SD_WAKE_AFFINE \ -+ | SD_SERIALIZE, \ - .last_balance = jiffies, \ - .balance_interval = 64, \ - } -diff --git a/kernel/relay.c b/kernel/relay.c -index bc24dcd..7de644c 100644 ---- a/kernel/relay.c -+++ b/kernel/relay.c -@@ -1191,7 +1191,7 @@ static ssize_t relay_file_splice_read(struct file *in, - ret = 0; - spliced = 0; - -- while (len) { -+ while (len && !spliced) { - ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret); - if (ret < 0) - break; -diff --git a/kernel/sched.c b/kernel/sched.c -index cfa222a..bfb8ad8 100644 ---- a/kernel/sched.c -+++ b/kernel/sched.c -@@ -136,7 +136,7 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) - - static inline int rt_policy(int policy) - { -- if (unlikely(policy == SCHED_FIFO) || unlikely(policy == SCHED_RR)) -+ if (unlikely(policy == SCHED_FIFO || policy == SCHED_RR)) - return 1; - return 0; - } -@@ -398,43 +398,6 @@ struct cfs_rq { - */ - struct list_head leaf_cfs_rq_list; - struct task_group *tg; /* group that "owns" this runqueue */ -- --#ifdef CONFIG_SMP -- unsigned long task_weight; -- unsigned long shares; -- /* -- * We need space to build a sched_domain wide view of the full task -- * group tree, in order to avoid depending on dynamic memory allocation -- * during the load balancing we place this in the per cpu task group -- * hierarchy. This limits the load balancing to one instance per cpu, -- * but more should not be needed anyway. -- */ -- struct aggregate_struct { -- /* -- * load = weight(cpus) * f(tg) -- * -- * Where f(tg) is the recursive weight fraction assigned to -- * this group. -- */ -- unsigned long load; -- -- /* -- * part of the group weight distributed to this span. -- */ -- unsigned long shares; -- -- /* -- * The sum of all runqueue weights within this span. -- */ -- unsigned long rq_weight; -- -- /* -- * Weight contributed by tasks; this is the part we can -- * influence by moving tasks around. -- */ -- unsigned long task_weight; -- } aggregate; --#endif - #endif - }; - -@@ -1368,9 +1331,6 @@ static void __resched_task(struct task_struct *p, int tif_bit) - */ - #define SRR(x, y) (((x) + (1UL << ((y) - 1))) >> (y)) - --/* -- * delta *= weight / lw -- */ - static unsigned long - calc_delta_mine(unsigned long delta_exec, unsigned long weight, - struct load_weight *lw) -@@ -1393,6 +1353,12 @@ calc_delta_mine(unsigned long delta_exec, unsigned long weight, - return (unsigned long)min(tmp, (u64)(unsigned long)LONG_MAX); - } - -+static inline unsigned long -+calc_delta_fair(unsigned long delta_exec, struct load_weight *lw) -+{ -+ return calc_delta_mine(delta_exec, NICE_0_LOAD, lw); -+} -+ - static inline void update_load_add(struct load_weight *lw, unsigned long inc) - { - lw->weight += inc; -@@ -1505,326 +1471,6 @@ static unsigned long source_load(int cpu, int type); - static unsigned long target_load(int cpu, int type); - static unsigned long cpu_avg_load_per_task(int cpu); - static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); -- --#ifdef CONFIG_FAIR_GROUP_SCHED -- --/* -- * Group load balancing. -- * -- * We calculate a few balance domain wide aggregate numbers; load and weight. -- * Given the pictures below, and assuming each item has equal weight: -- * -- * root 1 - thread -- * / | \ A - group -- * A 1 B -- * /|\ / \ -- * C 2 D 3 4 -- * | | -- * 5 6 -- * -- * load: -- * A and B get 1/3-rd of the total load. C and D get 1/3-rd of A's 1/3-rd, -- * which equals 1/9-th of the total load. -- * -- * shares: -- * The weight of this group on the selected cpus. -- * -- * rq_weight: -- * Direct sum of all the cpu's their rq weight, e.g. A would get 3 while -- * B would get 2. -- * -- * task_weight: -- * Part of the rq_weight contributed by tasks; all groups except B would -- * get 1, B gets 2. -- */ -- --static inline struct aggregate_struct * --aggregate(struct task_group *tg, struct sched_domain *sd) --{ -- return &tg->cfs_rq[sd->first_cpu]->aggregate; --} -- --typedef void (*aggregate_func)(struct task_group *, struct sched_domain *); -- --/* -- * Iterate the full tree, calling @down when first entering a node and @up when -- * leaving it for the final time. -- */ --static --void aggregate_walk_tree(aggregate_func down, aggregate_func up, -- struct sched_domain *sd) --{ -- struct task_group *parent, *child; -- -- rcu_read_lock(); -- parent = &root_task_group; --down: -- (*down)(parent, sd); -- list_for_each_entry_rcu(child, &parent->children, siblings) { -- parent = child; -- goto down; -- --up: -- continue; -- } -- (*up)(parent, sd); -- -- child = parent; -- parent = parent->parent; -- if (parent) -- goto up; -- rcu_read_unlock(); --} -- --/* -- * Calculate the aggregate runqueue weight. -- */ --static --void aggregate_group_weight(struct task_group *tg, struct sched_domain *sd) --{ -- unsigned long rq_weight = 0; -- unsigned long task_weight = 0; -- int i; -- -- for_each_cpu_mask(i, sd->span) { -- rq_weight += tg->cfs_rq[i]->load.weight; -- task_weight += tg->cfs_rq[i]->task_weight; -- } -- -- aggregate(tg, sd)->rq_weight = rq_weight; -- aggregate(tg, sd)->task_weight = task_weight; --} -- --/* -- * Compute the weight of this group on the given cpus. -- */ --static --void aggregate_group_shares(struct task_group *tg, struct sched_domain *sd) --{ -- unsigned long shares = 0; -- int i; -- -- for_each_cpu_mask(i, sd->span) -- shares += tg->cfs_rq[i]->shares; -- -- if ((!shares && aggregate(tg, sd)->rq_weight) || shares > tg->shares) -- shares = tg->shares; -- -- aggregate(tg, sd)->shares = shares; --} -- --/* -- * Compute the load fraction assigned to this group, relies on the aggregate -- * weight and this group's parent's load, i.e. top-down. -- */ --static --void aggregate_group_load(struct task_group *tg, struct sched_domain *sd) --{ -- unsigned long load; -- -- if (!tg->parent) { -- int i; -- -- load = 0; -- for_each_cpu_mask(i, sd->span) -- load += cpu_rq(i)->load.weight; -- -- } else { -- load = aggregate(tg->parent, sd)->load; -- -- /* -- * shares is our weight in the parent's rq so -- * shares/parent->rq_weight gives our fraction of the load -- */ -- load *= aggregate(tg, sd)->shares; -- load /= aggregate(tg->parent, sd)->rq_weight + 1; -- } -- -- aggregate(tg, sd)->load = load; --} -- --static void __set_se_shares(struct sched_entity *se, unsigned long shares); -- --/* -- * Calculate and set the cpu's group shares. -- */ --static void --__update_group_shares_cpu(struct task_group *tg, struct sched_domain *sd, -- int tcpu) --{ -- int boost = 0; -- unsigned long shares; -- unsigned long rq_weight; -- -- if (!tg->se[tcpu]) -- return; -- -- rq_weight = tg->cfs_rq[tcpu]->load.weight; -- -- /* -- * If there are currently no tasks on the cpu pretend there is one of -- * average load so that when a new task gets to run here it will not -- * get delayed by group starvation. -- */ -- if (!rq_weight) { -- boost = 1; -- rq_weight = NICE_0_LOAD; -- } -- -- /* -- * \Sum shares * rq_weight -- * shares = ----------------------- -- * \Sum rq_weight -- * -- */ -- shares = aggregate(tg, sd)->shares * rq_weight; -- shares /= aggregate(tg, sd)->rq_weight + 1; -- -- /* -- * record the actual number of shares, not the boosted amount. -- */ -- tg->cfs_rq[tcpu]->shares = boost ? 0 : shares; -- -- if (shares < MIN_SHARES) -- shares = MIN_SHARES; -- else if (shares > MAX_SHARES) -- shares = MAX_SHARES; -- -- __set_se_shares(tg->se[tcpu], shares); --} -- --/* -- * Re-adjust the weights on the cpu the task came from and on the cpu the -- * task went to. -- */ --static void --__move_group_shares(struct task_group *tg, struct sched_domain *sd, -- int scpu, int dcpu) --{ -- unsigned long shares; -- -- shares = tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; -- -- __update_group_shares_cpu(tg, sd, scpu); -- __update_group_shares_cpu(tg, sd, dcpu); -- -- /* -- * ensure we never loose shares due to rounding errors in the -- * above redistribution. -- */ -- shares -= tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; -- if (shares) -- tg->cfs_rq[dcpu]->shares += shares; --} -- --/* -- * Because changing a group's shares changes the weight of the super-group -- * we need to walk up the tree and change all shares until we hit the root. -- */ --static void --move_group_shares(struct task_group *tg, struct sched_domain *sd, -- int scpu, int dcpu) --{ -- while (tg) { -- __move_group_shares(tg, sd, scpu, dcpu); -- tg = tg->parent; -- } --} -- --static --void aggregate_group_set_shares(struct task_group *tg, struct sched_domain *sd) --{ -- unsigned long shares = aggregate(tg, sd)->shares; -- int i; -- -- for_each_cpu_mask(i, sd->span) { -- struct rq *rq = cpu_rq(i); -- unsigned long flags; -- -- spin_lock_irqsave(&rq->lock, flags); -- __update_group_shares_cpu(tg, sd, i); -- spin_unlock_irqrestore(&rq->lock, flags); -- } -- -- aggregate_group_shares(tg, sd); -- -- /* -- * ensure we never loose shares due to rounding errors in the -- * above redistribution. -- */ -- shares -= aggregate(tg, sd)->shares; -- if (shares) { -- tg->cfs_rq[sd->first_cpu]->shares += shares; -- aggregate(tg, sd)->shares += shares; -- } --} -- --/* -- * Calculate the accumulative weight and recursive load of each task group -- * while walking down the tree. -- */ --static --void aggregate_get_down(struct task_group *tg, struct sched_domain *sd) --{ -- aggregate_group_weight(tg, sd); -- aggregate_group_shares(tg, sd); -- aggregate_group_load(tg, sd); --} -- --/* -- * Rebalance the cpu shares while walking back up the tree. -- */ --static --void aggregate_get_up(struct task_group *tg, struct sched_domain *sd) --{ -- aggregate_group_set_shares(tg, sd); --} -- --static DEFINE_PER_CPU(spinlock_t, aggregate_lock); -- --static void __init init_aggregate(void) --{ -- int i; -- -- for_each_possible_cpu(i) -- spin_lock_init(&per_cpu(aggregate_lock, i)); --} -- --static int get_aggregate(struct sched_domain *sd) --{ -- if (!spin_trylock(&per_cpu(aggregate_lock, sd->first_cpu))) -- return 0; -- -- aggregate_walk_tree(aggregate_get_down, aggregate_get_up, sd); -- return 1; --} -- --static void put_aggregate(struct sched_domain *sd) --{ -- spin_unlock(&per_cpu(aggregate_lock, sd->first_cpu)); --} -- --static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) --{ -- cfs_rq->shares = shares; --} -- --#else -- --static inline void init_aggregate(void) --{ --} -- --static inline int get_aggregate(struct sched_domain *sd) --{ -- return 0; --} -- --static inline void put_aggregate(struct sched_domain *sd) --{ --} --#endif -- - #else /* CONFIG_SMP */ - - #ifdef CONFIG_FAIR_GROUP_SCHED -@@ -1845,14 +1491,26 @@ static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) - - #define sched_class_highest (&rt_sched_class) - --static void inc_nr_running(struct rq *rq) -+static inline void inc_load(struct rq *rq, const struct task_struct *p) -+{ -+ update_load_add(&rq->load, p->se.load.weight); -+} -+ -+static inline void dec_load(struct rq *rq, const struct task_struct *p) -+{ -+ update_load_sub(&rq->load, p->se.load.weight); -+} -+ -+static void inc_nr_running(struct task_struct *p, struct rq *rq) - { - rq->nr_running++; -+ inc_load(rq, p); - } - --static void dec_nr_running(struct rq *rq) -+static void dec_nr_running(struct task_struct *p, struct rq *rq) - { - rq->nr_running--; -+ dec_load(rq, p); - } - - static void set_load_weight(struct task_struct *p) -@@ -1944,7 +1602,7 @@ static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) - rq->nr_uninterruptible--; - - enqueue_task(rq, p, wakeup); -- inc_nr_running(rq); -+ inc_nr_running(p, rq); - } - - /* -@@ -1956,7 +1614,7 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) - rq->nr_uninterruptible++; - - dequeue_task(rq, p, sleep); -- dec_nr_running(rq); -+ dec_nr_running(p, rq); - } - - /** -@@ -2609,7 +2267,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags) - * management (if any): - */ - p->sched_class->task_new(rq, p); -- inc_nr_running(rq); -+ inc_nr_running(p, rq); - } - check_preempt_curr(rq, p); - #ifdef CONFIG_SMP -@@ -3600,12 +3258,9 @@ static int load_balance(int this_cpu, struct rq *this_rq, - unsigned long imbalance; - struct rq *busiest; - unsigned long flags; -- int unlock_aggregate; - - cpus_setall(*cpus); - -- unlock_aggregate = get_aggregate(sd); -- - /* - * When power savings policy is enabled for the parent domain, idle - * sibling can pick up load irrespective of busy siblings. In this case, -@@ -3721,9 +3376,8 @@ redo: - - if (!ld_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER && - !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) -- ld_moved = -1; -- -- goto out; -+ return -1; -+ return ld_moved; - - out_balanced: - schedstat_inc(sd, lb_balanced[idle]); -@@ -3738,13 +3392,8 @@ out_one_pinned: - - if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER && - !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) -- ld_moved = -1; -- else -- ld_moved = 0; --out: -- if (unlock_aggregate) -- put_aggregate(sd); -- return ld_moved; -+ return -1; -+ return 0; - } - - /* -@@ -4430,7 +4079,7 @@ static inline void schedule_debug(struct task_struct *prev) - * schedule() atomically, we ignore that path for now. - * Otherwise, whine if we are scheduling when we should not be. - */ -- if (unlikely(in_atomic_preempt_off()) && unlikely(!prev->exit_state)) -+ if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) - __schedule_bug(prev); - - profile_hit(SCHED_PROFILING, __builtin_return_address(0)); -@@ -4931,8 +4580,10 @@ void set_user_nice(struct task_struct *p, long nice) - goto out_unlock; - } - on_rq = p->se.on_rq; -- if (on_rq) -+ if (on_rq) { - dequeue_task(rq, p, 0); -+ dec_load(rq, p); -+ } - - p->static_prio = NICE_TO_PRIO(nice); - set_load_weight(p); -@@ -4942,6 +4593,7 @@ void set_user_nice(struct task_struct *p, long nice) - - if (on_rq) { - enqueue_task(rq, p, 0); -+ inc_load(rq, p); - /* - * If the task increased its priority or is running and - * lowered its priority, then reschedule its CPU: -@@ -7316,7 +6968,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, - SD_INIT(sd, ALLNODES); - set_domain_attribute(sd, attr); - sd->span = *cpu_map; -- sd->first_cpu = first_cpu(sd->span); - cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask); - p = sd; - sd_allnodes = 1; -@@ -7327,7 +6978,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, - SD_INIT(sd, NODE); - set_domain_attribute(sd, attr); - sched_domain_node_span(cpu_to_node(i), &sd->span); -- sd->first_cpu = first_cpu(sd->span); - sd->parent = p; - if (p) - p->child = sd; -@@ -7339,7 +6989,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, - SD_INIT(sd, CPU); - set_domain_attribute(sd, attr); - sd->span = *nodemask; -- sd->first_cpu = first_cpu(sd->span); - sd->parent = p; - if (p) - p->child = sd; -@@ -7351,7 +7000,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, - SD_INIT(sd, MC); - set_domain_attribute(sd, attr); - sd->span = cpu_coregroup_map(i); -- sd->first_cpu = first_cpu(sd->span); - cpus_and(sd->span, sd->span, *cpu_map); - sd->parent = p; - p->child = sd; -@@ -7364,7 +7012,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, - SD_INIT(sd, SIBLING); - set_domain_attribute(sd, attr); - sd->span = per_cpu(cpu_sibling_map, i); -- sd->first_cpu = first_cpu(sd->span); - cpus_and(sd->span, sd->span, *cpu_map); - sd->parent = p; - p->child = sd; -@@ -7568,8 +7215,8 @@ static int build_sched_domains(const cpumask_t *cpu_map) - - static cpumask_t *doms_cur; /* current sched domains */ - static int ndoms_cur; /* number of sched domains in 'doms_cur' */ --static struct sched_domain_attr *dattr_cur; /* attribues of custom domains -- in 'doms_cur' */ -+static struct sched_domain_attr *dattr_cur; -+ /* attribues of custom domains in 'doms_cur' */ - - /* - * Special case: If a kmalloc of a doms_cur partition (array of -@@ -8034,7 +7681,6 @@ void __init sched_init(void) - } - - #ifdef CONFIG_SMP -- init_aggregate(); - init_defrootdomain(); - #endif - -@@ -8599,11 +8245,14 @@ void sched_move_task(struct task_struct *tsk) - #endif - - #ifdef CONFIG_FAIR_GROUP_SCHED --static void __set_se_shares(struct sched_entity *se, unsigned long shares) -+static void set_se_shares(struct sched_entity *se, unsigned long shares) - { - struct cfs_rq *cfs_rq = se->cfs_rq; -+ struct rq *rq = cfs_rq->rq; - int on_rq; - -+ spin_lock_irq(&rq->lock); -+ - on_rq = se->on_rq; - if (on_rq) - dequeue_entity(cfs_rq, se, 0); -@@ -8613,17 +8262,8 @@ static void __set_se_shares(struct sched_entity *se, unsigned long shares) - - if (on_rq) - enqueue_entity(cfs_rq, se, 0); --} - --static void set_se_shares(struct sched_entity *se, unsigned long shares) --{ -- struct cfs_rq *cfs_rq = se->cfs_rq; -- struct rq *rq = cfs_rq->rq; -- unsigned long flags; -- -- spin_lock_irqsave(&rq->lock, flags); -- __set_se_shares(se, shares); -- spin_unlock_irqrestore(&rq->lock, flags); -+ spin_unlock_irq(&rq->lock); - } - - static DEFINE_MUTEX(shares_mutex); -@@ -8662,13 +8302,8 @@ int sched_group_set_shares(struct task_group *tg, unsigned long shares) - * w/o tripping rebalance_share or load_balance_fair. - */ - tg->shares = shares; -- for_each_possible_cpu(i) { -- /* -- * force a rebalance -- */ -- cfs_rq_set_shares(tg->cfs_rq[i], 0); -+ for_each_possible_cpu(i) - set_se_shares(tg->se[i], shares); -- } - - /* - * Enable load balance activity on this group, by inserting it back on -diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c -index 9c597e3..ce05271 100644 ---- a/kernel/sched_clock.c -+++ b/kernel/sched_clock.c -@@ -59,22 +59,26 @@ static inline struct sched_clock_data *cpu_sdc(int cpu) - return &per_cpu(sched_clock_data, cpu); - } - -+static __read_mostly int sched_clock_running; -+ - void sched_clock_init(void) - { - u64 ktime_now = ktime_to_ns(ktime_get()); -- u64 now = 0; -+ unsigned long now_jiffies = jiffies; - int cpu; - - for_each_possible_cpu(cpu) { - struct sched_clock_data *scd = cpu_sdc(cpu); - - scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; -- scd->prev_jiffies = jiffies; -- scd->prev_raw = now; -- scd->tick_raw = now; -+ scd->prev_jiffies = now_jiffies; -+ scd->prev_raw = 0; -+ scd->tick_raw = 0; - scd->tick_gtod = ktime_now; - scd->clock = ktime_now; - } -+ -+ sched_clock_running = 1; - } - - /* -@@ -136,6 +140,9 @@ u64 sched_clock_cpu(int cpu) - struct sched_clock_data *scd = cpu_sdc(cpu); - u64 now, clock; - -+ if (unlikely(!sched_clock_running)) -+ return 0ull; -+ - WARN_ON_ONCE(!irqs_disabled()); - now = sched_clock(); - -@@ -174,6 +181,9 @@ void sched_clock_tick(void) - struct sched_clock_data *scd = this_scd(); - u64 now, now_gtod; - -+ if (unlikely(!sched_clock_running)) -+ return; -+ - WARN_ON_ONCE(!irqs_disabled()); - - now = sched_clock(); -diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c -index 5f06118..8bb7130 100644 ---- a/kernel/sched_debug.c -+++ b/kernel/sched_debug.c -@@ -167,11 +167,6 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) - #endif - SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over", - cfs_rq->nr_spread_over); --#ifdef CONFIG_FAIR_GROUP_SCHED --#ifdef CONFIG_SMP -- SEQ_printf(m, " .%-30s: %lu\n", "shares", cfs_rq->shares); --#endif --#endif - } - - static void print_cpu(struct seq_file *m, int cpu) -diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c -index e24ecd3..08ae848 100644 ---- a/kernel/sched_fair.c -+++ b/kernel/sched_fair.c -@@ -334,34 +334,6 @@ int sched_nr_latency_handler(struct ctl_table *table, int write, - #endif - - /* -- * delta *= w / rw -- */ --static inline unsigned long --calc_delta_weight(unsigned long delta, struct sched_entity *se) --{ -- for_each_sched_entity(se) { -- delta = calc_delta_mine(delta, -- se->load.weight, &cfs_rq_of(se)->load); -- } -- -- return delta; --} -- --/* -- * delta *= rw / w -- */ --static inline unsigned long --calc_delta_fair(unsigned long delta, struct sched_entity *se) --{ -- for_each_sched_entity(se) { -- delta = calc_delta_mine(delta, -- cfs_rq_of(se)->load.weight, &se->load); -- } -- -- return delta; --} -- --/* - * The idea is to set a period in which each task runs once. - * - * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch -@@ -390,54 +362,47 @@ static u64 __sched_period(unsigned long nr_running) - */ - static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) - { -- return calc_delta_weight(__sched_period(cfs_rq->nr_running), se); -+ u64 slice = __sched_period(cfs_rq->nr_running); -+ -+ for_each_sched_entity(se) { -+ cfs_rq = cfs_rq_of(se); -+ -+ slice *= se->load.weight; -+ do_div(slice, cfs_rq->load.weight); -+ } -+ -+ -+ return slice; - } - - /* - * We calculate the vruntime slice of a to be inserted task - * -- * vs = s*rw/w = p -+ * vs = s/w = p/rw - */ - static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se) - { - unsigned long nr_running = cfs_rq->nr_running; -+ unsigned long weight; -+ u64 vslice; - - if (!se->on_rq) - nr_running++; - -- return __sched_period(nr_running); --} -- --/* -- * The goal of calc_delta_asym() is to be asymmetrically around NICE_0_LOAD, in -- * that it favours >=0 over <0. -- * -- * -20 | -- * | -- * 0 --------+------- -- * .' -- * 19 .' -- * -- */ --static unsigned long --calc_delta_asym(unsigned long delta, struct sched_entity *se) --{ -- struct load_weight lw = { -- .weight = NICE_0_LOAD, -- .inv_weight = 1UL << (WMULT_SHIFT-NICE_0_SHIFT) -- }; -+ vslice = __sched_period(nr_running); - - for_each_sched_entity(se) { -- struct load_weight *se_lw = &se->load; -+ cfs_rq = cfs_rq_of(se); - -- if (se->load.weight < NICE_0_LOAD) -- se_lw = &lw; -+ weight = cfs_rq->load.weight; -+ if (!se->on_rq) -+ weight += se->load.weight; - -- delta = calc_delta_mine(delta, -- cfs_rq_of(se)->load.weight, se_lw); -+ vslice *= NICE_0_LOAD; -+ do_div(vslice, weight); - } - -- return delta; -+ return vslice; - } - - /* -@@ -454,7 +419,11 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr, - - curr->sum_exec_runtime += delta_exec; - schedstat_add(cfs_rq, exec_clock, delta_exec); -- delta_exec_weighted = calc_delta_fair(delta_exec, curr); -+ delta_exec_weighted = delta_exec; -+ if (unlikely(curr->load.weight != NICE_0_LOAD)) { -+ delta_exec_weighted = calc_delta_fair(delta_exec_weighted, -+ &curr->load); -+ } - curr->vruntime += delta_exec_weighted; - } - -@@ -541,27 +510,10 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) - * Scheduling class queueing methods: - */ - --#if defined CONFIG_SMP && defined CONFIG_FAIR_GROUP_SCHED --static void --add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) --{ -- cfs_rq->task_weight += weight; --} --#else --static inline void --add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) --{ --} --#endif -- - static void - account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) - { - update_load_add(&cfs_rq->load, se->load.weight); -- if (!parent_entity(se)) -- inc_cpu_load(rq_of(cfs_rq), se->load.weight); -- if (entity_is_task(se)) -- add_cfs_task_weight(cfs_rq, se->load.weight); - cfs_rq->nr_running++; - se->on_rq = 1; - list_add(&se->group_node, &cfs_rq->tasks); -@@ -571,10 +523,6 @@ static void - account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) - { - update_load_sub(&cfs_rq->load, se->load.weight); -- if (!parent_entity(se)) -- dec_cpu_load(rq_of(cfs_rq), se->load.weight); -- if (entity_is_task(se)) -- add_cfs_task_weight(cfs_rq, -se->load.weight); - cfs_rq->nr_running--; - se->on_rq = 0; - list_del_init(&se->group_node); -@@ -661,17 +609,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) - - if (!initial) { - /* sleeps upto a single latency don't count. */ -- if (sched_feat(NEW_FAIR_SLEEPERS)) { -- unsigned long thresh = sysctl_sched_latency; -- -- /* -- * convert the sleeper threshold into virtual time -- */ -- if (sched_feat(NORMALIZED_SLEEPER)) -- thresh = calc_delta_fair(thresh, se); -- -- vruntime -= thresh; -- } -+ if (sched_feat(NEW_FAIR_SLEEPERS)) -+ vruntime -= sysctl_sched_latency; - - /* ensure we never gain time by being placed backwards. */ - vruntime = max_vruntime(se->vruntime, vruntime); -@@ -1057,16 +996,27 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, - struct task_struct *curr = this_rq->curr; - unsigned long tl = this_load; - unsigned long tl_per_task; -+ int balanced; - -- if (!(this_sd->flags & SD_WAKE_AFFINE)) -+ if (!(this_sd->flags & SD_WAKE_AFFINE) || !sched_feat(AFFINE_WAKEUPS)) - return 0; - - /* -+ * If sync wakeup then subtract the (maximum possible) -+ * effect of the currently running task from the load -+ * of the current CPU: -+ */ -+ if (sync) -+ tl -= current->se.load.weight; -+ -+ balanced = 100*(tl + p->se.load.weight) <= imbalance*load; -+ -+ /* - * If the currently running task will sleep within - * a reasonable amount of time then attract this newly - * woken task: - */ -- if (sync && curr->sched_class == &fair_sched_class) { -+ if (sync && balanced && curr->sched_class == &fair_sched_class) { - if (curr->se.avg_overlap < sysctl_sched_migration_cost && - p->se.avg_overlap < sysctl_sched_migration_cost) - return 1; -@@ -1075,16 +1025,8 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, - schedstat_inc(p, se.nr_wakeups_affine_attempts); - tl_per_task = cpu_avg_load_per_task(this_cpu); - -- /* -- * If sync wakeup then subtract the (maximum possible) -- * effect of the currently running task from the load -- * of the current CPU: -- */ -- if (sync) -- tl -= current->se.load.weight; -- - if ((tl <= load && tl + target_load(prev_cpu, idx) <= tl_per_task) || -- 100*(tl + p->se.load.weight) <= imbalance*load) { -+ balanced) { - /* - * This domain has SD_WAKE_AFFINE and - * p is cache cold in this domain, and -@@ -1169,10 +1111,11 @@ static unsigned long wakeup_gran(struct sched_entity *se) - unsigned long gran = sysctl_sched_wakeup_granularity; - - /* -- * More easily preempt - nice tasks, while not making it harder for -- * + nice tasks. -+ * More easily preempt - nice tasks, while not making -+ * it harder for + nice tasks. - */ -- gran = calc_delta_asym(sysctl_sched_wakeup_granularity, se); -+ if (unlikely(se->load.weight > NICE_0_LOAD)) -+ gran = calc_delta_fair(gran, &se->load); - - return gran; - } -@@ -1366,90 +1309,75 @@ static struct task_struct *load_balance_next_fair(void *arg) - return __load_balance_iterator(cfs_rq, cfs_rq->balance_iterator); - } - --static unsigned long --__load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, -- unsigned long max_load_move, struct sched_domain *sd, -- enum cpu_idle_type idle, int *all_pinned, int *this_best_prio, -- struct cfs_rq *cfs_rq) -+#ifdef CONFIG_FAIR_GROUP_SCHED -+static int cfs_rq_best_prio(struct cfs_rq *cfs_rq) - { -- struct rq_iterator cfs_rq_iterator; -+ struct sched_entity *curr; -+ struct task_struct *p; - -- cfs_rq_iterator.start = load_balance_start_fair; -- cfs_rq_iterator.next = load_balance_next_fair; -- cfs_rq_iterator.arg = cfs_rq; -+ if (!cfs_rq->nr_running || !first_fair(cfs_rq)) -+ return MAX_PRIO; -+ -+ curr = cfs_rq->curr; -+ if (!curr) -+ curr = __pick_next_entity(cfs_rq); -+ -+ p = task_of(curr); - -- return balance_tasks(this_rq, this_cpu, busiest, -- max_load_move, sd, idle, all_pinned, -- this_best_prio, &cfs_rq_iterator); -+ return p->prio; - } -+#endif - --#ifdef CONFIG_FAIR_GROUP_SCHED - static unsigned long - load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, - unsigned long max_load_move, - struct sched_domain *sd, enum cpu_idle_type idle, - int *all_pinned, int *this_best_prio) - { -+ struct cfs_rq *busy_cfs_rq; - long rem_load_move = max_load_move; -- int busiest_cpu = cpu_of(busiest); -- struct task_group *tg; -- -- rcu_read_lock(); -- list_for_each_entry(tg, &task_groups, list) { -- long imbalance; -- unsigned long this_weight, busiest_weight; -- long rem_load, max_load, moved_load; -- -- /* -- * empty group -- */ -- if (!aggregate(tg, sd)->task_weight) -- continue; -- -- rem_load = rem_load_move * aggregate(tg, sd)->rq_weight; -- rem_load /= aggregate(tg, sd)->load + 1; -- -- this_weight = tg->cfs_rq[this_cpu]->task_weight; -- busiest_weight = tg->cfs_rq[busiest_cpu]->task_weight; -+ struct rq_iterator cfs_rq_iterator; - -- imbalance = (busiest_weight - this_weight) / 2; -+ cfs_rq_iterator.start = load_balance_start_fair; -+ cfs_rq_iterator.next = load_balance_next_fair; - -- if (imbalance < 0) -- imbalance = busiest_weight; -+ for_each_leaf_cfs_rq(busiest, busy_cfs_rq) { -+#ifdef CONFIG_FAIR_GROUP_SCHED -+ struct cfs_rq *this_cfs_rq; -+ long imbalance; -+ unsigned long maxload; - -- max_load = max(rem_load, imbalance); -- moved_load = __load_balance_fair(this_rq, this_cpu, busiest, -- max_load, sd, idle, all_pinned, this_best_prio, -- tg->cfs_rq[busiest_cpu]); -+ this_cfs_rq = cpu_cfs_rq(busy_cfs_rq, this_cpu); - -- if (!moved_load) -+ imbalance = busy_cfs_rq->load.weight - this_cfs_rq->load.weight; -+ /* Don't pull if this_cfs_rq has more load than busy_cfs_rq */ -+ if (imbalance <= 0) - continue; - -- move_group_shares(tg, sd, busiest_cpu, this_cpu); -+ /* Don't pull more than imbalance/2 */ -+ imbalance /= 2; -+ maxload = min(rem_load_move, imbalance); - -- moved_load *= aggregate(tg, sd)->load; -- moved_load /= aggregate(tg, sd)->rq_weight + 1; -+ *this_best_prio = cfs_rq_best_prio(this_cfs_rq); -+#else -+# define maxload rem_load_move -+#endif -+ /* -+ * pass busy_cfs_rq argument into -+ * load_balance_[start|next]_fair iterators -+ */ -+ cfs_rq_iterator.arg = busy_cfs_rq; -+ rem_load_move -= balance_tasks(this_rq, this_cpu, busiest, -+ maxload, sd, idle, all_pinned, -+ this_best_prio, -+ &cfs_rq_iterator); - -- rem_load_move -= moved_load; -- if (rem_load_move < 0) -+ if (rem_load_move <= 0) - break; - } -- rcu_read_unlock(); - - return max_load_move - rem_load_move; - } --#else --static unsigned long --load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, -- unsigned long max_load_move, -- struct sched_domain *sd, enum cpu_idle_type idle, -- int *all_pinned, int *this_best_prio) --{ -- return __load_balance_fair(this_rq, this_cpu, busiest, -- max_load_move, sd, idle, all_pinned, -- this_best_prio, &busiest->cfs); --} --#endif - - static int - move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, -diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c -index 060e87b..3432d57 100644 ---- a/kernel/sched_rt.c -+++ b/kernel/sched_rt.c -@@ -513,8 +513,6 @@ static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup) - */ - for_each_sched_rt_entity(rt_se) - enqueue_rt_entity(rt_se); -- -- inc_cpu_load(rq, p->se.load.weight); - } - - static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) -@@ -534,8 +532,6 @@ static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) - if (rt_rq && rt_rq->rt_nr_running) - enqueue_rt_entity(rt_se); - } -- -- dec_cpu_load(rq, p->se.load.weight); - } - - /* -diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h -index 5bae2e0..a38878e 100644 ---- a/kernel/sched_stats.h -+++ b/kernel/sched_stats.h -@@ -67,6 +67,7 @@ static int show_schedstat(struct seq_file *seq, void *v) - preempt_enable(); - #endif - } -+ kfree(mask_str); - return 0; - } - -diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c -index eb62558..0c2c937 100644 ---- a/net/bluetooth/rfcomm/core.c -+++ b/net/bluetooth/rfcomm/core.c -@@ -423,8 +423,8 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) - - rfcomm_dlc_lock(d); - d->state = BT_CLOSED; -- rfcomm_dlc_unlock(d); - d->state_change(d, err); -+ rfcomm_dlc_unlock(d); - - skb_queue_purge(&d->tx_queue); - rfcomm_dlc_unlink(d); -diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c -index cd61dea..f813077 100644 ---- a/net/dccp/ccids/ccid3.c -+++ b/net/dccp/ccids/ccid3.c -@@ -193,22 +193,17 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) - - /* - * Update Window Counter using the algorithm from [RFC 4342, 8.1]. -- * The algorithm is not applicable if RTT < 4 microseconds. -+ * As elsewhere, RTT > 0 is assumed by using dccp_sample_rtt(). - */ - static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, - ktime_t now) - { -- u32 quarter_rtts; -- -- if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ -- return; -- -- quarter_rtts = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count); -- quarter_rtts /= hctx->ccid3hctx_rtt / 4; -+ u32 delta = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count), -+ quarter_rtts = (4 * delta) / hctx->ccid3hctx_rtt; - - if (quarter_rtts > 0) { - hctx->ccid3hctx_t_last_win_count = now; -- hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); -+ hctx->ccid3hctx_last_win_count += min(quarter_rtts, 5U); - hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ - } - } -diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c -index b348dd7..c22a378 100644 ---- a/net/dccp/ipv4.c -+++ b/net/dccp/ipv4.c -@@ -739,8 +739,8 @@ int dccp_invalid_packet(struct sk_buff *skb) - * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet - * has short sequence numbers), drop packet and return - */ -- if (dh->dccph_type >= DCCP_PKT_DATA && -- dh->dccph_type <= DCCP_PKT_DATAACK && dh->dccph_x == 0) { -+ if ((dh->dccph_type < DCCP_PKT_DATA || -+ dh->dccph_type > DCCP_PKT_DATAACK) && dh->dccph_x == 0) { - DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", - dccp_packet_name(dh->dccph_type)); - return 1; -diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c -index e2ddde7..008de1f 100644 ---- a/net/llc/llc_sap.c -+++ b/net/llc/llc_sap.c -@@ -286,12 +286,14 @@ void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, - * - * Sends received pdus to the sap state machine. - */ --static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb) -+static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb, -+ struct sock *sk) - { - struct llc_sap_state_ev *ev = llc_sap_ev(skb); - - ev->type = LLC_SAP_EV_TYPE_PDU; - ev->reason = 0; -+ skb->sk = sk; - llc_sap_state_process(sap, skb); - } - -@@ -360,8 +362,7 @@ static void llc_sap_mcast(struct llc_sap *sap, - break; - - sock_hold(sk); -- skb_set_owner_r(skb1, sk); -- llc_sap_rcv(sap, skb1); -+ llc_sap_rcv(sap, skb1, sk); - sock_put(sk); - } - read_unlock_bh(&sap->sk_list.lock); -@@ -381,8 +382,7 @@ void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb) - } else { - struct sock *sk = llc_lookup_dgram(sap, &laddr); - if (sk) { -- skb_set_owner_r(skb, sk); -- llc_sap_rcv(sap, skb); -+ llc_sap_rcv(sap, skb, sk); - sock_put(sk); - } else - kfree_skb(skb); -diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c -index 699d97b..a9fce4a 100644 ---- a/net/mac80211/cfg.c -+++ b/net/mac80211/cfg.c -@@ -672,7 +672,7 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev, - if (params->vlan) { - sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); - -- if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN || -+ if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN && - sdata->vif.type != IEEE80211_IF_TYPE_AP) - return -EINVAL; - } else -@@ -760,7 +760,7 @@ static int ieee80211_change_station(struct wiphy *wiphy, - if (params->vlan && params->vlan != sta->sdata->dev) { - vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); - -- if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN || -+ if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN && - vlansdata->vif.type != IEEE80211_IF_TYPE_AP) { - rcu_read_unlock(); - return -EINVAL; -diff --git a/net/mac80211/main.c b/net/mac80211/main.c -index 915afad..5c87645 100644 ---- a/net/mac80211/main.c -+++ b/net/mac80211/main.c -@@ -1313,7 +1313,7 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local, - /* - * Clear the TX filter mask for this STA when sending the next - * packet. If the STA went to power save mode, this will happen -- * happen when it wakes up for the next time. -+ * when it wakes up for the next time. - */ - sta->flags |= WLAN_STA_CLEAR_PS_FILT; - -diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c -index 7cfd12e..841278f 100644 ---- a/net/mac80211/mlme.c -+++ b/net/mac80211/mlme.c -@@ -1325,7 +1325,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, - - /* prepare reordering buffer */ - tid_agg_rx->reorder_buf = -- kmalloc(buf_size * sizeof(struct sk_buf *), GFP_ATOMIC); -+ kmalloc(buf_size * sizeof(struct sk_buff *), GFP_ATOMIC); - if (!tid_agg_rx->reorder_buf) { - if (net_ratelimit()) - printk(KERN_ERR "can not allocate reordering buffer " -@@ -1334,7 +1334,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, - goto end; - } - memset(tid_agg_rx->reorder_buf, 0, -- buf_size * sizeof(struct sk_buf *)); -+ buf_size * sizeof(struct sk_buff *)); - - if (local->ops->ampdu_action) - ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START, -@@ -1614,7 +1614,7 @@ void sta_addba_resp_timer_expired(unsigned long data) - * only one argument, and both sta_info and TID are needed, so init - * flow in sta_info_create gives the TID as data, while the timer_to_id - * array gives the sta through container_of */ -- u16 tid = *(int *)data; -+ u16 tid = *(u8 *)data; - struct sta_info *temp_sta = container_of((void *)data, - struct sta_info, timer_to_tid[tid]); - -@@ -1662,7 +1662,7 @@ timer_expired_exit: - void sta_rx_agg_session_timer_expired(unsigned long data) - { - /* not an elegant detour, but there is no choice as the timer passes -- * only one argument, and verious sta_info are needed here, so init -+ * only one argument, and various sta_info are needed here, so init - * flow in sta_info_create gives the TID as data, while the timer_to_id - * array gives the sta through container_of */ - u8 *ptid = (u8 *)data; -@@ -2479,8 +2479,6 @@ static int ieee80211_sta_join_ibss(struct net_device *dev, - ifsta->state = IEEE80211_IBSS_JOINED; - mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); - -- ieee80211_rx_bss_put(dev, bss); -- - return res; - } - -@@ -3523,6 +3521,7 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, - struct ieee80211_supported_band *sband; - u8 bssid[ETH_ALEN], *pos; - int i; -+ int ret; - DECLARE_MAC_BUF(mac); - - #if 0 -@@ -3567,7 +3566,9 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, - *pos++ = (u8) (rate / 5); - } - -- return ieee80211_sta_join_ibss(dev, ifsta, bss); -+ ret = ieee80211_sta_join_ibss(dev, ifsta, bss); -+ ieee80211_rx_bss_put(dev, bss); -+ return ret; - } - - -@@ -3615,10 +3616,13 @@ static int ieee80211_sta_find_ibss(struct net_device *dev, - (bss = ieee80211_rx_bss_get(dev, bssid, - local->hw.conf.channel->center_freq, - ifsta->ssid, ifsta->ssid_len))) { -+ int ret; - printk(KERN_DEBUG "%s: Selected IBSS BSSID %s" - " based on configured SSID\n", - dev->name, print_mac(mac, bssid)); -- return ieee80211_sta_join_ibss(dev, ifsta, bss); -+ ret = ieee80211_sta_join_ibss(dev, ifsta, bss); -+ ieee80211_rx_bss_put(dev, bss); -+ return ret; - } - #ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG " did not try to join ibss\n"); -@@ -4095,18 +4099,17 @@ ieee80211_sta_scan_result(struct net_device *dev, - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWFREQ; -- iwe.u.freq.m = bss->freq; -- iwe.u.freq.e = 6; -+ iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); -+ iwe.u.freq.e = 0; - current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, - IW_EV_FREQ_LEN); - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWFREQ; -- iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); -- iwe.u.freq.e = 0; -+ iwe.u.freq.m = bss->freq; -+ iwe.u.freq.e = 6; - current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, - IW_EV_FREQ_LEN); -- - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVQUAL; - iwe.u.qual.qual = bss->signal; -diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c -index 1958bfb..0941e5d 100644 ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -1091,7 +1091,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) - u16 fc, hdrlen, ethertype; - u8 *payload; - u8 dst[ETH_ALEN]; -- u8 src[ETH_ALEN]; -+ u8 src[ETH_ALEN] __aligned(2); - struct sk_buff *skb = rx->skb; - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - DECLARE_MAC_BUF(mac); -@@ -1234,7 +1234,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) - */ - static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx) - { -- static const u8 pae_group_addr[ETH_ALEN] -+ static const u8 pae_group_addr[ETH_ALEN] __aligned(2) - = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; - struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; - -diff --git a/net/mac80211/util.c b/net/mac80211/util.c -index 131e9e6..4e97b26 100644 ---- a/net/mac80211/util.c -+++ b/net/mac80211/util.c -@@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_wiphy_privid; - - /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ - /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ --const unsigned char rfc1042_header[] = -+const unsigned char rfc1042_header[] __aligned(2) = - { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; - - /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ --const unsigned char bridge_tunnel_header[] = -+const unsigned char bridge_tunnel_header[] __aligned(2) = - { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; - - -diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c -index 457ebf9..8311bb2 100644 ---- a/net/mac80211/wext.c -+++ b/net/mac80211/wext.c -@@ -489,9 +489,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev, - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - if (sdata->vif.type == IEEE80211_IF_TYPE_STA || - sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { -- ap_addr->sa_family = ARPHRD_ETHER; -- memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); -- return 0; -+ if (sdata->u.sta.state == IEEE80211_ASSOCIATED) { -+ ap_addr->sa_family = ARPHRD_ETHER; -+ memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); -+ return 0; -+ } else { -+ memset(&ap_addr->sa_data, 0, ETH_ALEN); -+ return 0; -+ } - } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) { - ap_addr->sa_family = ARPHRD_ETHER; - memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN); -diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c -index e31beeb..e8f0dea 100644 ---- a/net/netfilter/nf_conntrack_expect.c -+++ b/net/netfilter/nf_conntrack_expect.c -@@ -587,10 +587,10 @@ int __init nf_conntrack_expect_init(void) - return 0; - - err3: -+ kmem_cache_destroy(nf_ct_expect_cachep); -+err2: - nf_ct_free_hashtable(nf_ct_expect_hash, nf_ct_expect_vmalloc, - nf_ct_expect_hsize); --err2: -- kmem_cache_destroy(nf_ct_expect_cachep); - err1: - return err; - } diff --git a/debian/patches/series/1~experimental.1 b/debian/patches/series/1~experimental.1 index 05088ca57..8101724ad 100644 --- a/debian/patches/series/1~experimental.1 +++ b/debian/patches/series/1~experimental.1 @@ -1,4 +1,4 @@ -+ bugfix/all/patch-2.6.26-rc4-git4 +#+ bugfix/all/patch-2.6.26-rc4-git4 + debian/version.patch + debian/kernelvariables.patch + debian/doc-build-parallel.patch