[kernel] r22934 - in dists/wheezy/linux/debian: . patches patches/bugfix/all patches/bugfix/x86 patches/features/all patches/features/all/bql patches/features/all/drm patches/features/all/line6 patches/features/x86/hyperv

Ben Hutchings benh at moszumanska.debian.org
Sat Aug 8 17:48:05 UTC 2015


Author: benh
Date: Sat Aug  8 17:48:04 2015
New Revision: 22934

Log:
Update to 3.2.70

drm, agp: Update to 3.4.108

Revert "ACPICA: Utilities: split IO address types from data type models."
to avoid ABI change on i386

Deleted:
   dists/wheezy/linux/debian/patches/bugfix/all/aslr-fix-stack-randomization-on-64-bit-systems.patch
   dists/wheezy/linux/debian/patches/bugfix/all/fs-take-i_mutex-during-prepare_binprm-for-set-ug-id-.patch
   dists/wheezy/linux/debian/patches/bugfix/all/ib-core-prevent-integer-overflow-in-ib_umem_get.patch
   dists/wheezy/linux/debian/patches/bugfix/all/ipv4-missing-sk_nulls_node_init-in-ping_unhash.patch
   dists/wheezy/linux/debian/patches/bugfix/all/ipv6-don-t-reduce-hop-limit-for-an-interface.patch
   dists/wheezy/linux/debian/patches/bugfix/all/net-llc-use-correct-size-for-sysctl-timeout-entries.patch
   dists/wheezy/linux/debian/patches/bugfix/all/net-rds-use-correct-size-for-max-unacked-packets-and.patch
   dists/wheezy/linux/debian/patches/bugfix/all/netfilter-nf_conntrack-reserve-two-bytes-for-nf_ct_e.patch
   dists/wheezy/linux/debian/patches/bugfix/all/nfsv4-minor-cleanups-for-nfs4_handle_exception-and-n.patch
   dists/wheezy/linux/debian/patches/bugfix/all/pipe-iovec-fix-memory-corruption-when-retrying-atomi.patch
   dists/wheezy/linux/debian/patches/bugfix/all/sctp-fix-asconf-list-handling.patch
   dists/wheezy/linux/debian/patches/bugfix/all/sg_start_req-make-sure-that-there-s-not-too-many-ele.patch
   dists/wheezy/linux/debian/patches/bugfix/all/udf-check-length-of-extended-attributes-and-allocati.patch
   dists/wheezy/linux/debian/patches/bugfix/all/udf-remove-repeated-loads-blocksize.patch
   dists/wheezy/linux/debian/patches/bugfix/all/udp-fix-behavior-of-wrong-checksums.patch
   dists/wheezy/linux/debian/patches/bugfix/all/vfs-read-file_handle-only-once-in-handle_to_path.patch
   dists/wheezy/linux/debian/patches/bugfix/all/xen-pciback-limit-guest-control-of-command-register.patch
   dists/wheezy/linux/debian/patches/bugfix/x86/crypto-aesni-fix-memory-usage-in-GCM-decryption.patch
   dists/wheezy/linux/debian/patches/bugfix/x86/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimi.patch
   dists/wheezy/linux/debian/patches/bugfix/x86/x86-bpf_jit-fix-compilation-of-large-bpf-programs.patch
   dists/wheezy/linux/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch
Modified:
   dists/wheezy/linux/debian/changelog
   dists/wheezy/linux/debian/patches/features/all/bql/tg3-support-for-byte-queue-limits.patch
   dists/wheezy/linux/debian/patches/features/all/debugfs-add-mode-uid-and-gid-options.patch
   dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch
   dists/wheezy/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch
   dists/wheezy/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch
   dists/wheezy/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0055-Staging-hv-storvsc-Get-rid-of-the-on_io_completion-i.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0067-Staging-hv-storvsc-Move-the-storage-driver-out-of-th.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0077-hv-remove-the-second-argument-of-k-un-map_atomic.patch
   dists/wheezy/linux/debian/patches/series

Modified: dists/wheezy/linux/debian/changelog
==============================================================================
--- dists/wheezy/linux/debian/changelog	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/changelog	Sat Aug  8 17:48:04 2015	(r22934)
@@ -1,3 +1,355 @@
+linux (3.2.70-1) UNRELEASED; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.69
+    - PCI: Generate uppercase hex for modalias var in uevent
+    - usb: core: buffer: smallest buffer should start at ARCH_DMA_MINALIGN
+    - TPM: Add new TPMs to the tail of the list to prevent inadvertent change of
+      dev
+    - Bluetooth: ath3k: Add support of AR3012 bluetooth 13d3:3423 device
+    - [s390*] KVM: base hrtimer on a monotonic clock
+    - PCI: Fix infinite loop with ROM image of size 0
+    - [x86] staging: comedi: comedi_compat32.c: fix COMEDI_CMD copy back
+    - nfs: don't call blocking operations while !TASK_RUNNING
+    - cdc-acm: add sanity checks
+    - USB: fix use-after-free bug in usb_hcd_unlink_urb()
+    - tty: Prevent untrappable signals from malicious program
+    - xen/manage: Fix USB interaction issues when resuming
+    - rtnetlink: ifla_vf_policy: fix misuses of NLA_BINARY
+    - ALSA: off by one bug in snd_riptide_joystick_probe()
+    - fsnotify: fix handling of renames in audit
+    - NFSv4.1: Fix a kfree() of uninitialised pointers in decode_cb_sequence_args
+    - cpufreq: speedstep-smi: enable interrupts when waiting
+    - mm/hugetlb: fix getting refcount 0 page in hugetlb_fault()
+    - mm/hugetlb: add migration/hwpoisoned entry check in
+      hugetlb_change_protection
+    - mm/hugetlb: add migration entry check in __unmap_hugepage_range
+    - mm/mmap.c: fix arithmetic overflow in __vm_enough_memory()
+    - mm/nommu.c: fix arithmetic overflow in __vm_enough_memory()
+    - iscsi-target: Drop problematic active_ts_list usage
+    - mm/memory.c: actually remap enough memory
+    - drm/radeon/dp: Set EDP_CONFIGURATION_SET for bridge chips if necessary
+    - ALSA: hdspm - Constrain periods to 2 on older cards
+    - jffs2: fix handling of corrupted summary length
+    - dm mirror: do not degrade the mirror on discard error
+    - dm io: reject unsupported DISCARD requests with EOPNOTSUPP
+    - ipv6: fix ipv6_cow_metrics for non DST_HOST case
+    - fixed invalid assignment of 64bit mask to host dma_boundary for scatter
+      gather segment boundary limit.
+    - sg: fix read() error reporting
+    - netfilter: xt_socket: fix a stack corruption bug
+    - IB/qib: Do not write EEPROM
+    - dm: fix a race condition in dm_get_md
+    - dm snapshot: fix a possible invalid memory access on unload
+    - sched/autogroup: Fix failure to set cpu.rt_runtime_us
+    - libceph: fix double __remove_osd() problem
+    - kdb: fix incorrect counts in KDB summary command output
+    - ipv4: ip_check_defrag should correctly check return value of skb_copy_bits
+    - debugfs: leave freeing a symlink body until inode eviction
+    - autofs4: check dev ioctl size before allocating
+    - autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation
+    - xfs: ensure truncate forces zeroed blocks to disk
+    - gpio: tps65912: fix wrong container_of arguments
+    - ALSA: pcm: Don't leave PREPARED state after draining
+    - [x86] KVM: emulate: fix CMPXCHG8B on 32-bit hosts
+    - net: compat: Ignore MSG_CMSG_COMPAT in compat_sys_{send, recv}msg
+    - xhci: Allocate correct amount of scratchpad buffers
+    - USB: usbfs: don't leak kernel data in siginfo
+    - USB: ftdi_sio: add PIDs for Actisense USB devices
+    - USB: serial: fix potential use-after-free after failed probe
+    - USB: serial: fix tty-device error handling at probe
+    - mac80211: Send EAPOL frames at lowest rate
+    - USB: serial: cp210x: Adding Seletek device id's
+    - nilfs2: fix potential memory overrun on inode
+    - NFSv4: Don't call put_rpccred() under the rcu_read_lock()
+    - usb: ftdi_sio: Add jtag quirk support for Cyber Cortex AV boards
+    - eCryptfs: don't pass fs-specific ioctl commands through
+    - drm/radeon: do a posting read in r100_set_irq
+    - drm/radeon: do a posting read in rs600_set_irq
+    - drm/radeon: do a posting read in r600_set_irq
+    - drm/radeon: do a posting read in evergreen_set_irq
+    - drm/radeon: fix DRM_IOCTL_RADEON_CS oops
+    - ACPI / video: Load the module even if ACPI is disabled
+    - [armhf/omap] ASoC: omap-pcm: Correct dma mask
+    - xhci: fix reporting of 0-sized URBs in control endpoint
+    - xhci: Workaround for PME stuck issues in Intel xhci
+    - Change email address for 8250_pci
+    - tty: fix up atime/mtime mess, take four
+    - console: Fix console name size mismatch
+    - net: irda: fix wait_until_sent poll timeout
+    - TTY: fix tty_wait_until_sent on 64-bit machines
+    - sunrpc: fix braino in ->poll()
+    - gadgetfs: use-after-free in ->aio_read()
+    - gadgetfs: Fix leak on error in aio_read()
+    - ipvs: add missing ip_vs_pe_put in sync code
+    - spi: dw: revisit FIFO size detection again
+    - fuse: notify: don't move pages
+    - fuse: set stolen page uptodate
+    - dm: hold suspend_lock while suspending device during device deletion
+    - dm io: deal with wandering queue limits when handling REQ_DISCARD and
+      REQ_WRITE_SAME
+    - mac80211: drop unencrypted frames in mesh fwding
+    - mac80211: set only VO as a U-APSD enabled AC
+    - mac80211: disable u-APSD queues by default
+    - virtio_console: avoid config access from irq
+    - bnx2x: Force fundamental reset for EEH recovery
+    - libsas: Fix Kernel Crash in smp_execute_task
+    - Input: synaptics - query min dimensions for fw v8.1
+    - Input: synaptics - fix middle button on Lenovo 2015 products
+    - Input: synaptics - handle spurious release of trackstick buttons
+    - can: add missing initialisations in CAN related skbuffs
+    - vt6655: RFbSetPower fix missing rate RATE_12M
+    - ftrace: Fix en(dis)able graph caller when en(dis)abling record via sysctl
+    - ftrace: Fix ftrace enable ordering of sysctl ftrace_enabled
+    - [x86] asm/entry/32: Fix user_mode() misuses
+    - [x86] drm/vmwgfx: Reorder device takedown somewhat
+    - ALSA: control: Add sanity checks for user ctl id name string
+    - ALSA: snd-usb: add quirks for Roland UA-22
+    - nilfs2: fix deadlock of segment constructor during recovery
+    - nl80211: ignore HT/VHT capabilities without QoS/WMM
+    - pagemap: do not leak physical addresses to non-privileged userspace
+    - IB/mlx4: Saturate RoCE port PMA counters in case of overflow
+    - tcm_fc: missing curly braces in ft_invl_hw_context()
+    - target/pscsi: Fix NULL pointer dereference in get_device_type
+    - writeback: add missing INITIAL_JIFFIES init in global_update_bandwidth()
+    - nbd: fix possible memory leak
+    - iio: core: Fix double free.
+    - USB: ftdi_sio: Added custom PID for Synapse Wireless product
+    - USB: serial: keyspan_pda: fix Entrega company name spelling
+    - USB: keyspan_pda: add new device id
+    - net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3, 5}
+    - net: compat: Update get_compat_msghdr() to match copy_msghdr_from_user()
+      behaviour
+    - cifs: fix use-after-free bug in find_writable_file
+    - perf: Fix irq_work 'tail' recursion
+    - sched: Fix RLIMIT_RTTIME when PI-boosting to RT
+    - writeback: fix possible underflow in write bandwidth calculation
+    - usb: xhci: handle Config Error Change (CEC) in xhci driver
+    - usb: xhci: apply XHCI_AVOID_BEI quirk to all Intel xHCI controllers
+    - net: use for_each_netdev_safe() in rtnl_group_changelink()
+    - USB: ftdi_sio: Use jtag quirk for SNAP Connect E10
+    - selinux: fix sel_write_enforce broken return value
+    - mm: fix anon_vma->degree underflow in anon_vma endless growing prevention
+    - hfsplus: fix B-tree corruption after insertion at position 0
+    - ALSA: hda - Add one more node in the EAPD supporting candidate list
+    - radeon: Do not directly dereference pointers to BIOS area.
+    - [x86] reboot: Remove VersaLogic Menlow reboot quirk
+    - [x86] ACPI: fix Dell M6600 ACPI reboot regression via DMI
+    - [x86] reboot: Remove quirk entry for SBC FITPC
+    - [x86] reboot: Add quirk to make Dell C6100 use reboot=pci automatically
+    - [x86] reboot: Fix apparent cut-n-paste mistake in Dell reboot workaround
+    - [x86] reboot: Remove the duplicate C6100 entry in the reboot quirks list
+    - [x86] reboot: Add reboot quirk for Dell Latitude E5410
+    - [x86] reboot: Add reboot quirk for Certec BPC600
+    - [x86] reboot: Add ASRock Q1900DC-ITX mainboard reboot quirk
+    - mac80211: fix RX A-MPDU session reorder timer deletion
+    - xen-netfront: transmit fully GSO-sized packets
+    - be2iscsi: Fix kernel panic when device initialization fails
+    - Defer processing of REQ_PREEMPT requests for blocked devices
+    - ocfs2: _really_ sync the right range
+    - ALSA: usb - Creative USB X-Fi Pro SB1095 volume knob support
+    - net:socket: set msg_namelen to 0 if msg_name is passed as NULL in msghdr
+      struct from userland.
+    - jfs: fix readdir regression
+    - ip: zero sockaddr returned on error queue
+    - net: rps: fix cpu unplug
+    - ipv6: stop sending PTB packets for MTU < 1280
+    - netxen: fix netxen_nic_poll() logic
+    - ping: Fix race in free in receive path
+    - ppp: deflate: never return len larger than output buffer
+    - rtnetlink: call ->dellink on failure when ->newlink exists
+    - gen_stats.c: Duplicate xstats buffer for later use
+    - ipv4: ip_check_defrag should not assume that skb_network_offset is zero
+    - ematch: Fix auto-loading of ematch modules.
+    - net: reject creation of netdev names with colons
+    - macvtap: limit head length of skb allocated
+    - macvtap: make sure neighbour code can push ethernet header
+    - usb: plusb: Add support for National Instruments host-to-host cable
+    - udp: only allow UFO for packets from SOCK_DGRAM sockets
+    - net: ping: Return EAFNOSUPPORT when appropriate.
+    - net: avoid to hang up on sending due to sysctl configuration overflow.
+    - net: sysctl_net_core: check SNDBUF and RCVBUF for min length
+    - rds: avoid potential stack overflow
+    - caif: fix MSG_OOB test in caif_seqpkt_recvmsg()
+    - rxrpc: bogus MSG_PEEK test in rxrpc_recvmsg()
+    - tcp: make connect() mem charging friendly
+    - 8139cp,8139too,r8169,tg3,ixgb,benet,gianfar: Call dev_kfree_skb_any
+      instead of kfree_skb
+    - ip_forward: Drop frames with attached skb->sk
+    - tcp: avoid looping in tcp_send_fin()
+    - net: make skb_gso_segment error handling more robust
+    - spi: spidev: fix possible arithmetic overflow for multi-transfer message
+    - IB/core: Avoid leakage from kernel to user space
+    - ipvs: rerouting to local clients is not needed anymore
+    - ipvs: uninitialized data with IP_VS_IPV6
+    - Revert "KVM: s390: flush CPU on load control"
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.70
+    - Bluetooth: ath3k: Add support Atheros AR5B195 combo Mini PCIe card
+    - [x86] Drivers: hv: vmbus: Fix a bug in the error path in vmbus_open()
+    - e1000: add dummy allocator to fix race condition between mtu change and
+      netpoll
+    - [s390*] KVM: Zero out current VMDB of STSI before including level3 data.
+    - usb: musb: core: fix TX/RX endpoint order
+    - [x86] compal-laptop: Check return value of power_supply_register
+    - pinctrl: fix example .get_group_pins implementation signature
+    - drm/radeon: fix doublescan modes (v2)
+    - lib: memzero_explicit: use barrier instead of OPTIMIZER_HIDE_VAR
+    - cdc-wdm: fix endianness bug in debug statements
+    - UBI: account for bitflips in both the VID header and data
+    - UBI: fix out of bounds write
+    - UBI: initialize LEB number variable
+    - UBI: fix check for "too many bytes"
+    - [x86] Drivers: hv: vmbus: Don't wait after requesting offers
+    - Btrfs: fix log tree corruption when fs mounted with -o discard
+    - btrfs: don't accept bare namespace as a valid xattr
+    - ARM: 8320/1: fix integer overflow in ELF_ET_DYN_BASE
+    - rtlwifi: rtl8192cu: Add new USB ID
+    - [mips*] Hibernate: flush TLB entries earlier
+    - ext4: make fsync to sync parent dir in no-journal for real this time
+    - jhash: Update jhash_[321]words functions to use correct initval
+    - Input: elantech - fix absolute mode setting on some ASUS laptops
+    - RDS: Documentation: Document AF_RDS, PF_RDS and SOL_RDS correctly.
+    - selinux/nlmsg: add XFRM_MSG_GETSPDINFO
+    - selinux/nlmsg: add XFRM_MSG_[NEW|GET]SADINFO
+    - [x86] iommu: Fix header comments regarding standard and _FINISH macros
+    - scsi: storvsc: Fix a bug in copy_from_bounce_buffer()
+    - ALSA: emu10k1: don't deadlock in proc-functions
+    - [powerpc] Fix missing L2 cache size in /sys/devices/system/cpu
+    - selinux/nlmsg: add XFRM_MSG_REPORT
+    - selinux/nlmsg: add XFRM_MSG_MIGRATE
+    - selinux/nlmsg: add XFRM_MSG_MAPPING
+    - [s390*] hibernate: fix save and restore of kernel text section
+    - Btrfs: fix inode eviction infinite loop after cloning into it
+    - [powerpc] perf: Cap 64bit userspace backtraces to PERF_MAX_STACK_DEPTH
+    - fs/binfmt_elf.c: fix bug in loading of PIE binaries
+    - IB/core: disallow registering 0-sized memory region
+    - IB/core: don't disallow registering region starting at 0x0
+    - IB/mlx4: Fix WQE LSO segment calculation
+    - megaraid_sas: use raw_smp_processor_id()
+    - ptrace: fix race between ptrace_resume() and wait_task_stopped()
+    - memstick: mspro_block: add missing curly braces
+    - [x86] KVM: VMX: Preserve host CR4.MCE value while in guest mode.
+    - writeback: use |1 instead of +1 to protect against div by zero
+    - libata: Add helper to determine when PHY events should be ignored
+    - libata: Ignore spurious PHY event on LPM policy change
+    - ALSA: emu10k1: Fix card shortname string buffer overflow
+    - ALSA: emux: Fix mutex deadlock at unloading
+    - 3w-sas,3w-xxxx,3w-9xxx: fix command completion race
+    - cdc-acm: prevent infinite loop when parsing CDC headers.
+    - rtlwifi: rtl8192cu: Fix kernel deadlock
+    - serial: xilinx: Use platform_get_irq to get irq description structure
+    - serial: of-serial: Remove device_type = "serial" registration
+    - ALSA: emux: Fix mutex deadlock in OSS emulation
+    - ALSA: emu10k1: Emu10k2 32 bit DMA mode
+    - USB: cp210x: add ID for KCF Technologies PRN device
+    - USB: pl2303: Remove support for Samsung I330
+    - xen-pciback: Add name prefix to global 'permissive' variable
+    - gpio: unregister gpiochip device before removing it
+    - gpio: sysfs: fix memory leaks and device hotplug
+    - [powerpc] pseries: Correct cpu affinity for dlpar added cpus
+    - ext4: move check under lock scope to close a race.
+    - mmc: core: add missing pm event in mmc_pm_notify to fix hib restore
+    - nfsd: fix the check for confirmed openowner in nfs4_preprocess_stateid_op
+    - nilfs2: fix sanity check of btree level in nilfs_btree_root_broken()
+    - ocfs2: dlm: fix race between purge and get lock resource
+    - ACPI / init: Fix the ordering of acpi_reserve_resources()
+    - md/raid5: don't record new size if resize_stripes fails.
+    - ipvs: fix memory leak in ip_vs_ctl.c
+    - xhci: fix isoc endpoint dequeue from advancing too far on transaction error
+    - xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256
+    - xhci: gracefully handle xhci_irq dead device
+    - usb-storage: Add NO_WP_DETECT quirk for Lacie 059f:0651 devices
+    - ahci: un-staticize ahci_dev_classify
+    - ahci: avoton port-disable reset-quirk
+    - mac80211: move WEP tailroom size check
+    - [x86] KVM: MMU: fix CR4.SMEP=1, CR0.WP=0 with shadow pages
+    - Input: elantech - fix semi-mt protocol for v3 HW
+    - [powerpc] Align TOC to 256 bytes
+    - dmi_scan: refactor dmi_scan_machine(), {smbios,dmi}_present()
+    - firmware: dmi_scan: Fix ordering of product_uuid
+    - ext4: check for zero length extent explicitly
+    - jbd2: fix r_count overflows leading to buffer overflow in journal recovery
+    - ALSA: hda - Add Conexant codecs CX20721, CX20722, CX20723 and CX20724
+    - sd: Disable support for 256 byte/sector disks
+    - xen/events: don't bind non-percpu VIRQs with percpu chip
+    - USB: serial: ftdi_sio: Add support for a Motion Tracker Development Board
+    - [s390*] crypto: ghash - Fix incorrect ghash icv buffer handling.
+    - bridge: fix parsing of MLDv2 reports
+    - lguest: fix out-by-one error in address checking.
+    - fs/binfmt_elf.c:load_elf_binary(): return -EINVAL on zero-length mappings
+    - fs, omfs: add NULL terminator in the end up the token list
+    - d_walk() might skip too much
+    - ALSA: usb-audio: Fix invalid volume resolution for Logitech HD Webcam C525
+    - ALSA: usb-audio: Add mic volume fix quirk for Logitech Quickcam Fusion
+    - target/pscsi: Don't leak scsi_host if hba is VIRTUAL_HOST
+    - [amd64] Fix strnlen_user() to not touch memory after specified maximum
+    - Input: elantech - fix detection of touchpads where the revision matches a
+      known rate
+    - ALSA: usb-audio: add MAYA44 USB+ mixer control names
+    - ALSA: usb-audio: fix missing input volume controls in MAYA44 USB(+)
+    - USB: cp210x: add ID for HubZ dual ZigBee and Z-Wave dongle
+    - Input: elantech - fix for newer hardware versions (v7)
+    - Input: elantech - add support for newer (August 2013) devices
+    - Input: elantech - add support for newer elantech touchpads
+    - Input: elantech - support new ICs types for version 4
+    - Input: elantech - add new icbody type
+    - bridge: fix multicast router rlist endless loop
+    - ring-buffer-benchmark: Fix the wrong sched_priority of producer
+    - tracing: Have filter check for balanced ops
+    - ipvs: kernel oops - do_ip_vs_get_ctl
+    - of: Add of_property_match_string() to find index into a string list
+    - dt: Add empty of_property_match_string() function
+    - [powerpc] Make logical to real cpu mapping code endian safe
+    - [powerpc] Don't skip ePAPR spin-table CPUs (regression in 3.2.69)
+    - net: dp83640: fix broken calibration routine.
+    - unix/caif: sk_socket can disappear when state is unlocked
+    - xen: netback: read hotplug script once at start of day.
+    - bridge: fix br_stp_set_bridge_priority race conditions
+    - packet: read num_members once in packet_rcv_fanout()
+    - packet: avoid out of bounds read in round robin fanout
+    - neigh: do not modify unlinked entries
+    - sctp: Fix race between OOTB responce and route removal
+    - debugfs: Fix statfs() regression in 3.2.69
+    - net: socket: Fix the wrong returns for recvmsg and sendmsg
+    - [x86] config: Enable NEED_DMA_MAP_STATE by default when SWIOTLB is
+      selected (Closes: #786551)
+    - sb_edac: Fix erroneous bytes->gigabytes conversion
+    - [x86] reboot: Fix a warning message triggered by stop_other_cpus()
+    - __ptrace_may_access() should not deny sub-threads
+    - [powerpc,sparc] mm: Remove hack in mmap randomize layout
+    - softirq: reduce latencies
+    - Fix lockup related to stop_machine being stuck in __do_softirq.
+    - [mips*] Fix race condition in lazy cache flushing.
+    - [mips/octeon] Remove udelay() causing huge IRQ latency
+    - [mips*] Fix cpu_has_mips_r2_exec_hazard.
+    - [mips/octeon] Delete override of cpu_has_mips_r2_exec_hazard.
+    - UBI: fix soft lockup in ubi_check_volume()
+    - [hppa] Provide __ucmpdi2 to resolve undefined references in 32 bit builds.
+    - staging: line6: avoid __sync_fetch_and_{and,or}
+
+  [ Ben Hutchings ]
+  * drm, agp: Update to 3.4.108:
+    - [x86] drm/i915: Unlock panel even when LVDS is disabled
+    - drm/radeon: kernel panic in drm_calc_vbltimestamp_from_scanoutpos with
+      3.18.0-rc6
+    - [x86] drm/vmwgfx: Don't use memory accounting for kernel-side fence objects
+    - [x86] drm/vmwgfx: Fix fence event code
+    - drm/radeon: check the right ring in radeon_evict_flags()
+    - [x86] drm/i915: Only fence tiled region of object.
+    - drm/radeon/dp: Set EDP_CONFIGURATION_SET for bridge chips if necessary
+    - drm/radeon: do a posting read in r100_set_irq
+    - drm/radeon: do a posting read in rs600_set_irq
+    - drm/radeon: do a posting read in r600_set_irq
+    - drm/radeon: do a posting read in evergreen_set_irq
+    - drm/radeon: do a posting read in si_set_irq
+    - drm/radeon: fix DRM_IOCTL_RADEON_CS oops
+    - [x86] drm/vmwgfx: Reorder device takedown somewhat
+    - radeon: Do not directly dereference pointers to BIOS area.
+  * Revert "ACPICA: Utilities: split IO address types from data type models."
+    to avoid ABI change on i386
+
+ -- Ben Hutchings <ben at decadent.org.uk>  Fri, 07 Aug 2015 19:47:24 +0100
+
 linux (3.2.68-1+deb7u3) wheezy-security; urgency=medium
 
   * udp: fix behavior of wrong checksums (CVE-2015-5364, CVE-2015-5366)

Modified: dists/wheezy/linux/debian/patches/features/all/bql/tg3-support-for-byte-queue-limits.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/bql/tg3-support-for-byte-queue-limits.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/bql/tg3-support-for-byte-queue-limits.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -9,15 +9,15 @@
 Signed-off-by: Tom Herbert <therbert at google.com>
 Acked-by: Eric Dumazet <eric.dumazet at gmail.com>
 Signed-off-by: David S. Miller <davem at davemloft.net>
+[bwh: Adjust to apply after backported commit 497a27b9e1bc
+ 'tg3: Call dev_kfree_skby_any instead of dev_kfree_skb.']
 ---
  drivers/net/ethernet/broadcom/tg3.c |    8 ++++++++
  1 file changed, 8 insertions(+)
 
-diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
-index aa413d6..cf36312 100644
 --- a/drivers/net/ethernet/broadcom/tg3.c
 +++ b/drivers/net/ethernet/broadcom/tg3.c
-@@ -5302,6 +5302,7 @@ static void tg3_tx(struct tg3_napi *tnapi)
+@@ -5362,6 +5362,7 @@ static void tg3_tx(struct tg3_napi *tnap
  	u32 sw_idx = tnapi->tx_cons;
  	struct netdev_queue *txq;
  	int index = tnapi - tp->napi;
@@ -25,17 +25,17 @@
  
  	if (tg3_flag(tp, ENABLE_TSS))
  		index--;
-@@ -5352,6 +5353,9 @@ static void tg3_tx(struct tg3_napi *tnapi)
+@@ -5412,6 +5413,9 @@ static void tg3_tx(struct tg3_napi *tnap
  			sw_idx = NEXT_TX(sw_idx);
  		}
  
 +		pkts_compl++;
 +		bytes_compl += skb->len;
 +
- 		dev_kfree_skb(skb);
+ 		dev_kfree_skb_any(skb);
  
  		if (unlikely(tx_bug)) {
-@@ -5360,6 +5364,8 @@ static void tg3_tx(struct tg3_napi *tnapi)
+@@ -5420,6 +5424,8 @@ static void tg3_tx(struct tg3_napi *tnap
  		}
  	}
  
@@ -44,7 +44,7 @@
  	tnapi->tx_cons = sw_idx;
  
  	/* Need to make the tx_cons update visible to tg3_start_xmit()
-@@ -6804,6 +6810,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
+@@ -6863,6 +6869,7 @@ static netdev_tx_t tg3_start_xmit(struct
  	}
  
  	skb_tx_timestamp(skb);
@@ -52,7 +52,7 @@
  
  	/* Packets are ready, update Tx producer idx local and on card. */
  	tw32_tx_mbox(tnapi->prodmbox, entry);
-@@ -7286,6 +7293,7 @@ static void tg3_free_rings(struct tg3 *tp)
+@@ -7344,6 +7351,7 @@ static void tg3_free_rings(struct tg3 *t
  			dev_kfree_skb_any(skb);
  		}
  	}

Modified: dists/wheezy/linux/debian/patches/features/all/debugfs-add-mode-uid-and-gid-options.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/debugfs-add-mode-uid-and-gid-options.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/debugfs-add-mode-uid-and-gid-options.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -15,11 +15,11 @@
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
 [bwh: Backported to 3.2: super_operations::show_options takes a
  struct vfsmount *, not a struct dentry *]
----
- Documentation/filesystems/debugfs.txt |    5 +-
- fs/debugfs/inode.c                    |  149 ++++++++++++++++++++++++++++++++-
- 2 files changed, 152 insertions(+), 2 deletions(-)
+[bwh: Adjust to apply after backported commit 0db59e59299f
+ 'debugfs: leave freeing a symlink body until inode eviction' and
+ commit 20a5d5d4ed15 'debugfs: Fix statfs() regression in 3.2.69']
 
+---
 --- a/Documentation/filesystems/debugfs.txt
 +++ b/Documentation/filesystems/debugfs.txt
 @@ -14,7 +14,10 @@ Debugfs is typically mounted with a comm
@@ -50,8 +50,8 @@
  static struct vfsmount *debugfs_mount;
  static int debugfs_mount_count;
  static bool debugfs_registered;
-@@ -125,11 +129,154 @@ static inline int debugfs_positive(struc
- 	return dentry->d_inode && !d_unhashed(dentry);
+@@ -133,23 +137,155 @@ static void debugfs_evict_inode(struct i
+ 		kfree(inode->i_private);
  }
  
 +struct debugfs_mount_opts {
@@ -163,18 +163,19 @@
 +	return 0;
 +}
 +
-+static const struct super_operations debugfs_super_operations = {
-+	.statfs		= simple_statfs,
+ static const struct super_operations debugfs_super_operations = {
+ 	.evict_inode	= debugfs_evict_inode,
+ 	.statfs		= simple_statfs,
 +	.remount_fs	= debugfs_remount,
 +	.show_options	= debugfs_show_options,
-+};
-+
+ };
+ 
  static int debug_fill_super(struct super_block *sb, void *data, int silent)
  {
  	static struct tree_descr debug_files[] = {{""}};
 +	struct debugfs_fs_info *fsi;
-+	int err;
-+
+ 	int err;
+ 
 +	save_mount_options(sb, data);
 +
 +	fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL);
@@ -188,17 +189,17 @@
 +	if (err)
 +		goto fail;
 +
-+	err  =  simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
-+	if (err)
+ 	err = simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
+ 	if (err)
+-		return err;
 +		goto fail;
-+
-+	sb->s_op = &debugfs_super_operations;
-+
+ 
+ 	sb->s_op = &debugfs_super_operations;
+ 
 +	debugfs_apply_options(sb);
 +
-+	return 0;
- 
--	return simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
+ 	return 0;
++
 +fail:
 +	kfree(fsi);
 +	sb->s_fs_info = NULL;

Modified: dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -44507,7 +44507,7 @@
  #define __i915_read(x, y) \
  	u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 315a49e..2ac4ded 100644
+index 315a49e..b1f1d10 100644
 --- a/drivers/gpu/drm/i915/i915_gem.c
 +++ b/drivers/gpu/drm/i915/i915_gem.c
 @@ -58,6 +58,7 @@ static void i915_gem_free_object_tail(struct drm_i915_gem_object *obj);
@@ -45180,35 +45180,7 @@
  		if (ret)
  			return ret;
  	}
-@@ -2248,13 +2193,6 @@ static int sandybridge_write_fence_reg(struct drm_i915_gem_object *obj,
- 	int regnum = obj->fence_reg;
- 	uint64_t val;
- 
--	/* Adjust fence size to match tiled area */
--	if (obj->tiling_mode != I915_TILING_NONE) {
--		uint32_t row_size = obj->stride *
--			(obj->tiling_mode == I915_TILING_Y ? 32 : 8);
--		size = (size / row_size) * row_size;
--	}
--
- 	val = (uint64_t)((obj->gtt_offset + size - 4096) &
- 			 0xfffff000) << 32;
- 	val |= obj->gtt_offset & 0xfffff000;
-@@ -2292,13 +2230,6 @@ static int i965_write_fence_reg(struct drm_i915_gem_object *obj,
- 	int regnum = obj->fence_reg;
- 	uint64_t val;
- 
--	/* Adjust fence size to match tiled area */
--	if (obj->tiling_mode != I915_TILING_NONE) {
--		uint32_t row_size = obj->stride *
--			(obj->tiling_mode == I915_TILING_Y ? 32 : 8);
--		size = (size / row_size) * row_size;
--	}
--
- 	val = (uint64_t)((obj->gtt_offset + size - 4096) &
- 		    0xfffff000) << 32;
- 	val |= obj->gtt_offset & 0xfffff000;
-@@ -2448,7 +2379,8 @@ i915_gem_object_flush_fence(struct drm_i915_gem_object *obj,
+@@ -2448,7 +2393,8 @@ i915_gem_object_flush_fence(struct drm_i915_gem_object *obj,
  		if (!ring_passed_seqno(obj->last_fenced_ring,
  				       obj->last_fenced_seqno)) {
  			ret = i915_wait_request(obj->last_fenced_ring,
@@ -45218,7 +45190,7 @@
  			if (ret)
  				return ret;
  		}
-@@ -2480,6 +2412,8 @@ i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
+@@ -2480,6 +2426,8 @@ i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
  
  	if (obj->fence_reg != I915_FENCE_REG_NONE) {
  		struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
@@ -45227,7 +45199,7 @@
  		i915_gem_clear_fence_reg(obj->base.dev,
  					 &dev_priv->fence_regs[obj->fence_reg]);
  
-@@ -2504,7 +2438,7 @@ i915_find_fence_reg(struct drm_device *dev,
+@@ -2504,7 +2452,7 @@ i915_find_fence_reg(struct drm_device *dev,
  		if (!reg->obj)
  			return reg;
  
@@ -45236,7 +45208,7 @@
  			avail = reg;
  	}
  
-@@ -2514,7 +2448,7 @@ i915_find_fence_reg(struct drm_device *dev,
+@@ -2514,7 +2462,7 @@ i915_find_fence_reg(struct drm_device *dev,
  	/* None available, try to steal one or wait for a user to finish */
  	avail = first = NULL;
  	list_for_each_entry(reg, &dev_priv->mm.fence_list, lru_list) {
@@ -45245,7 +45217,7 @@
  			continue;
  
  		if (first == NULL)
-@@ -2594,7 +2528,8 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+@@ -2594,7 +2542,8 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
  				if (!ring_passed_seqno(obj->last_fenced_ring,
  						       reg->setup_seqno)) {
  					ret = i915_wait_request(obj->last_fenced_ring,
@@ -45255,7 +45227,7 @@
  					if (ret)
  						return ret;
  				}
-@@ -2613,7 +2548,7 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+@@ -2613,7 +2562,7 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
  
  	reg = i915_find_fence_reg(dev, pipelined);
  	if (reg == NULL)
@@ -45264,7 +45236,7 @@
  
  	ret = i915_gem_object_flush_fence(obj, pipelined);
  	if (ret)
-@@ -2724,6 +2659,7 @@ i915_gem_clear_fence_reg(struct drm_device *dev,
+@@ -2724,6 +2673,7 @@ i915_gem_clear_fence_reg(struct drm_device *dev,
  	list_del_init(&reg->lru_list);
  	reg->obj = NULL;
  	reg->setup_seqno = 0;
@@ -45272,7 +45244,7 @@
  }
  
  /**
-@@ -3010,6 +2946,8 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
+@@ -3010,6 +2960,8 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
  int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
  				    enum i915_cache_level cache_level)
  {
@@ -45281,7 +45253,7 @@
  	int ret;
  
  	if (obj->cache_level == cache_level)
-@@ -3038,6 +2976,9 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
+@@ -3038,6 +2990,9 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
  		}
  
  		i915_gem_gtt_rebind_object(obj, cache_level);
@@ -45291,7 +45263,7 @@
  	}
  
  	if (cache_level == I915_CACHE_NONE) {
-@@ -3376,8 +3317,8 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
+@@ -3376,8 +3331,8 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
  
  			if (ret == 0 && atomic_read(&dev_priv->mm.wedged))
  				ret = -EIO;
@@ -45302,7 +45274,7 @@
  				    atomic_read(&dev_priv->mm.wedged), 3000)) {
  			ret = -EBUSY;
  		}
-@@ -3688,8 +3629,8 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
+@@ -3688,8 +3643,8 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
  	obj->base.write_domain = I915_GEM_DOMAIN_CPU;
  	obj->base.read_domains = I915_GEM_DOMAIN_CPU;
  
@@ -45313,7 +45285,7 @@
  		 * cache) for about a 10% performance improvement
  		 * compared to uncached.  Graphics requests other than
  		 * display scanout are coherent with the CPU in
-@@ -3779,7 +3720,7 @@ i915_gem_idle(struct drm_device *dev)
+@@ -3779,7 +3734,7 @@ i915_gem_idle(struct drm_device *dev)
  		return 0;
  	}
  
@@ -45322,7 +45294,7 @@
  	if (ret) {
  		mutex_unlock(&dev->struct_mutex);
  		return ret;
-@@ -3814,12 +3755,91 @@ i915_gem_idle(struct drm_device *dev)
+@@ -3814,12 +3769,91 @@ i915_gem_idle(struct drm_device *dev)
  	return 0;
  }
  
@@ -45415,7 +45387,7 @@
  	ret = intel_init_render_ring_buffer(dev);
  	if (ret)
  		return ret;
-@@ -3838,6 +3858,8 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
+@@ -3838,6 +3872,8 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
  
  	dev_priv->next_seqno = 1;
  
@@ -45424,7 +45396,7 @@
  	return 0;
  
  cleanup_bsd_ring:
-@@ -3875,7 +3897,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
+@@ -3875,7 +3911,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
  	mutex_lock(&dev->struct_mutex);
  	dev_priv->mm.suspended = 0;
  
@@ -45433,7 +45405,7 @@
  	if (ret != 0) {
  		mutex_unlock(&dev->struct_mutex);
  		return ret;
-@@ -4270,7 +4292,7 @@ rescan:
+@@ -4270,7 +4306,7 @@ rescan:
  		 * This has a dramatic impact to reduce the number of
  		 * OOM-killer events whilst running the GPU aggressively.
  		 */
@@ -45506,7 +45478,7 @@
  		return ret;
  
 diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-index a0b69ae..e97ed61 100644
+index a0b69ae0..e97ed61 100644
 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 @@ -203,9 +203,9 @@ i915_gem_object_set_to_gpu_domain(struct drm_i915_gem_object *obj,
@@ -50092,7 +50064,7 @@
  	}
  
 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
-index 4da8182..77190cc 100644
+index 4da8182..3febe29 100644
 --- a/drivers/gpu/drm/i915/intel_lvds.c
 +++ b/drivers/gpu/drm/i915/intel_lvds.c
 @@ -187,6 +187,8 @@ centre_horizontally(struct drm_display_mode *mode,
@@ -50141,46 +50113,15 @@
  /**
   * intel_lvds_init - setup LVDS connectors on this device
   * @dev: drm device
-@@ -914,17 +932,8 @@ bool intel_lvds_init(struct drm_device *dev)
- 	int pipe;
- 	u8 pin;
- 
--	/*
--	 * Unlock registers and just leave them unlocked. Do this before
--	 * checking quirk lists to avoid bogus WARNINGs.
--	 */
--	if (HAS_PCH_SPLIT(dev)) {
--		I915_WRITE(PCH_PP_CONTROL,
--			   I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
--	} else {
--		I915_WRITE(PP_CONTROL,
--			   I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
--	}
+@@ -925,6 +943,8 @@ bool intel_lvds_init(struct drm_device *dev)
+ 		I915_WRITE(PP_CONTROL,
+ 			   I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
+ 	}
 +	if (!intel_lvds_supported(dev))
 +		return false;
  
  	/* Skip init on machines we know falsely report LVDS */
  	if (dmi_check_system(intel_no_lvds))
-@@ -1100,6 +1109,19 @@ out:
- 		pwm = I915_READ(BLC_PWM_PCH_CTL1);
- 		pwm |= PWM_PCH_ENABLE;
- 		I915_WRITE(BLC_PWM_PCH_CTL1, pwm);
-+		/*
-+		 * Unlock registers and just
-+		 * leave them unlocked
-+		 */
-+		I915_WRITE(PCH_PP_CONTROL,
-+			   I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
-+	} else {
-+		/*
-+		 * Unlock registers and just
-+		 * leave them unlocked
-+		 */
-+		I915_WRITE(PP_CONTROL,
-+			   I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
- 	}
- 	dev_priv->lid_notifier.notifier_call = intel_lid_notify;
- 	if (acpi_lid_notifier_register(&dev_priv->lid_notifier)) {
 diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
 index be2c6fe..9a2b270 100644
 --- a/drivers/gpu/drm/i915/intel_modes.c
@@ -71826,7 +71767,7 @@
  
  
 diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
-index 927d170..d51c08d 100644
+index 76c4f2a..d51c08d 100644
 --- a/drivers/gpu/drm/radeon/atombios_crtc.c
 +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
 @@ -231,6 +231,22 @@ static void atombios_blank_crtc(struct drm_crtc *crtc, int state)
@@ -71870,7 +71811,31 @@
  			atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);
  		atombios_enable_crtc(crtc, ATOM_DISABLE);
  		radeon_crtc->enabled = false;
-@@ -355,15 +371,12 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc,
+@@ -302,10 +318,8 @@ atombios_set_crtc_dtd_timing(struct drm_crtc *crtc,
+ 		misc |= ATOM_COMPOSITESYNC;
+ 	if (mode->flags & DRM_MODE_FLAG_INTERLACE)
+ 		misc |= ATOM_INTERLACE;
+-	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+-		misc |= ATOM_DOUBLE_CLOCK_MODE;
+ 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+-		misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2;
++		misc |= ATOM_DOUBLE_CLOCK_MODE;
+ 
+ 	args.susModeMiscInfo.usAccess = cpu_to_le16(misc);
+ 	args.ucCRTC = radeon_crtc->crtc_id;
+@@ -348,10 +362,8 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc,
+ 		misc |= ATOM_COMPOSITESYNC;
+ 	if (mode->flags & DRM_MODE_FLAG_INTERLACE)
+ 		misc |= ATOM_INTERLACE;
+-	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+-		misc |= ATOM_DOUBLE_CLOCK_MODE;
+ 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+-		misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2;
++		misc |= ATOM_DOUBLE_CLOCK_MODE;
+ 
+ 	args.susModeMiscInfo.usAccess = cpu_to_le16(misc);
+ 	args.ucCRTC = radeon_crtc->crtc_id;
+@@ -359,15 +371,12 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc,
  	atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
  }
  
@@ -71888,7 +71853,7 @@
  		case ATOM_PPLL1:
  			ss_cntl = RREG32(EVERGREEN_P1PLL_SS_CNTL);
  			ss_cntl &= ~EVERGREEN_PxPLL_SS_EN;
-@@ -379,7 +392,7 @@ static void atombios_disable_ss(struct drm_crtc *crtc)
+@@ -383,7 +392,7 @@ static void atombios_disable_ss(struct drm_crtc *crtc)
  			return;
  		}
  	} else if (ASIC_IS_AVIVO(rdev)) {
@@ -71897,7 +71862,7 @@
  		case ATOM_PPLL1:
  			ss_cntl = RREG32(AVIVO_P1PLL_INT_SS_CNTL);
  			ss_cntl &= ~1;
-@@ -406,16 +419,31 @@ union atom_enable_ss {
+@@ -410,16 +419,31 @@ union atom_enable_ss {
  	ENABLE_SPREAD_SPECTRUM_ON_PPLL_V3 v3;
  };
  
@@ -71932,7 +71897,7 @@
  	memset(&args, 0, sizeof(args));
  
  	if (ASIC_IS_DCE5(rdev)) {
-@@ -441,7 +469,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
+@@ -445,7 +469,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
  			return;
  		}
  		args.v3.ucEnable = enable;
@@ -71941,7 +71906,7 @@
  			args.v3.ucEnable = ATOM_DISABLE;
  	} else if (ASIC_IS_DCE4(rdev)) {
  		args.v2.usSpreadSpectrumPercentage = cpu_to_le16(ss->percentage);
-@@ -479,7 +507,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
+@@ -483,7 +507,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
  	} else if (ASIC_IS_AVIVO(rdev)) {
  		if ((enable == ATOM_DISABLE) || (ss->percentage == 0) ||
  		    (ss->type & ATOM_EXTERNAL_SS_MASK)) {
@@ -71950,7 +71915,7 @@
  			return;
  		}
  		args.lvds_ss_2.usSpreadSpectrumPercentage = cpu_to_le16(ss->percentage);
-@@ -491,7 +519,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
+@@ -495,7 +519,7 @@ static void atombios_crtc_program_ss(struct drm_crtc *crtc,
  	} else {
  		if ((enable == ATOM_DISABLE) || (ss->percentage == 0) ||
  		    (ss->type & ATOM_EXTERNAL_SS_MASK)) {
@@ -71959,7 +71924,7 @@
  			return;
  		}
  		args.lvds_ss.usSpreadSpectrumPercentage = cpu_to_le16(ss->percentage);
-@@ -523,6 +551,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
+@@ -527,6 +551,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
  	int encoder_mode = 0;
  	u32 dp_clock = mode->clock;
  	int bpc = 8;
@@ -71967,7 +71932,7 @@
  
  	/* reset the pll flags */
  	pll->flags = 0;
-@@ -542,7 +571,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
+@@ -546,7 +571,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
  		if (rdev->family < CHIP_RV770)
  			pll->flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP;
  		/* use frac fb div on APUs */
@@ -71976,7 +71941,7 @@
  			pll->flags |= RADEON_PLL_USE_FRAC_FB_DIV;
  		/* use frac fb div on RS780/RS880 */
  		if ((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880))
-@@ -562,9 +591,10 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
+@@ -566,9 +591,10 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
  		if (encoder->crtc == crtc) {
  			radeon_encoder = to_radeon_encoder(encoder);
  			connector = radeon_get_connector_for_encoder(encoder);
@@ -71989,7 +71954,7 @@
  			if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) ||
  			    (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)) {
  				if (connector) {
-@@ -660,7 +690,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
+@@ -664,7 +690,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
  					if (dig->coherent_mode)
  						args.v3.sInput.ucDispPllConfig |=
  							DISPPLL_CONFIG_COHERENT_MODE;
@@ -71998,7 +71963,7 @@
  						args.v3.sInput.ucDispPllConfig |=
  							DISPPLL_CONFIG_DUAL_LINK;
  				}
-@@ -710,11 +740,9 @@ union set_pixel_clock {
+@@ -714,11 +740,9 @@ union set_pixel_clock {
  /* on DCE5, make sure the voltage is high enough to support the
   * required disp clk.
   */
@@ -72011,7 +71976,7 @@
  	u8 frev, crev;
  	int index;
  	union set_pixel_clock args;
-@@ -742,7 +770,12 @@ static void atombios_crtc_set_dcpll(struct drm_crtc *crtc,
+@@ -746,7 +770,12 @@ static void atombios_crtc_set_dcpll(struct drm_crtc *crtc,
  			 * SetPixelClock provides the dividers
  			 */
  			args.v6.ulDispEngClkFreq = cpu_to_le32(dispclk);
@@ -72025,7 +71990,7 @@
  			break;
  		default:
  			DRM_ERROR("Unknown table version %d %d\n", frev, crev);
-@@ -939,7 +972,9 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
+@@ -943,7 +972,9 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
  		struct radeon_connector_atom_dig *dig_connector =
  			radeon_connector->con_priv;
  		int dp_clock;
@@ -72036,7 +72001,7 @@
  
  		switch (encoder_mode) {
  		case ATOM_ENCODER_MODE_DP_MST:
-@@ -960,13 +995,10 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
+@@ -964,13 +995,10 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
  						ss_enabled =
  							radeon_atombios_get_ppll_ss_info(rdev, &ss,
  											 ATOM_DP_SS_ID1);
@@ -72051,7 +72016,7 @@
  			}
  			break;
  		case ATOM_ENCODER_MODE_LVDS:
-@@ -1011,7 +1043,7 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
+@@ -1015,7 +1043,7 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
  		radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
  					  &ref_div, &post_div);
  
@@ -72060,7 +72025,7 @@
  
  	atombios_crtc_program_pll(crtc, radeon_crtc->crtc_id, radeon_crtc->pll_id,
  				  encoder_mode, radeon_encoder->encoder_id, mode->clock,
-@@ -1034,7 +1066,7 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
+@@ -1038,7 +1066,7 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode
  			ss.step = step_size;
  		}
  
@@ -72069,7 +72034,7 @@
  	}
  }
  
-@@ -1051,6 +1083,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
+@@ -1055,6 +1083,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
  	struct radeon_bo *rbo;
  	uint64_t fb_location;
  	uint32_t fb_format, fb_pitch_pixels, tiling_flags;
@@ -72077,7 +72042,7 @@
  	u32 fb_swap = EVERGREEN_GRPH_ENDIAN_SWAP(EVERGREEN_GRPH_ENDIAN_NONE);
  	u32 tmp, viewport_w, viewport_h;
  	int r;
-@@ -1141,20 +1174,13 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
+@@ -1145,20 +1174,13 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
  			break;
  		}
  
@@ -72104,7 +72069,7 @@
  	} else if (tiling_flags & RADEON_TILING_MICRO)
  		fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_1D_TILED_THIN1);
  
-@@ -1199,7 +1225,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
+@@ -1203,7 +1225,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
  	WREG32(EVERGREEN_GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width);
  	WREG32(EVERGREEN_GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height);
  
@@ -72113,7 +72078,7 @@
  	WREG32(EVERGREEN_GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels);
  	WREG32(EVERGREEN_GRPH_ENABLE + radeon_crtc->crtc_offset, 1);
  
-@@ -1368,7 +1394,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
+@@ -1372,7 +1394,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
  	WREG32(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width);
  	WREG32(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height);
  
@@ -72122,7 +72087,7 @@
  	WREG32(AVIVO_D1GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels);
  	WREG32(AVIVO_D1GRPH_ENABLE + radeon_crtc->crtc_offset, 1);
  
-@@ -1470,7 +1496,36 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
+@@ -1474,7 +1496,36 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
  	struct drm_crtc *test_crtc;
  	uint32_t pll_in_use = 0;
  
@@ -72160,7 +72125,7 @@
  		list_for_each_entry(test_encoder, &dev->mode_config.encoder_list, head) {
  			if (test_encoder->crtc && (test_encoder->crtc == crtc)) {
  				/* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock,
-@@ -1485,6 +1540,8 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
+@@ -1489,6 +1540,8 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
  				if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_encoder))) {
  					if (rdev->clock.dp_extclk)
  						return ATOM_PPLL_INVALID;
@@ -72169,7 +72134,7 @@
  					else if (ASIC_IS_DCE5(rdev))
  						return ATOM_DCPLL;
  				}
-@@ -1511,6 +1568,26 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
+@@ -1515,6 +1568,26 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
  
  }
  
@@ -72196,7 +72161,7 @@
  int atombios_crtc_mode_set(struct drm_crtc *crtc,
  			   struct drm_display_mode *mode,
  			   struct drm_display_mode *adjusted_mode,
-@@ -1532,19 +1609,6 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
+@@ -1536,19 +1609,6 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
  		}
  	}
  
@@ -72216,7 +72181,7 @@
  	atombios_crtc_set_pll(crtc, adjusted_mode);
  
  	if (ASIC_IS_DCE4(rdev))
-@@ -1578,18 +1642,28 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,
+@@ -1582,18 +1642,28 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,
  static void atombios_crtc_prepare(struct drm_crtc *crtc)
  {
  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
@@ -72245,7 +72210,7 @@
  }
  
  static void atombios_crtc_disable(struct drm_crtc *crtc)
-@@ -1601,6 +1675,8 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
+@@ -1605,6 +1675,8 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
  	int i;
  
  	atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
@@ -72254,7 +72219,7 @@
  
  	for (i = 0; i < rdev->num_crtc; i++) {
  		if (rdev->mode_info.crtcs[i] &&
-@@ -1621,6 +1697,12 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
+@@ -1625,6 +1697,12 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
  		atombios_crtc_program_pll(crtc, radeon_crtc->crtc_id, radeon_crtc->pll_id,
  					  0, 0, ATOM_DISABLE, 0, 0, 0, 0, 0, false, &ss);
  		break;
@@ -72268,7 +72233,7 @@
  		break;
  	}
 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
-index e8a3c31..8d1724c 100644
+index 3e34f1e..5325c20 100644
 --- a/drivers/gpu/drm/radeon/atombios_dp.c
 +++ b/drivers/gpu/drm/radeon/atombios_dp.c
 @@ -45,6 +45,41 @@ static char *pre_emph_names[] = {
@@ -72362,7 +72327,7 @@
  }
  
  /* get the max pix clock supported by the link rate and lane num */
-@@ -746,7 +784,8 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)
+@@ -744,7 +782,8 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)
  
  	/* set the lane count on the sink */
  	tmp = dp_info->dp_lane_count;
@@ -73004,7 +72969,7 @@
  #include <linux/kernel.h>
  
 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
-index 9b3f787..01434ef 100644
+index 5d78973..c5fe79e 100644
 --- a/drivers/gpu/drm/radeon/evergreen.c
 +++ b/drivers/gpu/drm/radeon/evergreen.c
 @@ -50,6 +50,39 @@ static const u32 crtc_offsets[6] =
@@ -73543,7 +73508,17 @@
  	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
  
  	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
-@@ -2765,7 +2918,6 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
+@@ -2631,9 +2784,6 @@ int evergreen_irq_set(struct radeon_device *rdev)
+ 	WREG32(DC_HPD5_INT_CONTROL, hpd5);
+ 	WREG32(DC_HPD6_INT_CONTROL, hpd6);
+ 
+-	/* posting read */
+-	RREG32(SRBM_STATUS);
+-
+ 	return 0;
+ }
+ 
+@@ -2768,7 +2918,6 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
  		tmp = RREG32(IH_RB_CNTL);
  		tmp |= IH_WPTR_OVERFLOW_CLEAR;
  		WREG32(IH_RB_CNTL, tmp);
@@ -73551,7 +73526,7 @@
  	}
  	return (wptr & rdev->ih.ptr_mask);
  }
-@@ -3015,11 +3167,24 @@ restart_ih:
+@@ -3018,11 +3167,24 @@ restart_ih:
  		case 177: /* CP_INT in IB1 */
  		case 178: /* CP_INT in IB2 */
  			DRM_DEBUG("IH: CP int: 0x%08x\n", src_data);
@@ -73578,7 +73553,7 @@
  			break;
  		case 233: /* GUI IDLE */
  			DRM_DEBUG("IH: GUI idle\n");
-@@ -3049,6 +3214,7 @@ restart_ih:
+@@ -3052,6 +3214,7 @@ restart_ih:
  
  static int evergreen_startup(struct radeon_device *rdev)
  {
@@ -73586,7 +73561,7 @@
  	int r;
  
  	/* enable pcie gen2 link */
-@@ -3095,7 +3261,7 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3098,7 +3261,7 @@ static int evergreen_startup(struct radeon_device *rdev)
  	r = evergreen_blit_init(rdev);
  	if (r) {
  		r600_blit_fini(rdev);
@@ -73595,7 +73570,7 @@
  		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
  	}
  
-@@ -3104,6 +3270,12 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3107,6 +3270,12 @@ static int evergreen_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73608,7 +73583,7 @@
  	/* Enable IRQ */
  	if (!rdev->irq.installed) {
  		r = radeon_irq_kms_init(rdev);
-@@ -3119,7 +3291,9 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3122,7 +3291,9 @@ static int evergreen_startup(struct radeon_device *rdev)
  	}
  	evergreen_irq_set(rdev);
  
@@ -73619,7 +73594,7 @@
  	if (r)
  		return r;
  	r = evergreen_cp_load_microcode(rdev);
-@@ -3129,6 +3303,23 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3132,6 +3303,23 @@ static int evergreen_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73643,7 +73618,7 @@
  	return 0;
  }
  
-@@ -3148,15 +3339,11 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3151,15 +3339,11 @@ int evergreen_resume(struct radeon_device *rdev)
  	/* post card */
  	atom_asic_init(rdev->mode_info.atom_context);
  
@@ -73661,7 +73636,7 @@
  		return r;
  	}
  
-@@ -3166,13 +3353,17 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3169,13 +3353,17 @@ int evergreen_resume(struct radeon_device *rdev)
  
  int evergreen_suspend(struct radeon_device *rdev)
  {
@@ -73681,7 +73656,7 @@
  
  	return 0;
  }
-@@ -3243,8 +3434,8 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3246,8 +3434,8 @@ int evergreen_init(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73692,7 +73667,7 @@
  
  	rdev->ih.ring_obj = NULL;
  	r600_ih_ring_init(rdev, 64 * 1024);
-@@ -3253,29 +3444,24 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3256,29 +3444,24 @@ int evergreen_init(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73729,7 +73704,15 @@
  
  	/* Don't start up if the MC ucode is missing on BTC parts.
  	 * The default clocks and voltages before the MC ucode
-@@ -3293,15 +3479,17 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3291,20 +3474,25 @@ int evergreen_init(struct radeon_device *rdev)
+ 		}
+ 	}
+ 
++	/* posting read */
++	RREG32(SRBM_STATUS);
++
+ 	return 0;
+ }
  
  void evergreen_fini(struct radeon_device *rdev)
  {
@@ -77861,7 +77844,7 @@
  #define	PACKET3_PREAMBLE_CNTL				0x4A
  #              define PACKET3_PREAMBLE_BEGIN_CLEAR_STATE     (2 << 28)
 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
-index 76c1290..40ed0e5 100644
+index dfd1267..8ec5b85 100644
 --- a/drivers/gpu/drm/radeon/r100.c
 +++ b/drivers/gpu/drm/radeon/r100.c
 @@ -65,6 +65,40 @@ MODULE_FIRMWARE(FIRMWARE_R520);
@@ -77973,7 +77956,7 @@
  		tmp |= RADEON_SW_INT_ENABLE;
  	}
  	if (rdev->irq.gui_idle) {
-@@ -739,7 +777,7 @@ int r100_irq_process(struct radeon_device *rdev)
+@@ -743,7 +781,7 @@ int r100_irq_process(struct radeon_device *rdev)
  	while (status) {
  		/* SW interrupt */
  		if (status & RADEON_SW_INT_TEST) {
@@ -77982,7 +77965,7 @@
  		}
  		/* gui idle interrupt */
  		if (status & RADEON_GUI_IDLE_STAT) {
-@@ -809,25 +847,36 @@ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc)
+@@ -813,25 +851,36 @@ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc)
  void r100_fence_ring_emit(struct radeon_device *rdev,
  			  struct radeon_fence *fence)
  {
@@ -78033,7 +78016,7 @@
  }
  
  int r100_copy_blit(struct radeon_device *rdev,
-@@ -836,6 +885,7 @@ int r100_copy_blit(struct radeon_device *rdev,
+@@ -840,6 +889,7 @@ int r100_copy_blit(struct radeon_device *rdev,
  		   unsigned num_gpu_pages,
  		   struct radeon_fence *fence)
  {
@@ -78041,7 +78024,7 @@
  	uint32_t cur_pages;
  	uint32_t stride_bytes = RADEON_GPU_PAGE_SIZE;
  	uint32_t pitch;
-@@ -853,7 +903,7 @@ int r100_copy_blit(struct radeon_device *rdev,
+@@ -857,7 +907,7 @@ int r100_copy_blit(struct radeon_device *rdev,
  
  	/* Ask for enough room for blit + flush + fence */
  	ndw = 64 + (10 * num_loops);
@@ -78050,7 +78033,7 @@
  	if (r) {
  		DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw);
  		return -EINVAL;
-@@ -867,8 +917,8 @@ int r100_copy_blit(struct radeon_device *rdev,
+@@ -871,8 +921,8 @@ int r100_copy_blit(struct radeon_device *rdev,
  
  		/* pages are in Y direction - height
  		   page width in X direction - width */
@@ -78061,7 +78044,7 @@
  				  RADEON_GMC_SRC_PITCH_OFFSET_CNTL |
  				  RADEON_GMC_DST_PITCH_OFFSET_CNTL |
  				  RADEON_GMC_SRC_CLIPPING |
-@@ -880,26 +930,26 @@ int r100_copy_blit(struct radeon_device *rdev,
+@@ -884,26 +934,26 @@ int r100_copy_blit(struct radeon_device *rdev,
  				  RADEON_DP_SRC_SOURCE_MEMORY |
  				  RADEON_GMC_CLR_CMP_CNTL_DIS |
  				  RADEON_GMC_WR_MSK_DIS);
@@ -78102,7 +78085,7 @@
  	return r;
  }
  
-@@ -918,21 +968,21 @@ static int r100_cp_wait_for_idle(struct radeon_device *rdev)
+@@ -922,21 +972,21 @@ static int r100_cp_wait_for_idle(struct radeon_device *rdev)
  	return -1;
  }
  
@@ -78129,7 +78112,7 @@
  }
  
  
-@@ -1033,6 +1083,7 @@ static void r100_cp_load_microcode(struct radeon_device *rdev)
+@@ -1037,6 +1087,7 @@ static void r100_cp_load_microcode(struct radeon_device *rdev)
  
  int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  {
@@ -78137,7 +78120,7 @@
  	unsigned rb_bufsz;
  	unsigned rb_blksz;
  	unsigned max_fetch;
-@@ -1058,7 +1109,9 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+@@ -1062,7 +1113,9 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  	rb_bufsz = drm_order(ring_size / 8);
  	ring_size = (1 << (rb_bufsz + 1)) * 4;
  	r100_cp_load_microcode(rdev);
@@ -78148,7 +78131,7 @@
  	if (r) {
  		return r;
  	}
-@@ -1067,7 +1120,7 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+@@ -1071,7 +1124,7 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  	rb_blksz = 9;
  	/* cp will read 128bytes at a time (4 dwords) */
  	max_fetch = 1;
@@ -78157,7 +78140,7 @@
  	/* Write to CP_RB_WPTR will be delayed for pre_write_timer clocks */
  	pre_write_timer = 64;
  	/* Force CP_RB_WPTR write if written more than one time before the
-@@ -1097,13 +1150,13 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+@@ -1101,13 +1154,13 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  	WREG32(RADEON_CP_RB_CNTL, tmp | RADEON_RB_NO_UPDATE);
  
  	/* Set ring address */
@@ -78175,7 +78158,7 @@
  
  	/* set the wb address whether it's enabled or not */
  	WREG32(R_00070C_CP_RB_RPTR_ADDR,
-@@ -1119,7 +1172,7 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+@@ -1123,7 +1176,7 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  
  	WREG32(RADEON_CP_RB_CNTL, tmp);
  	udelay(10);
@@ -78184,7 +78167,7 @@
  	/* Set cp mode to bus mastering & enable cp*/
  	WREG32(RADEON_CP_CSQ_MODE,
  	       REG_SET(RADEON_INDIRECT2_START, indirect2_start) |
-@@ -1127,13 +1180,13 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+@@ -1131,13 +1184,13 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
  	WREG32(RADEON_CP_RB_WPTR_DELAY, 0);
  	WREG32(RADEON_CP_CSQ_MODE, 0x00004D4D);
  	WREG32(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM);
@@ -78201,7 +78184,7 @@
  	radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
  	return 0;
  }
-@@ -1145,7 +1198,7 @@ void r100_cp_fini(struct radeon_device *rdev)
+@@ -1149,7 +1202,7 @@ void r100_cp_fini(struct radeon_device *rdev)
  	}
  	/* Disable ring */
  	r100_cp_disable(rdev);
@@ -78210,7 +78193,7 @@
  	DRM_INFO("radeon: cp finalized\n");
  }
  
-@@ -1153,7 +1206,7 @@ void r100_cp_disable(struct radeon_device *rdev)
+@@ -1157,7 +1210,7 @@ void r100_cp_disable(struct radeon_device *rdev)
  {
  	/* Disable ring */
  	radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
@@ -78219,7 +78202,7 @@
  	WREG32(RADEON_CP_CSQ_MODE, 0);
  	WREG32(RADEON_CP_CSQ_CNTL, 0);
  	WREG32(R_000770_SCRATCH_UMSK, 0);
-@@ -1163,13 +1216,6 @@ void r100_cp_disable(struct radeon_device *rdev)
+@@ -1167,13 +1220,6 @@ void r100_cp_disable(struct radeon_device *rdev)
  	}
  }
  
@@ -78233,7 +78216,7 @@
  /*
   * CS functions
   */
-@@ -1543,7 +1589,17 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
+@@ -1547,7 +1593,17 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
  			r100_cs_dump_packet(p, pkt);
  			return r;
  		}
@@ -78252,7 +78235,7 @@
  		track->textures[i].robj = reloc->robj;
  		track->tex_dirty = true;
  		break;
-@@ -1614,15 +1670,17 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
+@@ -1618,15 +1674,17 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
  			r100_cs_dump_packet(p, pkt);
  			return r;
  		}
@@ -78279,7 +78262,7 @@
  
  		track->cb[0].pitch = idx_value & RADEON_COLORPITCH_MASK;
  		track->cb_dirty = true;
-@@ -2097,9 +2155,9 @@ int r100_mc_wait_for_idle(struct radeon_device *rdev)
+@@ -2101,9 +2159,9 @@ int r100_mc_wait_for_idle(struct radeon_device *rdev)
  	return -1;
  }
  
@@ -78291,7 +78274,7 @@
  	lockup->last_jiffies = jiffies;
  }
  
-@@ -2124,20 +2182,20 @@ void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp
+@@ -2128,20 +2186,20 @@ void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp
   * false positive when CP is just gived nothing to do.
   *
   **/
@@ -78316,7 +78299,7 @@
  		lockup->last_jiffies = jiffies;
  		return false;
  	}
-@@ -2150,32 +2208,31 @@ bool r100_gpu_cp_is_lockup(struct radeon_device *rdev, struct r100_gpu_lockup *l
+@@ -2154,32 +2212,31 @@ bool r100_gpu_cp_is_lockup(struct radeon_device *rdev, struct r100_gpu_lockup *l
  	return false;
  }
  
@@ -78357,7 +78340,7 @@
  
  	/* disable bus mastering */
  	tmp = RREG32(R_000030_BUS_CNTL);
-@@ -2186,8 +2243,7 @@ void r100_bm_disable(struct radeon_device *rdev)
+@@ -2190,8 +2247,7 @@ void r100_bm_disable(struct radeon_device *rdev)
  	WREG32(R_000030_BUS_CNTL, (tmp & 0xFFFFFFFF) | 0x00000040);
  	tmp = RREG32(RADEON_BUS_CNTL);
  	mdelay(1);
@@ -78367,7 +78350,7 @@
  	mdelay(1);
  }
  
-@@ -2497,7 +2553,7 @@ static void r100_pll_errata_after_data(struct radeon_device *rdev)
+@@ -2501,7 +2557,7 @@ static void r100_pll_errata_after_data(struct radeon_device *rdev)
  	 * or the chip could hang on a subsequent access
  	 */
  	if (rdev->pll_errata & CHIP_ERRATA_PLL_DELAY) {
@@ -78376,7 +78359,7 @@
  	}
  
  	/* This function is required to workaround a hardware bug in some (all?)
-@@ -2578,21 +2634,22 @@ static int r100_debugfs_cp_ring_info(struct seq_file *m, void *data)
+@@ -2582,21 +2638,22 @@ static int r100_debugfs_cp_ring_info(struct seq_file *m, void *data)
  	struct drm_info_node *node = (struct drm_info_node *) m->private;
  	struct drm_device *dev = node->minor->dev;
  	struct radeon_device *rdev = dev->dev_private;
@@ -78404,7 +78387,7 @@
  	}
  	return 0;
  }
-@@ -3634,7 +3691,7 @@ void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track
+@@ -3638,7 +3695,7 @@ void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track
  	}
  }
  
@@ -78413,7 +78396,7 @@
  {
  	uint32_t scratch;
  	uint32_t tmp = 0;
-@@ -3647,15 +3704,15 @@ int r100_ring_test(struct radeon_device *rdev)
+@@ -3651,15 +3708,15 @@ int r100_ring_test(struct radeon_device *rdev)
  		return r;
  	}
  	WREG32(scratch, 0xCAFEDEAD);
@@ -78433,7 +78416,7 @@
  	for (i = 0; i < rdev->usec_timeout; i++) {
  		tmp = RREG32(scratch);
  		if (tmp == 0xDEADBEEF) {
-@@ -3676,12 +3733,14 @@ int r100_ring_test(struct radeon_device *rdev)
+@@ -3680,12 +3737,14 @@ int r100_ring_test(struct radeon_device *rdev)
  
  void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
  {
@@ -78452,7 +78435,7 @@
  {
  	struct radeon_ib *ib;
  	uint32_t scratch;
-@@ -3695,7 +3754,7 @@ int r100_ib_test(struct radeon_device *rdev)
+@@ -3699,7 +3758,7 @@ int r100_ib_test(struct radeon_device *rdev)
  		return r;
  	}
  	WREG32(scratch, 0xCAFEDEAD);
@@ -78461,7 +78444,7 @@
  	if (r) {
  		return r;
  	}
-@@ -3739,34 +3798,16 @@ int r100_ib_test(struct radeon_device *rdev)
+@@ -3743,34 +3802,16 @@ int r100_ib_test(struct radeon_device *rdev)
  
  void r100_ib_fini(struct radeon_device *rdev)
  {
@@ -78498,7 +78481,7 @@
  	WREG32(R_000740_CP_CSQ_CNTL, 0);
  
  	/* Save few CRTC registers */
-@@ -3904,6 +3945,12 @@ static int r100_startup(struct radeon_device *rdev)
+@@ -3908,6 +3949,12 @@ static int r100_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -78511,7 +78494,7 @@
  	/* Enable IRQ */
  	if (!rdev->irq.installed) {
  		r = radeon_irq_kms_init(rdev);
-@@ -3919,16 +3966,25 @@ static int r100_startup(struct radeon_device *rdev)
+@@ -3923,16 +3970,25 @@ static int r100_startup(struct radeon_device *rdev)
  		dev_err(rdev->dev, "failed initializing CP (%d).\n", r);
  		return r;
  	}
@@ -78539,7 +78522,7 @@
  	/* Make sur GART are not working */
  	if (rdev->flags & RADEON_IS_PCI)
  		r100_pci_gart_disable(rdev);
-@@ -3946,11 +4002,18 @@ int r100_resume(struct radeon_device *rdev)
+@@ -3950,11 +4006,18 @@ int r100_resume(struct radeon_device *rdev)
  	r100_clock_startup(rdev);
  	/* Initialize surface registers */
  	radeon_surface_init(rdev);
@@ -78559,7 +78542,7 @@
  	r100_cp_disable(rdev);
  	radeon_wb_disable(rdev);
  	r100_irq_disable(rdev);
-@@ -4066,7 +4129,14 @@ int r100_init(struct radeon_device *rdev)
+@@ -4070,7 +4133,14 @@ int r100_init(struct radeon_device *rdev)
  			return r;
  	}
  	r100_set_safe_registers(rdev);
@@ -79228,7 +79211,7 @@
  	if (r) {
  		/* Somethings want wront with the accel init stop accel */
 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
-index ab46a99..1555cd6 100644
+index e5299a0..9c7062d 100644
 --- a/drivers/gpu/drm/radeon/r600.c
 +++ b/drivers/gpu/drm/radeon/r600.c
 @@ -49,6 +49,7 @@
@@ -79870,7 +79853,7 @@
  		DRM_DEBUG("r600_irq_set: sw int\n");
  		cp_int_cntl |= RB_INT_ENABLE;
  		cp_int_cntl |= TIME_STAMP_INT_ENABLE;
-@@ -3280,7 +3308,6 @@ static u32 r600_get_ih_wptr(struct radeon_device *rdev)
+@@ -3283,7 +3311,6 @@ static u32 r600_get_ih_wptr(struct radeon_device *rdev)
  		tmp = RREG32(IH_RB_CNTL);
  		tmp |= IH_WPTR_OVERFLOW_CLEAR;
  		WREG32(IH_RB_CNTL, tmp);
@@ -79878,7 +79861,7 @@
  	}
  	return (wptr & rdev->ih.ptr_mask);
  }
-@@ -3466,11 +3493,11 @@ restart_ih:
+@@ -3469,11 +3496,11 @@ restart_ih:
  		case 177: /* CP_INT in IB1 */
  		case 178: /* CP_INT in IB2 */
  			DRM_DEBUG("IH: CP int: 0x%08x\n", src_data);
@@ -79892,7 +79875,7 @@
  			break;
  		case 233: /* GUI IDLE */
  			DRM_DEBUG("IH: GUI idle\n");
-@@ -3503,30 +3530,6 @@ restart_ih:
+@@ -3506,30 +3533,6 @@ restart_ih:
   */
  #if defined(CONFIG_DEBUG_FS)
  
@@ -79923,7 +79906,7 @@
  static int r600_debugfs_mc_info(struct seq_file *m, void *data)
  {
  	struct drm_info_node *node = (struct drm_info_node *) m->private;
-@@ -3540,7 +3543,6 @@ static int r600_debugfs_mc_info(struct seq_file *m, void *data)
+@@ -3543,7 +3546,6 @@ static int r600_debugfs_mc_info(struct seq_file *m, void *data)
  
  static struct drm_info_list r600_mc_info_list[] = {
  	{"r600_mc_info", r600_debugfs_mc_info, 0, NULL},
@@ -85770,10 +85753,10 @@
  					      RADEON_GEM_DOMAIN_VRAM,
  					      RADEON_GEM_DOMAIN_VRAM);
 diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
-index ccf324b..d306cc8 100644
+index 6e98703..ef56e4e 100644
 --- a/drivers/gpu/drm/radeon/radeon_bios.c
 +++ b/drivers/gpu/drm/radeon/radeon_bios.c
-@@ -173,20 +173,6 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
+@@ -177,20 +177,6 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
  		}
  	}
  
@@ -86113,7 +86096,7 @@
  		dev_priv->flags |= RADEON_IS_AGP;
  	else if (pci_is_pcie(dev->pdev))
 diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
-index 1f32557..cf723c4 100644
+index 0ddc08c..f3ee360 100644
 --- a/drivers/gpu/drm/radeon/radeon_cs.c
 +++ b/drivers/gpu/drm/radeon/radeon_cs.c
 @@ -58,7 +58,7 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
@@ -86214,9 +86197,9 @@
 +	u32 ring = RADEON_CS_RING_GFX;
 +	s32 priority = 0;
  
- 	if (!cs->num_chunks) {
- 		return 0;
-@@ -103,6 +175,8 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
+ 	INIT_LIST_HEAD(&p->validated);
+ 
+@@ -105,6 +177,8 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
  	p->idx = 0;
  	p->chunk_ib_idx = -1;
  	p->chunk_relocs_idx = -1;
@@ -86225,7 +86208,7 @@
  	p->chunks_array = kcalloc(cs->num_chunks, sizeof(uint64_t), GFP_KERNEL);
  	if (p->chunks_array == NULL) {
  		return -ENOMEM;
-@@ -112,6 +186,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
+@@ -114,6 +188,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
  			       sizeof(uint64_t)*cs->num_chunks)) {
  		return -EFAULT;
  	}
@@ -86233,7 +86216,7 @@
  	p->nchunks = cs->num_chunks;
  	p->chunks = kcalloc(p->nchunks, sizeof(struct radeon_cs_chunk), GFP_KERNEL);
  	if (p->chunks == NULL) {
-@@ -140,16 +215,25 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
+@@ -142,16 +217,25 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
  			if (p->chunks[i].length_dw == 0)
  				return -EINVAL;
  		}
@@ -86263,7 +86246,7 @@
  			size = p->chunks[i].length_dw * sizeof(uint32_t);
  			p->chunks[i].kdata = kmalloc(size, GFP_KERNEL);
  			if (p->chunks[i].kdata == NULL) {
-@@ -160,31 +244,55 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
+@@ -162,31 +246,55 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
  				return -EFAULT;
  			}
  			if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_FLAGS) {
@@ -86339,7 +86322,7 @@
  	return 0;
  }
  
-@@ -226,14 +334,186 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error)
+@@ -228,14 +336,186 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error)
  	radeon_ib_free(parser->rdev, &parser->ib);
  }
  
@@ -86527,7 +86510,7 @@
  	/* initialize parser */
  	memset(&parser, 0, sizeof(struct radeon_cs_parser));
  	parser.filp = filp;
-@@ -247,13 +527,6 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+@@ -249,13 +529,6 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
  		radeon_mutex_unlock(&rdev->cs_mutex);
  		return r;
  	}
@@ -86541,7 +86524,7 @@
  	r = radeon_cs_parser_relocs(&parser);
  	if (r) {
  		if (r != -ERESTARTSYS)
-@@ -262,29 +535,15 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+@@ -264,29 +537,15 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
  		radeon_mutex_unlock(&rdev->cs_mutex);
  		return r;
  	}
@@ -88828,7 +88811,7 @@
  	}
  	spin_unlock_irqrestore(&rdev->irq.sw_lock, irqflags);
 diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
-index 4bb9e27..9b46238 100644
+index 4bb9e27..b731686 100644
 --- a/drivers/gpu/drm/radeon/radeon_kms.c
 +++ b/drivers/gpu/drm/radeon/radeon_kms.c
 @@ -61,6 +61,8 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
@@ -88973,7 +88956,16 @@
  }
  
  void radeon_driver_preclose_kms(struct drm_device *dev,
-@@ -455,5 +525,6 @@ struct drm_ioctl_desc radeon_ioctls_kms[] = {
+@@ -358,6 +428,8 @@ int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
+ 
+ 	/* Get associated drm_crtc: */
+ 	drmcrtc = &rdev->mode_info.crtcs[crtc]->base;
++	if (!drmcrtc)
++		return -EINVAL;
+ 
+ 	/* Helper routine in DRM core does all the work: */
+ 	return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
+@@ -455,5 +527,6 @@ struct drm_ioctl_desc radeon_ioctls_kms[] = {
  	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
  	DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
  	DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
@@ -90915,7 +90907,7 @@
 +	}
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
-index 0b5468b..49b55ed 100644
+index 0b5468b..15042d0 100644
 --- a/drivers/gpu/drm/radeon/radeon_ttm.c
 +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
 @@ -114,24 +114,6 @@ static void radeon_ttm_global_fini(struct radeon_device *rdev)
@@ -90948,7 +90940,7 @@
  	switch (bo->mem.mem_type) {
  	case TTM_PL_VRAM:
 -		if (rbo->rdev->cp.ready == false)
-+		if (rbo->rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready == false)
++		if (rbo->rdev->ring[radeon_copy_ring_index(rbo->rdev)].ready == false)
  			radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_CPU);
  		else
  			radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT);
@@ -91629,7 +91621,7 @@
  	if (r) {
  		/* Somethings want wront with the accel init stop accel */
 diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
-index dc00155..739eb0d 100644
+index fc37558..07b6dbf 100644
 --- a/drivers/gpu/drm/radeon/rs600.c
 +++ b/drivers/gpu/drm/radeon/rs600.c
 @@ -46,6 +46,25 @@
@@ -91719,7 +91711,7 @@
  		tmp |= S_000040_SW_INT_EN(1);
  	}
  	if (rdev->irq.gui_idle) {
-@@ -645,7 +654,7 @@ int rs600_irq_process(struct radeon_device *rdev)
+@@ -649,7 +658,7 @@ int rs600_irq_process(struct radeon_device *rdev)
  	while (status || rdev->irq.stat_regs.r500.disp_int) {
  		/* SW interrupt */
  		if (G_000044_SW_INT(status)) {
@@ -91728,7 +91720,7 @@
  		}
  		/* GUI idle */
  		if (G_000040_GUI_IDLE(status)) {
-@@ -850,6 +859,12 @@ static int rs600_startup(struct radeon_device *rdev)
+@@ -854,6 +863,12 @@ static int rs600_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -91741,7 +91733,7 @@
  	/* Enable IRQ */
  	if (!rdev->irq.installed) {
  		r = radeon_irq_kms_init(rdev);
-@@ -865,15 +880,21 @@ static int rs600_startup(struct radeon_device *rdev)
+@@ -869,15 +884,21 @@ static int rs600_startup(struct radeon_device *rdev)
  		dev_err(rdev->dev, "failed initializing CP (%d).\n", r);
  		return r;
  	}
@@ -91767,7 +91759,7 @@
  		return r;
  	}
  
-@@ -882,6 +903,8 @@ static int rs600_startup(struct radeon_device *rdev)
+@@ -886,6 +907,8 @@ static int rs600_startup(struct radeon_device *rdev)
  
  int rs600_resume(struct radeon_device *rdev)
  {
@@ -91776,7 +91768,7 @@
  	/* Make sur GART are not working */
  	rs600_gart_disable(rdev);
  	/* Resume clock before doing reset */
-@@ -898,11 +921,18 @@ int rs600_resume(struct radeon_device *rdev)
+@@ -902,11 +925,18 @@ int rs600_resume(struct radeon_device *rdev)
  	rv515_clock_startup(rdev);
  	/* Initialize surface registers */
  	radeon_surface_init(rdev);
@@ -91796,7 +91788,7 @@
  	r600_audio_fini(rdev);
  	r100_cp_disable(rdev);
  	radeon_wb_disable(rdev);
-@@ -980,7 +1010,14 @@ int rs600_init(struct radeon_device *rdev)
+@@ -984,7 +1014,14 @@ int rs600_init(struct radeon_device *rdev)
  	if (r)
  		return r;
  	rs600_set_safe_registers(rdev);
@@ -92319,10 +92311,10 @@
  	radeon_bo_fini(rdev);
 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
 new file mode 100644
-index 0000000..e710073
+index 0000000..068b21f
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/si.c
-@@ -0,0 +1,4154 @@
+@@ -0,0 +1,4157 @@
 +/*
 + * Copyright 2011 Advanced Micro Devices, Inc.
 + *
@@ -96451,6 +96443,9 @@
 +		return -EINVAL;
 +	}
 +
++	/* posting read */
++	RREG32(SRBM_STATUS);
++
 +	return 0;
 +}
 +
@@ -104087,7 +104082,7 @@
  	.init_mem_type = vmw_init_mem_type,
  	.evict_flags = vmw_evict_flags,
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
-index b639536..db50604 100644
+index f739fcf..e43341a 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
 @@ -38,6 +38,10 @@
@@ -104171,7 +104166,51 @@
  	if (dev_priv->capabilities & SVGA_CAP_GMR) {
  		dev_priv->max_gmr_descriptors =
  			vmw_read(dev_priv,
-@@ -689,6 +733,15 @@ static int vmw_driver_unload(struct drm_device *dev)
+@@ -555,6 +599,10 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ 	if (unlikely(dev_priv->fman == NULL))
+ 		goto out_no_fman;
+ 
++	/* Need to start the fifo to check if we can do screen objects */
++	ret = vmw_3d_resource_inc(dev_priv, true);
++	if (unlikely(ret != 0))
++		goto out_no_fifo;
+ 
+ 	ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
+ 			     (dev_priv->vram_size >> PAGE_SHIFT));
+@@ -571,10 +619,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ 		dev_priv->has_gmr = false;
+ 	}
+ 
+-	/* Need to start the fifo to check if we can do screen objects */
+-	ret = vmw_3d_resource_inc(dev_priv, true);
+-	if (unlikely(ret != 0))
+-		goto out_no_fifo;
+ 	vmw_kms_save_vga(dev_priv);
+ 
+ 	/* Start kms and overlay systems, needs fifo. */
+@@ -620,11 +664,11 @@ out_no_kms:
+ 		vmw_kms_restore_vga(dev_priv);
+ 		vmw_3d_resource_dec(dev_priv, false);
+ 	}
+-out_no_fifo:
++out_no_vram:
+ 	if (dev_priv->has_gmr)
+ 		(void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
+ 	(void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
+-out_no_vram:
++out_no_fifo:
+ 	vmw_fence_manager_takedown(dev_priv->fman);
+ out_no_fman:
+ 	if (dev_priv->stealth)
+@@ -638,6 +682,7 @@ out_err4:
+ out_err3:
+ 	drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start,
+ 		     dev_priv->mmio_size, DRM_MTRR_WC);
++out_err2:
+ 	(void)ttm_bo_device_release(&dev_priv->bdev);
+ out_err1:
+ 	vmw_ttm_global_release(dev_priv);
+@@ -692,6 +737,15 @@ static int vmw_driver_unload(struct drm_device *dev)
  	return 0;
  }
  
@@ -104187,7 +104226,7 @@
  static void vmw_postclose(struct drm_device *dev,
  			 struct drm_file *file_priv)
  {
-@@ -711,6 +764,7 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
+@@ -714,6 +768,7 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
  	if (unlikely(vmw_fp == NULL))
  		return ret;
  
@@ -104195,7 +104234,7 @@
  	vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev, 10);
  	if (unlikely(vmw_fp->tfile == NULL))
  		goto out_no_tfile;
-@@ -1070,6 +1124,21 @@ static const struct dev_pm_ops vmw_pm_ops = {
+@@ -1073,6 +1128,21 @@ static const struct dev_pm_ops vmw_pm_ops = {
  	.resume = vmw_pm_resume,
  };
  
@@ -104217,7 +104256,7 @@
  static struct drm_driver driver = {
  	.driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |
  	DRIVER_MODESET,
-@@ -1093,26 +1162,14 @@ static struct drm_driver driver = {
+@@ -1096,26 +1166,14 @@ static struct drm_driver driver = {
  	.master_set = vmw_master_set,
  	.master_drop = vmw_master_drop,
  	.open = vmw_driver_open,
@@ -104417,7 +104456,7 @@
  	info->apertures = alloc_apertures(1);
  	if (!info->apertures) {
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
-index 1ed5a1c..7e07433 100644
+index 1ed5a1c..992b46b 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
 @@ -69,12 +69,13 @@ struct vmw_user_fence {
@@ -104437,54 +104476,7 @@
  	uint32_t *tv_sec;
  	uint32_t *tv_usec;
  };
-@@ -484,7 +485,14 @@ void vmw_fence_obj_flush(struct vmw_fence_obj *fence)
- 
- static void vmw_fence_destroy(struct vmw_fence_obj *fence)
- {
-+	struct vmw_fence_manager *fman = fence->fman;
-+
- 	kfree(fence);
-+	/*
-+	 * Free kernel space accounting.
-+	 */
-+	ttm_mem_global_free(vmw_mem_glob(fman->dev_priv),
-+			    fman->fence_size);
- }
- 
- int vmw_fence_create(struct vmw_fence_manager *fman,
-@@ -492,12 +500,20 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
- 		     uint32_t mask,
- 		     struct vmw_fence_obj **p_fence)
- {
-+	struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
- 	struct vmw_fence_obj *fence;
- 	int ret;
- 
-+	ret = ttm_mem_global_alloc(mem_glob, fman->fence_size,
-+				   false, false);
-+	if (unlikely(ret != 0))
-+		return ret;
-+
- 	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
--	if (unlikely(fence == NULL))
--		return -ENOMEM;
-+	if (unlikely(fence == NULL)) {
-+		ret = -ENOMEM;
-+		goto out_no_object;
-+	}
- 
- 	ret = vmw_fence_obj_init(fman, fence, seqno, mask,
- 				 vmw_fence_destroy);
-@@ -509,6 +525,8 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
- 
- out_err_init:
- 	kfree(fence);
-+out_no_object:
-+	ttm_mem_global_free(mem_glob, fman->fence_size);
- 	return ret;
- }
- 
-@@ -767,46 +785,40 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
+@@ -767,46 +768,40 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
  }
  
  /**
@@ -104560,7 +104552,7 @@
  }
  
  
-@@ -819,18 +831,21 @@ static void vmw_event_fence_action_delivered(struct drm_pending_event *e)
+@@ -819,18 +814,21 @@ static void vmw_event_fence_action_delivered(struct drm_pending_event *e)
   * This function is called when the seqno of the fence where @action is
   * attached has passed. It queues the event on the submitter's event list.
   * This function is always called from atomic context, and may be called
@@ -104586,7 +104578,7 @@
  	spin_lock_irqsave(&dev->event_lock, irq_flags);
  
  	if (likely(eaction->tv_sec != NULL)) {
-@@ -841,7 +856,9 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
+@@ -841,7 +839,9 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
  		*eaction->tv_usec = tv.tv_usec;
  	}
  
@@ -104597,7 +104589,7 @@
  	wake_up_all(&file_priv->event_wait);
  	spin_unlock_irqrestore(&dev->event_lock, irq_flags);
  }
-@@ -859,9 +876,15 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
+@@ -859,9 +859,15 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
  {
  	struct vmw_event_fence_action *eaction =
  		container_of(action, struct vmw_event_fence_action, action);
@@ -104614,7 +104606,7 @@
  }
  
  
-@@ -929,39 +952,23 @@ void vmw_fence_obj_add_action(struct vmw_fence_obj *fence,
+@@ -929,39 +935,23 @@ void vmw_fence_obj_add_action(struct vmw_fence_obj *fence,
   * an error code, the caller needs to free that object.
   */
  
@@ -104664,7 +104656,7 @@
  
  	eaction->action.seq_passed = vmw_event_fence_action_seq_passed;
  	eaction->action.cleanup = vmw_event_fence_action_cleanup;
-@@ -969,16 +976,89 @@ int vmw_event_fence_action_create(struct drm_file *file_priv,
+@@ -969,16 +959,91 @@ int vmw_event_fence_action_create(struct drm_file *file_priv,
  
  	eaction->fence = vmw_fence_obj_reference(fence);
  	eaction->dev = fman->dev_priv->dev;
@@ -104743,6 +104735,8 @@
 +	if (ret != 0)
 +		goto out_no_queue;
 +
++	return 0;
++
 +out_no_queue:
 +	event->base.destroy(&event->base);
 +out_no_event:
@@ -104756,7 +104750,7 @@
  int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
  			  struct drm_file *file_priv)
  {
-@@ -991,8 +1071,6 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
+@@ -991,8 +1056,6 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
  		(struct drm_vmw_fence_rep __user *)(unsigned long)
  		arg->fence_rep;
  	uint32_t handle;
@@ -104765,7 +104759,7 @@
  	int ret;
  
  	/*
-@@ -1045,59 +1123,28 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
+@@ -1045,59 +1108,21 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
  
  	BUG_ON(fence == NULL);
  
@@ -104792,23 +104786,23 @@
 -	event->base.length = sizeof(*event);
 -	event->user_data = arg->user_data;
 -
- 	if (arg->flags & DRM_VMW_FE_FLAG_REQ_TIME)
- 		ret = vmw_event_fence_action_create(file_priv, fence,
+-	if (arg->flags & DRM_VMW_FE_FLAG_REQ_TIME)
+-		ret = vmw_event_fence_action_create(file_priv, fence,
 -						    &event->base,
 -						    &event->tv_sec,
 -						    &event->tv_usec,
-+						    arg->flags,
-+						    arg->user_data,
- 						    true);
- 	else
- 		ret = vmw_event_fence_action_create(file_priv, fence,
+-						    true);
+-	else
+-		ret = vmw_event_fence_action_create(file_priv, fence,
 -						    &event->base,
 -						    NULL,
 -						    NULL,
-+						    arg->flags,
-+						    arg->user_data,
- 						    true);
- 
+-						    true);
+-
++	ret = vmw_event_fence_action_create(file_priv, fence,
++					    arg->flags,
++					    arg->user_data,
++					    true);
  	if (unlikely(ret != 0)) {
  		if (ret != -ERESTARTSYS)
  			DRM_ERROR("Failed to attach event to fence.\n");

Modified: dists/wheezy/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -15,11 +15,9 @@
  drivers/staging/line6/playback.c |    8 --------
  4 files changed, 32 deletions(-)
 
-diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
-index d9da7ed..ba441ed 100644
 --- a/drivers/staging/line6/capture.c
 +++ b/drivers/staging/line6/capture.c
-@@ -244,11 +244,7 @@ static void audio_in_callback(struct urb *urb)
+@@ -244,11 +244,7 @@ static void audio_in_callback(struct urb
  		length += fsize;
  
  		/* the following assumes LINE6_ISO_PACKETS == 1: */
@@ -31,13 +29,11 @@
  		line6pcm->prev_fsize = fsize;
  
  #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
-diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
-index 2e4e164..a70c087 100644
 --- a/drivers/staging/line6/pcm.c
 +++ b/drivers/staging/line6/pcm.c
-@@ -93,21 +93,7 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
- 	unsigned long flags_new = flags_old | channels;
- 	int err = 0;
+@@ -96,21 +96,7 @@ int line6_pcm_start(struct snd_line6_pcm
+ 		flags_new = flags_old | channels;
+ 	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
  
 -#if LINE6_BACKUP_MONITOR_SIGNAL
 -	if (!(line6pcm->line6->properties->capabilities & LINE6_BIT_HWMON)) {
@@ -57,7 +53,7 @@
  
  	if (((flags_old & MASK_CAPTURE) == 0) &&
  	    ((flags_new & MASK_CAPTURE) != 0)) {
-@@ -164,9 +150,6 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
+@@ -174,9 +160,6 @@ int line6_pcm_stop(struct snd_line6_pcm
  	    ((flags_new & MASK_PLAYBACK) == 0)) {
  		line6_unlink_audio_out_urbs(line6pcm);
  	}
@@ -67,8 +63,6 @@
  
  	return 0;
  }
-diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
-index 77055b3..05f4ef3 100644
 --- a/drivers/staging/line6/pcm.h
 +++ b/drivers/staging/line6/pcm.h
 @@ -39,9 +39,6 @@
@@ -81,11 +75,9 @@
  /*
  	Get substream from Line6 PCM data structure
  */
-diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
-index b344527..e495b32 100644
 --- a/drivers/staging/line6/playback.c
 +++ b/drivers/staging/line6/playback.c
-@@ -223,18 +223,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+@@ -223,18 +223,10 @@ static int submit_audio_out_urb(struct s
  			} else
  				dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", len);	/* this is somewhat paranoid */
  		} else {

Modified: dists/wheezy/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -13,20 +13,12 @@
 
 Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+[bwh: Adjust to apply after backported commit 9f613601482c
+ 'staging: line6: avoid __sync_fetch_and_{and,or}']
 ---
- drivers/staging/line6/capture.c  |   46 ++++++++++++++++++++-------
- drivers/staging/line6/capture.h  |    2 ++
- drivers/staging/line6/pcm.c      |   65 ++++++++++++++++++++++++++------------
- drivers/staging/line6/playback.c |   46 ++++++++++++++++++++-------
- drivers/staging/line6/playback.h |    2 ++
- drivers/staging/line6/revision.h |    2 +-
- 6 files changed, 118 insertions(+), 45 deletions(-)
-
-diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
-index 8f59ff3..127f952 100644
 --- a/drivers/staging/line6/capture.c
 +++ b/drivers/staging/line6/capture.c
-@@ -193,6 +193,31 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length)
+@@ -193,6 +193,31 @@ void line6_capture_check_period(struct s
  	}
  }
  
@@ -58,7 +50,7 @@
  /*
   * Callback for completed capture URB.
   */
-@@ -316,16 +341,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+@@ -316,16 +341,11 @@ static int snd_line6_capture_hw_params(s
  	}
  	/* -- [FD] end */
  
@@ -79,7 +71,7 @@
  	}
  
  	ret = snd_pcm_lib_malloc_pages(substream,
-@@ -342,9 +362,11 @@ static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream)
+@@ -342,9 +362,11 @@ static int snd_line6_capture_hw_free(str
  {
  	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
  
@@ -94,8 +86,6 @@
  	return snd_pcm_lib_free_pages(substream);
  }
  
-diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h
-index a7509fb..366cbaa 100644
 --- a/drivers/staging/line6/capture.h
 +++ b/drivers/staging/line6/capture.h
 @@ -19,11 +19,13 @@
@@ -112,11 +102,9 @@
  extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm);
  extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm);
  extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm
-diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
-index 68727b2..37675e6 100644
 --- a/drivers/staging/line6/pcm.c
 +++ b/drivers/staging/line6/pcm.c
-@@ -86,17 +86,22 @@ static DEVICE_ATTR(impulse_period, S_IWUSR | S_IRUGO, pcm_get_impulse_period,
+@@ -86,6 +86,12 @@ static DEVICE_ATTR(impulse_period, S_IWU
  
  #endif
  
@@ -128,10 +116,11 @@
 +
  int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
  {
- 	unsigned long flags_old =
- 	    __sync_fetch_and_or(&line6pcm->flags, channels);
- 	unsigned long flags_new = flags_old | channels;
- 	int err = 0;
+ 	unsigned long flags_old, flags_new;
+@@ -95,11 +101,10 @@ int line6_pcm_start(struct snd_line6_pcm
+ 		flags_old = ACCESS_ONCE(line6pcm->flags);
+ 		flags_new = flags_old | channels;
+ 	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
 -
 +	
  	line6pcm->prev_fbuf = NULL;
@@ -142,7 +131,7 @@
  		/*
  		   Waiting for completion of active URBs in the stop handler is
  		   a bug, we therefore report an error if capturing is restarted
-@@ -105,34 +110,47 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+@@ -108,32 +113,45 @@ int line6_pcm_start(struct snd_line6_pcm
  		if (line6pcm->active_urb_in | line6pcm->unlink_urb_in)
  			return -EBUSY;
  
@@ -157,11 +146,8 @@
  		line6pcm->prev_fsize = 0;
  		err = line6_submit_audio_in_all_urbs(line6pcm);
  
--		if (err < 0) {
--			__sync_fetch_and_and(&line6pcm->flags, ~channels);
--			return err;
--		}
-+		if (err < 0)
+ 		if (err < 0)
+-			goto fail;
 +			goto pcm_start_error;
  	}
  
@@ -184,25 +170,21 @@
  		line6pcm->count_out = 0;
  		err = line6_submit_audio_out_all_urbs(line6pcm);
  
--		if (err < 0) {
--			__sync_fetch_and_and(&line6pcm->flags, ~channels);
--			return err;
--		}
-+		if (err < 0)
+ 		if (err < 0)
+-			goto fail;
 +			goto pcm_start_error;
  	}
  
  	return 0;
-+
-+pcm_start_error:
-+	__sync_fetch_and_and(&line6pcm->flags, ~channels);
-+	return err;
- }
  
- int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
-@@ -141,14 +159,18 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
- 	    __sync_fetch_and_and(&line6pcm->flags, ~channels);
- 	unsigned long flags_new = flags_old & ~channels;
+-fail:
++pcm_start_error:
+ 	do {
+ 		flags_old = ACCESS_ONCE(line6pcm->flags);
+ 		flags_new = flags_old & ~channels;
+@@ -151,14 +169,18 @@ int line6_pcm_stop(struct snd_line6_pcm
+ 		flags_new = flags_old & ~channels;
+ 	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
  
 -	if (((flags_old & MASK_CAPTURE) != 0) &&
 -	    ((flags_new & MASK_CAPTURE) == 0)) {
@@ -223,7 +205,7 @@
  	}
  
  	return 0;
-@@ -476,18 +498,21 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+@@ -489,18 +511,21 @@ int snd_line6_prepare(struct snd_pcm_sub
  
  	switch (substream->stream) {
  	case SNDRV_PCM_STREAM_PLAYBACK:
@@ -248,11 +230,9 @@
  	if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) {
  		line6pcm->count_out = 0;
  		line6pcm->pos_out = 0;
-diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
-index 9a51b92..4152db2 100644
 --- a/drivers/staging/line6/playback.c
 +++ b/drivers/staging/line6/playback.c
-@@ -351,6 +351,31 @@ void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+@@ -351,6 +351,31 @@ void line6_unlink_wait_clear_audio_out_u
  	wait_clear_audio_out_urbs(line6pcm);
  }
  
@@ -284,7 +264,7 @@
  /*
  	Callback for completed playback URB.
  */
-@@ -459,16 +484,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+@@ -459,16 +484,11 @@ static int snd_line6_playback_hw_params(
  	}
  	/* -- [FD] end */
  
@@ -305,7 +285,7 @@
  	}
  
  	ret = snd_pcm_lib_malloc_pages(substream,
-@@ -485,9 +505,11 @@ static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
+@@ -485,9 +505,11 @@ static int snd_line6_playback_hw_free(st
  {
  	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
  
@@ -320,8 +300,6 @@
  	return snd_pcm_lib_free_pages(substream);
  }
  
-diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h
-index f2fc8c0..02487ff 100644
 --- a/drivers/staging/line6/playback.h
 +++ b/drivers/staging/line6/playback.h
 @@ -29,7 +29,9 @@
@@ -334,8 +312,6 @@
  extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm);
  extern void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm);
  extern void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm
-diff --git a/drivers/staging/line6/revision.h b/drivers/staging/line6/revision.h
-index 350d0df..b4eee2b 100644
 --- a/drivers/staging/line6/revision.h
 +++ b/drivers/staging/line6/revision.h
 @@ -1,4 +1,4 @@

Modified: dists/wheezy/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -38,23 +38,12 @@
 
 Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
 Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+[bwh: Adjust to apply after backported commit 9f613601482c
+ 'staging: line6: avoid __sync_fetch_and_{and,or}']
 ---
- drivers/staging/line6/capture.c  |   54 ++++---------
- drivers/staging/line6/capture.h  |    2 +-
- drivers/staging/line6/driver.c   |    2 +-
- drivers/staging/line6/pcm.c      |  109 +++++++++++++++++---------
- drivers/staging/line6/pcm.h      |  158 ++++++++++++++++++++++++++++----------
- drivers/staging/line6/playback.c |   68 ++++++----------
- drivers/staging/line6/playback.h |    2 +-
- drivers/staging/line6/toneport.c |    8 +-
- drivers/staging/line6/usbdefs.h  |   44 +++++------
- 9 files changed, 254 insertions(+), 193 deletions(-)
-
-diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
-index 127f952..c85c5b6 100644
 --- a/drivers/staging/line6/capture.c
 +++ b/drivers/staging/line6/capture.c
-@@ -107,7 +107,7 @@ void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+@@ -107,7 +107,7 @@ void line6_unlink_audio_in_urbs(struct s
  	Wait until unlinking of all currently active capture URBs has been
  	finished.
  */
@@ -63,7 +52,7 @@
  {
  	int timeout = HZ;
  	unsigned int i;
-@@ -134,7 +134,7 @@ static void wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+@@ -134,7 +134,7 @@ static void wait_clear_audio_in_urbs(str
  void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
  {
  	line6_unlink_audio_in_urbs(line6pcm);
@@ -72,7 +61,7 @@
  }
  
  /*
-@@ -193,25 +193,6 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length)
+@@ -193,25 +193,6 @@ void line6_capture_check_period(struct s
  	}
  }
  
@@ -98,7 +87,7 @@
  void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm)
  {
  	kfree(line6pcm->buffer_in);
-@@ -273,9 +254,9 @@ static void audio_in_callback(struct urb *urb)
+@@ -273,9 +254,9 @@ static void audio_in_callback(struct urb
  		line6pcm->prev_fsize = fsize;
  
  #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
@@ -110,7 +99,7 @@
  			    && (fsize > 0))
  				line6_capture_copy(line6pcm, fbuf, fsize);
  	}
-@@ -291,9 +272,9 @@ static void audio_in_callback(struct urb *urb)
+@@ -291,9 +272,9 @@ static void audio_in_callback(struct urb
  		submit_audio_in_urb(line6pcm);
  
  #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
@@ -122,7 +111,7 @@
  				line6_capture_check_period(line6pcm, length);
  	}
  }
-@@ -341,17 +322,17 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+@@ -341,17 +322,17 @@ static int snd_line6_capture_hw_params(s
  	}
  	/* -- [FD] end */
  
@@ -146,7 +135,7 @@
  
  	line6pcm->period_in = params_period_bytes(hw_params);
  	return 0;
-@@ -361,12 +342,7 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+@@ -361,12 +342,7 @@ static int snd_line6_capture_hw_params(s
  static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream)
  {
  	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
@@ -160,7 +149,7 @@
  	return snd_pcm_lib_free_pages(substream);
  }
  
-@@ -380,7 +356,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+@@ -380,7 +356,7 @@ int snd_line6_capture_trigger(struct snd
  #ifdef CONFIG_PM
  	case SNDRV_PCM_TRIGGER_RESUME:
  #endif
@@ -169,7 +158,7 @@
  
  		if (err < 0)
  			return err;
-@@ -391,7 +367,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+@@ -391,7 +367,7 @@ int snd_line6_capture_trigger(struct snd
  #ifdef CONFIG_PM
  	case SNDRV_PCM_TRIGGER_SUSPEND:
  #endif
@@ -178,8 +167,6 @@
  
  		if (err < 0)
  			return err;
-diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h
-index 366cbaa..4157bcb 100644
 --- a/drivers/staging/line6/capture.h
 +++ b/drivers/staging/line6/capture.h
 @@ -19,7 +19,6 @@
@@ -190,7 +177,7 @@
  extern void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf,
  			       int fsize);
  extern void line6_capture_check_period(struct snd_line6_pcm *line6pcm,
-@@ -30,6 +29,7 @@ extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm);
+@@ -30,6 +29,7 @@ extern int line6_submit_audio_in_all_urb
  extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm);
  extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm
  						  *line6pcm);
@@ -198,8 +185,6 @@
  extern int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd);
  
  #endif
-diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
-index 6a1959e..e8023af 100644
 --- a/drivers/staging/line6/driver.c
 +++ b/drivers/staging/line6/driver.c
 @@ -1346,7 +1346,7 @@ static void __exit line6_exit(void)
@@ -211,11 +196,9 @@
  	}
  
  	usb_deregister(&line6_driver);
-diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
-index 37675e6..90d2d44 100644
 --- a/drivers/staging/line6/pcm.c
 +++ b/drivers/staging/line6/pcm.c
-@@ -52,9 +52,9 @@ static ssize_t pcm_set_impulse_volume(struct device *dev,
+@@ -52,9 +52,9 @@ static ssize_t pcm_set_impulse_volume(st
  	line6pcm->impulse_volume = value;
  
  	if (value > 0)
@@ -227,19 +210,24 @@
  
  	return count;
  }
-@@ -92,29 +92,43 @@ static bool test_flags(unsigned long flags0, unsigned long flags1,
+@@ -92,9 +92,9 @@ static bool test_flags(unsigned long fla
  	return ((flags0 & mask) == 0) && ((flags1 & mask) != 0);
  }
  
 -int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
 +int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels)
  {
- 	unsigned long flags_old =
- 	    __sync_fetch_and_or(&line6pcm->flags, channels);
- 	unsigned long flags_new = flags_old | channels;
-+	unsigned long flags_final = flags_old;
- 	int err = 0;
+-	unsigned long flags_old, flags_new;
++	unsigned long flags_old, flags_new, flags_final;
+ 	int err;
+ 
+ 	do {
+@@ -102,22 +102,37 @@ int line6_pcm_start(struct snd_line6_pcm
+ 		flags_new = flags_old | channels;
+ 	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
  	
++	flags_final = flags_old;
++
  	line6pcm->prev_fbuf = NULL;
  
 -	if (test_flags(flags_old, flags_new, MASK_CAPTURE)) {
@@ -280,7 +268,7 @@
  		}
  
  		line6pcm->count_in = 0;
-@@ -122,55 +136,78 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+@@ -125,42 +140,59 @@ int line6_pcm_start(struct snd_line6_pcm
  		err = line6_submit_audio_in_all_urbs(line6pcm);
  
  		if (err < 0)
@@ -340,7 +328,11 @@
  	return 0;
  
 -pcm_start_error:
--	__sync_fetch_and_and(&line6pcm->flags, ~channels);
+-	do {
+-		flags_old = ACCESS_ONCE(line6pcm->flags);
+-		flags_new = flags_old & ~channels;
+-	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
+-
 +pcm_acquire_error:
 +	/*
 +	   If not all requested resources/streams could be obtained, release
@@ -353,9 +345,11 @@
 -int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
 +int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels)
  {
- 	unsigned long flags_old =
- 	    __sync_fetch_and_and(&line6pcm->flags, ~channels);
- 	unsigned long flags_new = flags_old & ~channels;
+ 	unsigned long flags_old, flags_new;
+ 
+@@ -169,18 +201,20 @@ int line6_pcm_stop(struct snd_line6_pcm
+ 		flags_new = flags_old & ~channels;
+ 	} while (cmpxchg(&line6pcm->flags, flags_old, flags_new) != flags_old);
  
 -	if (test_flags(flags_new, flags_old, MASK_CAPTURE)) {
 +	if (test_flags(flags_new, flags_old, LINE6_BITS_CAPTURE_STREAM))
@@ -380,7 +374,7 @@
  	}
  
  	return 0;
-@@ -185,7 +222,7 @@ int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd)
+@@ -195,7 +229,7 @@ int snd_line6_trigger(struct snd_pcm_sub
  	unsigned long flags;
  
  	spin_lock_irqsave(&line6pcm->lock_trigger, flags);
@@ -389,7 +383,7 @@
  
  	snd_pcm_group_for_each_entry(s, substream) {
  		switch (s->stream) {
-@@ -498,13 +535,13 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+@@ -511,13 +545,13 @@ int snd_line6_prepare(struct snd_pcm_sub
  
  	switch (substream->stream) {
  	case SNDRV_PCM_STREAM_PLAYBACK:
@@ -405,7 +399,7 @@
  			line6_unlink_wait_clear_audio_in_urbs(line6pcm);
  
  		break;
-@@ -513,7 +550,7 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+@@ -526,7 +560,7 @@ int snd_line6_prepare(struct snd_pcm_sub
  		MISSING_CASE;
  	}
  
@@ -414,8 +408,6 @@
  		line6pcm->count_out = 0;
  		line6pcm->pos_out = 0;
  		line6pcm->pos_out_done = 0;
-diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
-index 47c6d69..5210ec8 100644
 --- a/drivers/staging/line6/pcm.h
 +++ b/drivers/staging/line6/pcm.h
 @@ -46,57 +46,131 @@
@@ -474,23 +466,12 @@
 +	LINE6_INDEX_PCM_MONITOR_PLAYBACK_STREAM,
 +	LINE6_INDEX_PCM_MONITOR_CAPTURE_BUFFER,
 +	LINE6_INDEX_PCM_MONITOR_CAPTURE_STREAM,
- #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
--	BIT_PCM_IMPULSE_PLAYBACK,
--	BIT_PCM_IMPULSE_CAPTURE,
++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
 +	LINE6_INDEX_PCM_IMPULSE_PLAYBACK_BUFFER,
 +	LINE6_INDEX_PCM_IMPULSE_PLAYBACK_STREAM,
 +	LINE6_INDEX_PCM_IMPULSE_CAPTURE_BUFFER,
 +	LINE6_INDEX_PCM_IMPULSE_CAPTURE_STREAM,
- #endif
--	BIT_PAUSE_PLAYBACK,
--	BIT_PREPARED,
--
--	/* individual masks: */
--/* *INDENT-OFF* */
--	MASK_PCM_ALSA_PLAYBACK    = 1 << BIT_PCM_ALSA_PLAYBACK,
--	MASK_PCM_ALSA_CAPTURE     = 1 << BIT_PCM_ALSA_CAPTURE,
--	MASK_PCM_MONITOR_PLAYBACK = 1 << BIT_PCM_MONITOR_PLAYBACK,
--	MASK_PCM_MONITOR_CAPTURE  = 1 << BIT_PCM_MONITOR_CAPTURE,
++#endif
 +	LINE6_INDEX_PAUSE_PLAYBACK,
 +	LINE6_INDEX_PREPARED,
 +
@@ -503,23 +484,15 @@
 +	LINE6_BIT(PCM_MONITOR_PLAYBACK_STREAM),
 +	LINE6_BIT(PCM_MONITOR_CAPTURE_BUFFER),
 +	LINE6_BIT(PCM_MONITOR_CAPTURE_STREAM),
- #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
--	MASK_PCM_IMPULSE_PLAYBACK = 1 << BIT_PCM_IMPULSE_PLAYBACK,
--	MASK_PCM_IMPULSE_CAPTURE  = 1 << BIT_PCM_IMPULSE_CAPTURE,
++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
 +	LINE6_BIT(PCM_IMPULSE_PLAYBACK_BUFFER),
 +	LINE6_BIT(PCM_IMPULSE_PLAYBACK_STREAM),
 +	LINE6_BIT(PCM_IMPULSE_CAPTURE_BUFFER),
 +	LINE6_BIT(PCM_IMPULSE_CAPTURE_STREAM),
- #endif
--	MASK_PAUSE_PLAYBACK       = 1 << BIT_PAUSE_PLAYBACK,
--	MASK_PREPARED             = 1 << BIT_PREPARED,
--/* *INDENT-ON* */
++#endif
 +	LINE6_BIT(PAUSE_PLAYBACK),
 +	LINE6_BIT(PREPARED),
- 
--	/* combined masks (by operation): */
--	MASK_PCM_ALSA = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_ALSA_CAPTURE,
--	MASK_PCM_MONITOR = MASK_PCM_MONITOR_PLAYBACK | MASK_PCM_MONITOR_CAPTURE,
++
 +	/* combined bit masks (by operation): */
 +	LINE6_BITS_PCM_ALSA_BUFFER =
 +	    LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER |
@@ -545,16 +518,35 @@
 +
 +	/* combined bit masks (by direction): */
 +	LINE6_BITS_PLAYBACK_BUFFER =
-+#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	BIT_PCM_IMPULSE_PLAYBACK,
+-	BIT_PCM_IMPULSE_CAPTURE,
 +	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_BUFFER |
-+#endif
+ #endif
+-	BIT_PAUSE_PLAYBACK,
+-	BIT_PREPARED,
 +	    LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER |
 +	    LINE6_BIT_PCM_MONITOR_PLAYBACK_BUFFER ,
-+
+ 
+-	/* individual masks: */
+-/* *INDENT-OFF* */
+-	MASK_PCM_ALSA_PLAYBACK    = 1 << BIT_PCM_ALSA_PLAYBACK,
+-	MASK_PCM_ALSA_CAPTURE     = 1 << BIT_PCM_ALSA_CAPTURE,
+-	MASK_PCM_MONITOR_PLAYBACK = 1 << BIT_PCM_MONITOR_PLAYBACK,
+-	MASK_PCM_MONITOR_CAPTURE  = 1 << BIT_PCM_MONITOR_CAPTURE,
 +	LINE6_BITS_PLAYBACK_STREAM =
-+#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	MASK_PCM_IMPULSE_PLAYBACK = 1 << BIT_PCM_IMPULSE_PLAYBACK,
+-	MASK_PCM_IMPULSE_CAPTURE  = 1 << BIT_PCM_IMPULSE_CAPTURE,
 +	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_STREAM |
-+#endif
+ #endif
+-	MASK_PAUSE_PLAYBACK       = 1 << BIT_PAUSE_PLAYBACK,
+-	MASK_PREPARED             = 1 << BIT_PREPARED,
+-/* *INDENT-ON* */
+-
+-	/* combined masks (by operation): */
+-	MASK_PCM_ALSA = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_ALSA_CAPTURE,
+-	MASK_PCM_MONITOR = MASK_PCM_MONITOR_PLAYBACK | MASK_PCM_MONITOR_CAPTURE,
 +	    LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM |
 +	    LINE6_BIT_PCM_MONITOR_PLAYBACK_STREAM ,
 +
@@ -598,7 +590,7 @@
  	*/
  	unsigned long flags;
  
-@@ -302,7 +376,7 @@ extern int line6_init_pcm(struct usb_line6 *line6,
+@@ -302,7 +376,7 @@ extern int line6_init_pcm(struct usb_lin
  extern int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd);
  extern int snd_line6_prepare(struct snd_pcm_substream *substream);
  extern void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm);
@@ -608,11 +600,9 @@
 +extern int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels);
  
  #endif
-diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
-index 4152db2..a0ab9d0 100644
 --- a/drivers/staging/line6/playback.c
 +++ b/drivers/staging/line6/playback.c
-@@ -166,7 +166,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+@@ -166,7 +166,7 @@ static int submit_audio_out_urb(struct s
  		struct usb_iso_packet_descriptor *fout =
  		    &urb_out->iso_frame_desc[i];
  
@@ -621,7 +611,7 @@
  			fsize = line6pcm->prev_fsize;
  
  		if (fsize == 0) {
-@@ -196,8 +196,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+@@ -196,8 +196,8 @@ static int submit_audio_out_urb(struct s
  	urb_out->transfer_buffer_length = urb_size;
  	urb_out->context = line6pcm;
  
@@ -632,7 +622,7 @@
  		struct snd_pcm_runtime *runtime =
  		    get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK)->runtime;
  
-@@ -238,10 +238,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+@@ -238,10 +238,10 @@ static int submit_audio_out_urb(struct s
  
  	if (line6pcm->prev_fbuf != NULL) {
  #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
@@ -645,7 +635,7 @@
  				line6_capture_copy(line6pcm,
  						   urb_out->transfer_buffer,
  						   urb_out->
-@@ -254,8 +254,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+@@ -254,8 +254,8 @@ static int submit_audio_out_urb(struct s
  			if (!
  			    (line6pcm->line6->
  			     properties->capabilities & LINE6_BIT_HWMON)
@@ -656,7 +646,7 @@
  				add_monitor_signal(urb_out, line6pcm->prev_fbuf,
  						   line6pcm->volume_monitor,
  						   bytes_per_frame);
-@@ -321,7 +321,7 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+@@ -321,7 +321,7 @@ void line6_unlink_audio_out_urbs(struct
  /*
  	Wait until unlinking of all currently active playback URBs has been finished.
  */
@@ -665,7 +655,7 @@
  {
  	int timeout = HZ;
  	unsigned int i;
-@@ -348,26 +348,7 @@ static void wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+@@ -348,26 +348,7 @@ static void wait_clear_audio_out_urbs(st
  void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
  {
  	line6_unlink_audio_out_urbs(line6pcm);
@@ -693,7 +683,7 @@
  }
  
  void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm)
-@@ -407,7 +388,7 @@ static void audio_out_callback(struct urb *urb)
+@@ -407,7 +388,7 @@ static void audio_out_callback(struct ur
  
  	spin_lock_irqsave(&line6pcm->lock_audio_out, flags);
  
@@ -702,7 +692,7 @@
  		struct snd_pcm_runtime *runtime = substream->runtime;
  		line6pcm->pos_out_done +=
  		    length / line6pcm->properties->bytes_per_frame;
-@@ -432,7 +413,7 @@ static void audio_out_callback(struct urb *urb)
+@@ -432,7 +413,7 @@ static void audio_out_callback(struct ur
  	if (!shutdown) {
  		submit_audio_out_urb(line6pcm);
  
@@ -711,7 +701,7 @@
  			line6pcm->bytes_out += length;
  			if (line6pcm->bytes_out >= line6pcm->period_out) {
  				line6pcm->bytes_out %= line6pcm->period_out;
-@@ -484,17 +465,17 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+@@ -484,17 +465,17 @@ static int snd_line6_playback_hw_params(
  	}
  	/* -- [FD] end */
  
@@ -735,7 +725,7 @@
  
  	line6pcm->period_out = params_period_bytes(hw_params);
  	return 0;
-@@ -504,12 +485,7 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+@@ -504,12 +485,7 @@ static int snd_line6_playback_hw_params(
  static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
  {
  	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
@@ -749,7 +739,7 @@
  	return snd_pcm_lib_free_pages(substream);
  }
  
-@@ -523,7 +499,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+@@ -523,7 +499,7 @@ int snd_line6_playback_trigger(struct sn
  #ifdef CONFIG_PM
  	case SNDRV_PCM_TRIGGER_RESUME:
  #endif
@@ -758,7 +748,7 @@
  
  		if (err < 0)
  			return err;
-@@ -534,7 +510,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+@@ -534,7 +510,7 @@ int snd_line6_playback_trigger(struct sn
  #ifdef CONFIG_PM
  	case SNDRV_PCM_TRIGGER_SUSPEND:
  #endif
@@ -767,7 +757,7 @@
  
  		if (err < 0)
  			return err;
-@@ -542,11 +518,11 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+@@ -542,11 +518,11 @@ int snd_line6_playback_trigger(struct sn
  		break;
  
  	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
@@ -781,8 +771,6 @@
  		break;
  
  	default:
-diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h
-index 02487ff..743bd6f 100644
 --- a/drivers/staging/line6/playback.h
 +++ b/drivers/staging/line6/playback.h
 @@ -29,13 +29,13 @@
@@ -800,11 +788,9 @@
  extern int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd);
  
  #endif
-diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
-index b776130..b754f69 100644
 --- a/drivers/staging/line6/toneport.c
 +++ b/drivers/staging/line6/toneport.c
-@@ -207,9 +207,9 @@ static int snd_toneport_monitor_put(struct snd_kcontrol *kcontrol,
+@@ -207,9 +207,9 @@ static int snd_toneport_monitor_put(stru
  	line6pcm->volume_monitor = ucontrol->value.integer.value[0];
  
  	if (line6pcm->volume_monitor > 0)
@@ -816,7 +802,7 @@
  
  	return 1;
  }
-@@ -264,7 +264,7 @@ static void toneport_start_pcm(unsigned long arg)
+@@ -264,7 +264,7 @@ static void toneport_start_pcm(unsigned
  {
  	struct usb_line6_toneport *toneport = (struct usb_line6_toneport *)arg;
  	struct usb_line6 *line6 = &toneport->line6;
@@ -825,7 +811,7 @@
  }
  
  /* control definition */
-@@ -446,7 +446,7 @@ void line6_toneport_disconnect(struct usb_interface *interface)
+@@ -446,7 +446,7 @@ void line6_toneport_disconnect(struct us
  		struct snd_line6_pcm *line6pcm = toneport->line6.line6pcm;
  
  		if (line6pcm != NULL) {
@@ -834,8 +820,6 @@
  			line6_pcm_disconnect(line6pcm);
  		}
  	}
-diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
-index aff9e5c..353d59d 100644
 --- a/drivers/staging/line6/usbdefs.h
 +++ b/drivers/staging/line6/usbdefs.h
 @@ -39,31 +39,29 @@

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0055-Staging-hv-storvsc-Get-rid-of-the-on_io_completion-i.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0055-Staging-hv-storvsc-Get-rid-of-the-on_io_completion-i.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0055-Staging-hv-storvsc-Get-rid-of-the-on_io_completion-i.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -11,8 +11,9 @@
 Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
 Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
 [bwh: Adjusted to apply after backported commits 9d2696e658ef
- '[SCSI] storvsc: Initialize the sglist' and 56b26e69c828
- 'Drivers: scsi: storvsc: Implement a eh_timed_out handler']
+ '[SCSI] storvsc: Initialize the sglist', 56b26e69c828
+ 'Drivers: scsi: storvsc: Implement a eh_timed_out handler', and
+ 8de580742fee 'scsi: storvsc: Fix a bug in copy_from_bounce_buffer()']
 
 ---
  drivers/staging/hv/storvsc_drv.c |  630 +++++++++++++++++++-------------------
@@ -28,7 +29,7 @@
  	struct hv_multipage_buffer data_buffer;
  
  	struct vstor_packet vstor_packet;
-@@ -437,6 +436,228 @@ get_in_err:
+@@ -437,6 +436,229 @@ get_in_err:
  
  }
  
@@ -232,23 +233,24 @@
 +			if (bounce_sgl[j].length == PAGE_SIZE) {
 +				/* full..move to next entry */
 +				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
++				bounce_addr = 0;
 +				j++;
++			}
 +
-+				/* if we need to use another bounce buffer */
-+				if (srclen || i != orig_sgl_count - 1)
-+					bounce_addr =
++			/* if we need to use another bounce buffer */
++			if (srclen && bounce_addr == 0)
++				bounce_addr =
 +					(unsigned long)kmap_atomic(
 +					sg_page((&bounce_sgl[j])), KM_IRQ0);
 +
-+			} else if (srclen == 0 && i == orig_sgl_count - 1) {
-+				/* unmap the last bounce that is < PAGE_SIZE */
-+				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
-+			}
 +		}
 +
 +		kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
 +	}
 +
++	if (bounce_addr)
++		kunmap_atomic((void *)bounce_addr, KM_IRQ0);
++
 +	local_irq_restore(flags);
 +
 +	return total_copied;
@@ -257,7 +259,7 @@
  static int storvsc_channel_init(struct hv_device *device)
  {
  	struct storvsc_device *stor_device;
-@@ -563,23 +784,100 @@ cleanup:
+@@ -563,22 +785,99 @@ cleanup:
  	return ret;
  }
  
@@ -298,7 +300,6 @@
 -	 * INQUIRY command with page code parameter set to 0x80
 -	 * MODE_SENSE command with cmd[2] == 0x1c
 -	 *
--	 * Setup srb and scsi status so this won't be fatal.
 +	 * If there is an error; offline the device since all
 +	 * error recovery strategies would have already been
 +	 * deployed on the host side.
@@ -367,11 +368,10 @@
 +	 * INQUIRY command with page code parameter set to 0x80
 +	 * MODE_SENSE command with cmd[2] == 0x1c
 +	 *
-+	 * Setup srb and scsi status so this won't be fatal.
+ 	 * Setup srb and scsi status so this won't be fatal.
  	 * We do this so we can distinguish truly fatal failues
  	 * (srb status == 0x4) and off-line the device in that case.
- 	 */
-@@ -626,7 +924,7 @@ static void storvsc_on_io_completion(str
+@@ -626,7 +925,7 @@ static void storvsc_on_io_completion(str
  	stor_pkt->vm_srb.data_transfer_length =
  	vstor_packet->vm_srb.data_transfer_length;
  
@@ -380,7 +380,7 @@
  
  	if (atomic_dec_and_test(&stor_device->num_outstanding_req) &&
  		stor_device->drain_notify)
-@@ -876,230 +1174,6 @@ static int storvsc_device_configure(stru
+@@ -876,231 +1175,6 @@ static int storvsc_device_configure(stru
  	return 0;
  }
  
@@ -586,23 +586,24 @@
 -			if (bounce_sgl[j].length == PAGE_SIZE) {
 -				/* full..move to next entry */
 -				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
+-				bounce_addr = 0;
 -				j++;
+-			}
 -
--				/* if we need to use another bounce buffer */
--				if (srclen || i != orig_sgl_count - 1)
--					bounce_addr =
+-			/* if we need to use another bounce buffer */
+-			if (srclen && bounce_addr == 0)
+-				bounce_addr =
 -					(unsigned long)kmap_atomic(
 -					sg_page((&bounce_sgl[j])), KM_IRQ0);
 -
--			} else if (srclen == 0 && i == orig_sgl_count - 1) {
--				/* unmap the last bounce that is < PAGE_SIZE */
--				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
--			}
 -		}
 -
 -		kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
 -	}
 -
+-	if (bounce_addr)
+-		kunmap_atomic((void *)bounce_addr, KM_IRQ0);
+-
 -	local_irq_restore(flags);
 -
 -	return total_copied;
@@ -611,7 +612,7 @@
  static int storvsc_get_chs(struct scsi_device *sdev, struct block_device * bdev,
  			   sector_t capacity, int *info)
  {
-@@ -1173,83 +1247,6 @@ static int storvsc_host_reset_handler(st
+@@ -1174,83 +1248,6 @@ static int storvsc_host_reset_handler(st
  	return SUCCESS;
  }
  
@@ -695,7 +696,7 @@
  /*
   * The host guarantees to respond to each command, although I/O latencies might
   * be unbounded on Azure.  Reset the timer unconditionally to give the host a
-@@ -1335,7 +1332,6 @@ static int storvsc_queuecommand(struct S
+@@ -1336,7 +1333,6 @@ static int storvsc_queuecommand(struct S
  		break;
  	}
  

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0067-Staging-hv-storvsc-Move-the-storage-driver-out-of-th.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0067-Staging-hv-storvsc-Move-the-storage-driver-out-of-th.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0067-Staging-hv-storvsc-Move-the-storage-driver-out-of-th.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -21,8 +21,9 @@
 Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
 [bwh: Adjusted to apply after backported commits 5c1b10ab7f93
  '[SCSI] storvsc: Account for in-transit packets in the RESET path' and
- 9d2696e658ef '[SCSI] storvsc: Initialize the sglist' and 56b26e69c828
- 'Drivers: scsi: storvsc: Implement a eh_timed_out handler']
+ 9d2696e658ef '[SCSI] storvsc: Initialize the sglist', 56b26e69c828
+ 'Drivers: scsi: storvsc: Implement a eh_timed_out handler' and
+ 8de580742fee 'scsi: storvsc: Fix a bug in copy_from_bounce_buffer()']
 ---
 --- a/drivers/scsi/Kconfig
 +++ b/drivers/scsi/Kconfig
@@ -61,7 +62,7 @@
  sd_mod-objs	:= sd.o
 --- /dev/null
 +++ b/drivers/scsi/storvsc_drv.c
-@@ -0,0 +1,1566 @@
+@@ -0,0 +1,1567 @@
 +/*
 + * Copyright (c) 2009, Microsoft Corporation.
 + *
@@ -673,23 +674,24 @@
 +			if (bounce_sgl[j].length == PAGE_SIZE) {
 +				/* full..move to next entry */
 +				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
++				bounce_addr = 0;
 +				j++;
++			}
 +
-+				/* if we need to use another bounce buffer */
-+				if (srclen || i != orig_sgl_count - 1)
-+					bounce_addr =
++			/* if we need to use another bounce buffer */
++			if (srclen && bounce_addr == 0)
++				bounce_addr =
 +					(unsigned long)kmap_atomic(
 +					sg_page((&bounce_sgl[j])), KM_IRQ0);
 +
-+			} else if (srclen == 0 && i == orig_sgl_count - 1) {
-+				/* unmap the last bounce that is < PAGE_SIZE */
-+				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
-+			}
 +		}
 +
 +		kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
 +	}
 +
++	if (bounce_addr)
++		kunmap_atomic((void *)bounce_addr, KM_IRQ0);
++
 +	local_irq_restore(flags);
 +
 +	return total_copied;
@@ -1673,7 +1675,7 @@
 -Haiyang Zhang <haiyangz at microsoft.com>, and K. Y. Srinivasan <kys at microsoft.com>
 --- a/drivers/staging/hv/storvsc_drv.c
 +++ /dev/null
-@@ -1,1566 +0,0 @@
+@@ -1,1567 +0,0 @@
 -/*
 - * Copyright (c) 2009, Microsoft Corporation.
 - *
@@ -2285,23 +2287,24 @@
 -			if (bounce_sgl[j].length == PAGE_SIZE) {
 -				/* full..move to next entry */
 -				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
+-				bounce_addr = 0;
 -				j++;
+-			}
 -
--				/* if we need to use another bounce buffer */
--				if (srclen || i != orig_sgl_count - 1)
--					bounce_addr =
+-			/* if we need to use another bounce buffer */
+-			if (srclen && bounce_addr == 0)
+-				bounce_addr =
 -					(unsigned long)kmap_atomic(
 -					sg_page((&bounce_sgl[j])), KM_IRQ0);
 -
--			} else if (srclen == 0 && i == orig_sgl_count - 1) {
--				/* unmap the last bounce that is < PAGE_SIZE */
--				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
--			}
 -		}
 -
 -		kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
 -	}
 -
+-	if (bounce_addr)
+-		kunmap_atomic((void *)bounce_addr, KM_IRQ0);
+-
 -	local_irq_restore(flags);
 -
 -	return total_copied;

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0077-hv-remove-the-second-argument-of-k-un-map_atomic.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0077-hv-remove-the-second-argument-of-k-un-map_atomic.patch	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0077-hv-remove-the-second-argument-of-k-un-map_atomic.patch	Sat Aug  8 17:48:04 2015	(r22934)
@@ -6,17 +6,18 @@
 
 Acked-by: Greg Kroah-Hartman <gregkh at suse.de>
 Signed-off-by: Cong Wang <amwang at redhat.com>
-[bwh: Adjust filename to apply after move to drivers/scsi; apply changes
- from Linux's merge commit 9f3938346a5c1fa504647670edb5fea5756cfb00.]
+[bwh: Adjust filename to apply after move to drivers/scsi and after
+ backport of commit 8de580742fee
+ 'scsi: storvsc: Fix a bug in copy_from_bounce_buffer()',
+ apply changes from Linux's merge commit
+ 9f3938346a5c1fa504647670edb5fea5756cfb00.]
 ---
  drivers/scsi/storvsc_drv.c |   52 ++++++++++++++++++++++----------------------
  1 file changed, 26 insertions(+), 26 deletions(-)
 
-diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
-index 695ffc3..83a1972 100644
 --- a/drivers/scsi/storvsc_drv.c
 +++ b/drivers/scsi/storvsc_drv.c
-@@ -481,6 +481,19 @@ cleanup:
+@@ -483,6 +483,19 @@ cleanup:
  	return NULL;
  }
  
@@ -36,7 +37,7 @@
  /* Assume the original sgl has enough room */
  static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
  					    struct scatterlist *bounce_sgl,
-@@ -499,15 +512,12 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
+@@ -501,15 +514,12 @@ static unsigned int copy_from_bounce_buf
  	local_irq_save(flags);
  
  	for (i = 0; i < orig_sgl_count; i++) {
@@ -54,7 +55,7 @@
  
  		while (destlen) {
  			src = bounce_addr + bounce_sgl[j].offset;
-@@ -523,7 +533,7 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
+@@ -525,7 +535,7 @@ static unsigned int copy_from_bounce_buf
  
  			if (bounce_sgl[j].offset == bounce_sgl[j].length) {
  				/* full */
@@ -63,7 +64,7 @@
  				j++;
  
  				/*
-@@ -537,26 +547,21 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
+@@ -539,26 +549,21 @@ static unsigned int copy_from_bounce_buf
  					/*
  					 * We are done; cleanup and return.
  					 */
@@ -94,7 +95,7 @@
  	}
  
  	local_irq_restore(flags);
-@@ -581,15 +586,12 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
+@@ -583,15 +588,12 @@ static unsigned int copy_to_bounce_buffe
  	local_irq_save(flags);
  
  	for (i = 0; i < orig_sgl_count; i++) {
@@ -112,33 +113,32 @@
  
  		while (srclen) {
  			/* assume bounce offset always == 0 */
-@@ -606,22 +608,20 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
+@@ -608,24 +610,22 @@ static unsigned int copy_to_bounce_buffe
  
  			if (bounce_sgl[j].length == PAGE_SIZE) {
  				/* full..move to next entry */
 -				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
 +				sg_kunmap_atomic(bounce_addr);
+ 				bounce_addr = 0;
  				j++;
+ 			}
  
- 				/* if we need to use another bounce buffer */
- 				if (srclen || i != orig_sgl_count - 1)
--					bounce_addr =
+ 			/* if we need to use another bounce buffer */
+ 			if (srclen && bounce_addr == 0)
+-				bounce_addr =
 -					(unsigned long)kmap_atomic(
 -					sg_page((&bounce_sgl[j])), KM_IRQ0);
-+					bounce_addr = sg_kmap_atomic(bounce_sgl,j);
++				bounce_addr = sg_kmap_atomic(bounce_sgl,j);
  
- 			} else if (srclen == 0 && i == orig_sgl_count - 1) {
- 				/* unmap the last bounce that is < PAGE_SIZE */
--				kunmap_atomic((void *)bounce_addr, KM_IRQ0);
-+				sg_kunmap_atomic(bounce_addr);
- 			}
  		}
  
 -		kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
 +		sg_kunmap_atomic(src_addr - orig_sgl[i].offset);
  	}
  
+ 	if (bounce_addr)
+-		kunmap_atomic((void *)bounce_addr, KM_IRQ0);
++		sg_kunmap_atomic(bounce_addr);
+ 
  	local_irq_restore(flags);
--- 
-1.7.9.5
-
+ 

Modified: dists/wheezy/linux/debian/patches/series
==============================================================================
--- dists/wheezy/linux/debian/patches/series	Fri Aug  7 18:47:01 2015	(r22933)
+++ dists/wheezy/linux/debian/patches/series	Sat Aug  8 17:48:04 2015	(r22934)
@@ -507,7 +507,6 @@
 features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch
 features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch
 features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch
-features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch
 features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch
 features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch
 features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch
@@ -1136,8 +1135,6 @@
 debian/mm-truncate-avoid-abi-change-in-3.2.65.patch
 bugfix/all/aufs-move-d_rcu-from-overlapping-d_child-to-overlapping-d.patch
 debian/vfs-avoid-abi-change-for-dentry-union-changes.patch
-bugfix/all/vfs-read-file_handle-only-once-in-handle_to_path.patch
-bugfix/all/aslr-fix-stack-randomization-on-64-bit-systems.patch
 debian/sock-fix-abi-change-in-3.2.67.patch
 debian/rmap-fix-abi-change-in-3.2.67.patch
 
@@ -1154,24 +1151,6 @@
 features/all/hpsa/0010-hpsa-add-in-gen9-controller-model-names.patch
 features/all/hpsa/0011-hpsa-add-in-P840ar-controller-model-name.patch
 
-bugfix/all/nfsv4-minor-cleanups-for-nfs4_handle_exception-and-n.patch
 bugfix/all/netfilter-ipset-Check-and-reject-crazy-0-input-param.patch
-
-bugfix/all/ib-core-prevent-integer-overflow-in-ib_umem_get.patch
-bugfix/all/netfilter-nf_conntrack-reserve-two-bytes-for-nf_ct_e.patch
-bugfix/all/net-llc-use-correct-size-for-sysctl-timeout-entries.patch
-bugfix/all/net-rds-use-correct-size-for-max-unacked-packets-and.patch
-bugfix/all/xen-pciback-limit-guest-control-of-command-register.patch
-bugfix/x86/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimi.patch
-bugfix/all/ipv6-don-t-reduce-hop-limit-for-an-interface.patch
-bugfix/x86/crypto-aesni-fix-memory-usage-in-GCM-decryption.patch
-bugfix/all/fs-take-i_mutex-during-prepare_binprm-for-set-ug-id-.patch
-bugfix/all/pipe-iovec-fix-memory-corruption-when-retrying-atomi.patch
-bugfix/all/udf-remove-repeated-loads-blocksize.patch
-bugfix/all/udf-check-length-of-extended-attributes-and-allocati.patch
-bugfix/all/ipv4-missing-sk_nulls_node_init-in-ping_unhash.patch
-bugfix/all/udp-fix-behavior-of-wrong-checksums.patch
-bugfix/all/sctp-fix-asconf-list-handling.patch
-bugfix/x86/x86-bpf_jit-fix-compilation-of-large-bpf-programs.patch
-bugfix/all/sg_start_req-make-sure-that-there-s-not-too-many-ele.patch
 bugfix/all/md-use-kzalloc-when-bitmap-is-disabled.patch
+debian/revert-acpica-utilities-split-io-address-types-from-.patch



More information about the Kernel-svn-changes mailing list