diff --git a/debian/changelog b/debian/changelog index 75a6d8ef8..e705551f5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -97,6 +97,36 @@ linux (3.13~rc6-1~exp1) experimental; urgency=low -- Ben Hutchings Mon, 30 Dec 2013 02:36:11 +0100 +linux (3.12.9-1) unstable; urgency=high + + * New upstream stable update: + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.9 + - Revert "ACPI: Add BayTrail SoC GPIO and LPSS ACPI IDs" + (regression in 3.12.7) + - GFS2: Increase i_writecount during gfs2_setattr_chown + - vfs: Fix a regression in mounting proc (regression in 3.12) + - fork: Allow CLONE_PARENT after setns(CLONE_NEWPID) (regression in 3.12) + - i2c: Re-instate body of i2c_parent_is_i2c_adapter() (regression in 3.12) + - writeback: Fix data corruption on NFS + - thp: fix copy_page_rep GPF by testing is_huge_zero_pmd once only + - [x86] ftrace: Load ftrace_ops in parameter not the variable holding it + - nilfs2: fix segctor bug that causes file system corruption + - md: fix problem when adding device to read-only array with bitmap. + - md/raid10: fix bug when raid10 recovery fails to recover a block. + - md/raid10: fix two bugs in handling of known-bad-blocks. + - md/raid5: Fix possible confusion when multiple write errors occur. + - mm: Make {,set}page_address() static inline if WANT_PAGE_VIRTUAL + (fixes FTBFS on sparc and m68k) + - [x86] drm/i915: Don't grab crtc mutexes in intel_modeset_gem_init() + (regression in 3.12.7) + - [arm] 7938/1: OMAP4/highbank: Flush L2 cache before disabling + + [ Ben Hutchings ] + * HID: Enable HID_ELO, HID_XINMO as modules (Closes: #736369) + * xhci: Revert generalised sg support (Closes: #733826, #736274) + + -- Ben Hutchings Sat, 01 Feb 2014 18:50:01 +0100 + linux (3.12.8-1) unstable; urgency=medium * New upstream stable update: diff --git a/debian/config/config b/debian/config/config index cffb4799b..343764c43 100644 --- a/debian/config/config +++ b/debian/config/config @@ -503,6 +503,7 @@ CONFIG_HID_DRAGONRISE=m CONFIG_DRAGONRISE_FF=y CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m +CONFIG_HID_ELO=m CONFIG_HID_EZKEY=y CONFIG_HID_HOLTEK=m CONFIG_HOLTEK_FF=y @@ -557,6 +558,7 @@ CONFIG_HID_THRUSTMASTER=m CONFIG_THRUSTMASTER_FF=y CONFIG_HID_WACOM=m CONFIG_HID_WIIMOTE=m +CONFIG_HID_XINMO=m CONFIG_HID_ZEROPLUS=m CONFIG_ZEROPLUS_FF=y CONFIG_HID_ZYDACRON=m diff --git a/debian/patches/bugfix/all/xhci-revert-generalised-sg-support.patch b/debian/patches/bugfix/all/xhci-revert-generalised-sg-support.patch new file mode 100644 index 000000000..a4d3ab8d2 --- /dev/null +++ b/debian/patches/bugfix/all/xhci-revert-generalised-sg-support.patch @@ -0,0 +1,121 @@ +From: Ben Hutchings +Date: Sat, 1 Feb 2014 16:36:56 +0100 +Subject: xhci: Revert generalised sg support +Bug-Debian: http://bugs.debian.org/733826 +Bug-Debian: http://bugs.debian.org/736274 + +Revert part of "USB: introduce usb_device_no_sg_constraint() helper" +(commit bcc48f1a7a0d40ae2e5a26aff72c2b674fd8b596), +"usb: xhci: Link TRB must not occur within a USB payload burst" +(commit 35773dac5f862cb1c82ea151eba3e2f6de51ec3e), +"xhci: Avoid infinite loop when sg urb requires too many trbs" +(commit d6c9ea9069af684358efedcaf2f2f687f51c58ee) and +"xhci: Set scatter-gather limit to avoid failed block writes." +(commit f2d9b991c549f159dc9ae81f77d8206c790cbfee). + +The first two have resulted in serious regressions for USB storage, +apparently not entirely fixed by the last two. +--- +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -2973,58 +2973,8 @@ static int prepare_ring(struct xhci_hcd + } + + while (1) { +- if (room_on_ring(xhci, ep_ring, num_trbs)) { +- union xhci_trb *trb = ep_ring->enqueue; +- unsigned int usable = ep_ring->enq_seg->trbs + +- TRBS_PER_SEGMENT - 1 - trb; +- u32 nop_cmd; +- +- /* +- * Section 4.11.7.1 TD Fragments states that a link +- * TRB must only occur at the boundary between +- * data bursts (eg 512 bytes for 480M). +- * While it is possible to split a large fragment +- * we don't know the size yet. +- * Simplest solution is to fill the trb before the +- * LINK with nop commands. +- */ +- if (num_trbs == 1 || num_trbs <= usable || usable == 0) +- break; +- +- if (ep_ring->type != TYPE_BULK) +- /* +- * While isoc transfers might have a buffer that +- * crosses a 64k boundary it is unlikely. +- * Since we can't add NOPs without generating +- * gaps in the traffic just hope it never +- * happens at the end of the ring. +- * This could be fixed by writing a LINK TRB +- * instead of the first NOP - however the +- * TRB_TYPE_LINK_LE32() calls would all need +- * changing to check the ring length. +- */ +- break; +- +- if (num_trbs >= TRBS_PER_SEGMENT) { +- xhci_err(xhci, "Too many fragments %d, max %d\n", +- num_trbs, TRBS_PER_SEGMENT - 1); +- return -EINVAL; +- } +- +- nop_cmd = cpu_to_le32(TRB_TYPE(TRB_TR_NOOP) | +- ep_ring->cycle_state); +- ep_ring->num_trbs_free -= usable; +- do { +- trb->generic.field[0] = 0; +- trb->generic.field[1] = 0; +- trb->generic.field[2] = 0; +- trb->generic.field[3] = nop_cmd; +- trb++; +- } while (--usable); +- ep_ring->enqueue = trb; +- if (room_on_ring(xhci, ep_ring, num_trbs)) +- break; +- } ++ if (room_on_ring(xhci, ep_ring, num_trbs)) ++ break; + + if (ep_ring == xhci->cmd_ring) { + xhci_err(xhci, "Do not support expand command ring\n"); +--- a/drivers/usb/host/xhci.c ++++ b/drivers/usb/host/xhci.c +@@ -4716,11 +4716,12 @@ int xhci_gen_setup(struct usb_hcd *hcd, + struct device *dev = hcd->self.controller; + int retval; + +- /* Limit the block layer scatter-gather lists to half a segment. */ +- hcd->self.sg_tablesize = TRBS_PER_SEGMENT / 2; ++ /* Accept arbitrarily long scatter-gather lists */ ++ hcd->self.sg_tablesize = ~0; + + /* support to build packet from discontinuous buffers */ +- hcd->self.no_sg_constraint = 1; ++ /* XXX doesn't generally work yet */ ++ hcd->self.no_sg_constraint = 0; + + /* XHCI controllers don't stop the ep queue on short packets :| */ + hcd->self.no_stop_on_short = 1; +--- a/drivers/usb/host/xhci.h ++++ b/drivers/usb/host/xhci.h +@@ -1260,7 +1260,7 @@ union xhci_trb { + * since the command ring is 64-byte aligned. + * It must also be greater than 16. + */ +-#define TRBS_PER_SEGMENT 256 ++#define TRBS_PER_SEGMENT 64 + /* Allow two commands + a link TRB, along with any reserved command TRBs */ + #define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3) + #define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16) +--- a/include/linux/usb.h ++++ b/include/linux/usb.h +@@ -1264,8 +1264,6 @@ typedef void (*usb_complete_t)(struct ur + * @sg: scatter gather buffer list, the buffer size of each element in + * the list (except the last) must be divisible by the endpoint's + * max packet size if no_sg_constraint isn't set in 'struct usb_bus' +- * (FIXME: scatter-gather under xHCI is broken for periodic transfers. +- * Do not use urb->sg for interrupt endpoints for now, only bulk.) + * @num_mapped_sgs: (internal) number of mapped sg entries + * @num_sgs: number of entries in the sg list + * @transfer_buffer_length: How big is transfer_buffer. The transfer may diff --git a/debian/patches/series b/debian/patches/series index ed14c89e5..c8291c464 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -79,3 +79,4 @@ bugfix/all/staging-lustre-Make-LUSTRE_LLITE_LLOOP-tristate.patch bugfix/all/i2c-designware-remove-HAVE_CLK-build-dependecy.patch debian/snd-pcsp-disable-autoload.patch bugfix/all/bluetooth-allocate-static-minor-for-vhci.patch +bugfix/all/xhci-revert-generalised-sg-support.patch