Linux 3.4.12
I'm announcing the release of the 3.4.12 kernel.
All users of the 3.4 kernel series must upgrade.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/sound/alsa/HD-Audio-Models.txt | 1 Makefile | 2 arch/alpha/include/asm/atomic.h | 4 arch/arm/Makefile | 4 arch/arm/boot/compressed/head.S | 1 arch/arm/include/asm/assembler.h | 8 + arch/arm/include/asm/mutex.h | 119 --------------- arch/arm/include/asm/uaccess.h | 40 +++-- arch/arm/kernel/hw_breakpoint.c | 55 +++++-- arch/arm/kernel/traps.c | 11 - arch/arm/lib/getuser.S | 23 +- arch/arm/lib/putuser.S | 6 arch/arm/mm/mm.h | 3 arch/arm/mm/mmu.c | 4 arch/mips/mm/gup.c | 2 arch/powerpc/platforms/85xx/p1022_ds.c | 102 +++++++++++-- arch/s390/oprofile/init.c | 10 - arch/x86/include/asm/xen/page.h | 3 arch/x86/pci/fixup.c | 17 ++ arch/x86/xen/p2m.c | 27 +-- arch/x86/xen/setup.c | 4 drivers/acpi/power.c | 36 +++- drivers/ata/ahci.c | 2 drivers/ata/libata-core.c | 1 drivers/base/power/runtime.c | 5 drivers/block/cciss_scsi.c | 1 drivers/block/nbd.c | 9 + drivers/block/xen-blkback/blkback.c | 2 drivers/bluetooth/btusb.c | 10 - drivers/cpufreq/powernow-k8.c | 63 ++++---- drivers/dma/at_hdmac.c | 13 + drivers/dma/pl330.c | 21 +- drivers/gpio/gpio-lpc32xx.c | 5 drivers/gpu/drm/drm_crtc.c | 2 drivers/gpu/drm/i915/intel_crt.c | 36 ++++ drivers/gpu/drm/i915/intel_display.c | 12 - drivers/gpu/drm/i915/intel_drv.h | 2 drivers/gpu/drm/i915/intel_hdmi.c | 2 drivers/gpu/drm/i915/intel_modes.c | 31 ++- drivers/gpu/drm/i915/intel_ringbuffer.c | 7 drivers/gpu/drm/nouveau/nouveau_display.c | 2 drivers/gpu/drm/radeon/atombios_crtc.c | 61 ++++--- drivers/gpu/drm/radeon/atombios_encoders.c | 140 +++++++++--------- drivers/gpu/drm/radeon/radeon.h | 15 - drivers/gpu/drm/radeon/radeon_atombios.c | 2 drivers/gpu/drm/radeon/radeon_atpx_handler.c | 56 ------- drivers/gpu/drm/radeon/radeon_bios.c | 138 +++++++++++++++++ drivers/gpu/drm/radeon/radeon_device.c | 2 drivers/gpu/drm/udl/udl_connector.c | 7 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 5 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 10 + drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 73 +++++++++ drivers/hid/hid-logitech-dj.c | 41 +++++ drivers/hid/hid-logitech-dj.h | 1 drivers/hwmon/ad7314.c | 8 + drivers/hwmon/ads7871.c | 9 + drivers/hwmon/fam15h_power.c | 15 + drivers/hwmon/twl4030-madc-hwmon.c | 9 - drivers/input/serio/i8042-x86ia64io.h | 6 drivers/iommu/intr_remapping.c | 18 +- drivers/isdn/isdnloop/isdnloop.c | 12 - drivers/md/md.c | 15 + drivers/md/raid10.c | 16 +- drivers/md/raid10.h | 2 drivers/md/raid5.c | 4 drivers/media/rc/rc-main.c | 5 drivers/media/video/cx25821/cx25821-core.c | 3 drivers/media/video/cx25821/cx25821.h | 2 drivers/misc/sgi-xp/xpc_uv.c | 84 ++++++++-- drivers/mmc/card/block.c | 26 +++ drivers/mmc/host/mxs-mmc.c | 4 drivers/mmc/host/sdhci-esdhc.h | 6 drivers/mtd/ubi/vtbl.c | 4 drivers/net/can/janz-ican3.c | 4 drivers/net/can/mcp251x.c | 11 + drivers/net/can/ti_hecc.c | 2 drivers/net/ethernet/freescale/gianfar.c | 2 drivers/net/ethernet/ibm/ibmveth.c | 26 +-- drivers/net/ethernet/realtek/r8169.c | 1 drivers/net/ethernet/sfc/efx.c | 6 drivers/net/ethernet/sfc/efx.h | 14 + drivers/net/ethernet/sfc/ethtool.c | 20 +- drivers/net/ethernet/sfc/tx.c | 19 ++ drivers/net/macvtap.c | 35 ++-- drivers/net/netconsole.c | 1 drivers/net/ppp/pptp.c | 4 drivers/net/usb/asix.c | 4 drivers/net/usb/qmi_wwan.c | 95 ++++++++++++ drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 26 ++- drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 6 drivers/net/wireless/rt2x00/rt2400pci.c | 9 + drivers/net/wireless/rt2x00/rt2400pci.h | 1 drivers/net/wireless/rt2x00/rt2500pci.c | 9 + drivers/net/wireless/rt2x00/rt2500usb.c | 11 + drivers/net/wireless/rt2x00/rt2500usb.h | 17 +- drivers/net/wireless/rt2x00/rt2800pci.c | 9 + drivers/net/wireless/rt2x00/rt2800usb.c | 22 ++ drivers/net/wireless/rt2x00/rt2x00dev.c | 2 drivers/net/wireless/rt2x00/rt61pci.c | 9 + drivers/net/wireless/rt2x00/rt61pci.h | 1 drivers/net/wireless/rt2x00/rt73usb.c | 9 + drivers/net/wireless/rt2x00/rt73usb.h | 3 drivers/net/wireless/rtlwifi/rtl8192ce/def.h | 1 drivers/net/wireless/rtlwifi/rtl8192ce/hw.c | 12 + drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | 6 drivers/platform/x86/asus-laptop.c | 8 - drivers/platform/x86/asus-nb-wmi.c | 4 drivers/rtc/rtc-rs5c348.c | 7 drivers/rtc/rtc-twl.c | 5 drivers/scsi/bnx2i/bnx2i_hwi.c | 3 drivers/scsi/hpsa.c | 3 drivers/scsi/lpfc/Makefile | 2 drivers/scsi/mpt2sas/mpt2sas_base.c | 7 drivers/scsi/virtio_scsi.c | 2 drivers/staging/android/android_alarm.h | 4 drivers/staging/comedi/drivers/das08.c | 2 drivers/staging/media/lirc/lirc_sir.c | 60 +++++++ drivers/staging/rtl8712/recv_linux.c | 7 drivers/staging/speakup/main.c | 2 drivers/staging/vt6656/dpc.c | 2 drivers/staging/vt6656/rxtx.c | 38 ++-- drivers/staging/zcache/zcache-main.c | 7 drivers/target/target_core_transport.c | 9 - drivers/tty/serial/imx.c | 12 + drivers/tty/serial/pch_uart.c | 59 +++++-- drivers/usb/class/cdc-wdm.c | 12 + drivers/usb/core/devices.c | 2 drivers/usb/core/hcd.c | 6 drivers/usb/core/quirks.c | 4 drivers/usb/dwc3/ep0.c | 1 drivers/usb/dwc3/gadget.c | 7 drivers/usb/host/ehci-q.c | 12 + drivers/usb/host/ohci-at91.c | 13 + drivers/usb/host/pci-quirks.c | 42 ++++- drivers/usb/host/pci-quirks.h | 1 drivers/usb/host/xhci-hub.c | 42 +++++ drivers/usb/host/xhci-plat.c | 2 drivers/usb/host/xhci.c | 123 +++++++++++++++ drivers/usb/host/xhci.h | 6 drivers/usb/serial/ftdi_sio.c | 22 ++ drivers/usb/serial/ftdi_sio_ids.h | 29 +++ drivers/usb/serial/option.c | 6 drivers/video/console/fbcon.c | 9 + drivers/watchdog/hpwdt.c | 3 drivers/xen/gntdev.c | 5 drivers/xen/grant-table.c | 6 fs/cifs/cifs_unicode.c | 2 fs/dcache.c | 4 fs/ecryptfs/inode.c | 5 fs/lockd/svc.c | 12 - fs/nfs/inode.c | 2 fs/nfs/nfs3proc.c | 2 fs/nfs/nfs4proc.c | 4 fs/nfs/nfs4xdr.c | 3 fs/nfs/super.c | 2 fs/nfsd/nfsctl.c | 8 - fs/nfsd/nfsd.h | 11 + fs/nfsd/nfssvc.c | 24 +-- fs/proc/proc_sysctl.c | 5 fs/stat.c | 2 include/asm-generic/mutex-xchg.h | 11 + include/drm/drm_mode.h | 5 include/linux/dcache.h | 2 include/linux/init_task.h | 12 + include/linux/kobject.h | 2 include/linux/kthread.h | 8 - include/linux/ktime.h | 7 include/linux/memory.h | 2 include/linux/mmc/card.h | 1 include/linux/netdevice.h | 4 include/linux/nfs_fs.h | 5 include/linux/pci_ids.h | 2 include/linux/perf_event.h | 2 include/linux/sched.h | 5 include/linux/time.h | 29 +++ include/net/bluetooth/smp.h | 2 include/net/scm.h | 4 include/net/sock.h | 2 include/trace/events/kmem.h | 4 include/xen/grant_table.h | 3 kernel/async.c | 13 + kernel/events/core.c | 62 ++++--- kernel/kthread.c | 88 ++++++----- kernel/sched/core.c | 9 + kernel/sched/sched.h | 23 +- kernel/time/tick-sched.c | 1 kernel/time/timekeeping.c | 33 +++- kernel/workqueue.c | 34 +--- lib/digsig.c | 6 mm/bootmem.c | 8 - mm/memory_hotplug.c | 16 +- mm/page_alloc.c | 2 mm/vmscan.c | 6 net/atm/common.c | 1 net/atm/pvc.c | 1 net/bluetooth/hci_conn.c | 4 net/bluetooth/hci_core.c | 2 net/bluetooth/hci_sock.c | 2 net/bluetooth/l2cap_core.c | 11 - net/bluetooth/l2cap_sock.c | 3 net/bluetooth/mgmt.c | 16 ++ net/bluetooth/rfcomm/sock.c | 2 net/bluetooth/rfcomm/tty.c | 2 net/bluetooth/smp.c | 10 - net/core/dev.c | 30 +++ net/core/net_namespace.c | 4 net/core/sock.c | 1 net/dccp/ccids/ccid3.c | 1 net/ipv4/ipmr.c | 14 + net/ipv4/tcp.c | 4 net/ipv4/tcp_cong.c | 3 net/ipv4/tcp_input.c | 15 - net/ipv4/tcp_output.c | 21 +- net/ipv6/addrconf.c | 4 net/l2tp/l2tp_core.c | 3 net/l2tp/l2tp_core.h | 1 net/llc/af_llc.c | 3 net/mac80211/mlme.c | 4 net/netfilter/ipvs/ip_vs_ctl.c | 1 net/netlink/af_netlink.c | 6 net/openvswitch/vport-internal_dev.c | 8 + net/packet/af_packet.c | 10 + net/rds/recv.c | 3 net/sched/act_gact.c | 14 + net/socket.c | 1 net/unix/af_unix.c | 4 net/wireless/reg.c | 12 + sound/pci/hda/hda_codec.c | 2 sound/pci/hda/patch_realtek.c | 22 ++ sound/pci/hda/patch_sigmatel.c | 2 sound/pci/ice1712/prodigy_hifi.c | 3 sound/soc/codecs/wm2000.c | 2 sound/soc/samsung/dma.c | 8 - sound/soc/tegra/tegra_alc5632.c | 1 235 files changed, 2304 insertions(+), 958 deletions(-)
Aaron Lu (1):
ACPI / PM: Use KERN_DEBUG when no power resources are found
AceLan Kao (1):
asus-nb-wmi: add some video toggle keys
Al Viro (1):
perf_event: Switch to internal refcount, fix race with close()
Alan Cox (3):
ahci: Add alternate identifier for the 88SE9172
x86: Fix boot on Twinhead H12Y
pch_uart: Fix missing break for 16 byte fifo
Alan Stern (2):
USB: add device quirk for Joss Optical touchboard
USB: Fix race condition when removing host controllers
Alex Deucher (7):
drm/radeon/ss: use num_crtc rather than hardcoded 6 drm/radeon: split ATRM support out from the ATPX handler (v3) drm/radeon/atom: rework DIG modesetting on DCE3+ drm/radeon/atom: powergating fixes for DCE6
drm/radeon: convert radeon vfct code to use acpi_get_table_with_size drm/radeon: don't disable plls that are in use by other crtcs drm/radeon: fix dig encoder selection on DCE61
Alexey Khoroshilov (1):
net/core: Fix potential memory leak in dev_set_alias()
Alexis R. Cortes (1):
usb: host: xhci: Fix Compliance Mode on SN65LVPE502CP Hardware
Amerigo Wang (1):
netconsole: remove a redundant netconsole_target_put()
Andre Guedes (1):
Bluetooth: Fix use-after-free bug in SMP
Andreas Herrmann (1):
hwmon: (fam15h_power) Tweak runavg_range on resume
Andrew Bird (Sphere Systems) (1):
USB: qmi_wwan: Add ZTE (Vodafone) K3765-Z
Andrzej Kaczmarek (2):
Bluetooth: mgmt: Fix enabling SSP while powered off
Bluetooth: mgmt: Fix enabling LE while powered off
Anisse Astier (1):
Input: i8042 - disable mux on Toshiba C850D
Artem Bityutskiy (1):
UBI: fix a horrible memory deallocation bug
Atsushi Nemoto (1):
drivers/rtc/rtc-rs5c348.c: fix hour decoding in 12-hour mode
Ben Hutchings (5):
net: Allow driver to limit number of GSO segments per skb
sfc: Fix maximum number of TSO segments and minimum TX queue size
tcp: Apply device TSO segment limit earlier
ipv6: addrconf: Avoid calling netdevice notifiers with RCU read-side lock
sfc: Fix reporting of IPv4 full filters through ethtool
Benoît Locher (1):
can: mcp251x: avoid repeated frame bug
Bjørn Mork (10):
USB: option: replace ZTE K5006-Z entry with vendor class rule
kobject: fix oops with "input0: bad kobj_uevent_env content in show_uevent()"
USB: ftdi_sio: do not claim CDC ACM function
USB: cdc-wdm: fix wdm_find_device* return value
net: qmi_wwan: Add Vodafone/Huawei K5005 support
net: qmi_wwan: Add Sierra Wireless device IDs
net: qmi_wwan: add ZTE MF60
net: qmi_wwan: add ZTE MF821D
net: qmi_wwan: add Sierra Wireless devices
net: qmi_wwan: new devices: UML290 and K5006-Z
Charles Wang (1):
sched: Add missing call to calc_load_exit_idle()
Christopher Brannon (1):
Staging: speakup: fix an improperly-declared variable.
Claudiu Manoil (1):
gianfar: fix default tx vlan offload feature flag
Corentin Chary (1):
asus-laptop: HRWS/HWRS typo
Dae S. Kim (1):
Staging: Android alarm: IOCTL command encoding fix
Dan Carpenter (2):
xhci: Fix a logical vs bitwise AND bug
vmwgfx: corruption in vmw_event_fence_action_create()
Daniel J Blueman (1):
libata: Prevent interface errors with Seagate FreeAgent GoFlex
Darren Hart (1):
pch_uart: Add eg20t_port lock field, avoid recursive spinlocks
Dave Airlie (4):
vmwgfx: add dumb ioctl support
fbcon: fix race condition between console lock and cursor timer (v1.1) drm/nouveau: fix booting with plymouth + dumb support drm/udl: limit modes to the sku pixel limits.
David Brown (1):
ARM: 7513/1: Make sure dtc is built before running it
David Lamparter (1):
drm/radeon: implement ACPI VFCT vbios fetch (v3)
Dmitry Kasatkin (1):
digsig: add hash size comparision on signature verification
Douglas Bagnall (1):
media: Avoid sysfs oops when an rc_dev's raw device is absent
Dylan Reid (1):
ASoC: samsung dma - Don't indicate support for pause/resume.
Eddie Wai (1):
SCSI: bnx2i: Fixed NULL ptr deference for 1G bnx2 Linux iSCSI offload
Eliad Peller (1):
mac80211: clear bssid on auth/assoc failure
Eric Dumazet (2):
af_netlink: force credentials passing [CVE-2012-3520]
staging: r8712u: fix bug in r8712_recv_indicatepkt()Eric Leblond (1):
af_packet: don't emit packet on orig fanout group
Ezequiel Garcia (1):
media: cx25821: Remove bad strcpy to read-only char*
Francesco Ruggeri (2):
net: ipv4: ipmr_expire_timer causes crash when removing net namespace fs/proc: fix potential unregister_sysctl_table hang
Francois Romieu (1):
r8169: RxConfig hack for the 8168evl.
Gao feng (1):
pptp: lookup route with the proper net namespace
Gertjan van Wingerde (3):
rt2x00: Identify ASUS USB-N53 device.
rt2x00: Fix word size of rt2500usb MAC_CSR19 register.
rt2x00: Fix rfkill polling prior to interface start.
Greg Kroah-Hartman (2):
Revert: drm/i915: correctly order the ring init sequence Linux 3.4.12
Guenter Roeck (3):
hwmon: (twl4030-madc-hwmon) Initialize uninitialized structure elements
hwmon: (ads7871) Add 'name' sysfs attribute
hwmon: (ad7314) Add 'name' sysfs attribute
Gustavo Padovan (1):
Bluetooth: Use USB_VENDOR_AND_INTERFACE() for Broadcom devices
Hante Meuleman (2):
brcmfmac: fix big endian bug in i-scan.
brcmfmac: Fix big endian host configuration data.
Henrik Rydberg (1):
Bluetooth: Add support for Apple vendor-specific devices
Hiroaki SHIMODA (1):
net_sched: gact: Fix potential panic in tcf_gact().
Horst Schirmeier (1):
USB: ftdi_sio: PID for NZR SEM 16+ USB
Ian Abbott (1):
staging: comedi: das08: Correct AO output for das08jr-16-ao
Ian Chen (1):
mmc: card: Skip secure erase on MoviNAND; causes unrecoverable corruption.
Ira W. Snyder (1):
can: janz-ican3: fix support for older hardware revisions
Jakob Bornecrantz (1):
drm: Check for invalid cursor flags
James Bottomley (1):
SCSI: lpfc: fix problems with -Werror
Jani Nikula (2):
drm/i915: extract connector update from intel_ddc_get_modes() for reuse drm/i915: fall back to bit-banging if GMBUS fails in CRT EDID reads
Jarod Wilson (1):
media: lirc_sir: make device registration work
Jason Wang (4):
macvtap: zerocopy: fix offset calculation when building skb
macvtap: zerocopy: fix truesize underestimation
macvtap: zerocopy: put page when fail to get all requested user pages
macvtap: zerocopy: set SKBTX_DEV_ZEROCOPY only when skb is built successfully
Jeff Layton (1):
cifs: fix return value in cifsConvertToUTF16
Jerome Glisse (2):
drm/radeon: avoid turning off spread spectrum for used pll drm/radeon: force dma32 to fix regression rs4xx,rs6xx,rs740
Jesse Gross (1):
openvswitch: Reset upper layer protocol info on internal devices.
Jianguo Wu (1):
mm/ia64: fix a memory block size bug
Joachim Eastwood (1):
USB: ohci-at91: fix null pointer in ohci_hcd_at91_overcurrent_irq
John Stultz (3):
time: Improve sanity checking of timekeeping inputs
time: Avoid making adjustments if we haven't accumulated anything
time: Move ktime_t overflow checking into timespec_valid_strict
Jovi Zhang (1):
MIPS: mm: Add compound tail page _mapcount when mapped
Keng-Yu Lin (1):
Intel xhci: Only switch the switchable ports
Kevin Hilman (1):
drivers/rtc/rtc-twl.c: ensure all interrupts are disabled during probe
Konrad Rzeszutek Wilk (1):
xen/boot: Disable NUMA for PV guests.
Lai Jiangshan (1):
workqueue: UNBOUND -> REBIND morphing in rebind_workers() should be atomic
Larry Finger (1):
rtlwifi: rtl8192ce: Log message that B_CUT device may not work
Lauri Hintsala (1):
mmc: mxs-mmc: fix deadlock in SDIO IRQ case
Li Haifeng (1):
mm/page_alloc: fix the page address of higher page's buddy calculation
Li Zhong (1):
Fix a dead loop in async_synchronize_full()
Lin Ming (1):
ACPI / PM: Fix resource_lock dead lock in acpi_power_on_device
Linus Torvalds (1):
vfs: make O_PATH file descriptors usable for 'fstat()'
Luis R. Rodriguez (1):
cfg80211: fix possible circular lock on reg_regdb_search()
Malcolm Priestley (1):
staging: vt6656: [BUG] - Failed connection, incorrect endian.
Manoj Iyer (2):
xhci: Recognize USB 3.0 devices as superspeed at powerup
Bluetooth: btusb: Add vendor specific ID (0a5c:21f4) BCM20702A0
Marc Kleine-Budde (1):
can: ti_hecc: fix oops during rmmod
Mark Brown (1):
ASoC: wm2000: Correct register size
Mathias Krause (12):
atm: fix info leak in getsockopt(SO_ATMPVC)
atm: fix info leak via getsockname()
Bluetooth: HCI - Fix info leak in getsockopt(HCI_FILTER)
Bluetooth: HCI - Fix info leak via getsockname()
Bluetooth: RFCOMM - Fix info leak in getsockopt(BT_SECURITY)
Bluetooth: RFCOMM - Fix info leak in ioctl(RFCOMMGETDEVLIST)
Bluetooth: RFCOMM - Fix info leak via getsockname()
Bluetooth: L2CAP - Fix info leak via getsockname()
llc: fix info leak via getsockname()
dccp: fix info leak via getsockopt(DCCP_SOCKOPT_CCID_TX_INFO)
ipvs: fix info leak in getsockopt(IP_VS_SO_GET_TIMEOUT)
net: fix info leak in compat dev_ifconf()
Matteo Frigo (1):
ALSA: ice1724: Use linear scale for AK4396 volume control.
Matthew Garrett (1):
xhci: Make handover code more robust
Matthew Leach (1):
ARM: 7532/1: decompressor: reset SCTLR.TRE for VMSA ARMv7 cores
Mel Gorman (1):
Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts
Miklos Szeredi (1):
vfs: dcache: use DCACHE_DENTRY_KILLED instead of DCACHE_DISCONNECTED in d_kill()
Moiz Sonasath (1):
usb: host: xhci: fix compilation error for non-PCI based stacks
NeilBrown (4):
md: Don't truncate size at 4TB for RAID0 and Linear
md: make sure metadata is updated when spares are activated or removed. md/raid5: fix calculate of 'degraded' when a replacement becomes active. md/raid10: fix problem with on-stack allocation of r10bio structure.
Nestor Lopez Casado (1):
HID: Fix logitech-dj: missing Unifying device issue
Nicholas Bellinger (1):
target: Fix ->data_length re-assignment bug with SCSI overflow
Nicolas Ferre (3):
dmaengine: at_hdmac: fix comment in atc_prep_slave_sg()
dmaengine: at_hdmac: check that each sg data length is non-null
USB: ohci-at91: fix PIO handling in relation with number of ports
Pablo Neira Ayuso (1):
netlink: fix possible spoofing from non-root processes
Paul Clements (1):
nbd: clear waiting_queue on shutdown
Pavankumar Kondeti (1):
EHCI: Update qTD next pointer in QH overlay region during unlink
Peter Zijlstra (1):
sched: Fix race in task_group()
Pratyush Anand (1):
usb: dwc3: ep0: correct cache sync issue in case of ep0_bounced
Rafael J. Wysocki (2):
PM / Runtime: Fix rpm_resume() return value for power.no_callbacks set PM / Runtime: Clear power.deferred_resume on success in rpm_suspend()
Robert Richter (1):
oprofile, s390: Fix uninitialized memory access when writing to oprofilefs
Robin Holt (1):
drivers/misc/sgi-xp/xpc_uv.c: SGI XPC fails to load when cpu 0 is out of IRQ resources
Roland Stigge (1):
gpio-lpc32xx: Fix value handling of gpio_direction_output()
Ruchika Kharwar (1):
usb: host: xhci-plat: use ioremap_nocache
Russell King (2):
ARM: 7527/1: uaccess: explicitly check __user pointer when !CPU_USE_DOMAINS
ARM: Fix ioremap() of address zero
Rustad, Mark D (1):
net: Statically initialize init_net.dev_base_head
Sachin Kamat (2):
DMA: PL330: Fix potential NULL pointer dereference in pl330_submit_req()
DMA: PL330: Check the pointer returned by kzalloc
Santiago Leon (1):
ibmveth: Fix alignment of rx queue bug
Satoru Moriya (1):
mm: avoid swapping out with swappiness==0
Sergei Poselenov (1):
rt2800usb: Added rx packet length validity check
Seth Forshee (1):
irq_remap: disable IRQ remapping if any IOAPIC lacks an IOMMU
Seth Jennings (1):
staging: zcache: fix cleancache race condition with shrinker
Shawn Guo (1):
mmc: sdhci-esdhc: break out early if clock is 0
Stanislav Kinsbursky (3):
NFSd: introduce nfsd_destroy() helper
NFSd: set nfsd_serv to NULL after service destruction
LockD: pass service to per-net up and down functions
Stefano Stabellini (1):
xen/m2p: do not reuse kmap_op->dev_bus_addr
Stephen M. Cameron (2):
cciss: fix handling of protocol error
SCSI: hpsa: fix handling of protocol error
Stephen Warren (1):
sound: tegra_alc5632: remove HP detect GPIO inversion
Søren Holm (1):
asix: Support DLink DUB-E100 H/W Ver C1
Takashi Iwai (3):
ALSA: hda - Fix missing Master volume for STAC9200/925x
ALSA: hda - Fix Oops at codec reset/reconfig
ALSA: hda - Workaround for silent output on VAIO Z with ALC889
Tejun Heo (4):
workqueue: reimplement work_on_cpu() using system_wq
cpufreq/powernow-k8: workqueue user shouldn't migrate the kworker to another CPU
kthread_worker: reorganize to prepare for flush_kthread_work() reimplementation
kthread_worker: reimplement flush_kthread_work() to allow freeing the work item being executed
Timur Tabi (2):
powerpc/85xx: p1022ds: disable the NAND flash node if video is enabled powerpc/85xx: p1022ds: fix DIU/LBC switching with NAND enabled
Tomoya MORINAGA (2):
pch_uart: Fix rx error interrupt setting issue
pch_uart: Fix parity setting issue
Toshi Kani (1):
hpwdt: Fix kdump issue in hpwdt
Trond Myklebust (2):
NFS: Fix the initialisation of the readdir 'cookieverf' array
NFS: Fix a problem with the legacy binary mount code
Tvrtko Ursulin (1):
drm/radeon/kms: extend the Fujitsu D3003-S2 board connector quirk to cover later silicon stepping
Tyler Hicks (1):
eCryptfs: Copy up attributes of the lower target inode after rename
Vinicius Costa Gomes (3):
Bluetooth: Fix not removing power_off delayed work
Bluetooth: Change signature of smp_conn_security()
Bluetooth: Fix sending a HCI Authorization Request over LE links
Wang Sen (1):
SCSI: scsi: virtio-scsi: Fix address translation failure of HighMem pages used by sg list
Wang Xingchao (1):
drm/i915: HDMI - Clear Audio Enable bit for Hot Plug
Weiping Pan (1):
rds: set correct msg_namelen
Wen Congyang (1):
tracing: Don't call page_to_pfn() if page is NULL
Weston Andros Adamson (1):
NFS: return error from decode_getfh in decode open
Will Deacon (4):
ARM: 7496/1: hw_breakpoint: don't rely on dfsr to show watchpoint access type
ARM: 7526/1: traps: send SIGILL if get_user fails on undef handling path
mutex: Place lock in contended state after fastpath_lock failure
ARM: 7467/1: mutex: use generic xchg-based implementation for ARMv6+
Wu Fengguang (1):
isdnloop: fix and simplify isdnloop_init()
Xinyu Chen (1):
tty: serial: imx: console write routing is unsafe on SMP
Xu, Anhua (1):
drm/i915: fix wrong order of parameters in port checking functions
Yinghai Lu (1):
mm: sparse: fix usemap allocation above node descriptor section
Yuchung Cheng (1):
tcp: fix cwnd reduction for non-sack recovery
Yuval Mintz (1):
bnx2x: fix 57840_MF pci id
[email protected] (1):
af_packet: remove BUG statement in tpacket_destruct_skb
qiuxishi (1):
memory hotplug: fix section info double registration bug
[email protected] (1):
SCSI: mpt2sas: Fix for issue - Unable to boot from the drive connected to HBA
[email protected] (1):
l2tp: avoid to use synchronize_rcu in tunnel free function
Éric Piel (1):
USB: ftdi-sio: add support for more Physik Instrumente devices
Documentation/sound/alsa/HD-Audio-Models.txt +1 -0
@@ -47,6 +47,7 @@ ALC882/883/885/888/889 acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G acer-aspire-8930g Acer Aspire 8330G/6935G acer-aspire Acer Aspire others + no-primary-hp VAIO Z workaround (for fixed speaker DAC) ALC861/660 ==========
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 11 +SUBLEVEL = 12 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/alpha/include/asm/atomic.h +2 -2
@@ -14,8 +14,8 @@*/ -#define ATOMIC_INIT (i) ( (atomic_t) { (i) } ) -#define ATOMIC64_INIT (i) ( (atomic64_t) { (i) } ) +#define ATOMIC_INIT (i) { (i) } +#define ATOMIC64_INIT (i) { (i) }#define atomic_read (v) (*(volatile int *)&(v)->counter)#define atomic64_read (v) (*(volatile long *)&(v)->counter)
arch/arm/Makefile +2 -2
@@ -283,10 +283,10 @@ zImage Image xipImage bootpImage uImage: vmlinux zinstall uinstall install: vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ -%.dtb: +%.dtb: scripts $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ -dtbs: +dtbs: scripts $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ # We use MRPROPER_FILES and CLEAN_FILES now
arch/arm/boot/compressed/head.S +1 -0
@@ -648,6 +648,7 @@ __armv7_mmu_cache_on: mcrne p15, 0, r0, c8, c7, 0 @ flush I,D TLBs #endif mrc p15, 0, r0, c1, c0, 0 @ read control reg + bic r0, r0, #1 << 28 @ clear SCTLR.TRE orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement orr r0, r0, #0x003c @ write buffer #ifdef CONFIG_MMU
arch/arm/include/asm/assembler.h +8 -0
@@ -320,4 +320,12 @@ .size \name , . - \name .endm + .macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req +#ifndef CONFIG_CPU_USE_DOMAINS + adds \tmp, \addr, #\size - 1 + sbcccs \tmp, \tmp, \limit + bcs \bad +#endif + .endm + #endif /* __ASM_ASSEMBLER_H__ */
arch/arm/include/asm/mutex.h +4 -115
125 lines not on this page · raw message
arch/arm/include/asm/uaccess.h +27 -13
@@ -101,28 +101,39 @@ extern int __get_user_1(void *);extern int __get_user_2 (void *);extern int __get_user_4 (void *); -#define __get_user_x(__r2,__p,__e,__s,__i...) \ +#define __GUP_CLOBBER_1 "lr", "cc" +#ifdef CONFIG_CPU_USE_DOMAINS +#define __GUP_CLOBBER_2 "ip", "lr", "cc" +#else +#define __GUP_CLOBBER_2 "lr", "cc" +#endif +#define __GUP_CLOBBER_4 "lr", "cc" + +#define __get_user_x (__r2,__p,__e,__l,__s) \ __asm__ __volatile__ ( \ __asmeq("%0", "r0") __asmeq("%1", "r2") \ + __asmeq("%3", "r1") \ "bl __get_user_" #__s \ : "=&r" (__e), "=r" (__r2) \ - : "0" (__p) \ - : __i, "cc") + : "0" (__p), "r" (__l) \ + : __GUP_CLOBBER_##__s)#define get_user (x,p) \ ({ \ + unsigned long __limit = current_thread_info()->addr_limit - 1; \ register const typeof(*(p)) __user *__p asm("r0") = (p);\ register unsigned long __r2 asm("r2"); \ + register unsigned long __l asm("r1") = __limit; \ register int __e asm("r0"); \ switch (sizeof(*(__p))) { \ case 1: \ - __get_user_x(__r2, __p, __e, 1, "lr"); \ - break; \ + __get_user_x(__r2, __p, __e, __l, 1); \ + break; \ case 2: \ - __get_user_x(__r2, __p, __e, 2, "r3", "lr"); \ + __get_user_x(__r2, __p, __e, __l, 2); \ break; \ case 4: \ - __get_user_x(__r2, __p, __e, 4, "lr"); \ + __get_user_x(__r2, __p, __e, __l, 4); \ break; \ default: __e = __get_user_bad(); break; \ } \
@@ -135,31 +146,34 @@ extern int __put_user_2(void *, unsigned int);extern int __put_user_4 (void *,unsigned int );extern int __put_user_8 (void *,unsigned long long ); -#define __put_user_x (__r2,__p,__e,__s) \ +#define __put_user_x (__r2,__p,__e,__l,__s) \ __asm__ __volatile__ ( \ __asmeq("%0", "r0") __asmeq("%2", "r2") \ + __asmeq("%3", "r1") \ "bl __put_user_" #__s \ : "=&r" (__e) \ - : "0" (__p), "r" (__r2) \ + : "0" (__p), "r" (__r2), "r" (__l) \ : "ip", "lr", "cc")#define put_user (x,p) \ ({ \ + unsigned long __limit = current_thread_info()->addr_limit - 1; \ register const typeof(*(p)) __r2 asm("r2") = (x); \ register const typeof(*(p)) __user *__p asm("r0") = (p);\ + register unsigned long __l asm("r1") = __limit; \ register int __e asm("r0"); \ switch (sizeof(*(__p))) { \ case 1: \ - __put_user_x(__r2, __p, __e, 1); \ + __put_user_x(__r2, __p, __e, __l, 1); \ break; \ case 2: \ - __put_user_x(__r2, __p, __e, 2); \ + __put_user_x(__r2, __p, __e, __l, 2); \ break; \ case 4: \ - __put_user_x(__r2, __p, __e, 4); \ + __put_user_x(__r2, __p, __e, __l, 4); \ break; \ case 8: \ - __put_user_x(__r2, __p, __e, 8); \ + __put_user_x(__r2, __p, __e, __l, 8); \ break; \ default: __e = __put_user_bad(); break; \ } \
arch/arm/kernel/hw_breakpoint.c +40 -15
74 lines not on this page · raw message
arch/arm/kernel/traps.c +7 -4
@@ -388,20 +388,23 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)#endif instr = *(u32 *) pc; }else if (thumb_mode (regs)) { -get_user (instr, (u16 __user *)pc); +if (get_user (instr, (u16 __user *)pc)) + goto die_sig;if (is_wide_instruction (instr)) {unsigned int instr2; -get_user (instr2, (u16 __user *)pc+1 ); +if (get_user (instr2, (u16 __user *)pc+1 )) + goto die_sig; instr <<=16 ; instr |= instr2; } - }else { -get_user (instr, (u32 __user *)pc); + }else if (get_user (instr, (u32 __user *)pc)) { + goto die_sig; }if (call_undef_hook (regs, instr) ==0 )return ; +die_sig:#ifdef CONFIG_DEBUG_USER if (user_debug &UDBG_UNDEFINED ) { printk(KERN_INFO "%s (%d): undefined instruction: pc=%p\n",
arch/arm/lib/getuser.S +15 -8
@@ -16,8 +16,9 @@ * __get_user_X * * Inputs: r0 contains the address + * r1 contains the address limit, which must be preserved * Outputs: r0 is the error code - * r2, r3 contains the zero-extended value + * r2 contains the zero-extended value * lr corrupted * * No other registers must be altered. (see <asm/uaccess.h>
@@ -27,33 +28,39 @@ * Note also that it is intended that __get_user_bad is not global. */ #include <linux/linkage.h> +#include <asm/assembler.h> #include <asm/errno.h> #include <asm/domain.h> ENTRY(__get_user_1) + check_uaccess r0, 1, r1, r2, __get_user_bad 1: TUSER(ldrb) r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__get_user_1) ENTRY(__get_user_2) -#ifdef CONFIG_THUMB2_KERNEL -2: TUSER(ldrb) r2, [r0] -3: TUSER(ldrb) r3, [r0, #1] + check_uaccess r0, 2, r1, r2, __get_user_bad +#ifdef CONFIG_CPU_USE_DOMAINS +rb .req ip +2: ldrbt r2, [r0], #1 +3: ldrbt rb, [r0], #0 #else -2: TUSER(ldrb) r2, [r0], #1 -3: TUSER(ldrb) r3, [r0] +rb .req r0 +2: ldrb r2, [r0] +3: ldrb rb, [r0, #1] #endif #ifndef __ARMEB__ - orr r2, r2, r3, lsl #8 + orr r2, r2, rb, lsl #8 #else - orr r2, r3, r2, lsl #8 + orr r2, rb, r2, lsl #8 #endif mov r0, #0 mov pc, lr ENDPROC(__get_user_2) ENTRY(__get_user_4) + check_uaccess r0, 4, r1, r2, __get_user_bad 4: TUSER(ldr) r2, [r0] mov r0, #0 mov pc, lr
arch/arm/lib/putuser.S +6 -0
@@ -16,6 +16,7 @@ * __put_user_X * * Inputs: r0 contains the address + * r1 contains the address limit, which must be preserved * r2, r3 contains the value * Outputs: r0 is the error code * lr corrupted
@@ -27,16 +28,19 @@ * Note also that it is intended that __put_user_bad is not global. */ #include <linux/linkage.h> +#include <asm/assembler.h> #include <asm/errno.h> #include <asm/domain.h> ENTRY(__put_user_1) + check_uaccess r0, 1, r1, ip, __put_user_bad 1: TUSER(strb) r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__put_user_1) ENTRY(__put_user_2) + check_uaccess r0, 2, r1, ip, __put_user_bad mov ip, r2, lsr #8 #ifdef CONFIG_THUMB2_KERNEL #ifndef __ARMEB__
@@ -60,12 +64,14 @@ ENTRY(__put_user_2) ENDPROC(__put_user_2) ENTRY(__put_user_4) + check_uaccess r0, 4, r1, ip, __put_user_bad 4: TUSER(str) r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__put_user_4) ENTRY(__put_user_8) + check_uaccess r0, 8, r1, ip, __put_user_bad #ifdef CONFIG_THUMB2_KERNEL 5: TUSER(str) r2, [r0] 6: TUSER(str) r3, [r0, #4]
arch/arm/mm/mm.h +3 -0
@@ -55,6 +55,9 @@ extern void __flush_dcache_page(struct address_space *mapping, struct page *page/* permanent static mappings from iotable_init() */ #define VM_ARM_STATIC_MAPPING 0x40000000 +/* empty mapping */ +#define VM_ARM_EMPTY_MAPPING 0x20000000 +/* mapping type (attributes) for permanent static mappings */ #define VM_ARM_MTYPE (mt) ((mt) << 20)#define VM_ARM_MTYPE_MASK (0x1f << 20)
arch/arm/mm/mmu.c +2 -2
@@ -805,7 +805,7 @@ static void __init pmd_empty_section_gap(unsigned long addr) vm = early_alloc_aligned(sizeof(*vm), __alignof__(*vm)); vm->addr = (void *)addr; vm->size =SECTION_SIZE ; - vm->flags =VM_IOREMAP |VM_ARM_STATIC_MAPPING ; + vm->flags =VM_IOREMAP |VM_ARM_EMPTY_MAPPING ; vm->caller = pmd_empty_section_gap;vm_area_add_early (vm); }
@@ -818,7 +818,7 @@ static void __init fill_pmd_gaps(void)/* we're still single threaded hence no lock needed here */ for (vm = vmlist; vm; vm = vm->next) { -if (!(vm->flags &VM_ARM_STATIC_MAPPING )) +if (!(vm->flags & (VM_ARM_STATIC_MAPPING |VM_ARM_EMPTY_MAPPING )))continue ; addr = (unsigned long )vm->addr;if (addr < next)
arch/mips/mm/gup.c +2 -0
@@ -152,6 +152,8 @@ static int gup_huge_pud(pud_t pud, unsigned long addr, unsigned long end, do { VM_BUG_ON(compound_head(page) != head); pages[*nr] = page; + if (PageTail(page)) + get_huge_page_tail(page); (*nr)++; page++; refs++;
arch/powerpc/platforms/85xx/p1022_ds.c +91 -11
142 lines not on this page · raw message
arch/s390/oprofile/init.c +5 -5
@@ -171,7 +171,7 @@ static ssize_t hw_interval_write(struct file *file, char const __user *buf,if (*offset)return -EINVAL ; retval =oprofilefs_ulong_from_user (&val, buf, count); -if (retval) +if (retval <=0 )return retval;if (val < oprofile_min_interval) oprofile_hw_interval = oprofile_min_interval;
@@ -214,7 +214,7 @@ static ssize_t hwsampler_zero_write(struct file *file, char const __user *buf,return -EINVAL ; retval =oprofilefs_ulong_from_user (&val, buf, count); -if (retval) +if (retval <=0 )return retval;if (val !=0 )return -EINVAL ;
@@ -245,7 +245,7 @@ static ssize_t hwsampler_kernel_write(struct file *file, char const __user *buf,return -EINVAL ; retval =oprofilefs_ulong_from_user (&val, buf, count); -if (retval) +if (retval <=0 )return retval;if (val !=0 && val !=1 )
@@ -280,7 +280,7 @@ static ssize_t hwsampler_user_write(struct file *file, char const __user *buf,return -EINVAL ; retval =oprofilefs_ulong_from_user (&val, buf, count); -if (retval) +if (retval <=0 )return retval;if (val !=0 && val !=1 )
@@ -319,7 +319,7 @@ static ssize_t timer_enabled_write(struct file *file, char const __user *buf,return -EINVAL ; retval =oprofilefs_ulong_from_user (&val, buf, count); -if (retval) +if (retval <=0 )return retval;if (val !=0 && val !=1 )
arch/x86/include/asm/xen/page.h +2 -1
@@ -50,7 +50,8 @@ extern unsigned long set_phys_range_identity(unsigned long pfn_s,extern int m2p_add_override (unsigned long mfn,struct page *page,struct gnttab_map_grant_ref *kmap_op); -extern int m2p_remove_override (struct page *page,bool clear_pte); +extern int m2p_remove_override (struct page *page, +struct gnttab_map_grant_ref *kmap_op);extern struct page *m2p_find_override (unsigned long mfn);extern unsigned long m2p_find_override_pfn (unsigned long mfn,unsigned long pfn);
arch/x86/pci/fixup.c +17 -0
@@ -519,3 +519,20 @@ static void sb600_disable_hpet_bar(struct pci_dev *dev) } }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_ATI ,0x4385 , sb600_disable_hpet_bar); + +/* +* Twinhead H12Y needs us to block out a region otherwise we map devices +* there and any access kills the box. +* +* See: https://bugzilla.kernel.org/show_bug.cgi?id=10231 +* +* Match off the LPC and svid/sdid (older kernels lose the bridge subvendor) +*/ +static void __devinit twinhead_reserve_killing_zone (struct pci_dev *dev) +{ +if (dev->subsystem_vendor ==0x14FF && dev->subsystem_device ==0xA003 ) { +pr_info ("Reserving memory on Twinhead H12Y\n" ); +request_mem_region (0xFFB00000 ,0x100000 ,"twinhead" ); + } +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x27B9 , twinhead_reserve_killing_zone);
arch/x86/xen/p2m.c +11 -16
@@ -714,9 +714,6 @@ int m2p_add_override(unsigned long mfn, struct page *page,xen_mc_issue (PARAVIRT_LAZY_MMU ); } -/* let's use dev_bus_addr to record the old mfn instead */ - kmap_op->dev_bus_addr = page->index; - page->index = (unsigned long ) kmap_op; }spin_lock_irqsave (&m2p_override_lock, flags);list_add (&page->lru, &m2p_overrides[mfn_hash (mfn)]);
@@ -743,7 +740,8 @@ int m2p_add_override(unsigned long mfn, struct page *page,return 0 ; }EXPORT_SYMBOL_GPL (m2p_add_override); -int m2p_remove_override (struct page *page,bool clear_pte) +int m2p_remove_override (struct page *page, +struct gnttab_map_grant_ref *kmap_op) {unsigned long flags;unsigned long mfn;
@@ -773,10 +771,8 @@ int m2p_remove_override(struct page *page, bool clear_pte)WARN_ON (!PagePrivate (page));ClearPagePrivate (page); -if (clear_pte) { -struct gnttab_map_grant_ref *map_op = - (struct gnttab_map_grant_ref *) page->index; -set_phys_to_machine (pfn, map_op->dev_bus_addr); +set_phys_to_machine (pfn, page->index); +if (kmap_op !=NULL ) {if (!PageHighMem (page)) {struct multicall_space mcs;struct gnttab_unmap_grant_ref *unmap_op;
@@ -788,13 +784,13 @@ int m2p_remove_override(struct page *page, bool clear_pte)* issued. In this case handle is going to -1 because * it hasn't been modified yet. */ -if (map_op->handle ==-1 ) +if (kmap_op->handle ==-1 )xen_mc_flush ();/* -* Now if map_op->handle is negative it means that the +* Now if kmap_op->handle is negative it means that the * hypercall actually returned an error. */ -if (map_op->handle == GNTST_general_error) { +if (kmap_op->handle == GNTST_general_error) {printk (KERN_WARNING "m2p_remove_override: " "pfn %lx mfn %lx, failed to modify kernel mappings" , pfn, mfn);
@@ -804,8 +800,8 @@ int m2p_remove_override(struct page *page, bool clear_pte) mcs =xen_mc_entry (sizeof (struct gnttab_unmap_grant_ref )); unmap_op = mcs.args; - unmap_op->host_addr = map_op->host_addr; - unmap_op->handle = map_op->handle; + unmap_op->host_addr = kmap_op->host_addr; + unmap_op->handle = kmap_op->handle; unmap_op->dev_bus_addr =0 ; MULTI_grant_table_op(mcs.mc,
@@ -816,10 +812,9 @@ int m2p_remove_override(struct page *page, bool clear_pte)set_pte_at (&init_mm, address, ptep,pfn_pte (pfn,PAGE_KERNEL ));__flush_tlb_single (address); - map_op->host_addr =0 ; + kmap_op->host_addr =0 ; } - }else -set_phys_to_machine (pfn, page->index); + }/* p2m(m2p(mfn)) == FOREIGN_FRAME(mfn): the mfn is already present * somewhere in this domain, even before being added to the
arch/x86/xen/setup.c +4 -0
@@ -17,6 +17,7 @@#include <asm/e820.h> #include <asm/setup.h> #include <asm/acpi.h> +#include <asm/numa.h> #include <asm/xen/hypervisor.h> #include <asm/xen/hypercall.h>
@@ -431,4 +432,7 @@ void __init xen_arch_setup(void)disable_cpufreq ();WARN_ON (set_pm_idle_to_default ());fiddle_vdso (); +#ifdef CONFIG_NUMA + numa_off =1 ; +#endif }
drivers/acpi/power.c +24 -12
@@ -103,6 +103,7 @@ struct acpi_power_resource {/* List of devices relying on this power resource */ struct acpi_power_resource_device *devices; +struct mutex devices_lock; };static struct list_head acpi_power_resource_list;
@@ -221,7 +222,6 @@ static void acpi_power_on_device(struct acpi_power_managed_device *device)static int __acpi_power_on (struct acpi_power_resource *resource) { -struct acpi_power_resource_device *device_list = resource->devices;acpi_status status =AE_OK ; status =acpi_evaluate_object (resource->device->handle,"_ON" ,NULL ,NULL );
@@ -234,19 +234,15 @@ static int __acpi_power_on(struct acpi_power_resource *resource)ACPI_DEBUG_PRINT ((ACPI_DB_INFO ,"Power resource [%s] turned on\n" , resource->name)); -while (device_list) { -acpi_power_on_device (device_list->device); - - device_list = device_list->next; - } -return 0 ; }static int acpi_power_on (acpi_handle handle) {int result =0 ; +bool resume_device = false;struct acpi_power_resource *resource =NULL ; +struct acpi_power_resource_device *device_list; result =acpi_power_get_context (handle, &resource);if (result)
@@ -262,10 +258,25 @@ static int acpi_power_on(acpi_handle handle) result =__acpi_power_on (resource);if (result) resource->ref_count--; +else + resume_device = true; }mutex_unlock (&resource->resource_lock); +if (!resume_device) +return result; + +mutex_lock (&resource->devices_lock); + + device_list = resource->devices; +while (device_list) { +acpi_power_on_device (device_list->device); + device_list = device_list->next; + } + +mutex_unlock (&resource->devices_lock); +return result; }
@@ -351,7 +362,7 @@ static void __acpi_power_resource_unregister_device(struct device *dev,if (acpi_power_get_context (res_handle, &resource))return ; -mutex_lock (&resource->resource_lock); +mutex_lock (&resource->devices_lock); prev =NULL ; curr = resource->devices;while (curr) {
@@ -368,7 +379,7 @@ static void __acpi_power_resource_unregister_device(struct device *dev, prev = curr; curr = curr->next; } -mutex_unlock (&resource->resource_lock); +mutex_unlock (&resource->devices_lock); }/* Unlink dev from all power resources in _PR0 */
@@ -409,10 +420,10 @@ static int __acpi_power_resource_register_device( power_resource_device->device = powered_device; -mutex_lock (&resource->resource_lock); +mutex_lock (&resource->devices_lock); power_resource_device->next = resource->devices; resource->devices = power_resource_device; -mutex_unlock (&resource->resource_lock); +mutex_unlock (&resource->devices_lock);return 0 ; }
@@ -457,7 +468,7 @@ int acpi_power_resource_register_device(struct device *dev, acpi_handle handle)return ret; no_power_resource: - printk(KERN_WARNING PREFIX "Invalid Power Resource to register!"); + printk(KERN_DEBUG PREFIX "Invalid Power Resource to register!");return -ENODEV ; }
@@ -715,6 +726,7 @@ static int acpi_power_add(struct acpi_device *device) resource->device = device;mutex_init (&resource->resource_lock); +mutex_init (&resource->devices_lock);strcpy (resource->name, device->pnp.bus_id);strcpy (acpi_device_name (device),ACPI_POWER_DEVICE_NAME );strcpy (acpi_device_class (device),ACPI_POWER_CLASS );
drivers/ata/ahci.c +2 -0
@@ -396,6 +396,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { .driver_data = board_ahci_yes_fbs }, /* 88se9125 */ { PCI_DEVICE(0x1b4b, 0x917a), .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ + { PCI_DEVICE(0x1b4b, 0x9192), + .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */ { PCI_DEVICE(0x1b4b, 0x91a3), .driver_data = board_ahci_yes_fbs },
drivers/ata/libata-core.c +1 -0
@@ -4125,6 +4125,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {/* Devices which aren't very happy with higher link speeds */ { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, }, + { "Seagate FreeAgent GoFlex", NULL, ATA_HORKAGE_1_5_GBPS, },/* * Devices which choke on SETXFER. Applies only if both the
drivers/base/power/runtime.c +3 -2
@@ -430,7 +430,6 @@ static int rpm_suspend(struct device *dev, int rpmflags) goto repeat; } - dev->power.deferred_resume = false;if (dev->power.no_callbacks) goto no_callback;/* Assume success. */
@@ -506,6 +505,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)wake_up_all (&dev->power.wait_queue);if (dev->power.deferred_resume) { + dev->power.deferred_resume = false;rpm_resume (dev,0 ); retval = -EAGAIN ; goto out;
@@ -652,6 +652,7 @@ static int rpm_resume(struct device *dev, int rpmflags) || dev->parent->power.runtime_status == RPM_ACTIVE) {atomic_inc (&dev->parent->power.child_count);spin_unlock (&dev->parent->power.lock); + retval =1 ; goto no_callback;/* Assume success. */ }spin_unlock (&dev->parent->power.lock);
@@ -735,7 +736,7 @@ static int rpm_resume(struct device *dev, int rpmflags) }wake_up_all (&dev->power.wait_queue); -if (!retval) +if (retval >=0 )rpm_idle (dev,RPM_ASYNC ); out:
drivers/block/cciss_scsi.c +1 -0
@@ -795,6 +795,7 @@ static void complete_scsi_command(CommandList_struct *c, int timeout, }break ;case CMD_PROTOCOL_ERR : + cmd->result =DID_ERROR <<16 ;dev_warn (&h->pdev->dev,"%p has protocol error\n" , c);break ;
drivers/block/nbd.c +9 -0
@@ -445,6 +445,14 @@ static void nbd_clear_que(struct nbd_device *nbd) req->errors++;nbd_end_request (req); } + +while (!list_empty (&nbd->waiting_queue)) { + req = list_entry(nbd->waiting_queue.next, struct request, + queuelist); +list_del_init (&req->queuelist); + req->errors++; +nbd_end_request (req); + } }
@@ -594,6 +602,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, nbd->file =NULL ;nbd_clear_que (nbd);BUG_ON (!list_empty (&nbd->queue_head)); +BUG_ON (!list_empty (&nbd->waiting_queue));if (file)fput (file);return 0 ;
drivers/block/xen-blkback/blkback.c +1 -1
@@ -337,7 +337,7 @@ static void xen_blkbk_unmap(struct pending_req *req) invcount++; } - ret =gnttab_unmap_refs (unmap, pages, invcount, false); + ret =gnttab_unmap_refs (unmap,NULL , pages, invcount);BUG_ON (ret); }
drivers/bluetooth/btusb.c +6 -4
@@ -60,6 +60,9 @@ static struct usb_device_id btusb_table[] = {/* Generic Bluetooth USB device */ { USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, +/* Apple-specific (Broadcom) devices */ + { USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01) }, +/* Broadcom SoftSailing reporting vendor specific */ { USB_DEVICE(0x0a5c, 0x21e1) },
@@ -102,15 +105,14 @@ static struct usb_device_id btusb_table[] = {/* Broadcom BCM20702A0 */ { USB_DEVICE(0x0489, 0xe042) }, - { USB_DEVICE(0x0a5c, 0x21e3) }, - { USB_DEVICE(0x0a5c, 0x21e6) }, - { USB_DEVICE(0x0a5c, 0x21e8) }, - { USB_DEVICE(0x0a5c, 0x21f3) }, { USB_DEVICE(0x413c, 0x8197) },/* Foxconn - Hon Hai */ { USB_DEVICE(0x0489, 0xe033) }, +/*Broadcom devices with vendor specific id */ + { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }, + { } /* Terminating entry */ };
drivers/cpufreq/powernow-k8.c +34 -29
114 lines not on this page · raw message
drivers/dma/at_hdmac.c +12 -1
@@ -664,7 +664,7 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, flags);if (unlikely (!atslave || !sg_len)) { -dev_dbg (chan2dev (chan),"prep_dma_memcpy: length is zero!\n" ); +dev_dbg (chan2dev (chan),"prep_slave_sg: sg length is zero!\n" );return NULL ; }
@@ -691,6 +691,11 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, mem =sg_dma_address (sg); len =sg_dma_len (sg); +if (unlikely (!len)) { +dev_dbg (chan2dev (chan), +"prep_slave_sg: sg(%d) data length is zero\n" , i); + goto err; + } mem_width =2 ;if (unlikely (mem &3 || len &3 )) mem_width =0 ;
@@ -726,6 +731,11 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, mem =sg_dma_address (sg); len =sg_dma_len (sg); +if (unlikely (!len)) { +dev_dbg (chan2dev (chan), +"prep_slave_sg: sg(%d) data length is zero\n" , i); + goto err; + } mem_width =2 ;if (unlikely (mem &3 || len &3 )) mem_width =0 ;
@@ -759,6 +769,7 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, err_desc_get:dev_err (chan2dev (chan),"not enough descriptors available\n" ); +err:atc_desc_put (atchan, first);return NULL ; }
drivers/dma/pl330.c +14 -7
@@ -1568,17 +1568,19 @@ static int pl330_submit_req(void *ch_id, struct pl330_req *r) goto xfer_exit; } -/* Prefer Secure Channel */ -if (!_manager_ns (thrd)) - r->cfg->nonsecure =0 ; -else - r->cfg->nonsecure =1 ;/* Use last settings, if not provided */ -if (r->cfg) +if (r->cfg) { +/* Prefer Secure Channel */ +if (!_manager_ns (thrd)) + r->cfg->nonsecure =0 ; +else + r->cfg->nonsecure =1 ; + ccr =_prepare_ccr (r->cfg); -else + }else { ccr =readl (regs +CC (thrd->id)); + }/* If this req doesn't have valid xfer settings */ if (!_is_valid (ccr)) {
@@ -2935,6 +2937,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) num_chan =max_t (int, pi->pcfg.num_peri, pi->pcfg.num_chan); pdmac->peripherals =kzalloc (num_chan *sizeof (*pch),GFP_KERNEL ); +if (!pdmac->peripherals) { + ret = -ENOMEM ; +dev_err (&adev->dev,"unable to allocate pdmac->peripherals\n" ); + goto probe_err5; + }for (i =0 ; i < num_chan; i++) { pch = &pdmac->peripherals[i];
drivers/gpio/gpio-lpc32xx.c +5 -0
@@ -304,6 +304,7 @@ static int lpc32xx_gpio_dir_output_p012(struct gpio_chip *chip, unsigned pin, {struct lpc32xx_gpio_chip *group =to_lpc32xx_gpio (chip); +__set_gpio_level_p012 (group, pin, value);__set_gpio_dir_p012 (group, pin,0 );return 0 ;
@@ -314,6 +315,7 @@ static int lpc32xx_gpio_dir_output_p3(struct gpio_chip *chip, unsigned pin, {struct lpc32xx_gpio_chip *group =to_lpc32xx_gpio (chip); +__set_gpio_level_p3 (group, pin, value);__set_gpio_dir_p3 (group, pin,0 );return 0 ;
@@ -322,6 +324,9 @@ static int lpc32xx_gpio_dir_output_p3(struct gpio_chip *chip, unsigned pin,static int lpc32xx_gpio_dir_out_always (struct gpio_chip *chip,unsigned pin,int value) { +struct lpc32xx_gpio_chip *group =to_lpc32xx_gpio (chip); + +__set_gpo_level_p3 (group, pin, value);return 0 ; }
drivers/gpu/drm/drm_crtc.c +1 -1
@@ -1981,7 +1981,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,if (!drm_core_check_feature (dev,DRIVER_MODESET ))return -EINVAL ; -if (!req->flags) +if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))return -EINVAL ;mutex_lock (&dev->mode_config.mutex);
drivers/gpu/drm/i915/intel_crt.c +33 -3
@@ -266,6 +266,36 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)return ret; } +static struct edid *intel_crt_get_edid (struct drm_connector *connector, +struct i2c_adapter *i2c) +{ +struct edid *edid; + + edid =drm_get_edid (connector, i2c); + +if (!edid && !intel_gmbus_is_forced_bit (i2c)) { +DRM_DEBUG_KMS ("CRT GMBUS EDID read failed, retry using GPIO bit-banging\n" ); +intel_gmbus_force_bit (i2c, true); + edid =drm_get_edid (connector, i2c); +intel_gmbus_force_bit (i2c, false); + } + +return edid; +} + +/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */ +static int intel_crt_ddc_get_modes (struct drm_connector *connector, +struct i2c_adapter *adapter) +{ +struct edid *edid; + + edid =intel_crt_get_edid (connector, adapter); +if (!edid) +return 0 ; + +return intel_connector_update_modes (connector, edid); +} +static bool intel_crt_detect_ddc (struct drm_connector *connector) {struct intel_crt *crt =intel_attached_crt (connector);
@@ -279,7 +309,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)struct edid *edid;bool is_digital = false; - edid =drm_get_edid (connector, + edid =intel_crt_get_edid (connector, &dev_priv->gmbus[dev_priv->crt_ddc_pin].adapter);/* * This may be a DVI-I connector with a shared DDC
@@ -477,13 +507,13 @@ static int intel_crt_get_modes(struct drm_connector *connector)struct drm_i915_private *dev_priv = dev->dev_private;int ret; - ret =intel_ddc_get_modes (connector, + ret =intel_crt_ddc_get_modes (connector, &dev_priv->gmbus[dev_priv->crt_ddc_pin].adapter);if (ret || !IS_G4X (dev))return ret;/* Try to probe digital port for output in DVI-I -> VGA mode. */ -return intel_ddc_get_modes (connector, +return intel_crt_ddc_get_modes (connector, &dev_priv->gmbus[GMBUS_PORT_DPB ].adapter); }
drivers/gpu/drm/i915/intel_display.c +6 -6
@@ -1099,7 +1099,7 @@ static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv, enum pipe pipe, int reg) {u32 val =I915_READ (reg); -WARN (hdmi_pipe_enabled (dev_priv, val, pipe), +WARN (hdmi_pipe_enabled (dev_priv, pipe, val),"PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n" , reg,pipe_name (pipe)); }
@@ -1116,13 +1116,13 @@ static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv, reg =PCH_ADPA ; val =I915_READ (reg); -WARN (adpa_pipe_enabled (dev_priv, val, pipe), +WARN (adpa_pipe_enabled (dev_priv, pipe, val),"PCH VGA enabled on transcoder %c, should be disabled\n" ,pipe_name (pipe)); reg =PCH_LVDS ; val =I915_READ (reg); -WARN (lvds_pipe_enabled (dev_priv, val, pipe), +WARN (lvds_pipe_enabled (dev_priv, pipe, val),"PCH LVDS enabled on transcoder %c, should be disabled\n" ,pipe_name (pipe));
@@ -1487,7 +1487,7 @@ static void disable_pch_hdmi(struct drm_i915_private *dev_priv, enum pipe pipe, int reg) {u32 val =I915_READ (reg); -if (hdmi_pipe_enabled (dev_priv, val, pipe)) { +if (hdmi_pipe_enabled (dev_priv, pipe, val)) {DRM_DEBUG_KMS ("Disabling pch HDMI %x on pipe %d\n" , reg, pipe);I915_WRITE (reg, val & ~PORT_ENABLE );
@@ -1509,12 +1509,12 @@ static void intel_disable_pch_ports(struct drm_i915_private *dev_priv, reg =PCH_ADPA ; val =I915_READ (reg); -if (adpa_pipe_enabled (dev_priv, val, pipe)) +if (adpa_pipe_enabled (dev_priv, pipe, val))I915_WRITE (reg, val & ~ADPA_DAC_ENABLE ); reg =PCH_LVDS ; val =I915_READ (reg); -if (lvds_pipe_enabled (dev_priv, val, pipe)) { +if (lvds_pipe_enabled (dev_priv, pipe, val)) {DRM_DEBUG_KMS ("disable lvds on pipe %d val 0x%08x\n" , pipe, val);I915_WRITE (reg, val & ~LVDS_PORT_EN );POSTING_READ (reg);
drivers/gpu/drm/i915/intel_drv.h +2 -0
@@ -288,6 +288,8 @@ struct intel_fbc_work {int interval; }; +int intel_connector_update_modes (struct drm_connector *connector, +struct edid *edid);int intel_ddc_get_modes (struct drm_connector *c,struct i2c_adapter *adapter);extern bool intel_ddc_probe (struct intel_encoder *intel_encoder,int ddc_bus);
drivers/gpu/drm/i915/intel_hdmi.c +1 -1
@@ -271,7 +271,7 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)u32 temp;u32 enable_bits =SDVO_ENABLE ; -if (intel_hdmi->has_audio) +if (intel_hdmi->has_audio || mode !=DRM_MODE_DPMS_ON ) enable_bits |=SDVO_AUDIO_ENABLE ; temp =I915_READ (intel_hdmi->sdvox_reg);
drivers/gpu/drm/i915/intel_modes.c +22 -9
@@ -60,6 +60,25 @@ bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus) }/** +* intel_connector_update_modes - update connector from edid +* @connector: DRM connector device to use +* @edid: previously read EDID information +*/ +int intel_connector_update_modes (struct drm_connector *connector, +struct edid *edid) +{ +int ret; + +drm_mode_connector_update_edid_property (connector, edid); + ret =drm_add_edid_modes (connector, edid); +drm_edid_to_eld (connector, edid); + connector->display_info.raw_edid =NULL ; +kfree (edid); + +return ret; +} + +/** * intel_ddc_get_modes - get modelist from monitor * @connector: DRM connector device to use * @adapter: i2c adapter
@@ -70,18 +89,12 @@ int intel_ddc_get_modes(struct drm_connector *connector, struct i2c_adapter *adapter) {struct edid *edid; -int ret =0 ; edid =drm_get_edid (connector, adapter); -if (edid) { -drm_mode_connector_update_edid_property (connector, edid); - ret =drm_add_edid_modes (connector, edid); -drm_edid_to_eld (connector, edid); - connector->display_info.raw_edid =NULL ; -kfree (edid); - } +if (!edid) +return 0 ; -return ret; +return intel_connector_update_modes (connector, edid); }static const struct drm_prop_enum_list force_audio_names[] = {
drivers/gpu/drm/i915/intel_ringbuffer.c +2 -5
@@ -258,6 +258,8 @@ static int init_ring_common(struct intel_ring_buffer *ring)I915_WRITE_HEAD (ring,0 ); ring->write_tail (ring,0 ); +/* Initialize the ring. */ +I915_WRITE_START (ring, obj->gtt_offset); head =I915_READ_HEAD (ring) &HEAD_ADDR ;/* G45 ring initialization fails to reset head to zero */
@@ -283,11 +285,6 @@ static int init_ring_common(struct intel_ring_buffer *ring) } } -/* Initialize the ring. This must happen _after_ we've cleared the ring -* registers with the above sequence (the readback of the HEAD registers -* also enforces ordering), otherwise the hw might lose the new ring -* register values. */ -I915_WRITE_START (ring, obj->gtt_offset);I915_WRITE_CTL (ring, ((ring->size -PAGE_SIZE ) &RING_NR_PAGES ) |RING_VALID );
drivers/gpu/drm/nouveau/nouveau_display.c +1 -1
@@ -586,7 +586,7 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev, args->size = args->pitch * args->height; args->size =roundup (args->size,PAGE_SIZE ); - ret =nouveau_gem_new (dev, args->size,0 ,TTM_PL_FLAG_VRAM ,0 ,0 , &bo); + ret =nouveau_gem_new (dev, args->size,0 ,NOUVEAU_GEM_DOMAIN_VRAM ,0 ,0 , &bo);if (ret)return ret;
drivers/gpu/drm/radeon/atombios_crtc.c +37 -24
120 lines not on this page · raw message
drivers/gpu/drm/radeon/atombios_encoders.c +73 -67
210 lines not on this page · raw message
drivers/gpu/drm/radeon/radeon.h +0 -15
@@ -138,21 +138,6 @@ struct radeon_device;/* * BIOS. */ -#define ATRM_BIOS_PAGE 4096 - -#if defined(CONFIG_VGA_SWITCHEROO ) -bool radeon_atrm_supported (struct pci_dev *pdev); -int radeon_atrm_get_bios_chunk (uint8_t *bios,int offset,int len); -#else -static inline bool radeon_atrm_supported (struct pci_dev *pdev) -{ -return false; -} - -static inline int radeon_atrm_get_bios_chunk (uint8_t *bios,int offset,int len){ -return -EINVAL ; -} -#endif bool radeon_get_bios (struct radeon_device *rdev);
drivers/gpu/drm/radeon/radeon_atombios.c +1 -1
@@ -452,7 +452,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev, }/* Fujitsu D3003-S2 board lists DVI-I as DVI-D and VGA */ -if ((dev->pdev->device ==0x9802 ) && +if (((dev->pdev->device ==0x9802 ) || (dev->pdev->device ==0x9806 )) && (dev->pdev->subsystem_vendor ==0x1734 ) && (dev->pdev->subsystem_device ==0x11bd )) {if (*connector_type ==DRM_MODE_CONNECTOR_VGA ) {
drivers/gpu/drm/radeon/radeon_atpx_handler.c +1 -55
78 lines not on this page · raw message
drivers/gpu/drm/radeon/radeon_bios.c +134 -4
183 lines not on this page · raw message
drivers/gpu/drm/radeon/radeon_device.c +1 -1
@@ -772,7 +772,7 @@ int radeon_device_init(struct radeon_device *rdev,if (rdev->flags &RADEON_IS_AGP ) rdev->need_dma32 = true;if ((rdev->flags &RADEON_IS_PCI ) && - (rdev->family <CHIP_RS400 )) + (rdev->family <=CHIP_RS740 )) rdev->need_dma32 = true; dma_bits = rdev->need_dma32 ?32 :40 ;
drivers/gpu/drm/udl/udl_connector.c +7 -0
@@ -69,6 +69,13 @@ static int udl_get_modes(struct drm_connector *connector)static int udl_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) { +struct udl_device *udl = connector->dev->dev_private; +if (!udl->sku_pixel_limit) +return 0 ; + +if (mode->vdisplay * mode->hdisplay > udl->sku_pixel_limit) +return MODE_VIRTUAL_Y ; +return 0 ; }
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +5 -0
@@ -1159,6 +1159,11 @@ static struct drm_driver driver = { .open = vmw_driver_open, .preclose = vmw_preclose, .postclose = vmw_postclose, + + .dumb_create = vmw_dumb_create, + .dumb_map_offset = vmw_dumb_map_offset, + .dumb_destroy = vmw_dumb_destroy, + .fops = &vmwgfx_driver_fops, .name = VMWGFX_DRIVER_NAME, .desc = VMWGFX_DRIVER_DESC,
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +10 -0
@@ -645,6 +645,16 @@ int vmw_kms_readback(struct vmw_private *dev_priv,int vmw_kms_update_layout_ioctl (struct drm_device *dev,void *data,struct drm_file *file_priv); +int vmw_dumb_create (struct drm_file *file_priv, +struct drm_device *dev, +struct drm_mode_create_dumb *args); + +int vmw_dumb_map_offset (struct drm_file *file_priv, +struct drm_device *dev,uint32_t handle, +uint64_t *offset); +int vmw_dumb_destroy (struct drm_file *file_priv, +struct drm_device *dev, +uint32_t handle);/** * Overlay control - vmwgfx_overlay.c */
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c +1 -1
@@ -1018,7 +1018,7 @@ int vmw_event_fence_action_create(struct drm_file *file_priv, } - event =kzalloc (sizeof (event->event),GFP_KERNEL ); + event =kzalloc (sizeof (*event),GFP_KERNEL );if (unlikely (event ==NULL )) {DRM_ERROR ("Failed to allocate an event.\n" ); ret = -ENOMEM ;
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +73 -0
76 lines not on this page · raw message
drivers/hid/hid-logitech-dj.c +41 -0
89 lines not on this page · raw message
drivers/hid/hid-logitech-dj.h +1 -0
@@ -101,6 +101,7 @@ struct dj_receiver_dev {struct work_struct work;struct kfifo notif_fifo;spinlock_t lock; +bool querying_devices; };struct dj_device {
drivers/hwmon/ad7314.c +8 -0
@@ -94,10 +94,18 @@ static ssize_t ad7314_show_temperature(struct device *dev, } } +static ssize_t ad7314_show_name (struct device *dev, +struct device_attribute *devattr,char *buf) +{ +return sprintf (buf,"%s\n" ,to_spi_device (dev)->modalias); +} + +static DEVICE_ATTR(name, S_IRUGO, ad7314_show_name, NULL); static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, ad7314_show_temperature, NULL, 0);static struct attribute *ad7314_attributes[] = { + &dev_attr_name.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,NULL , };
drivers/hwmon/ads7871.c +9 -0
@@ -139,6 +139,12 @@ static ssize_t show_voltage(struct device *dev, } } +static ssize_t ads7871_show_name (struct device *dev, +struct device_attribute *devattr,char *buf) +{ +return sprintf (buf,"%s\n" ,to_spi_device (dev)->modalias); +} + static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, show_voltage, NULL, 0); static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 1); static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 2);
@@ -148,6 +154,8 @@ static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 5); static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 6); static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 7); +static DEVICE_ATTR(name, S_IRUGO, ads7871_show_name, NULL); +static struct attribute *ads7871_attributes[] = { &sensor_dev_attr_in0_input.dev_attr.attr, &sensor_dev_attr_in1_input.dev_attr.attr,
@@ -157,6 +165,7 @@ static struct attribute *ads7871_attributes[] = { &sensor_dev_attr_in5_input.dev_attr.attr, &sensor_dev_attr_in6_input.dev_attr.attr, &sensor_dev_attr_in7_input.dev_attr.attr, + &dev_attr_name.attr, NULL };
drivers/hwmon/fam15h_power.c +13 -2
@@ -128,12 +128,12 @@ static bool __devinit fam15h_power_is_internal_node0(struct pci_dev *f4)* counter saturations resulting in bogus power readings. * We correct this value ourselves to cope with older BIOSes. */ -static DEFINE_PCI_DEVICE_TABLE (affected_device) = { +static const struct pci_device_id affected_device[] = { {PCI_VDEVICE (AMD ,PCI_DEVICE_ID_AMD_15H_NB_F4 ) }, {0 } }; -static void __devinit tweak_runavg_range (struct pci_dev *pdev) +static void tweak_runavg_range (struct pci_dev *pdev) {u32 val;
@@ -157,6 +157,16 @@ static void __devinit tweak_runavg_range(struct pci_dev *pdev) REG_TDP_RUNNING_AVERAGE, val); } +#ifdef CONFIG_PM +static int fam15h_power_resume (struct pci_dev *pdev) +{ +tweak_runavg_range (pdev); +return 0 ; +} +#else +#define fam15h_power_resume NULL +#endif +static void __devinit fam15h_power_init_data (struct pci_dev *f4,struct fam15h_power_data *data) {
@@ -255,6 +265,7 @@ static struct pci_driver fam15h_power_driver = { .id_table = fam15h_power_id_table, .probe = fam15h_power_probe, .remove = __devexit_p(fam15h_power_remove), + .resume = fam15h_power_resume, };static int __init fam15h_power_init (void )
drivers/hwmon/twl4030-madc-hwmon.c +5 -4
@@ -44,12 +44,13 @@ static ssize_t madc_read(struct device *dev, struct device_attribute *devattr, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); -struct twl4030_madc_request req; +struct twl4030_madc_request req = { + .channels =1 << attr->index, + .method =TWL4030_MADC_SW2 , + .type =TWL4030_MADC_WAIT , + };long val; - req.channels = (1 << attr->index); - req.method =TWL4030_MADC_SW2 ; - req.func_cb =NULL ; val =twl4030_madc_conversion (&req);if (val <0 )return val;
drivers/input/serio/i8042-x86ia64io.h +6 -0
@@ -335,6 +335,12 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { }, { .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"TOSHIBA" ), + DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"), + }, + }, + { + .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"ALIENWARE" ), DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), },
drivers/iommu/intr_remapping.c +13 -5
@@ -752,6 +752,7 @@ int __init parse_ioapics_under_ir(void) {struct dmar_drhd_unit *drhd;int ir_supported =0 ; +int ioapic_idx;for_each_drhd_unit (drhd) {struct intel_iommu *iommu = drhd->iommu;
@@ -764,13 +765,20 @@ int __init parse_ioapics_under_ir(void) } } -if (ir_supported && ir_ioapic_num != nr_ioapics) { -printk (KERN_WARNING -"Not all IO-APIC's listed under remapping hardware\n" ); -return -1 ; +if (!ir_supported) +return 0 ; + +for (ioapic_idx =0 ; ioapic_idx < nr_ioapics; ioapic_idx++) { +int ioapic_id =mpc_ioapic_id (ioapic_idx); +if (!map_ioapic_to_ir (ioapic_id)) { +pr_err (FW_BUG "ioapic %d has no mapping iommu, " +"interrupt remapping will be disabled\n" , + ioapic_id); +return -1 ; + } } -return ir_supported; +return 1 ; }int __init ir_dev_scope_init (void )
drivers/isdn/isdnloop/isdnloop.c +0 -12
@@ -16,7 +16,6 @@#include <linux/sched.h> #include "isdnloop.h" -static char *revision ="$Revision: 1.11.6.7 $" ;static char *isdnloop_id ="loop0" ;MODULE_DESCRIPTION ("ISDN4Linux: Pseudo Driver that simulates an ISDN card" );
@@ -1494,17 +1493,6 @@ isdnloop_addcard(char *id1)static int __init isdnloop_init (void ) { -char *p; -char rev[10 ]; - -if ((p =strchr (revision,':' ))) { -strcpy (rev, p +1 ); - p =strchr (rev,'$' ); - *p =0 ; - }else -strcpy (rev," ??? " ); -printk (KERN_NOTICE "isdnloop-ISDN-driver Rev%s\n" , rev); -if (isdnloop_id)return (isdnloop_addcard (isdnloop_id));
drivers/md/md.c +11 -4
@@ -1143,8 +1143,11 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor ret =0 ; } rdev->sectors = rdev->sb_start; -/* Limit to 4TB as metadata cannot record more than that */ -if (rdev->sectors >= (2ULL <<32 )) +/* Limit to 4TB as metadata cannot record more than that. +* (not needed for Linear and RAID0 as metadata doesn't +* record this size) +*/ +if (rdev->sectors >= (2ULL <<32 ) && sb->level >=1 ) rdev->sectors = (2ULL <<32 ) -2 ;if (rdev->sectors < ((sector_t )sb->size) *2 && sb->level >=1 )
@@ -1426,7 +1429,7 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)/* Limit to 4TB as metadata cannot record more than that. * 4TB == 2^32 KB, or 2*2^32 sectors. */ -if (num_sectors >= (2ULL <<32 )) +if (num_sectors >= (2ULL <<32 ) && rdev->mddev->level >=1 ) num_sectors = (2ULL <<32 ) -2 ;md_super_write (rdev->mddev, rdev, rdev->sb_start, rdev->sb_size, rdev->sb_page);
@@ -7417,6 +7420,8 @@ static int remove_and_add_spares(struct mddev *mddev) } } } +if (removed) +set_bit (MD_CHANGE_DEVS , &mddev->flags);return spares; }
@@ -7430,9 +7435,11 @@ static void reap_sync_thread(struct mddev *mddev) !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {/* success...*/ /* activate any spares */ -if (mddev->pers->spare_active (mddev)) +if (mddev->pers->spare_active (mddev)) {sysfs_notify (&mddev->kobj,NULL ,"degraded" ); +set_bit (MD_CHANGE_DEVS , &mddev->flags); + } }if (test_bit (MD_RECOVERY_RESHAPE , &mddev->recovery) && mddev->pers->finish_reshape)
drivers/md/raid10.c +10 -6
@@ -612,20 +612,24 @@ static int raid10_mergeable_bvec(struct request_queue *q, max = biovec->bv_len;if (mddev->merge_check_needed) { -struct r10bio r10_bio; +struct { +struct r10bio r10_bio; +struct r10dev devs[conf->copies]; + } on_stack; +struct r10bio *r10_bio = &on_stack.r10_bio;int s; - r10_bio.sector = sector; -raid10_find_phys (conf, &r10_bio); + r10_bio->sector = sector; +raid10_find_phys (conf, r10_bio);rcu_read_lock ();for (s =0 ; s < conf->copies; s++) { -int disk = r10_bio.devs[s].devnum; +int disk = r10_bio->devs[s].devnum;struct md_rdev *rdev =rcu_dereference ( conf->mirrors[disk].rdev);if (rdev && !test_bit (Faulty, &rdev->flags)) {struct request_queue *q =bdev_get_queue (rdev->bdev);if (q->merge_bvec_fn) { - bvm->bi_sector = r10_bio.devs[s].addr + bvm->bi_sector = r10_bio->devs[s].addr + rdev->data_offset; bvm->bi_bdev = rdev->bdev; max = min(max, q->merge_bvec_fn(
@@ -637,7 +641,7 @@ static int raid10_mergeable_bvec(struct request_queue *q,struct request_queue *q =bdev_get_queue (rdev->bdev);if (q->merge_bvec_fn) { - bvm->bi_sector = r10_bio.devs[s].addr + bvm->bi_sector = r10_bio->devs[s].addr + rdev->data_offset; bvm->bi_bdev = rdev->bdev; max = min(max, q->merge_bvec_fn(
drivers/md/raid10.h +1 -1
@@ -104,7 +104,7 @@ struct r10bio {* We choose the number when they are allocated. * We sometimes need an extra bio to write to the replacement. */ -struct { +struct r10dev {struct bio *bio;union {struct bio *repl_bio;/* used for resync and
drivers/md/raid5.c +4 -0
@@ -380,6 +380,8 @@ static int calc_degraded(struct r5conf *conf) degraded =0 ;for (i =0 ; i < conf->previous_raid_disks; i++) {struct md_rdev *rdev =rcu_dereference (conf->disks[i].rdev); +if (rdev &&test_bit (Faulty, &rdev->flags)) + rdev =rcu_dereference (conf->disks[i].replacement);if (!rdev ||test_bit (Faulty, &rdev->flags)) degraded++;else if (test_bit (In_sync, &rdev->flags))
@@ -404,6 +406,8 @@ static int calc_degraded(struct r5conf *conf) degraded2 =0 ;for (i =0 ; i < conf->raid_disks; i++) {struct md_rdev *rdev =rcu_dereference (conf->disks[i].rdev); +if (rdev &&test_bit (Faulty, &rdev->flags)) + rdev =rcu_dereference (conf->disks[i].replacement);if (!rdev ||test_bit (Faulty, &rdev->flags)) degraded2++;else if (test_bit (In_sync, &rdev->flags))
drivers/media/rc/rc-main.c +3 -2
@@ -775,10 +775,11 @@ static ssize_t show_protocols(struct device *device,if (dev->driver_type ==RC_DRIVER_SCANCODE ) { enabled = dev->rc_map.rc_type; allowed = dev->allowed_protos; - }else { + }else if (dev->raw) { enabled = dev->raw->enabled_protocols; allowed =ir_raw_get_allowed_protocols (); - } + }else +return -ENODEV ; IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n", (long long)allowed,
drivers/media/video/cx25821/cx25821-core.c +0 -3
@@ -912,9 +912,6 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)list_add_tail (&dev->devlist, &cx25821_devlist);mutex_unlock (&cx25821_devlist_mutex); -strcpy (cx25821_boards[UNKNOWN_BOARD ].name,"unknown" ); -strcpy (cx25821_boards[CX25821_BOARD ].name,"cx25821" ); -if (dev->pci->device !=0x8210 ) {pr_info ("%s(): Exiting. Incorrect Hardware device = 0x%02x\n" , __func__, dev->pci->device);
drivers/media/video/cx25821/cx25821.h +1 -1
@@ -187,7 +187,7 @@ enum port { };struct cx25821_board { -char *name; +const char *name;enum port porta;enum port portb;enum port portc;
drivers/misc/sgi-xp/xpc_uv.c +65 -19
129 lines not on this page · raw message
drivers/mmc/card/block.c +25 -1
@@ -1430,7 +1430,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)/* complete ongoing async transfer before issuing discard */ if (card->host->areq)mmc_blk_issue_rw_rq (mq,NULL ); -if (req->cmd_flags &REQ_SECURE ) +if (req->cmd_flags &REQ_SECURE && + !(card->quirks &MMC_QUIRK_SEC_ERASE_TRIM_BROKEN )) ret =mmc_blk_issue_secdiscard_rq (mq, req);else ret =mmc_blk_issue_discard_rq (mq, req);
@@ -1730,6 +1731,7 @@ force_ro_fail:#define CID_MANFID_SANDISK 0x2#define CID_MANFID_TOSHIBA 0x11#define CID_MANFID_MICRON 0x13 +#define CID_MANFID_SAMSUNG 0x15static const struct mmc_fixup blk_fixups[] = {
@@ -1766,6 +1768,28 @@ static const struct mmc_fixup blk_fixups[] =MMC_FIXUP (CID_NAME_ANY ,CID_MANFID_MICRON ,0x200 , add_quirk_mmc,MMC_QUIRK_LONG_READ_TIME ), +/* +* On these Samsung MoviNAND parts, performing secure erase or +* secure trim can result in unrecoverable corruption due to a +* firmware bug. +*/ +MMC_FIXUP ("M8G2FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("MAG4FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("MBG8FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("MCGAFA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("VAL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("VYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("KYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +MMC_FIXUP ("VZL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_SEC_ERASE_TRIM_BROKEN ), +END_FIXUP };
drivers/mmc/host/mxs-mmc.c +2 -2
@@ -280,11 +280,11 @@ static irqreturn_t mxs_mmc_irq_handler(int irq, void *dev_id)writel (stat &MXS_MMC_IRQ_BITS , host->base +HW_SSP_CTRL1 +MXS_CLR_ADDR ); +spin_unlock (&host->lock); +if ((stat &BM_SSP_CTRL1_SDIO_IRQ ) && (stat &BM_SSP_CTRL1_SDIO_IRQ_EN ))mmc_signal_sdio_irq (host->mmc); -spin_unlock (&host->lock); -if (stat &BM_SSP_CTRL1_RESP_TIMEOUT_IRQ ) cmd->error = -ETIMEDOUT ;else if (stat &BM_SSP_CTRL1_RESP_ERR_IRQ )
drivers/mmc/host/sdhci-esdhc.h +3 -3
@@ -48,14 +48,14 @@ static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)int div =1 ;u32 temp; +if (clock ==0 ) + goto out; + temp =sdhci_readl (host,ESDHC_SYSTEM_CONTROL ); temp &= ~(ESDHC_CLOCK_IPGEN |ESDHC_CLOCK_HCKEN |ESDHC_CLOCK_PEREN |ESDHC_CLOCK_MASK );sdhci_writel (host, temp,ESDHC_SYSTEM_CONTROL ); -if (clock ==0 ) - goto out; -while (host->max_clk / pre_div /16 > clock && pre_div <256 ) pre_div *=2 ;
drivers/mtd/ubi/vtbl.c +2 -2
@@ -346,7 +346,7 @@ retry:*/ err =ubi_scan_add_used (ubi, si, new_seb->pnum, new_seb->ec, vid_hdr,0 ); -kfree (new_seb); +kmem_cache_free (si->scan_leb_slab, new_seb);ubi_free_vid_hdr (ubi, vid_hdr);return err;
@@ -359,7 +359,7 @@ write_error:list_add (&new_seb->u.list, &si->erase); goto retry; } -kfree (new_seb); +kmem_cache_free (si->scan_leb_slab, new_seb); out_free:ubi_free_vid_hdr (ubi, vid_hdr);return err;
drivers/net/can/janz-ican3.c +1 -3
@@ -1250,7 +1250,6 @@ static irqreturn_t ican3_irq(int irq, void *dev_id)*/ static int ican3_reset_module (struct ican3_dev *mod) { -u8 val =1 << mod->num;unsigned long start;u8 runold, runnew;
@@ -1264,8 +1263,7 @@ static int ican3_reset_module(struct ican3_dev *mod) runold =ioread8 (mod->dpm +TARGET_RUNNING );/* reset the module */ -iowrite8 (val, &mod->ctrl->reset_assert); -iowrite8 (val, &mod->ctrl->reset_deassert); +iowrite8 (0x00 , &mod->dpmctrl->hwreset);/* wait until the module has finished resetting and is running */ start = jiffies;
drivers/net/can/mcp251x.c +10 -1
@@ -83,6 +83,11 @@#define INSTRUCTION_LOAD_TXB (n) (0x40 + 2 * (n))#define INSTRUCTION_READ_RXB (n) (((n) == 0) ? 0x90 : 0x94)#define INSTRUCTION_RESET 0xC0 +#define RTS_TXB0 0x01 +#define RTS_TXB1 0x02 +#define RTS_TXB2 0x04 +#define INSTRUCTION_RTS (n) (0x80 | ((n) & 0x07)) +/* MPC251x registers */ #define CANSTAT 0x0e
@@ -397,6 +402,7 @@ static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,static void mcp251x_hw_tx (struct spi_device *spi,struct can_frame *frame,int tx_buf_idx) { +struct mcp251x_priv *priv =dev_get_drvdata (&spi->dev);u32 sid, eid, exide, rtr;u8 buf[SPI_TRANSFER_BUF_LEN ];
@@ -418,7 +424,10 @@ static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame, buf[TXBDLC_OFF ] = (rtr <<DLC_RTR_SHIFT ) | frame->can_dlc;memcpy (buf +TXBDAT_OFF , frame->data, frame->can_dlc);mcp251x_hw_tx_frame (spi, buf, frame->can_dlc, tx_buf_idx); -mcp251x_write_reg (spi,TXBCTRL (tx_buf_idx),TXBCTRL_TXREQ ); + +/* use INSTRUCTION_RTS, to avoid "repeated frame problem" */ + priv->spi_tx_buf[0 ] =INSTRUCTION_RTS (1 << tx_buf_idx); +mcp251x_spi_trans (priv->spi,1 ); } static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
drivers/net/can/ti_hecc.c +1 -1
@@ -984,12 +984,12 @@ static int __devexit ti_hecc_remove(struct platform_device *pdev)struct net_device *ndev =platform_get_drvdata (pdev);struct ti_hecc_priv *priv =netdev_priv (ndev); +unregister_candev (ndev);clk_disable (priv->clk);clk_put (priv->clk); res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );iounmap (priv->base);release_mem_region (res->start,resource_size (res)); -unregister_candev (ndev);free_candev (ndev);platform_set_drvdata (pdev,NULL );
drivers/net/ethernet/freescale/gianfar.c +1 -1
@@ -1037,7 +1037,7 @@ static int gfar_probe(struct platform_device *ofdev)if (priv->device_flags &FSL_GIANFAR_DEV_HAS_VLAN ) { dev->hw_features |=NETIF_F_HW_VLAN_TX |NETIF_F_HW_VLAN_RX ; - dev->features |=NETIF_F_HW_VLAN_TX |NETIF_F_HW_VLAN_RX ; + dev->features |=NETIF_F_HW_VLAN_RX ; }if (priv->device_flags &FSL_GIANFAR_DEV_HAS_EXTENDED_HASH ) {
drivers/net/ethernet/ibm/ibmveth.c +9 -17
@@ -472,14 +472,9 @@ static void ibmveth_cleanup(struct ibmveth_adapter *adapter) }if (adapter->rx_queue.queue_addr !=NULL ) { -if (!dma_mapping_error (dev, adapter->rx_queue.queue_dma)) { -dma_unmap_single (dev, - adapter->rx_queue.queue_dma, - adapter->rx_queue.queue_len, -DMA_BIDIRECTIONAL ); - adapter->rx_queue.queue_dma =DMA_ERROR_CODE ; - } -kfree (adapter->rx_queue.queue_addr); +dma_free_coherent (dev, adapter->rx_queue.queue_len, + adapter->rx_queue.queue_addr, + adapter->rx_queue.queue_dma); adapter->rx_queue.queue_addr =NULL ; }
@@ -556,10 +551,13 @@ static int ibmveth_open(struct net_device *netdev) goto err_out; } + dev = &adapter->vdev->dev; + adapter->rx_queue.queue_len =sizeof (struct ibmveth_rx_q_entry ) * rxq_entries; - adapter->rx_queue.queue_addr =kmalloc (adapter->rx_queue.queue_len, -GFP_KERNEL ); + adapter->rx_queue.queue_addr = +dma_alloc_coherent (dev, adapter->rx_queue.queue_len, + &adapter->rx_queue.queue_dma,GFP_KERNEL );if (!adapter->rx_queue.queue_addr) {netdev_err (netdev,"unable to allocate rx queue pages\n" );
@@ -567,19 +565,13 @@ static int ibmveth_open(struct net_device *netdev) goto err_out; } - dev = &adapter->vdev->dev; - adapter->buffer_list_dma =dma_map_single (dev, adapter->buffer_list_addr,4096 ,DMA_BIDIRECTIONAL ); adapter->filter_list_dma =dma_map_single (dev, adapter->filter_list_addr,4096 ,DMA_BIDIRECTIONAL ); - adapter->rx_queue.queue_dma =dma_map_single (dev, - adapter->rx_queue.queue_addr, - adapter->rx_queue.queue_len,DMA_BIDIRECTIONAL );if ((dma_mapping_error (dev, adapter->buffer_list_dma)) || - (dma_mapping_error (dev, adapter->filter_list_dma)) || - (dma_mapping_error (dev, adapter->rx_queue.queue_dma))) { + (dma_mapping_error (dev, adapter->filter_list_dma))) {netdev_err (netdev,"unable to map filter or buffer list " "pages\n" ); rc = -ENOMEM ;
drivers/net/ethernet/realtek/r8169.c +1 -0
@@ -3737,6 +3737,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)case RTL_GIGA_MAC_VER_22 :case RTL_GIGA_MAC_VER_23 :case RTL_GIGA_MAC_VER_24 : +case RTL_GIGA_MAC_VER_34 :RTL_W32 (RxConfig,RX128_INT_EN |RX_MULTI_EN |RX_DMA_BURST );break ;default :
drivers/net/ethernet/sfc/efx.c +6 -0
@@ -1498,6 +1498,11 @@ static int efx_probe_all(struct efx_nic *efx) goto fail2; } +BUILD_BUG_ON (EFX_DEFAULT_DMAQ_SIZE <EFX_RXQ_MIN_ENT ); +if (WARN_ON (EFX_DEFAULT_DMAQ_SIZE <EFX_TXQ_MIN_ENT (efx))) { + rc = -EINVAL ; + goto fail3; + } efx->rxq_entries = efx->txq_entries =EFX_DEFAULT_DMAQ_SIZE ; rc =efx_probe_filters (efx);
@@ -2065,6 +2070,7 @@ static int efx_register_netdev(struct efx_nic *efx) net_dev->irq = efx->pci_dev->irq; net_dev->netdev_ops = &efx_netdev_ops;SET_ETHTOOL_OPS (net_dev, &efx_ethtool_ops); + net_dev->gso_max_segs =EFX_TSO_MAX_SEGS ;rtnl_lock ();
drivers/net/ethernet/sfc/efx.h +10 -4
@@ -30,6 +30,7 @@ extern netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);extern void efx_xmit_done (struct efx_tx_queue *tx_queue,unsigned int index);extern int efx_setup_tc (struct net_device *net_dev,u8 num_tc); +extern unsigned int efx_tx_max_skb_descs (struct efx_nic *efx);/* RX */ extern int efx_probe_rx_queue (struct efx_rx_queue *rx_queue);
@@ -52,10 +53,15 @@ extern void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue);#define EFX_MAX_EVQ_SIZE 16384UL#define EFX_MIN_EVQ_SIZE 512UL -/* The smallest [rt]xq_entries that the driver supports. Callers of -* efx_wake_queue() assume that they can subsequently send at least one -* skb. Falcon/A1 may require up to three descriptors per skb_frag. */ -#define EFX_MIN_RING_SIZE (roundup_pow_of_two(2 * 3 * MAX_SKB_FRAGS)) +/* Maximum number of TCP segments we support for soft-TSO */ +#define EFX_TSO_MAX_SEGS 100 + +/* The smallest [rt]xq_entries that the driver supports. RX minimum +* is a bit arbitrary. For TX, we must have space for at least 2 +* TSO skbs. +*/ +#define EFX_RXQ_MIN_ENT 128U +#define EFX_TXQ_MIN_ENT (efx) (2 * efx_tx_max_skb_descs(efx))/* Filters */ extern int efx_probe_filters (struct efx_nic *efx);
drivers/net/ethernet/sfc/ethtool.c +13 -7
@@ -680,21 +680,27 @@ static int efx_ethtool_set_ringparam(struct net_device *net_dev, struct ethtool_ringparam *ring) {struct efx_nic *efx =netdev_priv (net_dev); +u32 txq_entries;if (ring->rx_mini_pending || ring->rx_jumbo_pending || ring->rx_pending >EFX_MAX_DMAQ_SIZE || ring->tx_pending >EFX_MAX_DMAQ_SIZE )return -EINVAL ; -if (ring->rx_pending <EFX_MIN_RING_SIZE || - ring->tx_pending <EFX_MIN_RING_SIZE ) { +if (ring->rx_pending <EFX_RXQ_MIN_ENT ) {netif_err (efx, drv, efx->net_dev, -"TX and RX queues cannot be smaller than %ld\n" , -EFX_MIN_RING_SIZE ); +"RX queues cannot be smaller than %u\n" , +EFX_RXQ_MIN_ENT );return -EINVAL ; } -return efx_realloc_channels (efx, ring->rx_pending, ring->tx_pending); + txq_entries =max (ring->tx_pending,EFX_TXQ_MIN_ENT (efx)); +if (txq_entries != ring->tx_pending) +netif_warn (efx, drv, efx->net_dev, +"increasing TX queue size to minimum of %u\n" , + txq_entries); + +return efx_realloc_channels (efx, ring->rx_pending, txq_entries); } static int efx_ethtool_set_pauseparam(struct net_device *net_dev,
@@ -857,8 +863,8 @@ static int efx_ethtool_get_class_rule(struct efx_nic *efx, &ip_entry->ip4dst, &ip_entry->pdst);if (rc !=0 ) { rc =efx_filter_get_ipv4_full ( - &spec, &proto, &ip_entry->ip4src, &ip_entry->psrc, - &ip_entry->ip4dst, &ip_entry->pdst); + &spec, &proto, &ip_entry->ip4dst, &ip_entry->pdst, + &ip_entry->ip4src, &ip_entry->psrc);EFX_WARN_ON_PARANOID (rc); ip_mask->ip4src = ~0 ; ip_mask->psrc = ~0 ;
drivers/net/ethernet/sfc/tx.c +19 -0
@@ -119,6 +119,25 @@ efx_max_tx_len(struct efx_nic *efx, dma_addr_t dma_addr)return len; } +unsigned int efx_tx_max_skb_descs (struct efx_nic *efx) +{ +/* Header and payload descriptor for each output segment, plus +* one for every input fragment boundary within a segment +*/ +unsigned int max_descs =EFX_TSO_MAX_SEGS *2 +MAX_SKB_FRAGS ; + +/* Possibly one more per segment for the alignment workaround */ +if (EFX_WORKAROUND_5391 (efx))
Lines of this file are not shown. View the raw message.
drivers/net/usb/qmi_wwan.c +95 -0
95 lines not on this page · raw message
drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +16 -10
Lines of this file are not shown. View the raw message.
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2400pci.c +9 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2400pci.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2500pci.c +9 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2500usb.c +10 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2500usb.h +9 -8
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2800pci.c +9 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2800usb.c +20 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rt2x00/rt2x00dev.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rtlwifi/rtl8192ce/def.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rtlwifi/rtl8192ce/hw.c +10 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rtlwifi/rtl8192ce/sw.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/staging/android/android_alarm.h +3 -1
Lines of this file are not shown. View the raw message.
drivers/staging/media/lirc/lirc_sir.c +58 -2
60 lines not on this page · raw message
drivers/tty/serial/pch_uart.c +40 -19
59 lines not on this page · raw message
drivers/usb/host/pci-quirks.c +35 -7
42 lines not on this page · raw message
drivers/usb/host/xhci-hub.c +42 -0
42 lines not on this page · raw message
drivers/usb/host/xhci.c +122 -1
123 lines not on this page · raw message
kernel/events/core.c +33 -29
62 lines not on this page · raw message
kernel/kthread.c +52 -36
88 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.