Commit Graph

4574 Commits

Author SHA1 Message Date
黄涛
89c416b443 rk_sysrq: fix for v2.6.36 2011-08-01 11:20:53 +08:00
黄涛
932cf8f1d4 Revert "drivers: misc: pass miscdevice pointer via file private data"
This reverts commit fa1f68db6c.
Which broken pmem driver.
2011-08-01 02:16:52 +08:00
黄涛
44a7c5a23d Merge remote-tracking branch 'remotes/tegra/android-tegra-2.6.36-honeycomb-mr1' into develop-2.6.36
Conflicts:
	Makefile
	arch/arm/Kconfig
	arch/arm/Makefile
	arch/arm/common/Kconfig
	arch/arm/common/Makefile
	arch/arm/common/pl330.c
	arch/arm/include/asm/dma.h
	arch/arm/include/asm/memory.h
	arch/arm/kernel/Makefile
	arch/arm/kernel/dma.c
	arch/arm/kernel/process.c
	arch/arm/mm/Kconfig
	arch/arm/mm/mmu.c
	arch/arm/mm/proc-v7.S
	arch/arm/oprofile/op_model_v7.c
	arch/arm/tools/mach-types
	block/blk-core.c
	drivers/base/firmware_class.c
	drivers/base/platform.c
	drivers/bluetooth/Kconfig
	drivers/bluetooth/hci_h4.c
	drivers/char/Makefile
	drivers/gpio/Kconfig
	drivers/gpio/Makefile
	drivers/gpio/gpiolib.c
	drivers/gpio/wm831x-gpio.c
	drivers/gpio/wm8994-gpio.c
	drivers/i2c/busses/Kconfig
	drivers/i2c/busses/Makefile
	drivers/i2c/i2c-core.c
	drivers/input/keyboard/Kconfig
	drivers/input/keyboard/Makefile
	drivers/input/keyboard/matrix_keypad.c
	drivers/input/misc/Kconfig
	drivers/input/misc/Makefile
	drivers/input/misc/wm831x-on.c
	drivers/input/touchscreen/Kconfig
	drivers/input/touchscreen/Makefile
	drivers/leds/Kconfig
	drivers/leds/Makefile
	drivers/media/video/Kconfig
	drivers/media/video/Makefile
	drivers/media/video/soc_camera.c
	drivers/media/video/uvc/uvc_queue.c
	drivers/mfd/Kconfig
	drivers/mfd/Makefile
	drivers/mfd/wm831x-core.c
	drivers/mfd/wm831x-irq.c
	drivers/mfd/wm8994-core.c
	drivers/misc/Kconfig
	drivers/misc/Makefile
	drivers/mmc/core/sdio_io.c
	drivers/mtd/mtd_blkdevs.c
	drivers/mtd/mtdblock.c
	drivers/mtd/nand/Makefile
	drivers/net/dm9000.c
	drivers/net/irda/Kconfig
	drivers/net/usb/Kconfig
	drivers/net/usb/Makefile
	drivers/net/wireless/Kconfig
	drivers/net/wireless/Makefile
	drivers/net/wireless/adm8211.c
	drivers/net/wireless/adm8211.h
	drivers/net/wireless/airo.c
	drivers/net/wireless/airo_cs.c
	drivers/net/wireless/at76c50x-usb.c
	drivers/net/wireless/at76c50x-usb.h
	drivers/net/wireless/ath/Kconfig
	drivers/net/wireless/ath/Makefile
	drivers/net/wireless/ath/ar9170/Kconfig
	drivers/net/wireless/ath/ar9170/ar9170.h
	drivers/net/wireless/ath/ar9170/cmd.c
	drivers/net/wireless/ath/ar9170/cmd.h
	drivers/net/wireless/ath/ar9170/eeprom.h
	drivers/net/wireless/ath/ar9170/hw.h
	drivers/net/wireless/ath/ar9170/led.c
	drivers/net/wireless/ath/ar9170/mac.c
	drivers/net/wireless/ath/ar9170/main.c
	drivers/net/wireless/ath/ar9170/phy.c
	drivers/net/wireless/ath/ar9170/usb.c
	drivers/net/wireless/ath/ar9170/usb.h
	drivers/net/wireless/ath/ath.h
	drivers/net/wireless/ath/ath5k/Kconfig
	drivers/net/wireless/ath/ath5k/Makefile
	drivers/net/wireless/ath/ath5k/ath5k.h
	drivers/net/wireless/ath/ath5k/attach.c
	drivers/net/wireless/ath/ath5k/base.c
	drivers/net/wireless/ath/ath5k/base.h
	drivers/net/wireless/ath/ath5k/caps.c
	drivers/net/wireless/ath/ath5k/debug.c
	drivers/net/wireless/ath/ath5k/debug.h
	drivers/net/wireless/ath/ath5k/desc.c
	drivers/net/wireless/ath/ath5k/desc.h
	drivers/net/wireless/ath/ath5k/dma.c
	drivers/net/wireless/ath/ath5k/eeprom.c
	drivers/net/wireless/ath/ath5k/eeprom.h
	drivers/net/wireless/ath/ath5k/gpio.c
	drivers/net/wireless/ath/ath5k/initvals.c
	drivers/net/wireless/ath/ath5k/led.c
	drivers/net/wireless/ath/ath5k/pcu.c
	drivers/net/wireless/ath/ath5k/phy.c
	drivers/net/wireless/ath/ath5k/qcu.c
	drivers/net/wireless/ath/ath5k/reg.h
	drivers/net/wireless/ath/ath5k/reset.c
	drivers/net/wireless/ath/ath9k/Kconfig
	drivers/net/wireless/ath/ath9k/Makefile
	drivers/net/wireless/ath/ath9k/ahb.c
	drivers/net/wireless/ath/ath9k/ani.c
	drivers/net/wireless/ath/ath9k/ani.h
	drivers/net/wireless/ath/ath9k/ath9k.h
	drivers/net/wireless/ath/ath9k/beacon.c
	drivers/net/wireless/ath/ath9k/btcoex.c
	drivers/net/wireless/ath/ath9k/btcoex.h
	drivers/net/wireless/ath/ath9k/calib.c
	drivers/net/wireless/ath/ath9k/calib.h
	drivers/net/wireless/ath/ath9k/debug.c
	drivers/net/wireless/ath/ath9k/debug.h
	drivers/net/wireless/ath/ath9k/eeprom.c
	drivers/net/wireless/ath/ath9k/eeprom.h
	drivers/net/wireless/ath/ath9k/eeprom_4k.c
	drivers/net/wireless/ath/ath9k/eeprom_9287.c
	drivers/net/wireless/ath/ath9k/eeprom_def.c
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/hw.h
	drivers/net/wireless/ath/ath9k/mac.c
	drivers/net/wireless/ath/ath9k/mac.h
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/ath9k/pci.c
	drivers/net/wireless/ath/ath9k/phy.h
	drivers/net/wireless/ath/ath9k/rc.c
	drivers/net/wireless/ath/ath9k/rc.h
	drivers/net/wireless/ath/ath9k/recv.c
	drivers/net/wireless/ath/ath9k/reg.h
	drivers/net/wireless/ath/ath9k/virtual.c
	drivers/net/wireless/ath/ath9k/xmit.c
	drivers/net/wireless/ath/regd.c
	drivers/net/wireless/ath/regd.h
	drivers/net/wireless/ath/regd_common.h
	drivers/net/wireless/atmel.c
	drivers/net/wireless/atmel_cs.c
	drivers/net/wireless/atmel_pci.c
	drivers/net/wireless/b43/Kconfig
	drivers/net/wireless/b43/Makefile
	drivers/net/wireless/b43/b43.h
	drivers/net/wireless/b43/dma.c
	drivers/net/wireless/b43/dma.h
	drivers/net/wireless/b43/leds.c
	drivers/net/wireless/b43/lo.c
	drivers/net/wireless/b43/main.c
	drivers/net/wireless/b43/pcmcia.c
	drivers/net/wireless/b43/phy_a.c
	drivers/net/wireless/b43/phy_common.c
	drivers/net/wireless/b43/phy_common.h
	drivers/net/wireless/b43/phy_g.c
	drivers/net/wireless/b43/phy_lp.c
	drivers/net/wireless/b43/phy_lp.h
	drivers/net/wireless/b43/phy_n.c
	drivers/net/wireless/b43/phy_n.h
	drivers/net/wireless/b43/pio.c
	drivers/net/wireless/b43/pio.h
	drivers/net/wireless/b43/rfkill.c
	drivers/net/wireless/b43/sdio.c
	drivers/net/wireless/b43/tables_nphy.c
	drivers/net/wireless/b43/tables_nphy.h
	drivers/net/wireless/b43/wa.c
	drivers/net/wireless/b43/xmit.c
	drivers/net/wireless/b43/xmit.h
	drivers/net/wireless/b43legacy/Kconfig
	drivers/net/wireless/b43legacy/b43legacy.h
	drivers/net/wireless/b43legacy/dma.c
	drivers/net/wireless/b43legacy/dma.h
	drivers/net/wireless/b43legacy/leds.h
	drivers/net/wireless/b43legacy/main.c
	drivers/net/wireless/b43legacy/phy.c
	drivers/net/wireless/b43legacy/pio.c
	drivers/net/wireless/b43legacy/pio.h
	drivers/net/wireless/b43legacy/rfkill.c
	drivers/net/wireless/b43legacy/xmit.c
	drivers/net/wireless/b43legacy/xmit.h
	drivers/net/wireless/bcm4329/Kconfig
	drivers/net/wireless/bcm4329/Makefile
	drivers/net/wireless/bcm4329/bcmsdh_linux.c
	drivers/net/wireless/bcm4329/bcmsdh_sdmmc_linux.c
	drivers/net/wireless/bcm4329/dhd.h
	drivers/net/wireless/bcm4329/dhd_cdc.c
	drivers/net/wireless/bcm4329/dhd_common.c
	drivers/net/wireless/bcm4329/dhd_custom_gpio.c
	drivers/net/wireless/bcm4329/dhd_linux.c
	drivers/net/wireless/bcm4329/dhd_sdio.c
	drivers/net/wireless/bcm4329/include/epivers.h
	drivers/net/wireless/bcm4329/include/wlioctl.h
	drivers/net/wireless/bcm4329/linux_osl.c
	drivers/net/wireless/bcm4329/wl_iw.c
	drivers/net/wireless/bcm4329/wl_iw.h
	drivers/net/wireless/hostap/Kconfig
	drivers/net/wireless/hostap/hostap_80211.h
	drivers/net/wireless/hostap/hostap_80211_rx.c
	drivers/net/wireless/hostap/hostap_80211_tx.c
	drivers/net/wireless/hostap/hostap_ap.c
	drivers/net/wireless/hostap/hostap_common.h
	drivers/net/wireless/hostap/hostap_cs.c
	drivers/net/wireless/hostap/hostap_download.c
	drivers/net/wireless/hostap/hostap_hw.c
	drivers/net/wireless/hostap/hostap_info.c
	drivers/net/wireless/hostap/hostap_ioctl.c
	drivers/net/wireless/hostap/hostap_main.c
	drivers/net/wireless/hostap/hostap_pci.c
	drivers/net/wireless/hostap/hostap_plx.c
	drivers/net/wireless/hostap/hostap_wlan.h
	drivers/net/wireless/ipw2x00/Kconfig
	drivers/net/wireless/ipw2x00/ipw2100.c
	drivers/net/wireless/ipw2x00/ipw2100.h
	drivers/net/wireless/ipw2x00/ipw2200.c
	drivers/net/wireless/ipw2x00/ipw2200.h
	drivers/net/wireless/ipw2x00/libipw.h
	drivers/net/wireless/ipw2x00/libipw_geo.c
	drivers/net/wireless/ipw2x00/libipw_module.c
	drivers/net/wireless/ipw2x00/libipw_rx.c
	drivers/net/wireless/ipw2x00/libipw_tx.c
	drivers/net/wireless/ipw2x00/libipw_wx.c
	drivers/net/wireless/iwlwifi/Kconfig
	drivers/net/wireless/iwlwifi/Makefile
	drivers/net/wireless/iwlwifi/iwl-1000.c
	drivers/net/wireless/iwlwifi/iwl-3945-fh.h
	drivers/net/wireless/iwlwifi/iwl-3945-hw.h
	drivers/net/wireless/iwlwifi/iwl-3945-led.c
	drivers/net/wireless/iwlwifi/iwl-3945-led.h
	drivers/net/wireless/iwlwifi/iwl-3945-rs.c
	drivers/net/wireless/iwlwifi/iwl-3945.c
	drivers/net/wireless/iwlwifi/iwl-3945.h
	drivers/net/wireless/iwlwifi/iwl-4965-hw.h
	drivers/net/wireless/iwlwifi/iwl-4965.c
	drivers/net/wireless/iwlwifi/iwl-5000-hw.h
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/iwlwifi/iwl-6000-hw.h
	drivers/net/wireless/iwlwifi/iwl-6000.c
	drivers/net/wireless/iwlwifi/iwl-agn-rs.c
	drivers/net/wireless/iwlwifi/iwl-agn-rs.h
	drivers/net/wireless/iwlwifi/iwl-agn.c
	drivers/net/wireless/iwlwifi/iwl-calib.h
	drivers/net/wireless/iwlwifi/iwl-commands.h
	drivers/net/wireless/iwlwifi/iwl-core.c
	drivers/net/wireless/iwlwifi/iwl-core.h
	drivers/net/wireless/iwlwifi/iwl-csr.h
	drivers/net/wireless/iwlwifi/iwl-debug.h
	drivers/net/wireless/iwlwifi/iwl-debugfs.c
	drivers/net/wireless/iwlwifi/iwl-dev.h
	drivers/net/wireless/iwlwifi/iwl-eeprom.c
	drivers/net/wireless/iwlwifi/iwl-eeprom.h
	drivers/net/wireless/iwlwifi/iwl-fh.h
	drivers/net/wireless/iwlwifi/iwl-hcmd.c
	drivers/net/wireless/iwlwifi/iwl-helpers.h
	drivers/net/wireless/iwlwifi/iwl-io.h
	drivers/net/wireless/iwlwifi/iwl-led.c
	drivers/net/wireless/iwlwifi/iwl-led.h
	drivers/net/wireless/iwlwifi/iwl-power.c
	drivers/net/wireless/iwlwifi/iwl-power.h
	drivers/net/wireless/iwlwifi/iwl-prph.h
	drivers/net/wireless/iwlwifi/iwl-rx.c
	drivers/net/wireless/iwlwifi/iwl-scan.c
	drivers/net/wireless/iwlwifi/iwl-spectrum.h
	drivers/net/wireless/iwlwifi/iwl-sta.c
	drivers/net/wireless/iwlwifi/iwl-sta.h
	drivers/net/wireless/iwlwifi/iwl-tx.c
	drivers/net/wireless/iwlwifi/iwl3945-base.c
	drivers/net/wireless/iwmc3200wifi/Kconfig
	drivers/net/wireless/iwmc3200wifi/Makefile
	drivers/net/wireless/iwmc3200wifi/bus.h
	drivers/net/wireless/iwmc3200wifi/cfg80211.c
	drivers/net/wireless/iwmc3200wifi/commands.c
	drivers/net/wireless/iwmc3200wifi/commands.h
	drivers/net/wireless/iwmc3200wifi/debug.h
	drivers/net/wireless/iwmc3200wifi/debugfs.c
	drivers/net/wireless/iwmc3200wifi/eeprom.c
	drivers/net/wireless/iwmc3200wifi/eeprom.h
	drivers/net/wireless/iwmc3200wifi/fw.c
	drivers/net/wireless/iwmc3200wifi/hal.c
	drivers/net/wireless/iwmc3200wifi/hal.h
	drivers/net/wireless/iwmc3200wifi/iwm.h
	drivers/net/wireless/iwmc3200wifi/lmac.h
	drivers/net/wireless/iwmc3200wifi/main.c
	drivers/net/wireless/iwmc3200wifi/netdev.c
	drivers/net/wireless/iwmc3200wifi/rx.c
	drivers/net/wireless/iwmc3200wifi/sdio.c
	drivers/net/wireless/iwmc3200wifi/tx.c
	drivers/net/wireless/iwmc3200wifi/umac.h
	drivers/net/wireless/libertas/Makefile
	drivers/net/wireless/libertas/README
	drivers/net/wireless/libertas/cmd.c
	drivers/net/wireless/libertas/cmd.h
	drivers/net/wireless/libertas/cmdresp.c
	drivers/net/wireless/libertas/debugfs.c
	drivers/net/wireless/libertas/decl.h
	drivers/net/wireless/libertas/defs.h
	drivers/net/wireless/libertas/dev.h
	drivers/net/wireless/libertas/ethtool.c
	drivers/net/wireless/libertas/host.h
	drivers/net/wireless/libertas/if_cs.c
	drivers/net/wireless/libertas/if_sdio.c
	drivers/net/wireless/libertas/if_sdio.h
	drivers/net/wireless/libertas/if_spi.c
	drivers/net/wireless/libertas/if_usb.c
	drivers/net/wireless/libertas/main.c
	drivers/net/wireless/libertas/radiotap.h
	drivers/net/wireless/libertas/rx.c
	drivers/net/wireless/libertas/tx.c
	drivers/net/wireless/libertas/types.h
	drivers/net/wireless/libertas_tf/cmd.c
	drivers/net/wireless/libertas_tf/if_usb.c
	drivers/net/wireless/libertas_tf/libertas_tf.h
	drivers/net/wireless/libertas_tf/main.c
	drivers/net/wireless/mac80211_hwsim.c
	drivers/net/wireless/mv8686/scan.h
	drivers/net/wireless/mv8686/wext.h
	drivers/net/wireless/mwl8k.c
	drivers/net/wireless/orinoco/Kconfig
	drivers/net/wireless/orinoco/Makefile
	drivers/net/wireless/orinoco/airport.c
	drivers/net/wireless/orinoco/cfg.c
	drivers/net/wireless/orinoco/fw.c
	drivers/net/wireless/orinoco/hermes.c
	drivers/net/wireless/orinoco/hermes.h
	drivers/net/wireless/orinoco/hermes_dld.c
	drivers/net/wireless/orinoco/hw.c
	drivers/net/wireless/orinoco/hw.h
	drivers/net/wireless/orinoco/main.c
	drivers/net/wireless/orinoco/main.h
	drivers/net/wireless/orinoco/orinoco.h
	drivers/net/wireless/orinoco/orinoco_cs.c
	drivers/net/wireless/orinoco/orinoco_nortel.c
	drivers/net/wireless/orinoco/orinoco_pci.c
	drivers/net/wireless/orinoco/orinoco_plx.c
	drivers/net/wireless/orinoco/orinoco_tmd.c
	drivers/net/wireless/orinoco/scan.c
	drivers/net/wireless/orinoco/spectrum_cs.c
	drivers/net/wireless/orinoco/wext.c
	drivers/net/wireless/p54/Kconfig
	drivers/net/wireless/p54/eeprom.c
	drivers/net/wireless/p54/fwio.c
	drivers/net/wireless/p54/led.c
	drivers/net/wireless/p54/main.c
	drivers/net/wireless/p54/net2280.h
	drivers/net/wireless/p54/p54.h
	drivers/net/wireless/p54/p54pci.c
	drivers/net/wireless/p54/p54pci.h
	drivers/net/wireless/p54/p54spi.c
	drivers/net/wireless/p54/p54spi.h
	drivers/net/wireless/p54/p54usb.c
	drivers/net/wireless/p54/p54usb.h
	drivers/net/wireless/p54/txrx.c
	drivers/net/wireless/prism54/isl_ioctl.c
	drivers/net/wireless/prism54/isl_oid.h
	drivers/net/wireless/prism54/islpci_dev.c
	drivers/net/wireless/prism54/islpci_eth.c
	drivers/net/wireless/prism54/islpci_eth.h
	drivers/net/wireless/prism54/islpci_hotplug.c
	drivers/net/wireless/prism54/islpci_mgt.c
	drivers/net/wireless/prism54/islpci_mgt.h
	drivers/net/wireless/prism54/oid_mgt.c
	drivers/net/wireless/ray_cs.c
	drivers/net/wireless/ray_cs.h
	drivers/net/wireless/rndis_wlan.c
	drivers/net/wireless/rt2x00/Kconfig
	drivers/net/wireless/rt2x00/Makefile
	drivers/net/wireless/rt2x00/rt2400pci.c
	drivers/net/wireless/rt2x00/rt2400pci.h
	drivers/net/wireless/rt2x00/rt2500pci.c
	drivers/net/wireless/rt2x00/rt2500pci.h
	drivers/net/wireless/rt2x00/rt2500usb.c
	drivers/net/wireless/rt2x00/rt2500usb.h
	drivers/net/wireless/rt2x00/rt2800usb.c
	drivers/net/wireless/rt2x00/rt2800usb.h
	drivers/net/wireless/rt2x00/rt2x00.h
	drivers/net/wireless/rt2x00/rt2x00config.c
	drivers/net/wireless/rt2x00/rt2x00crypto.c
	drivers/net/wireless/rt2x00/rt2x00debug.c
	drivers/net/wireless/rt2x00/rt2x00debug.h
	drivers/net/wireless/rt2x00/rt2x00dev.c
	drivers/net/wireless/rt2x00/rt2x00dump.h
	drivers/net/wireless/rt2x00/rt2x00firmware.c
	drivers/net/wireless/rt2x00/rt2x00ht.c
	drivers/net/wireless/rt2x00/rt2x00leds.c
	drivers/net/wireless/rt2x00/rt2x00leds.h
	drivers/net/wireless/rt2x00/rt2x00lib.h
	drivers/net/wireless/rt2x00/rt2x00link.c
	drivers/net/wireless/rt2x00/rt2x00mac.c
	drivers/net/wireless/rt2x00/rt2x00pci.c
	drivers/net/wireless/rt2x00/rt2x00pci.h
	drivers/net/wireless/rt2x00/rt2x00queue.c
	drivers/net/wireless/rt2x00/rt2x00queue.h
	drivers/net/wireless/rt2x00/rt2x00reg.h
	drivers/net/wireless/rt2x00/rt2x00usb.c
	drivers/net/wireless/rt2x00/rt2x00usb.h
	drivers/net/wireless/rt2x00/rt61pci.c
	drivers/net/wireless/rt2x00/rt61pci.h
	drivers/net/wireless/rt2x00/rt73usb.c
	drivers/net/wireless/rt2x00/rt73usb.h
	drivers/net/wireless/rtl818x/rtl8180.h
	drivers/net/wireless/rtl818x/rtl8180_dev.c
	drivers/net/wireless/rtl818x/rtl8180_grf5101.c
	drivers/net/wireless/rtl818x/rtl8180_max2820.c
	drivers/net/wireless/rtl818x/rtl8180_rtl8225.c
	drivers/net/wireless/rtl818x/rtl8180_sa2400.c
	drivers/net/wireless/rtl818x/rtl8187.h
	drivers/net/wireless/rtl818x/rtl8187_dev.c
	drivers/net/wireless/rtl818x/rtl8187_leds.c
	drivers/net/wireless/rtl818x/rtl8187_leds.h
	drivers/net/wireless/rtl818x/rtl8187_rfkill.c
	drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
	drivers/net/wireless/rtl818x/rtl818x.h
	drivers/net/wireless/wl12xx/Kconfig
	drivers/net/wireless/wl12xx/Makefile
	drivers/net/wireless/wl12xx/wl1251.h
	drivers/net/wireless/wl12xx/wl1251_acx.c
	drivers/net/wireless/wl12xx/wl1251_acx.h
	drivers/net/wireless/wl12xx/wl1251_boot.c
	drivers/net/wireless/wl12xx/wl1251_cmd.c
	drivers/net/wireless/wl12xx/wl1251_cmd.h
	drivers/net/wireless/wl12xx/wl1251_debugfs.c
	drivers/net/wireless/wl12xx/wl1251_event.c
	drivers/net/wireless/wl12xx/wl1251_event.h
	drivers/net/wireless/wl12xx/wl1251_init.c
	drivers/net/wireless/wl12xx/wl1251_init.h
	drivers/net/wireless/wl12xx/wl1251_io.h
	drivers/net/wireless/wl12xx/wl1251_main.c
	drivers/net/wireless/wl12xx/wl1251_ps.c
	drivers/net/wireless/wl12xx/wl1251_ps.h
	drivers/net/wireless/wl12xx/wl1251_reg.h
	drivers/net/wireless/wl12xx/wl1251_rx.c
	drivers/net/wireless/wl12xx/wl1251_rx.h
	drivers/net/wireless/wl12xx/wl1251_sdio.c
	drivers/net/wireless/wl12xx/wl1251_spi.c
	drivers/net/wireless/wl12xx/wl1251_tx.c
	drivers/net/wireless/wl12xx/wl1251_tx.h
	drivers/net/wireless/wl12xx/wl1271.h
	drivers/net/wireless/wl12xx/wl1271_acx.c
	drivers/net/wireless/wl12xx/wl1271_acx.h
	drivers/net/wireless/wl12xx/wl1271_boot.c
	drivers/net/wireless/wl12xx/wl1271_boot.h
	drivers/net/wireless/wl12xx/wl1271_cmd.c
	drivers/net/wireless/wl12xx/wl1271_cmd.h
	drivers/net/wireless/wl12xx/wl1271_debugfs.c
	drivers/net/wireless/wl12xx/wl1271_event.c
	drivers/net/wireless/wl12xx/wl1271_event.h
	drivers/net/wireless/wl12xx/wl1271_init.c
	drivers/net/wireless/wl12xx/wl1271_init.h
	drivers/net/wireless/wl12xx/wl1271_main.c
	drivers/net/wireless/wl12xx/wl1271_ps.c
	drivers/net/wireless/wl12xx/wl1271_ps.h
	drivers/net/wireless/wl12xx/wl1271_reg.h
	drivers/net/wireless/wl12xx/wl1271_rx.c
	drivers/net/wireless/wl12xx/wl1271_rx.h
	drivers/net/wireless/wl12xx/wl1271_spi.c
	drivers/net/wireless/wl12xx/wl1271_tx.c
	drivers/net/wireless/wl12xx/wl1271_tx.h
	drivers/net/wireless/wl12xx/wl12xx_80211.h
	drivers/net/wireless/wl3501.h
	drivers/net/wireless/wl3501_cs.c
	drivers/net/wireless/zd1201.c
	drivers/net/wireless/zd1211rw/Kconfig
	drivers/net/wireless/zd1211rw/zd_chip.c
	drivers/net/wireless/zd1211rw/zd_chip.h
	drivers/net/wireless/zd1211rw/zd_mac.c
	drivers/net/wireless/zd1211rw/zd_mac.h
	drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
	drivers/net/wireless/zd1211rw/zd_usb.c
	drivers/net/wireless/zd1211rw/zd_usb.h
	drivers/power/Kconfig
	drivers/power/Makefile
	drivers/power/wm831x_backup.c
	drivers/power/wm831x_power.c
	drivers/regulator/Kconfig
	drivers/regulator/Makefile
	drivers/regulator/wm831x-dcdc.c
	drivers/regulator/wm8994-regulator.c
	drivers/rtc/Makefile
	drivers/rtc/rtc-wm831x.c
	drivers/serial/Kconfig
	drivers/spi/Kconfig
	drivers/spi/Makefile
	drivers/staging/Kconfig
	drivers/staging/Makefile
	drivers/staging/dream/Kconfig
	drivers/staging/iio/Kconfig
	drivers/staging/iio/Makefile
	drivers/usb/core/hub.c
	drivers/usb/gadget/gadget_chips.h
	drivers/video/Kconfig
	drivers/video/backlight/Kconfig
	drivers/video/backlight/Makefile
	drivers/video/backlight/wm831x_bl.c
	drivers/watchdog/Kconfig
	drivers/watchdog/Makefile
	fs/partitions/check.c
	include/asm-generic/gpio.h
	include/linux/fb.h
	include/linux/i82593.h
	include/linux/l3g4200d.h
	include/linux/mfd/wm831x/core.h
	include/linux/mfd/wm831x/pdata.h
	include/linux/mfd/wm8994/core.h
	include/linux/mfd/wm8994/gpio.h
	include/linux/mfd/wm8994/pdata.h
	include/linux/mmc/card.h
	include/linux/mmc/host.h
	include/linux/mtd/nand.h
	include/linux/serial_core.h
	include/linux/videodev2.h
	include/media/v4l2-chip-ident.h
	include/sound/soc-dai.h
	include/sound/soc-dapm.h
	sound/soc/codecs/Kconfig
	sound/soc/codecs/Makefile
	sound/soc/codecs/wm8900.c
	sound/soc/codecs/wm8988.c
	sound/soc/codecs/wm8994.c
	sound/soc/codecs/wm8994.h
	sound/soc/codecs/wm_hubs.c
	sound/soc/soc-dapm.c
2011-08-01 00:04:45 +08:00
黄涛
d3aeed4ff6 Revert "[ARM] armv6 dcc tty driver"
This reverts commit 8084e5f64a.
2011-07-30 23:09:52 +08:00
黄涛
689ee95fc9 Revert "Make /dev/mem configurable, as we don't want it."
This reverts commit 196f3dc567.
2011-07-30 23:09:36 +08:00
黄涛
380873f76d Revert "Merge commit 'v2.6.32.9' into android-2.6.32"
This reverts commit 67078ecae3, reversing
changes made to dc136618cb.

Conflicts:

	drivers/net/wireless/ath/ar9170/usb.c
	drivers/net/wireless/ath/ath5k/base.c
	drivers/net/wireless/ath/ath5k/eeprom.c
	drivers/net/wireless/ath/ath5k/eeprom.h
	drivers/net/wireless/ath/ath5k/phy.c
	drivers/net/wireless/ath/ath9k/ath9k.h
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/hw.h
	drivers/net/wireless/ath/ath9k/mac.c
	drivers/net/wireless/ath/ath9k/mac.h
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/ath9k/reg.h
	drivers/net/wireless/ath/ath9k/xmit.c
	drivers/net/wireless/b43/b43.h
	drivers/net/wireless/b43/main.c
	drivers/net/wireless/b43/rfkill.c
	drivers/net/wireless/b43legacy/rfkill.c
	drivers/net/wireless/ipw2x00/ipw2100.c
	drivers/net/wireless/iwlwifi/iwl-3945.c
	drivers/net/wireless/iwlwifi/iwl-4965.c
	drivers/net/wireless/iwlwifi/iwl-5000-hw.h
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/iwlwifi/iwl-agn-rs.c
	drivers/net/wireless/iwlwifi/iwl-core.c
	drivers/net/wireless/iwlwifi/iwl-dev.h
	drivers/net/wireless/iwlwifi/iwl-eeprom.c
	drivers/net/wireless/iwlwifi/iwl-eeprom.h
	drivers/net/wireless/iwlwifi/iwl3945-base.c
	drivers/net/wireless/iwmc3200wifi/iwm.h
	drivers/net/wireless/libertas/scan.c
	drivers/net/wireless/libertas/wext.c
	drivers/net/wireless/orinoco/wext.c
	drivers/net/wireless/rt2x00/rt61pci.c
	drivers/net/wireless/rtl818x/rtl8187.h
	drivers/net/wireless/rtl818x/rtl8187_dev.c
	drivers/net/wireless/rtl818x/rtl8187_rfkill.c
	drivers/usb/serial/option.c
2011-07-30 22:24:29 +08:00
黄涛
35b9b535e7 Revert "Merge remote branch 'linux-2.6.32.y/master' into develop"
This reverts commit 6e2688ca84, reversing
changes made to 4b7c9de4de.

Conflicts:

	drivers/gpio/wm831x-gpio.c
	drivers/i2c/busses/Kconfig
	drivers/net/dm9000.c
	drivers/net/wireless/airo.c
	drivers/net/wireless/ath/ar9170/hw.h
	drivers/net/wireless/ath/ar9170/main.c
	drivers/net/wireless/ath/ar9170/usb.c
	drivers/net/wireless/ath/ath5k/ath5k.h
	drivers/net/wireless/ath/ath5k/attach.c
	drivers/net/wireless/ath/ath5k/base.c
	drivers/net/wireless/ath/ath5k/qcu.c
	drivers/net/wireless/ath/ath5k/reset.c
	drivers/net/wireless/ath/ath9k/ath9k.h
	drivers/net/wireless/ath/ath9k/beacon.c
	drivers/net/wireless/ath/ath9k/eeprom.h
	drivers/net/wireless/ath/ath9k/eeprom_def.c
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/hw.h
	drivers/net/wireless/ath/ath9k/initvals.h
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/ath9k/pci.c
	drivers/net/wireless/ath/ath9k/phy.h
	drivers/net/wireless/ath/ath9k/rc.c
	drivers/net/wireless/ath/ath9k/xmit.c
	drivers/net/wireless/ath/regd.h
	drivers/net/wireless/b43/Kconfig
	drivers/net/wireless/b43/Makefile
	drivers/net/wireless/b43/b43.h
	drivers/net/wireless/b43/dma.c
	drivers/net/wireless/b43/main.c
	drivers/net/wireless/b43/pio.c
	drivers/net/wireless/b43/pio.h
	drivers/net/wireless/b43/xmit.c
	drivers/net/wireless/b43legacy/main.c
	drivers/net/wireless/hostap/hostap_cs.c
	drivers/net/wireless/hostap/hostap_hw.c
	drivers/net/wireless/hostap/hostap_pci.c
	drivers/net/wireless/hostap/hostap_wlan.h
	drivers/net/wireless/iwlwifi/iwl-3945.c
	drivers/net/wireless/iwlwifi/iwl-4965.c
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/iwlwifi/iwl-agn-rs.c
	drivers/net/wireless/iwlwifi/iwl-agn.c
	drivers/net/wireless/iwlwifi/iwl-core.c
	drivers/net/wireless/iwlwifi/iwl-core.h
	drivers/net/wireless/iwlwifi/iwl-dev.h
	drivers/net/wireless/iwlwifi/iwl-helpers.h
	drivers/net/wireless/iwlwifi/iwl-rx.c
	drivers/net/wireless/iwlwifi/iwl-scan.c
	drivers/net/wireless/iwlwifi/iwl-tx.c
	drivers/net/wireless/iwlwifi/iwl3945-base.c
	drivers/net/wireless/libertas/if_sdio1.c
	drivers/net/wireless/p54/eeprom.c
	drivers/net/wireless/p54/p54pci.c
	drivers/net/wireless/p54/p54usb.c
	drivers/net/wireless/p54/txrx.c
	drivers/net/wireless/rndis_wlan.c
	drivers/net/wireless/rtl818x/rtl8180_dev.c
	drivers/net/wireless/wl12xx/wl1251_debugfs.c
	drivers/net/wireless/wl12xx/wl1251_sdio.c
	drivers/usb/serial/option.c
	net/bluetooth/rfcomm/core.c
2011-07-30 16:24:52 +08:00
黄涛
7de15596db Revert "Merge remote branch 'linux-2.6.32.y/master' into develop"
This reverts commit 84aa38e58d, reversing
changes made to 9505d021e0.
2011-07-30 16:11:20 +08:00
黄涛
5f1e6e97d5 Revert "Merge remote-tracking branch 'linux-2.6.32.y/master' into develop"
This reverts commit 7cd3739f32, reversing
changes made to 2748ae2cc2.

Conflicts:

	drivers/usb/core/hub.c
	drivers/usb/serial/option.c
2011-07-30 16:09:59 +08:00
黄涛
6a3f004727 Revert "Merge remote-tracking branch 'linux-2.6.32.y/master' into develop"
This reverts commit 2caa51d22a, reversing
changes made to cc88c1f62a.
2011-07-30 16:01:15 +08:00
黄涛
2caa51d22a Merge remote-tracking branch 'linux-2.6.32.y/master' into develop
Merge Linux 2.6.32.42
Conflicts:
	Makefile
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/p54/p54usb.c
2011-06-28 09:47:32 +08:00
Luca Tettamanti
c8b6153da2 i8k: Avoid lahf in 64-bit code
commit bc1f419c76 upstream.

i8k uses lahf to read the flag register in 64-bit code; early x86-64
CPUs, however, lack this instruction and we get an invalid opcode
exception at runtime.
Use pushf to load the flag register into the stack instead.

Signed-off-by: Luca Tettamanti <kronos.it@gmail.com>
Reported-by: Jeff Rickman <jrickman@myamigos.us>
Tested-by: Jeff Rickman <jrickman@myamigos.us>
Tested-by: Harry G McGavran Jr <w5pny@arrl.net>
Cc: Massimo Dal Zotto <dz@debian.org>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-06-23 15:24:04 -07:00
黄涛
7cd3739f32 Merge remote-tracking branch 'linux-2.6.32.y/master' into develop
Merge Linux 2.6.32.41
Conflicts:
	Makefile
	drivers/mmc/core/core.c
	drivers/net/wireless/ath/ath9k/ath9k.h
	drivers/net/wireless/ath/ath9k/hw.c
	drivers/net/wireless/ath/ath9k/main.c
	drivers/net/wireless/ath/regd_common.h
	drivers/net/wireless/b43/dma.c
	drivers/net/wireless/b43/dma.h
	drivers/net/wireless/b43/sdio.c
	drivers/net/wireless/hostap/hostap_cs.c
	drivers/net/wireless/iwlwifi/iwl-5000.c
	drivers/net/wireless/iwlwifi/iwl-agn.c
	drivers/net/wireless/iwlwifi/iwl-helpers.h
	drivers/net/wireless/iwlwifi/iwl-tx.c
	drivers/net/wireless/libertas/cmd.c
	drivers/net/wireless/p54/p54pci.c
	drivers/net/wireless/p54/p54usb.c
	drivers/net/wireless/p54/txrx.c
	drivers/net/wireless/rt2x00/rt2400pci.c
	drivers/net/wireless/rt2x00/rt2500pci.c
	drivers/net/wireless/rt2x00/rt2500usb.c
	drivers/net/wireless/rt2x00/rt2800usb.c
	drivers/net/wireless/rt2x00/rt2x00.h
	drivers/net/wireless/rt2x00/rt2x00dev.c
	drivers/net/wireless/rt2x00/rt2x00queue.c
	drivers/net/wireless/rt2x00/rt61pci.c
	drivers/net/wireless/rt2x00/rt73usb.c
	drivers/usb/serial/option.c
	mm/shmem.c
2011-06-16 11:56:59 +08:00
Jim Bos
726f22c83d Fix gcc 4.5.1 miscompiling drivers/char/i8k.c (again)
commit 22d3243de8 upstream.

The fix in commit 6b4e81db25 ("i8k: Tell gcc that *regs gets
clobbered") to work around the gcc miscompiling i8k.c to add "+m
(*regs)" caused register pressure problems and a build failure.

Changing the 'asm' statement to 'asm volatile' instead should prevent
that and works around the gcc bug as well, so we can remove the "+m".

[ Background on the gcc bug: a memory clobber fails to mark the function
  the asm resides in as non-pure (aka "__attribute__((const))"), so if
  the function does nothing else that triggers the non-pure logic, gcc
  will think that that function has no side effects at all. As a result,
  callers will be mis-compiled.

  Adding the "+m" made gcc see that it's not a pure function, and so
  does "asm volatile". The problem was never really the need to mark
  "*regs" as changed, since the memory clobber did that part - the
  problem was just a bug in the gcc "pure" function analysis  - Linus ]

Signed-off-by: Jim Bos <jim876@xs4all.nl>
Acked-by: Jakub Jelinek <jakub@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-05-09 15:54:59 -07:00
Jim Bos
88e424fdd1 i8k: Tell gcc that *regs gets clobbered
commit 6b4e81db25 upstream.

More recent GCC caused the i8k driver to stop working, on Slackware
compiler was upgraded from gcc-4.4.4 to gcc-4.5.1 after which it didn't
work anymore, meaning the driver didn't load or gave total nonsensical
output.

As it turned out the asm(..) statement forgot to mention it modifies the
*regs variable.

Credits to Andi Kleen and Andreas Schwab for providing the fix.

Signed-off-by: Jim Bos <jim876@xs4all.nl>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-05-09 15:54:59 -07:00
Vasiliy Kulikov
5dd27a4cb3 agp: fix OOM and buffer overflow
commit b522f02184 upstream.

page_count is copied from userspace.  agp_allocate_memory() tries to
check whether this number is too big, but doesn't take into account the
wrap case.  Also agp_create_user_memory() doesn't check whether
alloc_size is calculated from num_agp_pages variable without overflow.
This may lead to allocation of too small buffer with following buffer
overflow.

Another problem in agp code is not addressed in the patch - kernel memory
exhaustion (AGPIOC_RESERVE and AGPIOC_ALLOCATE ioctls).  It is not checked
whether requested pid is a pid of the caller (no check in agpioc_reserve_wrap()).
Each allocation is limited to 16KB, though, there is no per-process limit.
This might lead to OOM situation, which is not even solved in case of the
caller death by OOM killer - the memory is allocated for another (faked) process.

Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-05-09 15:54:54 -07:00
Vasiliy Kulikov
148dc7bad6 agp: fix arbitrary kernel memory writes
commit 194b3da873 upstream.

pg_start is copied from userspace on AGPIOC_BIND and AGPIOC_UNBIND ioctl
cmds of agp_ioctl() and passed to agpioc_bind_wrap().  As said in the
comment, (pg_start + mem->page_count) may wrap in case of AGPIOC_BIND,
and it is not checked at all in case of AGPIOC_UNBIND.  As a result, user
with sufficient privileges (usually "video" group) may generate either
local DoS or privilege escalation.

Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-05-09 15:54:54 -07:00
Peter Huewe
913bb1e135 char/tpm: Fix unitialized usage of data buffer
commit 1309d7afbe upstream.

This patch fixes information leakage to the userspace by initializing
the data buffer to zero.

Reported-by: Peter Huewe <huewe.external@infineon.com>
Signed-off-by: Peter Huewe <huewe.external@infineon.com>
Signed-off-by: Marcel Selhorst <m.selhorst@sirrix.com>
[ Also removed the silly "* sizeof(u8)".  If that isn't 1, we have way
  deeper problems than a simple multiplication can fix.   - Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-04-14 16:53:34 -07:00
Stefan Berger
25e442e2ea tpm_tis: Use timeouts returned from TPM
commit 9b29050f8f upstream.

The current TPM TIS driver in git discards the timeout values returned
from the TPM. The check of the response packet needs to consider that
the return_code field is 0 on success and the size of the expected
packet is equivalent to the header size + u32 length indicator for the
TPM_GetCapability() result + 3 timeout indicators of type u32.

I am also adding a sysfs entry 'timeouts' showing the timeouts that are
being used.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Tested-by: Guillaume Chazarain <guichaz@gmail.com>
Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-17 15:37:11 -08:00
Rajiv Andrade
5718043736 TPM: Long default timeout fix
commit c4ff4b829e upstream.

If duration variable value is 0 at this point, it's because
chip->vendor.duration wasn't filled by tpm_get_timeouts() yet.
This patch sets then the lowest timeout just to give enough
time for tpm_get_timeouts() to further succeed.

This fix avoids long boot times in case another entity attempts
to send commands to the TPM when the TPM isn't accessible.

Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-17 15:37:11 -08:00
Hendrik Brueckner
f3a234342a hvc_iucv: allocate memory buffers for IUCV in zone DMA
commit 91a970d988 upstream.

The device driver must allocate memory for IUCV buffers with GFP_DMA,
because IUCV cannot address memory above 2GB (31bit addresses only).

Because the IUCV ignores the higher bits of the address, sending and
receiving IUCV data with this driver might cause memory corruptions.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: maximilian attems <max@stro.at>
2011-02-17 15:36:52 -08:00
黄涛
84aa38e58d Merge remote branch 'linux-2.6.32.y/master' into develop
Conflicts:
	drivers/net/wireless/orinoco/main.c
	drivers/net/wireless/orinoco/wext.c
	drivers/net/wireless/p54/p54usb.c
2011-02-13 10:25:30 +08:00
黄涛
78e2a01330 rk_sysrq: fix warning 2011-01-11 11:01:19 +08:00
Colin Cross
3515161181 Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36
Conflicts:
	arch/arm/mm/cache-v6.S

Change-Id: I1a2063218dd705a762a40f4a9dfe504ce1a1d491
2011-01-07 17:20:53 -08:00
Anton Blanchard
ec955e326e hvc_console: Fix race between hvc_close and hvc_remove, again
commit 320718ee07 upstream.

I don't claim to understand the tty layer, but it seems like hvc_open and
hvc_close should be balanced in their kref reference counting.

Right now we get a kref every call to hvc_open:

        if (hp->count++ > 0) {
                tty_kref_get(tty); <----- here
                spin_unlock_irqrestore(&hp->lock, flags);
                hvc_kick();
                return 0;
        } /* else count == 0 */

        tty->driver_data = hp;

        hp->tty = tty_kref_get(tty); <------ or here if hp->count was 0

But hvc_close has:

        tty_kref_get(tty);

        if (--hp->count == 0) {
...
                /* Put the ref obtained in hvc_open() */
                tty_kref_put(tty);
...
        }

        tty_kref_put(tty);

Since the outside kref get/put balance we only do a single kref_put when
count reaches 0.

The patch below changes things to call tty_kref_put once for every
hvc_close call, and with that my machine boots fine.

Signed-off-by: Anton Blanchard <anton@samba.org>
Acked-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 14:43:12 -08:00
Amit Shah
ef5ce99dff hvc_console: Fix race between hvc_close and hvc_remove
commit e74d098c66 upstream.

Alan pointed out a race in the code where hvc_remove is invoked. The
recent virtio_console work is the first user of hvc_remove().

Alan describes it thus:

The hvc_console assumes that a close and remove call can't occur at the
same time.

In addition tty_hangup(tty) is problematic as tty_hangup is asynchronous
itself....

So this can happen

        hvc_close                               hvc_remove
        hung up ? - no
                                                lock
                                                tty = hp->tty
                                                unlock
        lock
        hp->tty = NULL
        unlock
        notify del
        kref_put the hvc struct
        close completes
        tty is destroyed
                                                tty_hangup dead tty
                                                tty->ops will be NULL
                                                NULL->...

This patch adds some tty krefs and also converts to using tty_vhangup().

Reported-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
CC: Alan Cox <alan@lxorguk.ukuu.org.uk>
CC: linuxppc-dev@ozlabs.org
CC: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 14:43:12 -08:00
Ben Hutchings
6db0ed1582 TTY: Fix error return from tty_ldisc_open()
The backported version of "TTY: ldisc, fix open flag handling" in
2.6.32.27 causes tty_ldisc_open() to return 0 on error.  Fix that.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 14:43:01 -08:00
Ahmed S. Darwish
8a228e5dcd RAMOOPS: Don't overflow over non-allocated regions
commit 1873bb8115 upstream.

The current code mis-calculates the ramoops header size, leading to an
overflow over the next record at best, or over a non-allocated region at
worst.  Fix that calculation.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
Acked-by: Marco Stornelli <marco.stornelli@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 13:58:42 -08:00
Ken Mills
43d896499a n_gsm: gsm_data_alloc buffer allocation could fail and it is not being checked
commit 093d804611 upstream.

gsm_data_alloc buffer allocation could fail and it is not being checked.

Add check for allocated buffer and return if the buffer allocation
fails.

Signed-off-by: Ken Mills <ken.k.mills@intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 13:58:37 -08:00
Ken Mills
bd7e2ae3d4 n_gsm: Fix message length handling when building header
commit be7a7411d6 upstream.

Fix message length handling when building header

When the message length is greater than 127, the length field in the header
is built incorrectly. According to the spec, when the length is less than 128
the length field is a single byte formatted as: bbbbbbb1. When it is greater
than 127 then the field is two bytes of the format: bbbbbbb0 bbbbbbbb.

Signed-off-by: Ken Mills <ken.k.mills@intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-01-07 13:58:37 -08:00
sakura
5ed71e9f7e add rk_sysrq interface 2010-12-27 16:12:33 +08:00
Colin Cross
3f29a88349 Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36
Conflicts:
	drivers/usb/gadget/composite.c

Change-Id: I1a332ec21da62aea98912df9a01cf0282ed50ee1
2010-12-21 18:38:13 -08:00
黄涛
6e2688ca84 Merge remote branch 'linux-2.6.32.y/master' into develop
Conflicts:
	drivers/i2c/busses/Kconfig
	drivers/net/dm9000.c
	drivers/net/wireless/libertas/if_sdio1.c
	drivers/usb/serial/option.c
	net/bluetooth/rfcomm/core.c
2010-12-16 20:54:24 +08:00
Daniel Vetter
69ca6985ff intel-gtt: fix gtt_total_entries detection
commit e5e408fc94 upstream.

In commit f1befe71 Chris Wilson added some code to clear the full gtt
on g33/pineview instead of just the mappable part. The code looks like
it was copy-pasted from agp/intel-gtt.c, at least an identical piece
of code is still there (in intel_i830_init_gtt_entries). This lead to
a regression in 2.6.35 which was supposedly fixed in commit e7b96f28

Now this commit makes absolutely no sense to me. It seems to be
slightly confused about chipset generations - it references docs for
4th gen but the regression concerns 3rd gen g33. Luckily the the g33
gmch docs are available with the GMCH Graphics Control pci config
register definitions. The other (bigger problem) is that the new
check in there uses the i830 stolen mem bits (.5M, 1M or 8M of stolen
mem). They are different since the i855GM.

The most likely case is that it hits the 512M fallback, which was
probably the right thing for the boxes this was tested on.

So the original approach by Chris Wilson seems to be wrong and the
current code is definitely wrong. There is a third approach by Jesse
Barnes from his RFC patch "Who wants a bigger GTT mapping range?"
where he simply shoves g33 in the same clause like later chipset
generations.

I've asked him and Jesse confirmed that this should work. So implement
it.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16891$
Tested-by: Anisse Astier <anisse@astier.eu>
Signed-off-by: Anisse Astier <anisse@astier.eu>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:58 -08:00
Jiri Slaby
99c0f4e21e TTY: open/hangup race fixup
commit acfa747baf upstream.

Like in the "TTY: don't allow reopen when ldisc is changing" patch,
this one fixes a TTY WARNING as described in the option 1) there:
1) __tty_hangup from tty_ldisc_hangup to tty_ldisc_enable. During this
section tty_lock is held. However tty_lock is temporarily dropped in
the middle of the function by tty_ldisc_hangup.

The fix is to introduce a new flag which we set during the unlocked
window and check it in tty_reopen too. The flag is TTY_HUPPING and is
cleared after TTY_HUPPED is set.

While at it, remove duplicate TTY_HUPPED set_bit. The one after
calling ops->hangup seems to be more correct. But anyway, we hold
tty_lock, so there should be no difference.

Also document the function it does that kind of crap.

Nicely reproducible with two forked children:
static void do_work(const char *tty)
{
	if (signal(SIGHUP, SIG_IGN) == SIG_ERR) exit(1);
	setsid();
	while (1) {
		int fd = open(tty, O_RDWR|O_NOCTTY);
		if (fd < 0) continue;
		if (ioctl(fd, TIOCSCTTY)) continue;
		if (vhangup()) continue;
		close(fd);
	}
	exit(0);
}

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Reported-by: <Valdis.Kletnieks@vt.edu>
Reported-by: Kyle McMartin <kyle@mcmartin.ca>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:42 -08:00
Jiri Slaby
e4138940ac TTY: don't allow reopen when ldisc is changing
commit e2efafbf13 upstream.

There are many WARNINGs like the following reported nowadays:
WARNING: at drivers/tty/tty_io.c:1331 tty_open+0x2a2/0x49a()
Hardware name: Latitude E6500
Modules linked in:
Pid: 1207, comm: plymouthd Not tainted 2.6.37-rc3-mmotm1123 #3
Call Trace:
 [<ffffffff8103b189>] warn_slowpath_common+0x80/0x98
 [<ffffffff8103b1b6>] warn_slowpath_null+0x15/0x17
 [<ffffffff8128a3ab>] tty_open+0x2a2/0x49a
 [<ffffffff810fd53f>] chrdev_open+0x11d/0x146
...

This means tty_reopen is called without TTY_LDISC set. For further
considerations, note tty_lock is held in tty_open. TTY_LDISC is cleared in:
1) __tty_hangup from tty_ldisc_hangup to tty_ldisc_enable. During this
section tty_lock is held. However tty_lock is temporarily dropped in
the middle of the function by tty_ldisc_hangup.

2) tty_release via tty_ldisc_release till the end of tty existence. If
tty->count <= 1, tty_lock is taken, TTY_CLOSING bit set and then
tty_ldisc_release called. tty_reopen checks TTY_CLOSING before checking
TTY_LDISC.

3) tty_set_ldisc from tty_ldisc_halt to tty_ldisc_enable. We:
   * take tty_lock, set TTY_LDISC_CHANGING, put tty_lock
   * call tty_ldisc_halt (clear TTY_LDISC), tty_lock is _not_ held
   * do some other work
   * take tty_lock, call tty_ldisc_enable (set TTY_LDISC), put
     tty_lock

I cannot see how 2) can be a problem, as there I see no race. OTOH, 1)
and 3) can happen without problems. This patch the case 3) by checking
TTY_LDISC_CHANGING along with TTY_CLOSING in tty_reopen. 1) will be
fixed in the following patch.

Nicely reproducible with two processes:
while (1) {
	fd = open("/dev/ttyS1", O_RDWR);
	if (fd < 0) {
		warn("open");
		continue;
	}
	close(fd);
}
--------
while (1) {
        fd = open("/dev/ttyS1", O_RDWR);
        ld1 = 0; ld2 = 2;
        while (1) {
                ioctl(fd, TIOCSETD, &ld1);
                ioctl(fd, TIOCSETD, &ld2);
        }
        close(fd);
}

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Reported-by: <Valdis.Kletnieks@vt.edu>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:42 -08:00
Jiri Slaby
786e908ffe TTY: ldisc, fix open flag handling
commit 7f90cfc505 upstream.

When a concrete ldisc open fails in tty_ldisc_open, we forget to clear
TTY_LDISC_OPEN. This causes a false warning on the next ldisc open:
WARNING: at drivers/char/tty_ldisc.c:445 tty_ldisc_open+0x26/0x38()
Hardware name: System Product Name
Modules linked in: ...
Pid: 5251, comm: a.out Tainted: G        W  2.6.32-5-686 #1
Call Trace:
 [<c1030321>] ? warn_slowpath_common+0x5e/0x8a
 [<c1030357>] ? warn_slowpath_null+0xa/0xc
 [<c119311c>] ? tty_ldisc_open+0x26/0x38
 [<c11936c5>] ? tty_set_ldisc+0x218/0x304
...

So clear the bit when failing...

Introduced in c65c9bc3ef (tty: rewrite the ldisc locking) back in
2.6.31-rc1.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Reported-by: Sergey Lapin <slapin@ossfans.org>
Tested-by: Sergey Lapin <slapin@ossfans.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:41 -08:00
Philippe Rétornaz
45c0031e63 tty_ldisc: Fix BUG() on hangup
commit 1c95ba1e1d upstream.

A kernel BUG when bluetooth rfcomm connection drop while the associated
serial port is open is sometime triggered.

It seems that the line discipline can disappear between the
tty_ldisc_put and tty_ldisc_get. This patch fall back to the N_TTY line
discipline if the previous discipline is not available anymore.

Signed-off-by: Philippe Retornaz <philippe.retornaz@epfl.ch>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:41 -08:00
Jiri Slaby
156998d574 TTY: restore tty_ldisc_wait_idle
commit 100eeae2c5 upstream.

It was removed in 65b770468e (tty-ldisc: turn ldisc user count into
a proper refcount), but we need to wait for last user to quit the
ldisc before we close it in tty_set_ldisc.

Otherwise weird things start to happen. There might be processes
waiting in tty_read->n_tty_read on tty->read_wait for input to appear
and at that moment, a change of ldisc is fatal. n_tty_close is called,
it frees read_buf and the waiting process is still in the middle of
reading and goes nuts after it is woken.

Previously we prevented close to happen when others are in ldisc ops
by tty_ldisc_wait_idle in tty_set_ldisc. But the commit above removed
that. So revoke the change and test whether there is 1 user (=we), and
allow the close then.

We can do that without ldisc/tty locks, because nobody else can open
the device due to TTY_LDISC_CHANGING bit set, so we in fact wait for
everybody to leave.

I don't understand why tty_ldisc_lock would be needed either when the
counter is an atomic variable, so this is a lockless
tty_ldisc_wait_idle.

On the other hand, if we fail to wait (timeout or signal), we have to
reenable the halted ldiscs, so we take ldisc lock and reuse the setup
path at the end of tty_set_ldisc.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Tested-by: Sebastian Andrzej Siewior <bigeasy@breakpoint.cc>
LKML-Reference: <20101031104136.GA511@Chamillionaire.breakpoint.cc>
LKML-Reference: <1287669539-22644-1-git-send-email-jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:41 -08:00
Jiri Olsa
5ff5e1b87f tty: prevent DOS in the flush_to_ldisc
commit e045fec489 upstream.

There's a small window inside the flush_to_ldisc function,
where the tty is unlocked and calling ldisc's receive_buf
function. If in this window new buffer is added to the tty,
the processing might never leave the flush_to_ldisc function.

This scenario will hog the cpu, causing other tty processing
starving, and making it impossible to interface the computer
via tty.

I was able to exploit this via pty interface by sending only
control characters to the master input, causing the flush_to_ldisc
to be scheduled, but never actually generate any output.

To reproduce, please run multiple instances of following code.

- SNIP
#define _XOPEN_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
        int i, slave, master = getpt();
        char buf[8192];

        sprintf(buf, "%s", ptsname(master));
        grantpt(master);
        unlockpt(master);

        slave = open(buf, O_RDWR);
        if (slave < 0) {
                perror("open slave failed");
                return 1;
        }

        for(i = 0; i < sizeof(buf); i++)
                buf[i] = rand() % 32;

        while(1) {
                write(master, buf, sizeof(buf));
        }

        return 0;
}
- SNIP

The attached patch (based on -next tree) fixes this by checking on the
tty buffer tail. Once it's reached, the current work is rescheduled
and another could run.

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:40 -08:00
Graham Gower
90b2e2755f drivers/char/vt_ioctl.c: fix VT_OPENQRY error value
commit 1e0ad2881d upstream.

When all VT's are in use, VT_OPENQRY casts -1 to unsigned char before
returning it to userspace as an int.  VT255 is not the next available
console.

Signed-off-by: Graham Gower <graham.gower@gmail.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:38 -08:00
Chris Wilson
0542998cc7 agp/intel: Also add B43.1 to list of supported devices
commit 3dde04b015 upstream.

This was a missing piece from 41a5142 that dropped recognition of the
AGP module for the second B43 variant.

Reported-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:35 -08:00
Eric Dumazet
90a4845c80 ipmi: proper spinlock initialization
commit de5e2ddf9b upstream.

Unloading ipmi module can trigger following error.  (if
CONFIG_DEBUG_SPINLOCK=y)

[ 9633.779590] BUG: spinlock bad magic on CPU#1, rmmod/7170
[ 9633.779606]  lock: f41f5414, .magic: 00000000, .owner:
<none>/-1, .owner_cpu: 0
[ 9633.779626] Pid: 7170, comm: rmmod Not tainted
2.6.36-rc7-11474-gb71eb1e-dirty #328
[ 9633.779644] Call Trace:
[ 9633.779657]  [<c13921cc>] ? printk+0x18/0x1c
[ 9633.779672]  [<c11a1f33>] spin_bug+0xa3/0xf0
[ 9633.779685]  [<c11a1ffd>] do_raw_spin_lock+0x7d/0x160
[ 9633.779702]  [<c1131537>] ? release_sysfs_dirent+0x47/0xb0
[ 9633.779718]  [<c1131b78>] ? sysfs_addrm_finish+0xa8/0xd0
[ 9633.779734]  [<c1394bac>] _raw_spin_lock_irqsave+0xc/0x20
[ 9633.779752]  [<f99d93da>] cleanup_one_si+0x6a/0x200 [ipmi_si]
[ 9633.779768]  [<c11305b2>] ? sysfs_hash_and_remove+0x72/0x80
[ 9633.779786]  [<f99dcf26>] ipmi_pnp_remove+0xd/0xf [ipmi_si]
[ 9633.779802]  [<c11f622b>] pnp_device_remove+0x1b/0x40

Fix this by initializing spinlocks in a smi_info_alloc() helper function,
right after memory allocation and clearing.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: David Miller <davem@davemloft.net>
Cc: Yinghai Lu <yinghai@kernel.org>
Acked-by: Corey Minyard <cminyard@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:31 -08:00
Jiri Slaby
57cbe30dca hpet: unmap unused I/O space
commit a56d531871 upstream.

When the initialization code in hpet finds a memory resource and does not
find an IRQ, it does not unmap the memory resource previously mapped.

There are buggy BIOSes which report resources exactly like this and what
is worse the memory region bases point to normal RAM.  This normally would
not matter since the space is not touched.  But when PAT is turned on,
ioremap causes the page to be uncached and sets this bit in page->flags.

Then when the page is about to be used by the allocator, it is reported
as:

BUG: Bad page state in process md5sum  pfn:3ed00
page:ffffea0000dbd800 count:0 mapcount:0 mapping:(null) index:0x0
page flags: 0x20000001000000(uncached)
Pid: 7956, comm: md5sum Not tainted 2.6.34-12-desktop #1
Call Trace:
 [<ffffffff810df851>] bad_page+0xb1/0x100
 [<ffffffff810dfa45>] prep_new_page+0x1a5/0x1c0
 [<ffffffff810dfe01>] get_page_from_freelist+0x3a1/0x640
 [<ffffffff810e01af>] __alloc_pages_nodemask+0x10f/0x6b0
...

In this particular case:

1) HPET returns 3ed00000 as memory region base, but it is not in
reserved ranges reported by the BIOS (excerpt):
 BIOS-e820: 0000000000100000 - 00000000af6cf000 (usable)
 BIOS-e820: 00000000af6cf000 - 00000000afdcf000 (reserved)

2) there is no IRQ resource reported by HPET method. On the other
hand, the Intel HPET specs (1.0a) says (3.2.5.1):
_CRS (
  // Report 1K of memory consumed by this Timer Block
  memory range consumed
  // Optional: only used if BIOS allocates Interrupts [1]
  IRQs consumed
)

[1] For case where Timer Block is configured to consume IRQ0/IRQ8 AND
Legacy 8254/Legacy RTC hardware still exists, the device objects
associated with 8254 & RTC devices should not report IRQ0/IRQ8 as
"consumed resources".

So in theory we should check whether if it is the case and use those
interrupts instead.

Anyway the address reported by the BIOS here is bogus, so non-presence
of IRQ doesn't mean the "optional" part in point 2).

Since I got no reply previously, fix this by simply unmapping the space
when IRQ is not found and memory region was mapped previously.  It would
be probably more safe to walk the resources again and unmap appropriately
depending on type.  But as we now use only ioremap for both 2 memory
resource types, it is not necessarily needed right now.

Addresses https://bugzilla.novell.com/show_bug.cgi?id=629908

Reported-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:29 -08:00
Clemens Ladisch
6a614e9b99 hpet: fix unwanted interrupt due to stale irq status bit
commit 96e9694df4 upstream.

Jaswinder Singh Rajput wrote:
> By executing Documentation/timers/hpet_example.c
>
> for polling, I requested for 3 iterations but it seems iteration work
> for only 2 as first expired time is always very small.
>
> # ./hpet_example poll /dev/hpet 10 3
> -hpet: executing poll
> hpet_poll: info.hi_flags 0x0
> hpet_poll: expired time = 0x13
> hpet_poll: revents = 0x1
> hpet_poll: data 0x1
> hpet_poll: expired time = 0x1868c
> hpet_poll: revents = 0x1
> hpet_poll: data 0x1
> hpet_poll: expired time = 0x18645
> hpet_poll: revents = 0x1
> hpet_poll: data 0x1

Clearing the HPET interrupt enable bit disables interrupt generation
but does not disable the timer, so the interrupt status bit will still
be set when the timer elapses.  If another interrupt arrives before
the timer has been correctly programmed (due to some other device on
the same interrupt line, or CONFIG_DEBUG_SHIRQ), this results in an
extra unwanted interrupt event because the status bit is likely to be
set from comparator matches that happened before the device was opened.

Therefore, we have to ensure that the interrupt status bit is and
stays cleared until we actually program the timer.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Reported-by: Jaswinder Singh Rajput <jaswinderlinux@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Bob Picco <bpicco@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:32:29 -08:00
Jiri Slaby
004e147bd3 TTY: ldisc, fix open flag handling
commit 7f90cfc505 upstream.

When a concrete ldisc open fails in tty_ldisc_open, we forget to clear
TTY_LDISC_OPEN. This causes a false warning on the next ldisc open:
WARNING: at drivers/char/tty_ldisc.c:445 tty_ldisc_open+0x26/0x38()
Hardware name: System Product Name
Modules linked in: ...
Pid: 5251, comm: a.out Tainted: G        W  2.6.32-5-686 #1
Call Trace:
 [<c1030321>] ? warn_slowpath_common+0x5e/0x8a
 [<c1030357>] ? warn_slowpath_null+0xa/0xc
 [<c119311c>] ? tty_ldisc_open+0x26/0x38
 [<c11936c5>] ? tty_set_ldisc+0x218/0x304
...

So clear the bit when failing...

Introduced in c65c9bc3ef (tty: rewrite the ldisc locking) back in
2.6.31-rc1.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Reported-by: Sergey Lapin <slapin@ossfans.org>
Tested-by: Sergey Lapin <slapin@ossfans.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:26:47 -08:00
Philippe Rétornaz
d22ed66131 tty_ldisc: Fix BUG() on hangup
commit 1c95ba1e1d upstream.

A kernel BUG when bluetooth rfcomm connection drop while the associated
serial port is open is sometime triggered.

It seems that the line discipline can disappear between the
tty_ldisc_put and tty_ldisc_get. This patch fall back to the N_TTY line
discipline if the previous discipline is not available anymore.

Signed-off-by: Philippe Retornaz <philippe.retornaz@epfl.ch>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:26:47 -08:00
Jiri Slaby
3fe5daa1d7 TTY: restore tty_ldisc_wait_idle
commit 100eeae2c5 upstream.

It was removed in 65b770468e (tty-ldisc: turn ldisc user count into
a proper refcount), but we need to wait for last user to quit the
ldisc before we close it in tty_set_ldisc.

Otherwise weird things start to happen. There might be processes
waiting in tty_read->n_tty_read on tty->read_wait for input to appear
and at that moment, a change of ldisc is fatal. n_tty_close is called,
it frees read_buf and the waiting process is still in the middle of
reading and goes nuts after it is woken.

Previously we prevented close to happen when others are in ldisc ops
by tty_ldisc_wait_idle in tty_set_ldisc. But the commit above removed
that. So revoke the change and test whether there is 1 user (=we), and
allow the close then.

We can do that without ldisc/tty locks, because nobody else can open
the device due to TTY_LDISC_CHANGING bit set, so we in fact wait for
everybody to leave.

I don't understand why tty_ldisc_lock would be needed either when the
counter is an atomic variable, so this is a lockless
tty_ldisc_wait_idle.

On the other hand, if we fail to wait (timeout or signal), we have to
reenable the halted ldiscs, so we take ldisc lock and reuse the setup
path at the end of tty_set_ldisc.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Tested-by: Sebastian Andrzej Siewior <bigeasy@breakpoint.cc>
LKML-Reference: <20101031104136.GA511@Chamillionaire.breakpoint.cc>
LKML-Reference: <1287669539-22644-1-git-send-email-jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:26:47 -08:00
Jiri Olsa
8dded7dc4c tty: prevent DOS in the flush_to_ldisc
commit e045fec489 upstream.

There's a small window inside the flush_to_ldisc function,
where the tty is unlocked and calling ldisc's receive_buf
function. If in this window new buffer is added to the tty,
the processing might never leave the flush_to_ldisc function.

This scenario will hog the cpu, causing other tty processing
starving, and making it impossible to interface the computer
via tty.

I was able to exploit this via pty interface by sending only
control characters to the master input, causing the flush_to_ldisc
to be scheduled, but never actually generate any output.

To reproduce, please run multiple instances of following code.

- SNIP
#define _XOPEN_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
        int i, slave, master = getpt();
        char buf[8192];

        sprintf(buf, "%s", ptsname(master));
        grantpt(master);
        unlockpt(master);

        slave = open(buf, O_RDWR);
        if (slave < 0) {
                perror("open slave failed");
                return 1;
        }

        for(i = 0; i < sizeof(buf); i++)
                buf[i] = rand() % 32;

        while(1) {
                write(master, buf, sizeof(buf));
        }

        return 0;
}
- SNIP

The attached patch (based on -next tree) fixes this by checking on the
tty buffer tail. Once it's reached, the current work is rescheduled
and another could run.

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:26:46 -08:00
Graham Gower
ecd33c38af drivers/char/vt_ioctl.c: fix VT_OPENQRY error value
commit 1e0ad2881d upstream.

When all VT's are in use, VT_OPENQRY casts -1 to unsigned char before
returning it to userspace as an int.  VT255 is not the next available
console.

Signed-off-by: Graham Gower <graham.gower@gmail.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-12-09 13:26:44 -08:00