[kernel] r21851 - in dists/wheezy/linux/debian: . config patches patches/bugfix/all patches/bugfix/alpha patches/bugfix/s390 patches/debian patches/features/all/drm patches/features/all/igb patches/features/all/rt patches/features/arm patches/features/x86/hyperv

Ben Hutchings benh at moszumanska.debian.org
Tue Sep 16 13:18:34 UTC 2014


Author: benh
Date: Tue Sep 16 13:18:33 2014
New Revision: 21851

Log:
Update to 3.2.63

drm: Update to 3.4.103 (no actual changes but the patch needed refreshing)

Drop or refresh patches that were included or conflict with upstream.

Work around ABI changes in libata, SCSI and IP ID generation.

Added:
   dists/wheezy/linux/debian/patches/debian/ip-ident-avoid-abi-change-in-3.2.63.patch
   dists/wheezy/linux/debian/patches/debian/libata-avoid-abi-change-in-3.2.62.patch
   dists/wheezy/linux/debian/patches/debian/scsi-avoid-abi-change-in-3.2.62.patch
Deleted:
   dists/wheezy/linux/debian/patches/bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch
   dists/wheezy/linux/debian/patches/bugfix/all/revert-net-ip-ipv6-handle-gso-skbs-in-forwarding-pat.patch
   dists/wheezy/linux/debian/patches/bugfix/all/revert-net-ipv4-ip_forward-fix-inverted-local_df-tes.patch
   dists/wheezy/linux/debian/patches/bugfix/alpha/alpha-add-io-read-write-16-32-be-functions.patch
   dists/wheezy/linux/debian/patches/bugfix/s390/s390-ptrace-fix-PSW-mask-check.patch
Modified:
   dists/wheezy/linux/debian/changelog
   dists/wheezy/linux/debian/config/defines
   dists/wheezy/linux/debian/patches/debian/inetpeer-avoid-abi-change-in-3.2.52.patch
   dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch
   dists/wheezy/linux/debian/patches/features/all/igb/0008-igb-add-basic-runtime-PM-support.patch
   dists/wheezy/linux/debian/patches/features/all/rt/0180-mutex-no-spin-on-rt.patch.patch
   dists/wheezy/linux/debian/patches/features/arm/net-drop-NET-dependency-from-HAVE_BPF_JIT.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0003-Staging-hv-storvsc-Use-mempools-to-allocate-struct-s.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0025-Staging-hv-storvsc-Implement-per-device-memory-pools.patch
   dists/wheezy/linux/debian/patches/features/x86/hyperv/0050-Staging-hv-storvsc-Cleanup-storvsc_queuecommand.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/series

Modified: dists/wheezy/linux/debian/changelog
==============================================================================
--- dists/wheezy/linux/debian/changelog	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/changelog	Tue Sep 16 13:18:33 2014	(r21851)
@@ -1,4 +1,4 @@
-linux (3.2.61-1) UNRELEASED; urgency=medium
+linux (3.2.63-1) UNRELEASED; urgency=medium
 
   * New upstream stable update:
     http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.61
@@ -57,9 +57,128 @@
     - net: fix inet_getid() and ipv6_select_ident() bugs
     - target: Explicitly clear ramdisk_mcp backend pages
     - iommu/vt-d: Fix missing IOTLB flush in intel_iommu_unmap()
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.62
+    - ibmvscsi: Add memory barriers for send / receive
+    - cpuset,mempolicy: fix sleeping function called from invalid context
+    - nfsd: fix rare symlink decoding bug
+    - md: flush writes before starting a recovery.
+    - drm/vmwgfx: Fix incorrect write to read-only register v2:
+      (regression in 3.2.58)
+    - ACPI / EC: Avoid race condition related to advance_transaction()
+    - ACPI / EC: Fix race condition in ec_transaction_completed()
+    - hwmon: (adm1031) Fix writes to limit registers
+    - alarmtimer: Fix bug where relative alarm timers were treated as absolute
+    - dm io: fix a race condition in the wake up code for sync_io
+    - sched: Fix possible divide by zero in avg_atom() calculation
+    - locking/mutex: Disable optimistic spinning on some architectures
+    - hwmon: (adt7470) Fix writes to temperature limit registers
+    - usb: Check if port status is equal to RxDetect (regression in 3.2.38)
+    - tcp: fix tcp_match_skb_to_sack() for unaligned SACK at end of an skb
+    - igmp: fix the problem when mc leave group
+    - appletalk: Fix socket referencing in skb
+    - net: sctp: fix information leaks in ulpevent layer
+    - dns_resolver: assure that dns_query() result is null-terminated
+    - dns_resolver: Null-terminate the right string
+    - rtnetlink: fix userspace API breakage for iproute2 < v3.9.0
+      (regression in 3.2.45)
+    - netfilter: ipt_ULOG: fix info leaks
+    - xfs: fix allocbt cursor leak in xfs_alloc_ag_vextent_near
+    - xfs: really fix the cursor leak in xfs_alloc_ag_vextent_near
+    - shmem: fix faulting into a hole, not taking i_mutex (CVE-2014-4171)
+    - shmem: fix splicing from a hole while it's punched (CVE-2014-4171)
+    - [x86] x86-32, espfix: Remove filter for espfix32 due to race
+    - sym53c8xx_2: Set DID_REQUEUE return code when aborting squeue
+    - mm: hugetlb: fix copy_hugetlb_page_range() (regression in 3.2.61)
+    - [arm*] 7668/1: fix memset-related crashes caused by recent GCC (4.7.2)
+      optimizations
+    - [arm*] 7670/1: fix the memset fix
+    - ceph: fix overflow check in build_snap_context()
+    - libata: support the ata host which implements a queue depth less than 32
+      (regression in 3.2.59)
+    - libata: introduce ata_host->n_tags to avoid oops on SAS controllers
+    - [x86] x86_32, entry: Store badsys error code in %eax
+      (regression in 3.2.60-1)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.63
+    - [x86] KVM: Inter-privilege level ret emulation is not implemeneted
+    - block: don't assume last put of shared tags is for the host
+    - debugfs: Fix corrupted loop in debugfs_remove_recursive
+    - mtd/ftl: fix the double free of the buffers allocated in build_maps()
+    - [x86] don't exclude low BIOS area when allocating address space for
+      non-PCI cards (regression in 2.6.37)
+    - scsi: handle flush errors properly
+    - hwmon: (smsc47m192) Fix temperature limit and vrm write operations
+    - staging: vt6655: Fix Warning on boot handle_irq_event_percpu.
+    - [mips,powerpc] bfa: Fix undefined bit shift on big-endian architectures
+      with 32-bit DMA address
+    - Drivers: scsi: storvsc: Implement a eh_timed_out handler
+    - iommu/vt-d: Exclude devices using RMRRs from IOMMU API domains
+    - net: sendmsg: fix NULL pointer dereference
+    - hwmon: (ads1015) Fix off-by-one for valid channel index checking
+    - [mips*] tlbex: Fix a missing statement for HUGETLB
+    - [mips*] Prevent user from setting FCSR cause bits
+    - md/raid1,raid10: always abort recover on write error.
+    - ext4: fix ext4_discard_allocated_blocks() if we can't allocate the pa
+      struct
+    - hwmon: (lm85) Fix various errors on attribute writes
+    - hwmon: (amc6821) Fix possible race condition bug
+    - crypto: af_alg - properly label AF_ALG socket
+    - mnt: Change the default remount atime from relatime to the existing value
+    - netlabel: fix a problem when setting bits below the previously lowest bit
+    - hwmon: (ads1015) Fix out-of-bounds array access
+    - [s390*] locking: Reenable optimistic spinning
+    - ring-buffer: Always reset iterator to reader page
+    - reiserfs: Fix use after free in journal teardown
+    - [powerpc*] mm: Use read barrier when creating real_pte
+    - Btrfs: fix csum tree corruption, duplicate and outdated checksums
+    - CIFS: Fix wrong directory attributes after rename
+    - md/raid6: avoid data corruption during recovery of double-degraded RAID6
+    - iommu/amd: Fix cleanup_domain for mass device removal
+    - pata_scc: propagate return value of scc_wait_after_reset
+    - kvm: iommu: fix the third parameter of kvm_iommu_put_pages
+      (CVE-2014-3601)
+    - [mips*/octeon] make get_system_type() thread-safe
+    - xhci: rework cycle bit checking for new dequeue pointers
+      (regression in 3.2.59)
+    - isofs: Fix unbounded recursion when processing relocated directories
+    - HID: logitech: perform bounds checking on device_id early enough
+    - USB: whiteheat: Added bounds checking for bulk command response
+    - HID: logitech-dj: prevent false errors to be shown
+    - ACPI / EC: Add support to disallow QR_EC to be issued when SCI_EVT isn't
+      set (regression in 3.2.62)
+    - HID: magicmouse: sanity check report size in raw_event() callback
+    - HID: picolcd: sanity check report size in raw_event() callback
+    - [armhf] 8128/1: abort: don't clear the exclusive monitors
+    - [armhf] 8129/1: errata: work around Cortex-A15 erratum 830321 using dummy
+      strex
+    - USB: serial: fix potential stack buffer overflow
+    - USB: serial: fix potential heap buffer overflow
+    - [mips*] Fix accessing to per-cpu data when flushing the cache
+    - inetpeer: get rid of ip_id_count
+    - ip: make IP identifiers less predictable
+    - tcp: Fix integer-overflows in TCP veno
+    - tcp: Fix integer-overflow in TCP vegas
+    - net: sctp: inherit auth_capable on INIT collisions
+    - iovec: make sure the caller actually wants anything in
+      memcpy_fromiovecend
+    - sctp: fix possible seqlock seadlock in sctp_packet_transmit()
+    - [sparc] Fix argument sign extension for compat_sys_futex().
+    - [sparc] Handle 32-bit tasks properly in compute_effective_address().
+    - [sparc] Fix top-level fault handling bugs.
+    - [sparc] Don't bark so loudly about 32-bit tasks generating 64-bit fault
+      addresses.
+    - [sparc] Fix huge TSB mapping on pre-UltraSPARC-III cpus.
+    - [sparc] Add membar to Niagara2 memcpy code.
+    - [sparc] Do not insert non-valid PTEs into the TSB hash table.
+    - [sparc] arch/sparc/math-emu/math_32.c: drop stray break operator
+    - [amd64] Revert "x86-64, modify_ldt: Make support for 16-bit segments a
+      runtime option"
+    - [amd64] x86-64, espfix: Don't leak bits 31:16 of %esp returning to 16-bit
+      stack
+    - [amd64] x86_64/entry/xen: Do not invoke espfix64 on Xen
+    - [amd64] x86/espfix/xen: Fix allocation of pages for paravirt page tables
 
   [ Ben Hutchings ]
-  * drm, agp: Update to 3.4.99:
+  * drm, agp: Update to 3.4.103:
     - drm/radeon: only apply hdmi bpc pll flags when encoder mode is hdmi
     - drm/radeon: fix typo in radeon_connector_is_dp12_capable()
     - drm/radeon/atom: fix dithering on certain panels

Modified: dists/wheezy/linux/debian/config/defines
==============================================================================
--- dists/wheezy/linux/debian/config/defines	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/config/defines	Tue Sep 16 13:18:33 2014	(r21851)
@@ -52,6 +52,7 @@
  module:drivers/usb/serial/*
  module:arch/s390/kvm/kvm
  module:drivers/scsi/esp_scsi
+ module:drivers/char/tpm/tpm
 # Only exported for tidspbridge, disabled for security reasons in 3.2.54
  omap_dsp_get_mempool_base
 # Should only be used by ioatdma

Modified: dists/wheezy/linux/debian/patches/debian/inetpeer-avoid-abi-change-in-3.2.52.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/debian/inetpeer-avoid-abi-change-in-3.2.52.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/debian/inetpeer-avoid-abi-change-in-3.2.52.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -23,8 +23,8 @@
 -	};
  	/*
  	 * Once inet_peer is queued for deletion (refcnt == -1), following fields
- 	 * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp
-@@ -64,6 +60,13 @@ struct inet_peer {
+ 	 * are not available: rid, tcp_ts, tcp_ts_stamp
+@@ -63,6 +59,13 @@ struct inet_peer {
  	/* following fields might be frequently dirtied */
  	__u32			dtime;	/* the time of last use of not referenced entries */
  	atomic_t		refcnt;

Added: dists/wheezy/linux/debian/patches/debian/ip-ident-avoid-abi-change-in-3.2.63.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/debian/ip-ident-avoid-abi-change-in-3.2.63.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -0,0 +1,53 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 16 Sep 2014 02:44:19 +0100
+Subject: ip_ident: Avoid ABI change in 3.2.63
+
+Commits 64b5c251d5b2 ('inetpeer: get rid of ip_id_count') and
+04ca6973f7c1 ('ip: make IP identifiers less predictable'),
+backported into 3.2.63, removed a field from struct inetpeer
+and changed the parameters of __ip_select_ident().  Restore
+them as unused padding.
+
+--- a/include/net/inetpeer.h
++++ b/include/net/inetpeer.h
+@@ -49,6 +49,7 @@ struct inet_peer {
+ 	union {
+ 		struct {
+ 			atomic_t			rid;		/* Frag reception counter */
++			atomic_t			ip_id_count;    /* now unused */
+ 			__u32				tcp_ts;
+ 			__u32				tcp_ts_stamp;
+ 		};
+--- a/include/net/ip.h
++++ b/include/net/ip.h
+@@ -265,7 +265,8 @@ int ip_dont_fragment(struct sock *sk, st
+ }
+ 
+ u32 ip_idents_reserve(u32 hash, int segs);
+-void __ip_select_ident(struct iphdr *iph, int segs);
++void __ip_select_ident(struct iphdr *iph, struct dst_entry *dst /*unused*/,
++		       int segs);
+ 
+ static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs)
+ {
+@@ -284,7 +285,7 @@ static inline void ip_select_ident_segs(
+ 			iph->id = 0;
+ 		}
+ 	} else {
+-		__ip_select_ident(iph, segs);
++		__ip_select_ident(iph, NULL, segs);
+ 	}
+ }
+ 
+--- a/net/ipv4/route.c
++++ b/net/ipv4/route.c
+@@ -1374,7 +1374,8 @@ u32 ip_idents_reserve(u32 hash, int segs
+ }
+ EXPORT_SYMBOL(ip_idents_reserve);
+ 
+-void __ip_select_ident(struct iphdr *iph, int segs)
++void __ip_select_ident(struct iphdr *iph, struct dst_entry *dst /*unused*/,
++		       int segs)
+ {
+ 	static u32 ip_idents_hashrnd __read_mostly;
+ 	static bool hashrnd_initialized = false;

Added: dists/wheezy/linux/debian/patches/debian/libata-avoid-abi-change-in-3.2.62.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/debian/libata-avoid-abi-change-in-3.2.62.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -0,0 +1,77 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 05 Aug 2014 09:51:04 +0100
+Subject: libata: Avoid ABI change in 3.2.62
+
+Commit 1a112d10f03e ('libata: introduce ata_host->n_tags to avoid oops
+on SAS controllers') added a field in a structure which may be
+driver-allocated.  So we can't simply move it to the end.  However
+there is a flags field with many free bits, and we only need 5 bits
+(ATA_MAX_QUEUE == 32 and n_tags must be less than this).  Add a
+pair of accessors to make this slightly less ugly.
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -171,6 +171,17 @@ static bool ata_sstatus_online(u32 sstat
+ 	return (sstatus & 0xf) == 0x3;
+ }
+ 
++static unsigned int ata_host_get_n_tags(const struct ata_host *host)
++{
++	return (host->flags & ATA_HOST_N_TAGS_MASK) >> ATA_HOST_N_TAGS_SHIFT;
++}
++
++static void ata_host_set_n_tags(struct ata_host *host, unsigned int n_tags)
++{
++	host->flags = ((host->flags & ~ATA_HOST_N_TAGS_MASK) |
++		       (n_tags << ATA_HOST_N_TAGS_SHIFT));
++}
++
+ /**
+  *	ata_link_next - link iteration helper
+  *	@link: the previous link, NULL to start
+@@ -4728,7 +4739,7 @@ void swap_buf_le16(u16 *buf, unsigned in
+ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
+ {
+ 	struct ata_queued_cmd *qc = NULL;
+-	unsigned int max_queue = ap->host->n_tags;
++	unsigned int max_queue = ata_host_get_n_tags(ap->host);
+ 	unsigned int i, tag;
+ 
+ 	/* no command while frozen */
+@@ -5929,7 +5940,7 @@ void ata_host_init(struct ata_host *host
+ {
+ 	spin_lock_init(&host->lock);
+ 	mutex_init(&host->eh_mutex);
+-	host->n_tags = ATA_MAX_QUEUE - 1;
++	ata_host_set_n_tags(host, ATA_MAX_QUEUE - 1);
+ 	host->dev = dev;
+ 	host->flags = flags;
+ 	host->ops = ops;
+@@ -6010,7 +6021,7 @@ int ata_host_register(struct ata_host *h
+ {
+ 	int i, rc;
+ 
+-	host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1);
++	ata_host_set_n_tags(host, clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1));
+ 
+ 	/* host must have been started */
+ 	if (!(host->flags & ATA_HOST_STARTED)) {
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -248,6 +248,8 @@ enum {
+ 	ATA_HOST_STARTED	= (1 << 1),	/* Host started */
+ 	ATA_HOST_PARALLEL_SCAN	= (1 << 2),	/* Ports on this host can be scanned in parallel */
+ 	ATA_HOST_IGNORE_ATA	= (1 << 3),	/* Ignore ATA devices on this host. */
++	ATA_HOST_N_TAGS_SHIFT	= 4,
++	ATA_HOST_N_TAGS_MASK	= (ATA_MAX_QUEUE - 1) << ATA_HOST_N_TAGS_SHIFT,
+ 
+ 	/* bits 24:31 of host->flags are reserved for LLD specific flags */
+ 
+@@ -541,7 +543,6 @@ struct ata_host {
+ 	struct device 		*dev;
+ 	void __iomem * const	*iomap;
+ 	unsigned int		n_ports;
+-	unsigned int		n_tags;			/* nr of NCQ tags */
+ 	void			*private_data;
+ 	struct ata_port_operations *ops;
+ 	unsigned long		flags;

Added: dists/wheezy/linux/debian/patches/debian/scsi-avoid-abi-change-in-3.2.62.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/wheezy/linux/debian/patches/debian/scsi-avoid-abi-change-in-3.2.62.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -0,0 +1,22 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 16 Sep 2014 02:51:20 +0100
+Subject: SCSI: Avoid ABI change in 3.2.62
+
+Commit b14bf2d0c035 ('usb-storage/SCSI: Add broken_fua blacklist flag')
+adds a new 1-bit field to struct scsi_device.  This is fine because it
+had 29 bits of padding to spare, but we need to hide the new field
+from genksyms.
+
+--- a/include/scsi/scsi_device.h
++++ b/include/scsi/scsi_device.h
+@@ -151,7 +151,10 @@ struct scsi_device {
+ 	unsigned no_read_disc_info:1;	/* Avoid READ_DISC_INFO cmds */
+ 	unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */
+ 	unsigned is_visible:1;	/* is the device visible in sysfs */
++#ifndef __GENKSYMS__
+ 	unsigned broken_fua:1;		/* Don't set FUA bit */
++	/* 28 bits of padding */
++#endif
+ 
+ 	DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
+ 	struct list_head event_list;	/* asserted events */

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	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/all/drm/drm-3.4.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -72198,7 +72198,7 @@
  		break;
  	}
 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
-index 3254d51e..8d1724c 100644
+index e8a3c31..8d1724c 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[] = {
@@ -72260,6 +72260,15 @@
  	args.v1.ucDataOutLen = 0;
  	args.v1.ucChannelID = chan->rec.i2c_id;
  	args.v1.ucDelay = delay / 10;
+@@ -89,7 +124,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
+ 	/* flags not zero */
+ 	if (args.v1.ucReplyStatus == 2) {
+ 		DRM_DEBUG_KMS("dp_aux_ch flags not zero\n");
+-		return -EIO;
++		return -EBUSY;
+ 	}
+ 
+ 	/* error */
 @@ -103,7 +138,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
  		recv_bytes = recv_size;
  
@@ -72925,7 +72934,7 @@
  #include <linux/kernel.h>
  
 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
-index 5efba47..df62c39 100644
+index 9b3f787..df62c39 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] =
@@ -73463,7 +73472,15 @@
  	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
  
  	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
-@@ -3014,11 +3166,24 @@ restart_ih:
+@@ -2765,7 +2917,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);
+-		wptr &= ~RB_OVERFLOW;
+ 	}
+ 	return (wptr & rdev->ih.ptr_mask);
+ }
+@@ -3015,11 +3166,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);
@@ -73490,7 +73507,7 @@
  			break;
  		case 233: /* GUI IDLE */
  			DRM_DEBUG("IH: GUI idle\n");
-@@ -3048,6 +3213,7 @@ restart_ih:
+@@ -3049,6 +3213,7 @@ restart_ih:
  
  static int evergreen_startup(struct radeon_device *rdev)
  {
@@ -73498,7 +73515,7 @@
  	int r;
  
  	/* enable pcie gen2 link */
-@@ -3094,7 +3260,7 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3095,7 +3260,7 @@ static int evergreen_startup(struct radeon_device *rdev)
  	r = evergreen_blit_init(rdev);
  	if (r) {
  		r600_blit_fini(rdev);
@@ -73507,7 +73524,7 @@
  		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
  	}
  
-@@ -3103,6 +3269,12 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3104,6 +3269,12 @@ static int evergreen_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73520,7 +73537,7 @@
  	/* Enable IRQ */
  	if (!rdev->irq.installed) {
  		r = radeon_irq_kms_init(rdev);
-@@ -3118,7 +3290,9 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3119,7 +3290,9 @@ static int evergreen_startup(struct radeon_device *rdev)
  	}
  	evergreen_irq_set(rdev);
  
@@ -73531,7 +73548,7 @@
  	if (r)
  		return r;
  	r = evergreen_cp_load_microcode(rdev);
-@@ -3128,6 +3302,23 @@ static int evergreen_startup(struct radeon_device *rdev)
+@@ -3129,6 +3302,23 @@ static int evergreen_startup(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73555,7 +73572,7 @@
  	return 0;
  }
  
-@@ -3147,15 +3338,11 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3148,15 +3338,11 @@ int evergreen_resume(struct radeon_device *rdev)
  	/* post card */
  	atom_asic_init(rdev->mode_info.atom_context);
  
@@ -73573,7 +73590,7 @@
  		return r;
  	}
  
-@@ -3165,13 +3352,17 @@ int evergreen_resume(struct radeon_device *rdev)
+@@ -3166,13 +3352,17 @@ int evergreen_resume(struct radeon_device *rdev)
  
  int evergreen_suspend(struct radeon_device *rdev)
  {
@@ -73593,7 +73610,7 @@
  
  	return 0;
  }
-@@ -3242,8 +3433,8 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3243,8 +3433,8 @@ int evergreen_init(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73604,7 +73621,7 @@
  
  	rdev->ih.ring_obj = NULL;
  	r600_ih_ring_init(rdev, 64 * 1024);
-@@ -3252,29 +3443,24 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3253,29 +3443,24 @@ int evergreen_init(struct radeon_device *rdev)
  	if (r)
  		return r;
  
@@ -73641,7 +73658,7 @@
  
  	/* Don't start up if the MC ucode is missing on BTC parts.
  	 * The default clocks and voltages before the MC ucode
-@@ -3292,15 +3478,17 @@ int evergreen_init(struct radeon_device *rdev)
+@@ -3293,15 +3478,17 @@ int evergreen_init(struct radeon_device *rdev)
  
  void evergreen_fini(struct radeon_device *rdev)
  {
@@ -79140,7 +79157,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 f7e3cc0..1555cd6 100644
+index ab46a99..1555cd6 100644
 --- a/drivers/gpu/drm/radeon/r600.c
 +++ b/drivers/gpu/drm/radeon/r600.c
 @@ -49,6 +49,7 @@
@@ -79782,7 +79799,15 @@
  		DRM_DEBUG("r600_irq_set: sw int\n");
  		cp_int_cntl |= RB_INT_ENABLE;
  		cp_int_cntl |= TIME_STAMP_INT_ENABLE;
-@@ -3465,11 +3493,11 @@ restart_ih:
+@@ -3280,7 +3308,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);
+-		wptr &= ~RB_OVERFLOW;
+ 	}
+ 	return (wptr & rdev->ih.ptr_mask);
+ }
+@@ -3466,11 +3493,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);
@@ -79796,7 +79821,7 @@
  			break;
  		case 233: /* GUI IDLE */
  			DRM_DEBUG("IH: GUI idle\n");
-@@ -3502,30 +3530,6 @@ restart_ih:
+@@ -3503,30 +3530,6 @@ restart_ih:
   */
  #if defined(CONFIG_DEBUG_FS)
  
@@ -79827,7 +79852,7 @@
  static int r600_debugfs_mc_info(struct seq_file *m, void *data)
  {
  	struct drm_info_node *node = (struct drm_info_node *) m->private;
-@@ -3539,7 +3543,6 @@ static int r600_debugfs_mc_info(struct seq_file *m, void *data)
+@@ -3540,7 +3543,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},
@@ -85307,7 +85332,7 @@
  
  #endif
 diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
-index e4e455e..6d0c32b 100644
+index 6d9c32b..6d0c32b 100644
 --- a/drivers/gpu/drm/radeon/radeon_atombios.c
 +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
 @@ -56,6 +56,10 @@ extern void
@@ -85332,6 +85357,24 @@
  		reg = EVERGREEN_DC_GPIO_HPD_A;
  	else
  		reg = AVIVO_DC_GPIO_HPD_A;
+@@ -1873,7 +1879,7 @@ static const char *thermal_controller_names[] = {
+ 	"adm1032",
+ 	"adm1030",
+ 	"max6649",
+-	"lm63", /* lm64 */
++	"lm64",
+ 	"f75375",
+ 	"asc7xxx",
+ };
+@@ -1884,7 +1890,7 @@ static const char *pp_lib_thermal_controller_names[] = {
+ 	"adm1032",
+ 	"adm1030",
+ 	"max6649",
+-	"lm63", /* lm64 */
++	"lm64",
+ 	"f75375",
+ 	"RV6xx",
+ 	"RV770",
 @@ -1895,6 +1901,8 @@ static const char *pp_lib_thermal_controller_names[] = {
  	"emc2103",
  	"Sumo",
@@ -86709,7 +86752,7 @@
  }
  #endif
 diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
-index 3291ab8..60404f4 100644
+index ad5d774..adc9bfd 100644
 --- a/drivers/gpu/drm/radeon/radeon_display.c
 +++ b/drivers/gpu/drm/radeon/radeon_display.c
 @@ -303,8 +303,17 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
@@ -86769,7 +86812,7 @@
  };
  
  static const char *connector_names[15] = {
-@@ -1084,29 +1096,36 @@ static const struct drm_framebuffer_funcs radeon_fb_funcs = {
+@@ -1089,29 +1101,36 @@ static const struct drm_framebuffer_funcs radeon_fb_funcs = {
  	.create_handle = radeon_user_framebuffer_create_handle,
  };
  
@@ -86812,7 +86855,7 @@
  		return ERR_PTR(-ENOENT);
  	}
  
-@@ -1116,7 +1135,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
+@@ -1121,7 +1140,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
  		return ERR_PTR(-ENOMEM);
  	}
  
@@ -86826,7 +86869,7 @@
  
  	return &radeon_fb->base;
  }
-@@ -1132,11 +1156,6 @@ static const struct drm_mode_config_funcs radeon_mode_funcs = {
+@@ -1137,11 +1161,6 @@ static const struct drm_mode_config_funcs radeon_mode_funcs = {
  	.output_poll_changed = radeon_output_poll_changed
  };
  
@@ -86838,7 +86881,7 @@
  static struct drm_prop_enum_list radeon_tmds_pll_enum_list[] =
  {	{ 0, "driver" },
  	{ 1, "bios" },
-@@ -1161,86 +1180,53 @@ static struct drm_prop_enum_list radeon_underscan_enum_list[] =
+@@ -1166,86 +1185,53 @@ static struct drm_prop_enum_list radeon_underscan_enum_list[] =
  
  static int radeon_modeset_create_props(struct radeon_device *rdev)
  {
@@ -86941,7 +86984,7 @@
  
  	return 0;
  }
-@@ -1286,6 +1272,9 @@ int radeon_modeset_init(struct radeon_device *rdev)
+@@ -1291,6 +1277,9 @@ int radeon_modeset_init(struct radeon_device *rdev)
  		rdev->ddev->mode_config.max_height = 4096;
  	}
  
@@ -86951,7 +86994,7 @@
  	rdev->ddev->mode_config.fb_base = rdev->mc.aper_base;
  
  	ret = radeon_modeset_create_props(rdev);
-@@ -1313,9 +1302,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
+@@ -1318,9 +1307,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
  		return ret;
  	}
  
@@ -98953,7 +98996,7 @@
  		return NULL;
  	}
 diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
-index 9e4313e..578207e 100644
+index 508c64c..578207e 100644
 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
 +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
 @@ -30,6 +30,9 @@
@@ -99008,7 +99051,38 @@
  		return 0;
  	}
  
-@@ -438,16 +434,12 @@ static int ttm_set_pages_caching(struct page **pages,
+@@ -398,18 +394,13 @@ static int ttm_pool_get_num_unused_pages(void)
+ static int ttm_pool_mm_shrink(struct shrinker *shrink,
+ 			      struct shrink_control *sc)
+ {
+-	static DEFINE_MUTEX(lock);
+-	static unsigned start_pool;
++	static atomic_t start_pool = ATOMIC_INIT(0);
+ 	unsigned i;
+-	unsigned pool_offset;
++	unsigned pool_offset = atomic_add_return(1, &start_pool);
+ 	struct ttm_page_pool *pool;
+ 	int shrink_pages = sc->nr_to_scan;
+ 
+-	if (shrink_pages == 0)
+-		goto out;
+-	if (!mutex_trylock(&lock))
+-		return -1;
+-	pool_offset = ++start_pool % NUM_POOLS;
++	pool_offset = pool_offset % NUM_POOLS;
+ 	/* select start pool in round robin fashion */
+ 	for (i = 0; i < NUM_POOLS; ++i) {
+ 		unsigned nr_free = shrink_pages;
+@@ -418,8 +409,6 @@ static int ttm_pool_mm_shrink(struct shrinker *shrink,
+ 		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
+ 		shrink_pages = ttm_page_pool_free(pool, nr_free);
+ 	}
+-	mutex_unlock(&lock);
+-out:
+ 	/* return estimated number of unused pages in pool */
+ 	return ttm_pool_get_num_unused_pages();
+ }
+@@ -445,16 +434,12 @@ static int ttm_set_pages_caching(struct page **pages,
  	case tt_uncached:
  		r = set_pages_array_uc(pages, cpages);
  		if (r)
@@ -99027,7 +99101,7 @@
  		break;
  	default:
  		break;
-@@ -492,8 +484,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
+@@ -499,8 +484,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
  	caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL);
  
  	if (!caching_array) {
@@ -99037,7 +99111,7 @@
  		return -ENOMEM;
  	}
  
-@@ -501,7 +492,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
+@@ -508,7 +492,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
  		p = alloc_page(gfp_flags);
  
  		if (!p) {
@@ -99046,7 +99120,7 @@
  
  			/* store already allocated pages in the pool after
  			 * setting the caching state */
-@@ -599,8 +590,7 @@ static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool,
+@@ -606,8 +590,7 @@ static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool,
  			++pool->nrefills;
  			pool->npages += alloc_size;
  		} else {
@@ -99056,7 +99130,7 @@
  			/* If we have any pages left put them to the pool. */
  			list_for_each_entry(p, &pool->list, lru) {
  				++cpages;
-@@ -619,8 +609,10 @@ static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool,
+@@ -626,8 +609,10 @@ static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool,
   * @return count of pages still required to fulfill the request.
   */
  static unsigned ttm_page_pool_get_pages(struct ttm_page_pool *pool,
@@ -99069,7 +99143,7 @@
  {
  	unsigned long irq_flags;
  	struct list_head *p;
-@@ -660,17 +652,63 @@ out:
+@@ -667,17 +652,63 @@ out:
  	return count;
  }
  
@@ -99136,7 +99210,7 @@
  	int r;
  
  	/* set zero flag for page allocation if required */
-@@ -684,30 +722,33 @@ int ttm_get_pages(struct list_head *pages, int flags,
+@@ -691,30 +722,33 @@ int ttm_get_pages(struct list_head *pages, int flags,
  		else
  			gfp_flags |= GFP_HIGHUSER;
  
@@ -99177,7 +99251,7 @@
  			if (PageHighMem(p))
  				clear_highpage(p);
  			else
-@@ -716,67 +757,27 @@ int ttm_get_pages(struct list_head *pages, int flags,
+@@ -723,67 +757,27 @@ int ttm_get_pages(struct list_head *pages, int flags,
  	}
  
  	/* If pool didn't have enough pages allocate new one. */
@@ -99253,7 +99327,7 @@
  static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, int flags,
  		char *name)
  {
-@@ -794,7 +795,7 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
+@@ -801,7 +795,7 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
  
  	WARN_ON(_manager);
  
@@ -99262,7 +99336,7 @@
  
  	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
  
-@@ -829,7 +830,7 @@ void ttm_page_alloc_fini(void)
+@@ -836,7 +830,7 @@ void ttm_page_alloc_fini(void)
  {
  	int i;
  
@@ -99271,7 +99345,7 @@
  	ttm_pool_mm_shrink_fini(_manager);
  
  	for (i = 0; i < NUM_POOLS; ++i)
-@@ -839,6 +840,62 @@ void ttm_page_alloc_fini(void)
+@@ -846,6 +840,62 @@ void ttm_page_alloc_fini(void)
  	_manager = NULL;
  }
  
@@ -104225,18 +104299,10 @@
  	if (unlikely(ret != 0))
  		goto out_unlock;
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
-index 907c26f..7fc3dc7 100644
+index 7f16ff2..7fc3dc7 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
-@@ -179,7 +179,6 @@ static int vmw_fb_set_par(struct fb_info *info)
- 		vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, info->var.yoffset);
- 		vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, info->var.xres);
- 		vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, info->var.yres);
--		vmw_write(vmw_priv, SVGA_REG_BYTES_PER_LINE, info->fix.line_length);
- 		vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID);
- 	}
- 
-@@ -417,10 +416,6 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
+@@ -416,10 +416,6 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
  	unsigned fb_bpp, fb_depth, fb_offset, fb_pitch, fb_size;
  	int ret;
  
@@ -104247,7 +104313,7 @@
  	fb_bpp = 32;
  	fb_depth = 24;
  
-@@ -428,8 +423,8 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
+@@ -427,8 +423,8 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
  	fb_width = min(vmw_priv->fb_max_width, (unsigned)2048);
  	fb_height = min(vmw_priv->fb_max_height, (unsigned)2048);
  
@@ -104258,7 +104324,7 @@
  
  	fb_pitch = fb_width * fb_bpp / 8;
  	fb_size = fb_pitch * fb_height;
-@@ -518,19 +513,7 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
+@@ -517,19 +513,7 @@ int vmw_fb_init(struct vmw_private *vmw_priv)
  	info->var.xres = initial_width;
  	info->var.yres = initial_height;
  

Modified: dists/wheezy/linux/debian/patches/features/all/igb/0008-igb-add-basic-runtime-PM-support.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/igb/0008-igb-add-basic-runtime-PM-support.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/all/igb/0008-igb-add-basic-runtime-PM-support.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -18,13 +18,13 @@
 Tested-by: Aaron Brown <aaron.f.brown at intel.com>
 Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
 Signed-off-by: David S. Miller <davem at davemloft.net>
+[bwh: Adjust to apply after backported commit 76252723e886
+ 'igb: do a reset on SR-IOV re-init if device is down']
 ---
  drivers/net/ethernet/intel/igb/igb_ethtool.c |  16 ++++
  drivers/net/ethernet/intel/igb/igb_main.c    | 136 +++++++++++++++++++++++----
  2 files changed, 133 insertions(+), 19 deletions(-)
 
-diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
-index 40110c5..75a560c 100644
 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
 +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
 @@ -36,6 +36,7 @@
@@ -35,7 +35,7 @@
  
  #include "igb.h"
  
-@@ -2168,6 +2169,19 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
+@@ -2168,6 +2169,19 @@ static void igb_get_strings(struct net_d
  	}
  }
  
@@ -55,7 +55,7 @@
  static const struct ethtool_ops igb_ethtool_ops = {
  	.get_settings           = igb_get_settings,
  	.set_settings           = igb_set_settings,
-@@ -2194,6 +2208,8 @@ static const struct ethtool_ops igb_ethtool_ops = {
+@@ -2194,6 +2208,8 @@ static const struct ethtool_ops igb_etht
  	.get_ethtool_stats      = igb_get_ethtool_stats,
  	.get_coalesce           = igb_get_coalesce,
  	.set_coalesce           = igb_set_coalesce,
@@ -64,8 +64,6 @@
  };
  
  void igb_set_ethtool_ops(struct net_device *netdev)
-diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
-index 2706d41..4527f7f 100644
 --- a/drivers/net/ethernet/intel/igb/igb_main.c
 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
 @@ -53,6 +53,7 @@
@@ -76,7 +74,7 @@
  #ifdef CONFIG_IGB_DCA
  #include <linux/dca.h>
  #endif
-@@ -172,8 +173,18 @@ static int igb_check_vf_assignment(struct igb_adapter *adapter);
+@@ -172,8 +173,18 @@ static int igb_check_vf_assignment(struc
  #endif
  
  #ifdef CONFIG_PM
@@ -108,7 +106,7 @@
  #endif
  	.shutdown = igb_shutdown,
  	.err_handler = &igb_err_handler
-@@ -2121,6 +2130,8 @@ static int __devinit igb_probe(struct pci_dev *pdev,
+@@ -2121,6 +2130,8 @@ static int __devinit igb_probe(struct pc
  	default:
  		break;
  	}
@@ -117,7 +115,7 @@
  	return 0;
  
  err_register:
-@@ -2160,6 +2171,8 @@ static void __devexit igb_remove(struct pci_dev *pdev)
+@@ -2160,6 +2171,8 @@ static void __devexit igb_remove(struct
  	struct igb_adapter *adapter = netdev_priv(netdev);
  	struct e1000_hw *hw = &adapter->hw;
  
@@ -126,7 +124,7 @@
  	/*
  	 * The watchdog timer may be rescheduled, so explicitly
  	 * disable watchdog from being rescheduled.
-@@ -2482,16 +2495,22 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
+@@ -2482,16 +2495,22 @@ static int __devinit igb_sw_init(struct
   * handler is registered with the OS, the watchdog timer is started,
   * and the stack is notified that the interface is ready.
   **/
@@ -151,7 +149,7 @@
  
  	netif_carrier_off(netdev);
  
-@@ -2537,6 +2556,9 @@ static int igb_open(struct net_device *netdev)
+@@ -2537,6 +2556,9 @@ static int igb_open(struct net_device *n
  
  	netif_tx_start_all_queues(netdev);
  
@@ -214,7 +212,7 @@
  /**
   * igb_setup_tx_resources - allocate Tx resources (Descriptors)
   * @tx_ring: tx descriptor ring (for a specific queue) to setup
-@@ -3642,6 +3682,9 @@ static void igb_watchdog_task(struct work_struct *work)
+@@ -3642,6 +3682,9 @@ static void igb_watchdog_task(struct wor
  
  	link = igb_has_link(adapter);
  	if (link) {
@@ -224,7 +222,7 @@
  		if (!netif_carrier_ok(netdev)) {
  			u32 ctrl;
  			hw->mac.ops.get_speed_and_duplex(hw,
-@@ -3713,6 +3756,9 @@ static void igb_watchdog_task(struct work_struct *work)
+@@ -3713,6 +3756,9 @@ static void igb_watchdog_task(struct wor
  			if (!test_bit(__IGB_DOWN, &adapter->state))
  				mod_timer(&adapter->phy_info_timer,
  					  round_jiffies(jiffies + 2 * HZ));
@@ -251,16 +249,16 @@
  #ifdef CONFIG_PM
  	int retval = 0;
  #endif
-@@ -6612,7 +6659,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake)
+@@ -6612,7 +6659,7 @@ static int __igb_shutdown(struct pci_dev
  	netif_device_detach(netdev);
  
  	if (netif_running(netdev))
 -		igb_close(netdev);
 +		__igb_close(netdev, true);
+ 	else
+ 		igb_reset(adapter);
  
- 	igb_clear_interrupt_scheme(adapter);
- 
-@@ -6671,12 +6718,13 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake)
+@@ -6673,12 +6720,13 @@ static int __igb_shutdown(struct pci_dev
  }
  
  #ifdef CONFIG_PM
@@ -276,7 +274,7 @@
  	if (retval)
  		return retval;
  
-@@ -6690,8 +6738,9 @@ static int igb_suspend(struct pci_dev *pdev, pm_message_t state)
+@@ -6692,8 +6740,9 @@ static int igb_suspend(struct pci_dev *p
  	return 0;
  }
  
@@ -287,7 +285,7 @@
  	struct net_device *netdev = pci_get_drvdata(pdev);
  	struct igb_adapter *adapter = netdev_priv(netdev);
  	struct e1000_hw *hw = &adapter->hw;
-@@ -6712,7 +6761,18 @@ static int igb_resume(struct pci_dev *pdev)
+@@ -6714,7 +6763,18 @@ static int igb_resume(struct pci_dev *pd
  	pci_enable_wake(pdev, PCI_D3hot, 0);
  	pci_enable_wake(pdev, PCI_D3cold, 0);
  
@@ -307,7 +305,7 @@
  		dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
  		return -ENOMEM;
  	}
-@@ -6725,23 +6785,61 @@ static int igb_resume(struct pci_dev *pdev)
+@@ -6727,23 +6787,61 @@ static int igb_resume(struct pci_dev *pd
  
  	wr32(E1000_WUS, ~0);
  

Modified: dists/wheezy/linux/debian/patches/features/all/rt/0180-mutex-no-spin-on-rt.patch.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/all/rt/0180-mutex-no-spin-on-rt.patch.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/all/rt/0180-mutex-no-spin-on-rt.patch.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -4,17 +4,17 @@
 Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=6f372b425516d80347ddb16c9d0c99de748cd4bc
 
 Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+[bwh: Adjust to apply after backported commit 4badad352a6b
+ 'locking/mutex: Disable optimistic spinning on some architectures']
 ---
  kernel/Kconfig.locks | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/kernel/Kconfig.locks b/kernel/Kconfig.locks
-index 5068e2a..7bd0598 100644
 --- a/kernel/Kconfig.locks
 +++ b/kernel/Kconfig.locks
-@@ -199,4 +199,4 @@ config INLINE_WRITE_UNLOCK_IRQRESTORE
- 	def_bool !DEBUG_SPINLOCK && ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
+@@ -203,4 +203,4 @@ config ARCH_SUPPORTS_ATOMIC_RMW
  
  config MUTEX_SPIN_ON_OWNER
--	def_bool SMP && !DEBUG_MUTEXES
-+	def_bool SMP && !DEBUG_MUTEXES && !PREEMPT_RT_FULL
+ 	def_bool y
+-	depends on SMP && !DEBUG_MUTEXES && ARCH_SUPPORTS_ATOMIC_RMW
++	depends on SMP && !DEBUG_MUTEXES && ARCH_SUPPORTS_ATOMIC_RMW && !PREEMPT_RT_FULL

Modified: dists/wheezy/linux/debian/patches/features/arm/net-drop-NET-dependency-from-HAVE_BPF_JIT.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/arm/net-drop-NET-dependency-from-HAVE_BPF_JIT.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/arm/net-drop-NET-dependency-from-HAVE_BPF_JIT.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -24,11 +24,9 @@
  net/Kconfig          |    7 ++++---
  5 files changed, 8 insertions(+), 7 deletions(-)
 
-Index: linux/arch/arm/Kconfig
-===================================================================
---- linux.orig/arch/arm/Kconfig	2012-06-24 23:41:24.000000000 +0200
-+++ linux/arch/arm/Kconfig	2012-06-24 23:49:03.000000000 +0200
-@@ -30,7 +30,7 @@
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -30,7 +30,7 @@ config ARM
  	select HAVE_SPARSE_IRQ
  	select GENERIC_IRQ_SHOW
  	select CPU_PM if (SUSPEND || CPU_IDLE)
@@ -37,11 +35,9 @@
  	help
  	  The ARM series is a line of low-power-consumption RISC chip designs
  	  licensed by ARM Ltd and targeted at embedded applications and
-Index: linux/arch/powerpc/Kconfig
-===================================================================
---- linux.orig/arch/powerpc/Kconfig	2012-06-20 00:18:30.000000000 +0200
-+++ linux/arch/powerpc/Kconfig	2012-06-24 23:49:03.000000000 +0200
-@@ -134,7 +134,7 @@
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -134,7 +134,7 @@ config PPC
  	select GENERIC_IRQ_SHOW_LEVEL
  	select HAVE_RCU_TABLE_FREE if SMP
  	select HAVE_SYSCALL_TRACEPOINTS
@@ -49,12 +45,10 @@
 +	select HAVE_BPF_JIT if PPC64
  	select HAVE_ARCH_JUMP_LABEL
  	select ARCH_HAVE_NMI_SAFE_CMPXCHG
- 
-Index: linux/arch/x86/Kconfig
-===================================================================
---- linux.orig/arch/x86/Kconfig	2012-06-23 17:09:51.000000000 +0200
-+++ linux/arch/x86/Kconfig	2012-06-24 23:49:03.000000000 +0200
-@@ -72,7 +72,7 @@
+ 	select ARCH_SUPPORTS_ATOMIC_RMW
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -72,7 +72,7 @@ config X86
  	select GENERIC_CLOCKEVENTS_MIN_ADJUST
  	select IRQ_FORCED_THREADING
  	select USE_GENERIC_SMP_HELPERS if SMP
@@ -62,12 +56,10 @@
 +	select HAVE_BPF_JIT if X86_64
  	select CLKEVT_I8253
  	select ARCH_HAVE_NMI_SAFE_CMPXCHG
- 
-Index: linux/net/Kconfig
-===================================================================
---- linux.orig/net/Kconfig	2012-06-20 00:18:30.000000000 +0200
-+++ linux/net/Kconfig	2012-06-24 23:49:03.000000000 +0200
-@@ -232,9 +232,6 @@
+ 	select ARCH_SUPPORTS_ATOMIC_RMW
+--- a/net/Kconfig
++++ b/net/Kconfig
+@@ -232,9 +232,6 @@ config XPS
  	depends on SMP && SYSFS && USE_GENERIC_SMP_HELPERS
  	default y
  
@@ -77,7 +69,7 @@
  config BPF_JIT
  	bool "enable BPF Just In Time compiler"
  	depends on HAVE_BPF_JIT
-@@ -326,3 +323,7 @@
+@@ -326,3 +323,7 @@ source "net/nfc/Kconfig"
  
  
  endif   # if NET

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0003-Staging-hv-storvsc-Use-mempools-to-allocate-struct-s.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0003-Staging-hv-storvsc-Use-mempools-to-allocate-struct-s.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0003-Staging-hv-storvsc-Use-mempools-to-allocate-struct-s.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -11,12 +11,12 @@
 Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
 Signed-off-by: Haiyang Zhang <haiyangz at microsoft.com>
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+[bwh: Adjusted to apply after backported commit 56b26e69c828
+ 'Drivers: scsi: storvsc: Implement a eh_timed_out handler'
 ---
  drivers/staging/hv/storvsc_drv.c |   30 +++++++++++++++++++++++++-----
  1 file changed, 25 insertions(+), 5 deletions(-)
 
-diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
-index ae8c33e..6a255e9 100644
 --- a/drivers/staging/hv/storvsc_drv.c
 +++ b/drivers/staging/hv/storvsc_drv.c
 @@ -32,6 +32,7 @@
@@ -24,10 +24,10 @@
  #include <linux/device.h>
  #include <linux/hyperv.h>
 +#include <linux/mempool.h>
+ #include <linux/blkdev.h>
  #include <scsi/scsi.h>
  #include <scsi/scsi_cmnd.h>
- #include <scsi/scsi_host.h>
-@@ -42,6 +43,7 @@
+@@ -43,6 +44,7 @@
  #include <scsi/scsi_dbg.h>
  
  
@@ -35,7 +35,7 @@
  #define STORVSC_RING_BUFFER_SIZE			(20*PAGE_SIZE)
  static int storvsc_ringbuffer_size = STORVSC_RING_BUFFER_SIZE;
  
-@@ -287,6 +289,7 @@ struct storvsc_device {
+@@ -288,6 +290,7 @@ struct storvsc_device {
  struct hv_host_device {
  	struct hv_device *dev;
  	struct kmem_cache *request_pool;
@@ -43,7 +43,7 @@
  	unsigned int port;
  	unsigned char path;
  	unsigned char target;
-@@ -974,8 +977,10 @@ static int storvsc_remove(struct hv_device *dev)
+@@ -976,8 +979,10 @@ static int storvsc_remove(struct hv_devi
  
  	storvsc_dev_remove(dev);
  	if (host_dev->request_pool) {
@@ -54,7 +54,7 @@
  	}
  	return 0;
  }
-@@ -1120,7 +1125,7 @@ static void storvsc_command_completion(struct hv_storvsc_request *request)
+@@ -1127,7 +1132,7 @@ static void storvsc_command_completion(s
  
  	scsi_done_fn(scmnd);
  
@@ -62,8 +62,8 @@
 +	mempool_free(cmd_request, host_dev->request_mempool);
  }
  
- static bool storvsc_check_scsi_cmd(struct scsi_cmnd *scmnd)
-@@ -1176,12 +1181,13 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
+ /*
+@@ -1193,12 +1198,13 @@ static int storvsc_queuecommand_lck(stru
  
  	request_size = sizeof(struct storvsc_cmd_request);
  
@@ -78,7 +78,7 @@
  
  	/* Setup the cmd request */
  	cmd_request->bounce_sgl_count = 0;
-@@ -1235,8 +1241,8 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
+@@ -1252,8 +1258,8 @@ static int storvsc_queuecommand_lck(stru
  			if (!cmd_request->bounce_sgl) {
  				scmnd->scsi_done = NULL;
  				scmnd->host_scribble = NULL;
@@ -89,7 +89,7 @@
  
  				return SCSI_MLQUEUE_HOST_BUSY;
  			}
-@@ -1278,7 +1284,7 @@ retry_request:
+@@ -1295,7 +1301,7 @@ retry_request:
  			destroy_bounce_buffer(cmd_request->bounce_sgl,
  					cmd_request->bounce_sgl_count);
  
@@ -98,7 +98,7 @@
  
  		scmnd->scsi_done = NULL;
  		scmnd->host_scribble = NULL;
-@@ -1348,6 +1354,7 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1366,6 +1372,7 @@ static int storvsc_probe(struct hv_devic
  			const struct hv_vmbus_device_id *dev_id)
  {
  	int ret;
@@ -106,7 +106,7 @@
  	struct Scsi_Host *host;
  	struct hv_host_device *host_dev;
  	bool dev_is_ide = ((dev_id->driver_data == IDE_GUID) ? true : false);
-@@ -1376,8 +1383,19 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1394,8 +1401,19 @@ static int storvsc_probe(struct hv_devic
  		return -ENOMEM;
  	}
  
@@ -126,7 +126,7 @@
  		kmem_cache_destroy(host_dev->request_pool);
  		scsi_host_put(host);
  		return -ENOMEM;
-@@ -1392,6 +1410,7 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1410,6 +1428,7 @@ static int storvsc_probe(struct hv_devic
  	stor_device->port_number = host->host_no;
  	ret = storvsc_connect_to_vsp(device, storvsc_ringbuffer_size);
  	if (ret) {
@@ -134,7 +134,7 @@
  		kmem_cache_destroy(host_dev->request_pool);
  		scsi_host_put(host);
  		kfree(stor_device);
-@@ -1431,6 +1450,7 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1449,6 +1468,7 @@ static int storvsc_probe(struct hv_devic
  
  err_out:
  	storvsc_dev_remove(device);
@@ -142,6 +142,3 @@
  	kmem_cache_destroy(host_dev->request_pool);
  	scsi_host_put(host);
  	return -ENODEV;
--- 
-1.7.9.5
-

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0025-Staging-hv-storvsc-Implement-per-device-memory-pools.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0025-Staging-hv-storvsc-Implement-per-device-memory-pools.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0025-Staging-hv-storvsc-Implement-per-device-memory-pools.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -18,11 +18,9 @@
  drivers/staging/hv/storvsc_drv.c |  106 ++++++++++++++++++++++----------------
  1 file changed, 62 insertions(+), 44 deletions(-)
 
-diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
-index c22de06..18f8771 100644
 --- a/drivers/staging/hv/storvsc_drv.c
 +++ b/drivers/staging/hv/storvsc_drv.c
-@@ -285,10 +285,13 @@ struct storvsc_device {
+@@ -286,10 +286,13 @@ struct storvsc_device {
  	struct hv_storvsc_request reset_request;
  };
  
@@ -38,7 +36,7 @@
  	unsigned int port;
  	unsigned char path;
  	unsigned char target;
-@@ -790,7 +793,48 @@ static void storvsc_get_ide_info(struct hv_device *dev, int *target, int *path)
+@@ -791,7 +794,48 @@ static void storvsc_get_ide_info(struct
  
  static int storvsc_device_alloc(struct scsi_device *sdevice)
  {
@@ -87,7 +85,7 @@
  }
  
  static int storvsc_device_configure(struct scsi_device *sdevice)
-@@ -1031,19 +1075,13 @@ static int storvsc_remove(struct hv_device *dev)
+@@ -1033,19 +1077,13 @@ static int storvsc_remove(struct hv_devi
  {
  	struct storvsc_device *stor_device = hv_get_drvdata(dev);
  	struct Scsi_Host *host = stor_device->host;
@@ -108,7 +106,7 @@
  	return 0;
  }
  
-@@ -1139,6 +1177,7 @@ static void storvsc_command_completion(struct hv_storvsc_request *request)
+@@ -1146,6 +1184,7 @@ static void storvsc_command_completion(s
  	struct scsi_sense_hdr sense_hdr;
  	struct vmscsi_request *vm_srb;
  	struct storvsc_scan_work *wrk;
@@ -116,7 +114,7 @@
  
  	vm_srb = &request->vstor_packet.vm_srb;
  	if (cmd_request->bounce_sgl_count) {
-@@ -1201,7 +1240,7 @@ static void storvsc_command_completion(struct hv_storvsc_request *request)
+@@ -1208,7 +1247,7 @@ static void storvsc_command_completion(s
  
  	scsi_done_fn(scmnd);
  
@@ -124,8 +122,8 @@
 +	mempool_free(cmd_request, memp->request_mempool);
  }
  
- static bool storvsc_check_scsi_cmd(struct scsi_cmnd *scmnd)
-@@ -1236,6 +1275,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+ /*
+@@ -1253,6 +1292,7 @@ static int storvsc_queuecommand(struct S
  	struct scatterlist *sgl;
  	unsigned int sg_count = 0;
  	struct vmscsi_request *vm_srb;
@@ -133,7 +131,7 @@
  
  	if (storvsc_check_scsi_cmd(scmnd) == false) {
  		scmnd->scsi_done(scmnd);
-@@ -1253,7 +1293,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+@@ -1270,7 +1310,7 @@ static int storvsc_queuecommand(struct S
  
  	request_size = sizeof(struct storvsc_cmd_request);
  
@@ -142,7 +140,7 @@
  				       GFP_ATOMIC);
  	if (!cmd_request)
  		return SCSI_MLQUEUE_DEVICE_BUSY;
-@@ -1312,7 +1352,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+@@ -1329,7 +1369,7 @@ static int storvsc_queuecommand(struct S
  			if (!cmd_request->bounce_sgl) {
  				scmnd->host_scribble = NULL;
  				mempool_free(cmd_request,
@@ -151,7 +149,7 @@
  
  				return SCSI_MLQUEUE_HOST_BUSY;
  			}
-@@ -1354,7 +1394,7 @@ retry_request:
+@@ -1371,7 +1411,7 @@ retry_request:
  			destroy_bounce_buffer(cmd_request->bounce_sgl,
  					cmd_request->bounce_sgl_count);
  
@@ -160,15 +158,15 @@
  
  		scmnd->host_scribble = NULL;
  
-@@ -1372,6 +1412,7 @@ static struct scsi_host_template scsi_driver = {
- 	.queuecommand =		storvsc_queuecommand,
+@@ -1390,6 +1430,7 @@ static struct scsi_host_template scsi_dr
  	.eh_host_reset_handler =	storvsc_host_reset_handler,
+ 	.eh_timed_out =		storvsc_eh_timed_out,
  	.slave_alloc =		storvsc_device_alloc,
 +	.slave_destroy =	storvsc_device_destroy,
  	.slave_configure =	storvsc_device_configure,
  	.cmd_per_lun =		1,
  	/* 64 max_queue * 1 target */
-@@ -1413,7 +1454,6 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1431,7 +1472,6 @@ static int storvsc_probe(struct hv_devic
  			const struct hv_vmbus_device_id *dev_id)
  {
  	int ret;
@@ -176,7 +174,7 @@
  	struct Scsi_Host *host;
  	struct hv_host_device *host_dev;
  	bool dev_is_ide = ((dev_id->driver_data == IDE_GUID) ? true : false);
-@@ -1432,29 +1472,11 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1450,29 +1490,11 @@ static int storvsc_probe(struct hv_devic
  	host_dev->port = host->host_no;
  	host_dev->dev = device;
  
@@ -207,7 +205,7 @@
  	}
  
  	stor_device->destroy = false;
-@@ -1466,7 +1488,7 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1484,7 +1506,7 @@ static int storvsc_probe(struct hv_devic
  	stor_device->port_number = host->host_no;
  	ret = storvsc_connect_to_vsp(device, storvsc_ringbuffer_size);
  	if (ret)
@@ -216,7 +214,7 @@
  
  	if (dev_is_ide)
  		storvsc_get_ide_info(device, &target, &path);
-@@ -1486,7 +1508,7 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1504,7 +1526,7 @@ static int storvsc_probe(struct hv_devic
  	/* Register the HBA and start the scsi bus scan */
  	ret = scsi_add_host(host, &device->device);
  	if (ret != 0)
@@ -225,7 +223,7 @@
  
  	if (!dev_is_ide) {
  		scsi_scan_host(host);
-@@ -1495,28 +1517,24 @@ static int storvsc_probe(struct hv_device *device,
+@@ -1513,28 +1535,24 @@ static int storvsc_probe(struct hv_devic
  	ret = scsi_add_device(host, 0, target, 0);
  	if (ret) {
  		scsi_remove_host(host);
@@ -259,6 +257,3 @@
  	scsi_host_put(host);
  	return ret;
  }
--- 
-1.7.9.5
-

Modified: dists/wheezy/linux/debian/patches/features/x86/hyperv/0050-Staging-hv-storvsc-Cleanup-storvsc_queuecommand.patch
==============================================================================
--- dists/wheezy/linux/debian/patches/features/x86/hyperv/0050-Staging-hv-storvsc-Cleanup-storvsc_queuecommand.patch	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0050-Staging-hv-storvsc-Cleanup-storvsc_queuecommand.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -14,12 +14,10 @@
  drivers/staging/hv/storvsc_drv.c |   48 +++++++++++++++++---------------------
  1 file changed, 22 insertions(+), 26 deletions(-)
 
-diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
-index 7561d29..71e50c3 100644
 --- a/drivers/staging/hv/storvsc_drv.c
 +++ b/drivers/staging/hv/storvsc_drv.c
-@@ -1239,13 +1239,16 @@ static void storvsc_command_completion(struct hv_storvsc_request *request)
- 	mempool_free(cmd_request, memp->request_mempool);
+@@ -1256,13 +1256,16 @@ static enum blk_eh_timer_return storvsc_
+ 	return BLK_EH_RESET_TIMER;
  }
  
 -static bool storvsc_check_scsi_cmd(struct scsi_cmnd *scmnd)
@@ -37,7 +35,7 @@
  	case SET_WINDOW:
  		scmnd->result = ILLEGAL_REQUEST << 16;
  		allowed = false;
-@@ -1270,32 +1273,26 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+@@ -1287,32 +1290,26 @@ static int storvsc_queuecommand(struct S
  	struct vmscsi_request *vm_srb;
  	struct stor_mem_pools *memp = scmnd->device->hostdata;
  
@@ -76,7 +74,7 @@
  	cmd_request->cmd = scmnd;
  
  	scmnd->host_scribble = (unsigned char *)cmd_request;
-@@ -1344,11 +1341,8 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+@@ -1361,11 +1358,8 @@ static int storvsc_queuecommand(struct S
  						     scsi_bufflen(scmnd),
  						     vm_srb->data_in);
  			if (!cmd_request->bounce_sgl) {
@@ -90,7 +88,7 @@
  			}
  
  			cmd_request->bounce_sgl_count =
-@@ -1377,24 +1371,26 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+@@ -1394,24 +1388,26 @@ static int storvsc_queuecommand(struct S
  			virt_to_phys(scsi_sglist(scmnd)) >> PAGE_SHIFT;
  	}
  
@@ -124,6 +122,3 @@
  	return ret;
  }
  
--- 
-1.7.9.5
-

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	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0055-Staging-hv-storvsc-Get-rid-of-the-on_io_completion-i.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -10,15 +10,17 @@
 
 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 commit 9d2696e658ef
- '[SCSI] storvsc: Initialize the sglist']
+[bwh: Adjusted to apply after backported commits 9d2696e658ef
+ '[SCSI] storvsc: Initialize the sglist' and 56b26e69c828
+ 'Drivers: scsi: storvsc: Implement a eh_timed_out handler']
+
 ---
  drivers/staging/hv/storvsc_drv.c |  630 +++++++++++++++++++-------------------
  1 file changed, 313 insertions(+), 317 deletions(-)
 
 --- a/drivers/staging/hv/storvsc_drv.c
 +++ b/drivers/staging/hv/storvsc_drv.c
-@@ -276,7 +276,6 @@ struct hv_storvsc_request {
+@@ -277,7 +277,6 @@ struct hv_storvsc_request {
  
  	unsigned char *sense_buffer;
  	void *context;
@@ -26,7 +28,7 @@
  	struct hv_multipage_buffer data_buffer;
  
  	struct vstor_packet vstor_packet;
-@@ -436,6 +435,228 @@ get_in_err:
+@@ -437,6 +436,228 @@ get_in_err:
  
  }
  
@@ -255,7 +257,7 @@
  static int storvsc_channel_init(struct hv_device *device)
  {
  	struct storvsc_device *stor_device;
-@@ -562,23 +783,100 @@ cleanup:
+@@ -563,23 +784,100 @@ cleanup:
  	return ret;
  }
  
@@ -369,7 +371,7 @@
  	 * We do this so we can distinguish truly fatal failues
  	 * (srb status == 0x4) and off-line the device in that case.
  	 */
-@@ -625,7 +923,7 @@ static void storvsc_on_io_completion(str
+@@ -626,7 +924,7 @@ static void storvsc_on_io_completion(str
  	stor_pkt->vm_srb.data_transfer_length =
  	vstor_packet->vm_srb.data_transfer_length;
  
@@ -378,7 +380,7 @@
  
  	if (atomic_dec_and_test(&stor_device->num_outstanding_req) &&
  		stor_device->drain_notify)
-@@ -875,230 +1173,6 @@ static int storvsc_device_configure(stru
+@@ -876,230 +1174,6 @@ static int storvsc_device_configure(stru
  	return 0;
  }
  
@@ -609,7 +611,7 @@
  static int storvsc_get_chs(struct scsi_device *sdev, struct block_device * bdev,
  			   sector_t capacity, int *info)
  {
-@@ -1172,83 +1246,6 @@ static int storvsc_host_reset_handler(st
+@@ -1173,83 +1247,6 @@ static int storvsc_host_reset_handler(st
  	return SUCCESS;
  }
  
@@ -690,10 +692,10 @@
 -	mempool_free(cmd_request, memp->request_mempool);
 -}
 -
- static bool storvsc_scsi_cmd_ok(struct scsi_cmnd *scmnd)
- {
- 	bool allowed = true;
-@@ -1324,7 +1321,6 @@ static int storvsc_queuecommand(struct S
+ /*
+  * 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
  		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	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/features/x86/hyperv/0067-Staging-hv-storvsc-Move-the-storage-driver-out-of-th.patch	Tue Sep 16 13:18:33 2014	(r21851)
@@ -21,7 +21,8 @@
 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']
+ 9d2696e658ef '[SCSI] storvsc: Initialize the sglist' and 56b26e69c828
+ 'Drivers: scsi: storvsc: Implement a eh_timed_out handler']
 ---
 --- a/drivers/scsi/Kconfig
 +++ b/drivers/scsi/Kconfig
@@ -60,7 +61,7 @@
  sd_mod-objs	:= sd.o
 --- /dev/null
 +++ b/drivers/scsi/storvsc_drv.c
-@@ -0,0 +1,1554 @@
+@@ -0,0 +1,1566 @@
 +/*
 + * Copyright (c) 2009, Microsoft Corporation.
 + *
@@ -96,6 +97,7 @@
 +#include <linux/device.h>
 +#include <linux/hyperv.h>
 +#include <linux/mempool.h>
++#include <linux/blkdev.h>
 +#include <scsi/scsi.h>
 +#include <scsi/scsi_cmnd.h>
 +#include <scsi/scsi_host.h>
@@ -1285,6 +1287,16 @@
 +	return SUCCESS;
 +}
 +
++/*
++ * 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
++ * chance to perform EH.
++ */
++static enum blk_eh_timer_return storvsc_eh_timed_out(struct scsi_cmnd *scmnd)
++{
++	return BLK_EH_RESET_TIMER;
++}
++
 +static bool storvsc_scsi_cmd_ok(struct scsi_cmnd *scmnd)
 +{
 +	bool allowed = true;
@@ -1442,6 +1454,7 @@
 +	.bios_param =		storvsc_get_chs,
 +	.queuecommand =		storvsc_queuecommand,
 +	.eh_host_reset_handler =	storvsc_host_reset_handler,
++	.eh_timed_out =		storvsc_eh_timed_out,
 +	.slave_alloc =		storvsc_device_alloc,
 +	.slave_destroy =	storvsc_device_destroy,
 +	.slave_configure =	storvsc_device_configure,
@@ -1660,7 +1673,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,1554 +0,0 @@
+@@ -1,1566 +0,0 @@
 -/*
 - * Copyright (c) 2009, Microsoft Corporation.
 - *
@@ -1696,6 +1709,7 @@
 -#include <linux/device.h>
 -#include <linux/hyperv.h>
 -#include <linux/mempool.h>
+-#include <linux/blkdev.h>
 -#include <scsi/scsi.h>
 -#include <scsi/scsi_cmnd.h>
 -#include <scsi/scsi_host.h>
@@ -2885,6 +2899,16 @@
 -	return SUCCESS;
 -}
 -
+-/*
+- * 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
+- * chance to perform EH.
+- */
+-static enum blk_eh_timer_return storvsc_eh_timed_out(struct scsi_cmnd *scmnd)
+-{
+-	return BLK_EH_RESET_TIMER;
+-}
+-
 -static bool storvsc_scsi_cmd_ok(struct scsi_cmnd *scmnd)
 -{
 -	bool allowed = true;
@@ -3042,6 +3066,7 @@
 -	.bios_param =		storvsc_get_chs,
 -	.queuecommand =		storvsc_queuecommand,
 -	.eh_host_reset_handler =	storvsc_host_reset_handler,
+-	.eh_timed_out =		storvsc_eh_timed_out,
 -	.slave_alloc =		storvsc_device_alloc,
 -	.slave_destroy =	storvsc_device_destroy,
 -	.slave_configure =	storvsc_device_configure,

Modified: dists/wheezy/linux/debian/patches/series
==============================================================================
--- dists/wheezy/linux/debian/patches/series	Tue Sep 16 07:23:21 2014	(r21850)
+++ dists/wheezy/linux/debian/patches/series	Tue Sep 16 13:18:33 2014	(r21851)
@@ -48,7 +48,6 @@
 bugfix/all/snapshot-Implement-compat_ioctl.patch
 debian/ARM-Remove-use-of-possibly-undefined-BUILD_BUG_ON-in.patch
 bugfix/arm/ARM-topdown-mmap.patch
-bugfix/alpha/alpha-add-io-read-write-16-32-be-functions.patch
 features/arm/ARM-kirkwood-6282A1.patch
 features/all/Input-ALPS-move-protocol-information-to-Documentatio.patch
 features/all/Input-ALPS-add-protocol-version-field-in-alps_model_.patch
@@ -1124,11 +1123,10 @@
 
 # CVE-2014-4699
 
-bugfix/all/revert-net-ipv4-ip_forward-fix-inverted-local_df-tes.patch
-bugfix/all/revert-net-ip-ipv6-handle-gso-skbs-in-forwarding-pat.patch
-bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch
-bugfix/s390/s390-ptrace-fix-PSW-mask-check.patch
 debian/irq-avoid-abi-change-in-3.2.61.patch
 debian/ptrace-avoid-abi-change-in-3.2.61.patch
 debian/trace-syscall-avoid-abi-change-in-3.2.61.patch
 debian/scsi-avoid-abi-change-in-3.2.61.patch
+debian/libata-avoid-abi-change-in-3.2.62.patch
+debian/ip-ident-avoid-abi-change-in-3.2.63.patch
+debian/scsi-avoid-abi-change-in-3.2.62.patch



More information about the Kernel-svn-changes mailing list