NetBSD Problem Report #42225

From www@NetBSD.org  Sat Oct 24 20:38:12 2009
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by www.NetBSD.org (Postfix) with ESMTP id 5823A63B902
	for <gnats-bugs@gnats.netbsd.org>; Sat, 24 Oct 2009 20:38:12 +0000 (UTC)
Message-Id: <20091024203812.1519E63B8B6@www.NetBSD.org>
Date: Sat, 24 Oct 2009 20:38:12 +0000 (UTC)
From: kretschm@cs.uni-bonn.de
Reply-To: kretschm@cs.uni-bonn.de
To: gnats-bugs@NetBSD.org
Subject: can't read data from SuperTop IDE Bridge (umass)
X-Send-Pr-Version: www-1.0

>Number:         42225
>Category:       kern
>Synopsis:       can't read data from SuperTop IDE Bridge (umass)
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    martin
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Oct 24 20:40:00 +0000 2009
>Closed-Date:    Tue Nov 05 11:43:13 +0000 2019
>Last-Modified:  Tue Nov 05 11:43:13 +0000 2019
>Originator:     Matthias Kretschmer
>Release:        NetBSD 5.0.1_PATCH
>Organization:
>Environment:
NetBSD fourier.hangelar.local 5.0.1_PATCH NetBSD 5.0.1_PATCH (GENERIC) #0: Sat Oct 24 21:33:44 CEST 2009  matthias pts/4    Oct 24 20:55  (:0:S.2)@fourier.hangelar.local:/home/matthias/src/netbsd/5-0/src/sys/arch/amd64/compile/obj/GENERIC amd64
>Description:
Whenever I try to read data from a SuperTop IDE Bridge (an usb to ide bridge), I do not get any output.  NetBSD is unable to read any data.  Writing does not work as expected, too.

The problem is, that the device has some quirk, such that the residue information is bad (always zero).
>How-To-Repeat:
Just attach the device and try to read/write data using dd.
>Fix:
The following patches for netbsd-5-0, netbsd-5 and HEAD branches correct the problem.

I introduced a new umass quirk UMASS_QUIRK_IGNORE_RESIDUE and added a corresponding entry to umass_quirks.c for the specific device.  I used the code on 5.0.0_PATCH and 5.0.1_PATCH systems for some months without any problems.  I created patches against the code of netbsd-5-0, netbsd-5 and HEAD branches of today.  They are given below.  I compiled kernels of all three branches and tried the device to check if it performs properly.

According to other operating systems' quirk lists there are many other umass-devices with this quirk.  Using this patch and adding a corresponding quirk entry in umass_quirk.c might solve the problem with those devices, too.  I did not add further entries, because I only have this single device with the quirk and I'm unable to test the others.


--
Patch for netbsd-5-0:

Index: umass.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass.c,v
retrieving revision 1.129.4.1
diff -r1.129.4.1 umass.c
998a999
>       int residue;
1170a1172,1176
>               if (sc->sc_quirks & UMASS_QUIRK_IGNORE_RESIDUE)
>                   residue = sc->transfer_datalen - sc->transfer_actlen;
>               else
>                   residue = UGETDW(sc->csw.dCSWDataResidue);
> 
1213,1214c1219
<                               USBDEVNAME(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue));
---
>                               USBDEVNAME(sc->sc_dev), residue);
1226c1231
<                          != UGETDW(sc->csw.dCSWDataResidue)) {
---
>                          != residue) {
1230c1235
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               residue));
1237,1238c1242
<                               USBDEVNAME(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               USBDEVNAME(sc->sc_dev), residue));
1242,1243c1246
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
1250,1251c1253
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
Index: umass_quirks.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass_quirks.c,v
retrieving revision 1.76
diff -r1.76 umass_quirks.c
223a224,234
> 
>       /*
>        * Devices with bad residue.
>        */
>       { { USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE },
>         UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
>         UMASS_QUIRK_IGNORE_RESIDUE,
>         0,
>         UMATCH_VENDOR_PRODUCT,
>         NULL, NULL
>       },
Index: umassvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umassvar.h,v
retrieving revision 1.27
diff -r1.27 umassvar.h
182a183
> #define UMASS_QUIRK_IGNORE_RESIDUE    0x00000010
Index: usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.519.4.1
diff -r1.519.4.1 usbdevs
456a457
> vendor SUPERTOP               0x14cd  SuperTop
2193a2195,2197
> /* SuperTop products */
> product SUPERTOP IDEBRIDGE    0x6600  SuperTop IDE Bridge
> 
Index: usbdevs.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.515.4.1
diff -r1.515.4.1 usbdevs.h
1c1
< /*    $NetBSD: usbdevs.h,v 1.515.4.1 2008/11/22 05:12:18 snj Exp $    */
---
> /*    $NetBSD$        */
463a464
> #define       USB_VENDOR_SUPERTOP     0x14cd          /* SuperTop */
2200a2202,2204
> /* SuperTop products */
> #define       USB_PRODUCT_SUPERTOP_IDEBRIDGE  0x6600          /* SuperTop IDE 
Bridge */
> 
Index: usbdevs_data.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.516.4.1
diff -r1.516.4.1 usbdevs_data.h
1c1
< /*    $NetBSD: usbdevs_data.h,v 1.516.4.1 2008/11/22 05:12:18 snj Exp $       
*/
---
> /*    $NetBSD$        */
1641a1642,1645
>           USB_VENDOR_SUPERTOP,
>           "SuperTop",
>       },
>       {
1858c1862
< const int usb_nvendors = 454;
---
> const int usb_nvendors = 455;
6349a6354,6357
>           USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
>           "SuperTop IDE Bridge",
>       },
>       {
6826c6834
< const int usb_nproducts = 1241;
---
> const int usb_nproducts = 1242;


--
Patch for netbsd-5:
Index: umass.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass.c,v
retrieving revision 1.129.4.1
diff -r1.129.4.1 umass.c
998a999
>       int residue;
1170a1172,1176
>               if (sc->sc_quirks & UMASS_QUIRK_IGNORE_RESIDUE)
>                   residue = sc->transfer_datalen - sc->transfer_actlen;
>               else
>                   residue = UGETDW(sc->csw.dCSWDataResidue);
> 
1213,1214c1219
<                               USBDEVNAME(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue));
---
>                               USBDEVNAME(sc->sc_dev), residue);
1226c1231
<                          != UGETDW(sc->csw.dCSWDataResidue)) {
---
>                          != residue) {
1230c1235
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               residue));
1237,1238c1242
<                               USBDEVNAME(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               USBDEVNAME(sc->sc_dev), residue));
1242,1243c1246
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
1250,1251c1253
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
Index: umass_quirks.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass_quirks.c,v
retrieving revision 1.76
diff -r1.76 umass_quirks.c
223a224,234
> 
>       /*
>        * Devices with bad residue.
>        */
>       { { USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE },
>         UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
>         UMASS_QUIRK_IGNORE_RESIDUE,
>         0,
>         UMATCH_VENDOR_PRODUCT,
>         NULL, NULL
>       },
Index: umassvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umassvar.h,v
retrieving revision 1.27
diff -r1.27 umassvar.h
182a183
> #define UMASS_QUIRK_IGNORE_RESIDUE    0x00000010
Index: usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.519.4.2
diff -r1.519.4.2 usbdevs
456a457
> vendor SUPERTOP               0x14cd  SuperTop
2193a2195,2197
> /* SuperTop products */
> product SUPERTOP IDEBRIDGE    0x6600  SuperTop IDE Bridge
> 
Index: usbdevs.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.515.4.2
diff -r1.515.4.2 usbdevs.h
1c1
< /*    $NetBSD: usbdevs.h,v 1.515.4.2 2009/10/10 20:35:19 sborrill Exp $       
*/
---
> /*    $NetBSD$        */
463a464
> #define       USB_VENDOR_SUPERTOP     0x14cd          /* SuperTop */
2200a2202,2204
> /* SuperTop products */
> #define       USB_PRODUCT_SUPERTOP_IDEBRIDGE  0x6600          /* SuperTop IDE 
Bridge */
> 
Index: usbdevs_data.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.516.4.2
diff -r1.516.4.2 usbdevs_data.h
1c1
< /*    $NetBSD: usbdevs_data.h,v 1.516.4.2 2009/10/10 20:35:20 sborrill Exp $  
*/
---
> /*    $NetBSD$        */
1641a1642,1645
>           USB_VENDOR_SUPERTOP,
>           "SuperTop",
>       },
>       {
1858c1862
< const int usb_nvendors = 454;
---
> const int usb_nvendors = 455;
6353a6358,6361
>           USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
>           "SuperTop IDE Bridge",
>       },
>       {
6830c6838
< const int usb_nproducts = 1242;
---
> const int usb_nproducts = 1243;


--
Patch for HEAD:
Index: umass.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass.c,v
retrieving revision 1.134
diff -r1.134 umass.c
1014a1015
>       int residue;
1186a1188,1192
>               if (sc->sc_quirks & UMASS_QUIRK_IGNORE_RESIDUE)
>                     residue = sc->transfer_datalen - sc->transfer_actlen;
>                 else
>                     residue = UGETDW(sc->csw.dCSWDataResidue);
> 
1229,1230c1235
<                               device_xname(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue));
---
>                               device_xname(sc->sc_dev), residue);
1242c1247
<                          != UGETDW(sc->csw.dCSWDataResidue)) {
---
>                          != residue) {
1246c1251
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               residue));
1253,1254c1258
<                               device_xname(sc->sc_dev),
<                               UGETDW(sc->csw.dCSWDataResidue)));
---
>                               device_xname(sc->sc_dev), residue));
1258,1259c1262
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
1266,1267c1269
<                       sc->transfer_cb(sc, sc->transfer_priv,
<                                       UGETDW(sc->csw.dCSWDataResidue),
---
>                       sc->transfer_cb(sc, sc->transfer_priv, residue,
Index: umass_quirks.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umass_quirks.c,v
retrieving revision 1.77
diff -r1.77 umass_quirks.c
231a232,242
> 
>         /*
>          * Devices with bad residue.
>          */
>         { { USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE },
>           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
>           UMASS_QUIRK_IGNORE_RESIDUE,
>           0,
>           UMATCH_VENDOR_PRODUCT,
>           NULL, NULL
>         },
Index: umassvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umassvar.h,v
retrieving revision 1.27
diff -r1.27 umassvar.h
182a183
> #define UMASS_QUIRK_IGNORE_RESIDUE      0x00000010
Index: usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.534
diff -r1.534 usbdevs
466a467
> vendor SUPERTOP               0x14cd  SuperTop
2236a2238,2240
> /* SuperTop products */
> product SUPERTOP IDEBRIDGE      0x6600  SuperTop IDE Bridge
> 
Index: usbdevs.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.528
diff -r1.528 usbdevs.h
1c1
< /*    $NetBSD: usbdevs.h,v 1.528 2009/10/12 22:29:16 wiz Exp $        */
---
> /*    $NetBSD$        */
473a474
> #define       USB_VENDOR_SUPERTOP     0x14cd          /* SuperTop */
2243a2245,2247
> /* SuperTop products */
> #define       USB_PRODUCT_SUPERTOP_IDEBRIDGE  0x6600          /* SuperTop IDE 
Bridge */
> 
Index: usbdevs_data.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.529
diff -r1.529 usbdevs_data.h
1c1
< /*    $NetBSD: usbdevs_data.h,v 1.529 2009/10/12 22:29:16 wiz Exp $   */
---
> /*    $NetBSD$        */
1665a1666,1669
>           USB_VENDOR_SUPERTOP,
>           "SuperTop",
>       },
>       {
1886c1890
< const int usb_nvendors = 461;
---
> const int usb_nvendors = 462;
6457a6462,6465
>           USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDEBRIDGE,
>           "SuperTop IDE Bridge",
>       },
>       {
6938c6946
< const int usb_nproducts = 1262;
---
> const int usb_nproducts = 1263;

>Release-Note:

>Audit-Trail:
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, kern-bug-people@netbsd.org, 
	gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: 
Subject: Re: kern/42225: can't read data from SuperTop IDE Bridge (umass)
Date: Sat, 24 Oct 2009 16:42:17 -0400

 On Oct 24,  8:40pm, kretschm@cs.uni-bonn.de (kretschm@cs.uni-bonn.de) wrote:
 -- Subject: kern/42225: can't read data from SuperTop IDE Bridge (umass)

 | The problem is, that the device has some quirk, such that the residue information is bad (always zero).
 | >How-To-Repeat:
 | Just attach the device and try to read/write data using dd.
 | >Fix:
 | The following patches for netbsd-5-0, netbsd-5 and HEAD branches correct the problem.
 | 
 | I introduced a new umass quirk UMASS_QUIRK_IGNORE_RESIDUE and added a corresponding entry to umass_quirks.c for the specific device.  I used the code on 5.0.0_PATCH and 5.0.1_PATCH systems for some months without any problems.  I created patches against the code of netbsd-5-0, netbsd-5 and HEAD branches of today.  They are given below.  I compiled kernels of all three branches and tried the device to check if it performs properly.
 | 
 | According to other operating systems' quirk lists there are many other umass-devices with this quirk.  Using this patch and adding a corresponding quirk entry in umass_quirk.c might solve the problem with those devices, too.  I did not add further entries, because I only have this single device with the quirk and I'm unable to test the others.
 | 

 Can you please send the 'diff -u' output?


 Thanks,

 christos

From: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
To: gnats-bugs@NetBSD.org
Cc: christos@zoulas.com, kern-bug-people@netbsd.org,
	gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/42225: can't read data from SuperTop IDE Bridge (umass)
Date: Sun, 25 Oct 2009 07:21:57 +0100

 --MP_/4T/71M2Z8Xq_A51UiZoIeJ5
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline

 Here it comes ...

 On Sat, 24 Oct 2009 20:45:02 +0000 (UTC)
 christos@zoulas.com (Christos Zoulas) wrote:
 > Can you please send
 > the 'diff -u' output? Thanks, christos 


 --MP_/4T/71M2Z8Xq_A51UiZoIeJ5
 Content-Type: application/octet-stream; name=patch-sansun-5-0-u
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-sansun-5-0-u

 SW5kZXg6IHVtYXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYv
 dXNiL3VtYXNzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI5LjQuMQpkaWZmIC11IC1yMS4x
 MjkuNC4xIHVtYXNzLmMKLS0tIHVtYXNzLmMJMTMgRGVjIDIwMDggMjE6NDQ6NDIgLTAwMDAJMS4x
 MjkuNC4xCisrKyB1bWFzcy5jCTI1IE9jdCAyMDA5IDA2OjE2OjQzIC0wMDAwCkBAIC05OTYsNiAr
 OTk2LDcgQEAKIHsKIAlzdHJ1Y3QgdW1hc3Nfc29mdGMgKnNjID0gKHN0cnVjdCB1bWFzc19zb2Z0
 YyAqKSBwcml2OwogCXVzYmRfeGZlcl9oYW5kbGUgbmV4dF94ZmVyOworCWludCByZXNpZHVlOwog
 CiAJS0FTU0VSVChzYy0+c2Nfd2lyZSAmIFVNQVNTX1dQUk9UT19CQkIsCiAJCSgic2MtPnNjX3dp
 cmUgPT0gMHglMDJ4IHdyb25nIGZvciB1bWFzc19iYmJfc3RhdGVcbiIsCkBAIC0xMTY4LDYgKzEx
 NjksMTEgQEAKIAogCQlESUYoVURNQVNTX0JCQiwgdW1hc3NfYmJiX2R1bXBfY3N3KHNjLCAmc2Mt
 PmNzdykpOwogCisJCWlmIChzYy0+c2NfcXVpcmtzICYgVU1BU1NfUVVJUktfSUdOT1JFX1JFU0lE
 VUUpCisJCSAgICByZXNpZHVlID0gc2MtPnRyYW5zZmVyX2RhdGFsZW4gLSBzYy0+dHJhbnNmZXJf
 YWN0bGVuOworCQllbHNlCisJCSAgICByZXNpZHVlID0gVUdFVERXKHNjLT5jc3cuZENTV0RhdGFS
 ZXNpZHVlKTsKKwogCQkvKiBUcmFuc2xhdGUgd2VpcmQgY29tbWFuZC1zdGF0dXMgc2lnbmF0dXJl
 cy4gKi8KIAkJaWYgKChzYy0+c2NfcXVpcmtzICYgVU1BU1NfUVVJUktfV1JPTkdfQ1NXU0lHKSAm
 JgogCQkgICAgVUdFVERXKHNjLT5jc3cuZENTV1NpZ25hdHVyZSkgPT0gQ1NXU0lHTkFUVVJFX09M
 WU1QVVNfQzEpCkBAIC0xMjEwLDggKzEyMTYsNyBAQAogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYg
 KHNjLT5jc3cuYkNTV1N0YXR1cyA9PSBDU1dTVEFUVVNfUEhBU0UpIHsKIAkJCXByaW50ZigiJXM6
 IFBoYXNlIEVycm9yLCByZXNpZHVlID0gJWRcbiIsCi0JCQkJVVNCREVWTkFNRShzYy0+c2NfZGV2
 KSwKLQkJCQlVR0VURFcoc2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpKTsKKwkJCQlVU0JERVZOQU1F
 KHNjLT5zY19kZXYpLCByZXNpZHVlKTsKIAogCQkJdW1hc3NfYmJiX3Jlc2V0KHNjLCBTVEFUVVNf
 V0lSRV9GQUlMRUQpOwogCQkJcmV0dXJuOwpAQCAtMTIyMywzMiArMTIyOCwyOSBAQAogCQkJCXNj
 LT50cmFuc2Zlcl9hY3RsZW4sIHNjLT50cmFuc2Zlcl9kYXRhbGVuKTsKICNpZiAwCiAJCX0gZWxz
 ZSBpZiAoc2MtPnRyYW5zZmVyX2RhdGFsZW4gLSBzYy0+dHJhbnNmZXJfYWN0bGVuCi0JCQkgICAh
 PSBVR0VURFcoc2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpKSB7CisJCQkgICAhPSByZXNpZHVlKSB7
 CiAJCQlEUFJJTlRGKFVETUFTU19CQkIsICgiJXM6IGFjdGxlbj0lZCAhPSByZXNpZHVlPSVkXG4i
 LAogCQkJCVVTQkRFVk5BTUUoc2MtPnNjX2RldiksCiAJCQkJc2MtPnRyYW5zZmVyX2RhdGFsZW4g
 LSBzYy0+dHJhbnNmZXJfYWN0bGVuLAotCQkJCVVHRVREVyhzYy0+Y3N3LmRDU1dEYXRhUmVzaWR1
 ZSkpKTsKKwkJCQlyZXNpZHVlKSk7CiAKIAkJCXVtYXNzX2JiYl9yZXNldChzYywgU1RBVFVTX1dJ
 UkVfRkFJTEVEKTsKIAkJCXJldHVybjsKICNlbmRpZgogCQl9IGVsc2UgaWYgKHNjLT5jc3cuYkNT
 V1N0YXR1cyA9PSBDU1dTVEFUVVNfRkFJTEVEKSB7CiAJCQlEUFJJTlRGKFVETUFTU19CQkIsICgi
 JXM6IENvbW1hbmQgRmFpbGVkLCByZXMgPSAlZFxuIiwKLQkJCQlVU0JERVZOQU1FKHNjLT5zY19k
 ZXYpLAotCQkJCVVHRVREVyhzYy0+Y3N3LmRDU1dEYXRhUmVzaWR1ZSkpKTsKKwkJCQlVU0JERVZO
 QU1FKHNjLT5zY19kZXYpLCByZXNpZHVlKSk7CiAKIAkJCS8qIFNDU0kgY29tbWFuZCBmYWlsZWQg
 YnV0IHRyYW5zZmVyIHdhcyBzdWNjZXNmdWwgKi8KIAkJCXNjLT50cmFuc2Zlcl9zdGF0ZSA9IFRT
 VEFURV9JRExFOwotCQkJc2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNmZXJfcHJpdiwKLQkJ
 CQkJVUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50cmFuc2Zlcl9jYihz
 Yywgc2MtPnRyYW5zZmVyX3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19DTURfRkFJTEVEKTsK
 IAogCQkJcmV0dXJuOwogCiAJCX0gZWxzZSB7CS8qIHN1Y2Nlc3MgKi8KIAkJCXNjLT50cmFuc2Zl
 cl9zdGF0ZSA9IFRTVEFURV9JRExFOwotCQkJc2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNm
 ZXJfcHJpdiwKLQkJCQkJVUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50
 cmFuc2Zlcl9jYihzYywgc2MtPnRyYW5zZmVyX3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19D
 TURfT0spOwogCiAJCQlyZXR1cm47CkluZGV4OiB1bWFzc19xdWlya3MuYwo9PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
 UyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi91c2IvdW1hc3NfcXVpcmtzLmMsdgpyZXRyaWV2
 aW5nIHJldmlzaW9uIDEuNzYKZGlmZiAtdSAtcjEuNzYgdW1hc3NfcXVpcmtzLmMKLS0tIHVtYXNz
 X3F1aXJrcy5jCTI3IE9jdCAyMDA4IDIxOjQ2OjQzIC0wMDAwCTEuNzYKKysrIHVtYXNzX3F1aXJr
 cy5jCTI1IE9jdCAyMDA5IDA2OjE2OjQzIC0wMDAwCkBAIC0yMjEsNiArMjIxLDE3IEBACiAJICBV
 TUFUQ0hfVkVORE9SX1BST0RVQ1QsCiAJICBOVUxMLCBOVUxMCiAJfSwKKworCS8qCisJICogRGV2
 aWNlcyB3aXRoIGJhZCByZXNpZHVlLgorCSAqLworCXsgeyBVU0JfVkVORE9SX1NVUEVSVE9QLCBV
 U0JfUFJPRFVDVF9TVVBFUlRPUF9JREVCUklER0UgfSwKKwkgIFVNQVNTX1dQUk9UT19VTlNQRUMs
 IFVNQVNTX0NQUk9UT19VTlNQRUMsCisJICBVTUFTU19RVUlSS19JR05PUkVfUkVTSURVRSwKKwkg
 IDAsCisJICBVTUFUQ0hfVkVORE9SX1BST0RVQ1QsCisJICBOVUxMLCBOVUxMCisJfSwKIH07CiAK
 IGNvbnN0IHN0cnVjdCB1bWFzc19xdWlyayAqCkluZGV4OiB1bWFzc3Zhci5oCj09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
 UkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3VzYi91bWFzc3Zhci5oLHYKcmV0cmlldmlu
 ZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXIxLjI3IHVtYXNzdmFyLmgKLS0tIHVtYXNzdmFyLmgJ
 NiBTZXAgMjAwOCAyMTo0OTowMCAtMDAwMAkxLjI3CisrKyB1bWFzc3Zhci5oCTI1IE9jdCAyMDA5
 IDA2OjE2OjQzIC0wMDAwCkBAIC0xODAsNiArMTgwLDcgQEAKICNkZWZpbmUJVU1BU1NfUVVJUktf
 V1JPTkdfQ1NXVEFHCTB4MDAwMDAwMDIKICNkZWZpbmUJVU1BU1NfUVVJUktfUkJDX1BBRF9UT18x
 MgkweDAwMDAwMDA0CiAjZGVmaW5lCVVNQVNTX1FVSVJLX05PR0VUTUFYTFVOCQkweDAwMDAwMDA4
 CisjZGVmaW5lIFVNQVNTX1FVSVJLX0lHTk9SRV9SRVNJRFVFCTB4MDAwMDAwMTAKIAogI2RlZmlu
 ZSBVTUFTU19RVUlSS19VU0VfREVGQVVMVE1BVENICS0xCiAKSW5kZXg6IHVzYmRldnMKPT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvdXNiL3VzYmRldnMsdgpyZXRyaWV2
 aW5nIHJldmlzaW9uIDEuNTE5LjQuMQpkaWZmIC11IC1yMS41MTkuNC4xIHVzYmRldnMKLS0tIHVz
 YmRldnMJMjIgTm92IDIwMDggMDU6MTA6MDcgLTAwMDAJMS41MTkuNC4xCisrKyB1c2JkZXZzCTI1
 IE9jdCAyMDA5IDA2OjE2OjQ0IC0wMDAwCkBAIC00NTQsNiArNDU0LDcgQEAKIHZlbmRvciBSQUxJ
 TksJCTB4MTQ4NQlSYWxpbmsgVGVjaG5vbG9neQogdmVuZG9yIFJBTElOS18yCQkweDE0OGYJUmFs
 aW5rIFRlY2hub2xvZ3kKIHZlbmRvciBDT05DRVBUUk9OSUMJMHgxNGIyCUNvbmNlcHRyb25pYwor
 dmVuZG9yIFNVUEVSVE9QCQkweDE0Y2QJU3VwZXJUb3AKIHZlbmRvciBQTEFORVgzCQkweDE0ZWEJ
 UGxhbmV4IENvbW11bmljYXRpb25zCiB2ZW5kb3IgU0lMSUNPTlBPUlRBTFMJMHgxNTI3CVNpbGlj
 b24gUG9ydGFscwogdmVuZG9yIE9RTwkJMHgxNTU3CU9RTwpAQCAtMjE5MSw2ICsyMTkyLDkgQEAK
 IC8qIFhYWCBUaGUgYWJvdmUgaXMgYSBOb3J0aCBBbWVyaWNhbiBQQyBzdHlsZSBrZXlib2FyZCBw
 b3NzaWJseSAqLwogcHJvZHVjdCBTVU4gTU9VU0UJCTB4MDEwMAlUeXBlIDYgVVNCIG1vdXNlCiAK
 Ky8qIFN1cGVyVG9wIHByb2R1Y3RzICovCitwcm9kdWN0IFNVUEVSVE9QIElERUJSSURHRQkweDY2
 MDAJU3VwZXJUb3AgSURFIEJyaWRnZQorCiAvKiBTdXByYSBwcm9kdWN0cyAqLwogcHJvZHVjdCBE
 SUFNT05EMiBTVVBSQUVYUFJFU1M1NksgMHgwN2RhIFN1cHJhIEV4cHJlc3MgNTZLIG1vZGVtCiBw
 cm9kdWN0IERJQU1PTkQyIFNVUFJBMjg5MAkweDBiNGEJU3VwcmFNYXggMjg5MCA1NksgTW9kZW0K
 SW5kZXg6IHVzYmRldnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rl
 di91c2IvdXNiZGV2cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxNS40LjEKZGlmZiAtdSAt
 cjEuNTE1LjQuMSB1c2JkZXZzLmgKLS0tIHVzYmRldnMuaAkyMiBOb3YgMjAwOCAwNToxMjoxOCAt
 MDAwMAkxLjUxNS40LjEKKysrIHVzYmRldnMuaAkyNSBPY3QgMjAwOSAwNjoxNjo0NiAtMDAwMApA
 QCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHVzYmRldnMuaCx2IDEuNTE1LjQuMSAyMDA4LzEx
 LzIyIDA1OjEyOjE4IHNuaiBFeHAgJAkqLworLyoJJE5ldEJTRCQJKi8KIAogLyoKICAqIFRISVMg
 RklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRC4gIERPIE5PVCBFRElULgpAQCAtNDYxLDYg
 KzQ2MSw3IEBACiAjZGVmaW5lCVVTQl9WRU5ET1JfUkFMSU5LCTB4MTQ4NQkJLyogUmFsaW5rIFRl
 Y2hub2xvZ3kgKi8KICNkZWZpbmUJVVNCX1ZFTkRPUl9SQUxJTktfMgkweDE0OGYJCS8qIFJhbGlu
 ayBUZWNobm9sb2d5ICovCiAjZGVmaW5lCVVTQl9WRU5ET1JfQ09OQ0VQVFJPTklDCTB4MTRiMgkJ
 LyogQ29uY2VwdHJvbmljICovCisjZGVmaW5lCVVTQl9WRU5ET1JfU1VQRVJUT1AJMHgxNGNkCQkv
 KiBTdXBlclRvcCAqLwogI2RlZmluZQlVU0JfVkVORE9SX1BMQU5FWDMJMHgxNGVhCQkvKiBQbGFu
 ZXggQ29tbXVuaWNhdGlvbnMgKi8KICNkZWZpbmUJVVNCX1ZFTkRPUl9TSUxJQ09OUE9SVEFMUwkw
 eDE1MjcJCS8qIFNpbGljb24gUG9ydGFscyAqLwogI2RlZmluZQlVU0JfVkVORE9SX09RTwkweDE1
 NTcJCS8qIE9RTyAqLwpAQCAtMjE5OCw2ICsyMTk5LDkgQEAKIC8qIFhYWCBUaGUgYWJvdmUgaXMg
 YSBOb3J0aCBBbWVyaWNhbiBQQyBzdHlsZSBrZXlib2FyZCBwb3NzaWJseSAqLwogI2RlZmluZQlV
 U0JfUFJPRFVDVF9TVU5fTU9VU0UJMHgwMTAwCQkvKiBUeXBlIDYgVVNCIG1vdXNlICovCiAKKy8q
 IFN1cGVyVG9wIHByb2R1Y3RzICovCisjZGVmaW5lCVVTQl9QUk9EVUNUX1NVUEVSVE9QX0lERUJS
 SURHRQkweDY2MDAJCS8qIFN1cGVyVG9wIElERSBCcmlkZ2UgKi8KKwogLyogU3VwcmEgcHJvZHVj
 dHMgKi8KICNkZWZpbmUJVVNCX1BST0RVQ1RfRElBTU9ORDJfU1VQUkFFWFBSRVNTNTZLCTB4MDdk
 YQkJLyogU3VwcmEgRXhwcmVzcyA1NksgbW9kZW0gKi8KICNkZWZpbmUJVVNCX1BST0RVQ1RfRElB
 TU9ORDJfU1VQUkEyODkwCTB4MGI0YQkJLyogU3VwcmFNYXggMjg5MCA1NksgTW9kZW0gKi8KSW5k
 ZXg6IHVzYmRldnNfZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMv
 ZGV2L3VzYi91c2JkZXZzX2RhdGEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MTYuNC4xCmRp
 ZmYgLXUgLXIxLjUxNi40LjEgdXNiZGV2c19kYXRhLmgKLS0tIHVzYmRldnNfZGF0YS5oCTIyIE5v
 diAyMDA4IDA1OjEyOjE4IC0wMDAwCTEuNTE2LjQuMQorKysgdXNiZGV2c19kYXRhLmgJMjUgT2N0
 IDIwMDkgMDY6MTY6NDggLTAwMDAKQEAgLTEsNCArMSw0IEBACi0vKgkkTmV0QlNEOiB1c2JkZXZz
 X2RhdGEuaCx2IDEuNTE2LjQuMSAyMDA4LzExLzIyIDA1OjEyOjE4IHNuaiBFeHAgJAkqLworLyoJ
 JE5ldEJTRCQJKi8KIAogLyoKICAqIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRF
 RC4gIERPIE5PVCBFRElULgpAQCAtMTYzOSw2ICsxNjM5LDEwIEBACiAJICAgICJDb25jZXB0cm9u
 aWMiLAogCX0sCiAJeworCSAgICBVU0JfVkVORE9SX1NVUEVSVE9QLAorCSAgICAiU3VwZXJUb3Ai
 LAorCX0sCisJewogCSAgICBVU0JfVkVORE9SX1BMQU5FWDMsCiAJICAgICJQbGFuZXggQ29tbXVu
 aWNhdGlvbnMiLAogCX0sCkBAIC0xODU1LDcgKzE4NTksNyBAQAogCSAgICAiR05VIFJhZGlvIFVT
 UlAiLAogCX0sCiB9OwotY29uc3QgaW50IHVzYl9udmVuZG9ycyA9IDQ1NDsKK2NvbnN0IGludCB1
 c2JfbnZlbmRvcnMgPSA0NTU7CiAKIGNvbnN0IHN0cnVjdCB1c2JfcHJvZHVjdCB1c2JfcHJvZHVj
 dHNbXSA9IHsKIAl7CkBAIC02MzQ3LDYgKzYzNTEsMTAgQEAKIAkgICAgIlR5cGUgNiBVU0IgbW91
 c2UiLAogCX0sCiAJeworCSAgICBVU0JfVkVORE9SX1NVUEVSVE9QLCBVU0JfUFJPRFVDVF9TVVBF
 UlRPUF9JREVCUklER0UsCisJICAgICJTdXBlclRvcCBJREUgQnJpZGdlIiwKKwl9LAorCXsKIAkg
 ICAgVVNCX1ZFTkRPUl9ESUFNT05EMiwgVVNCX1BST0RVQ1RfRElBTU9ORDJfU1VQUkFFWFBSRVNT
 NTZLLAogCSAgICAiU3VwcmEgRXhwcmVzcyA1NksgbW9kZW0iLAogCX0sCkBAIC02ODIzLDQgKzY4
 MzEsNCBAQAogCSAgICAiUHJlc3RpZ2UiLAogCX0sCiB9OwotY29uc3QgaW50IHVzYl9ucHJvZHVj
 dHMgPSAxMjQxOworY29uc3QgaW50IHVzYl9ucHJvZHVjdHMgPSAxMjQyOwo=

 --MP_/4T/71M2Z8Xq_A51UiZoIeJ5
 Content-Type: application/octet-stream; name=patch-sansun-5-u
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-sansun-5-u

 SW5kZXg6IHVtYXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYv
 dXNiL3VtYXNzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI5LjQuMQpkaWZmIC11IC1yMS4x
 MjkuNC4xIHVtYXNzLmMKLS0tIHVtYXNzLmMJMTMgRGVjIDIwMDggMjE6NDQ6NDIgLTAwMDAJMS4x
 MjkuNC4xCisrKyB1bWFzcy5jCTI1IE9jdCAyMDA5IDA2OjE3OjA3IC0wMDAwCkBAIC05OTYsNiAr
 OTk2LDcgQEAKIHsKIAlzdHJ1Y3QgdW1hc3Nfc29mdGMgKnNjID0gKHN0cnVjdCB1bWFzc19zb2Z0
 YyAqKSBwcml2OwogCXVzYmRfeGZlcl9oYW5kbGUgbmV4dF94ZmVyOworCWludCByZXNpZHVlOwog
 CiAJS0FTU0VSVChzYy0+c2Nfd2lyZSAmIFVNQVNTX1dQUk9UT19CQkIsCiAJCSgic2MtPnNjX3dp
 cmUgPT0gMHglMDJ4IHdyb25nIGZvciB1bWFzc19iYmJfc3RhdGVcbiIsCkBAIC0xMTY4LDYgKzEx
 NjksMTEgQEAKIAogCQlESUYoVURNQVNTX0JCQiwgdW1hc3NfYmJiX2R1bXBfY3N3KHNjLCAmc2Mt
 PmNzdykpOwogCisJCWlmIChzYy0+c2NfcXVpcmtzICYgVU1BU1NfUVVJUktfSUdOT1JFX1JFU0lE
 VUUpCisJCSAgICByZXNpZHVlID0gc2MtPnRyYW5zZmVyX2RhdGFsZW4gLSBzYy0+dHJhbnNmZXJf
 YWN0bGVuOworCQllbHNlCisJCSAgICByZXNpZHVlID0gVUdFVERXKHNjLT5jc3cuZENTV0RhdGFS
 ZXNpZHVlKTsKKwogCQkvKiBUcmFuc2xhdGUgd2VpcmQgY29tbWFuZC1zdGF0dXMgc2lnbmF0dXJl
 cy4gKi8KIAkJaWYgKChzYy0+c2NfcXVpcmtzICYgVU1BU1NfUVVJUktfV1JPTkdfQ1NXU0lHKSAm
 JgogCQkgICAgVUdFVERXKHNjLT5jc3cuZENTV1NpZ25hdHVyZSkgPT0gQ1NXU0lHTkFUVVJFX09M
 WU1QVVNfQzEpCkBAIC0xMjEwLDggKzEyMTYsNyBAQAogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYg
 KHNjLT5jc3cuYkNTV1N0YXR1cyA9PSBDU1dTVEFUVVNfUEhBU0UpIHsKIAkJCXByaW50ZigiJXM6
 IFBoYXNlIEVycm9yLCByZXNpZHVlID0gJWRcbiIsCi0JCQkJVVNCREVWTkFNRShzYy0+c2NfZGV2
 KSwKLQkJCQlVR0VURFcoc2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpKTsKKwkJCQlVU0JERVZOQU1F
 KHNjLT5zY19kZXYpLCByZXNpZHVlKTsKIAogCQkJdW1hc3NfYmJiX3Jlc2V0KHNjLCBTVEFUVVNf
 V0lSRV9GQUlMRUQpOwogCQkJcmV0dXJuOwpAQCAtMTIyMywzMiArMTIyOCwyOSBAQAogCQkJCXNj
 LT50cmFuc2Zlcl9hY3RsZW4sIHNjLT50cmFuc2Zlcl9kYXRhbGVuKTsKICNpZiAwCiAJCX0gZWxz
 ZSBpZiAoc2MtPnRyYW5zZmVyX2RhdGFsZW4gLSBzYy0+dHJhbnNmZXJfYWN0bGVuCi0JCQkgICAh
 PSBVR0VURFcoc2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpKSB7CisJCQkgICAhPSByZXNpZHVlKSB7
 CiAJCQlEUFJJTlRGKFVETUFTU19CQkIsICgiJXM6IGFjdGxlbj0lZCAhPSByZXNpZHVlPSVkXG4i
 LAogCQkJCVVTQkRFVk5BTUUoc2MtPnNjX2RldiksCiAJCQkJc2MtPnRyYW5zZmVyX2RhdGFsZW4g
 LSBzYy0+dHJhbnNmZXJfYWN0bGVuLAotCQkJCVVHRVREVyhzYy0+Y3N3LmRDU1dEYXRhUmVzaWR1
 ZSkpKTsKKwkJCQlyZXNpZHVlKSk7CiAKIAkJCXVtYXNzX2JiYl9yZXNldChzYywgU1RBVFVTX1dJ
 UkVfRkFJTEVEKTsKIAkJCXJldHVybjsKICNlbmRpZgogCQl9IGVsc2UgaWYgKHNjLT5jc3cuYkNT
 V1N0YXR1cyA9PSBDU1dTVEFUVVNfRkFJTEVEKSB7CiAJCQlEUFJJTlRGKFVETUFTU19CQkIsICgi
 JXM6IENvbW1hbmQgRmFpbGVkLCByZXMgPSAlZFxuIiwKLQkJCQlVU0JERVZOQU1FKHNjLT5zY19k
 ZXYpLAotCQkJCVVHRVREVyhzYy0+Y3N3LmRDU1dEYXRhUmVzaWR1ZSkpKTsKKwkJCQlVU0JERVZO
 QU1FKHNjLT5zY19kZXYpLCByZXNpZHVlKSk7CiAKIAkJCS8qIFNDU0kgY29tbWFuZCBmYWlsZWQg
 YnV0IHRyYW5zZmVyIHdhcyBzdWNjZXNmdWwgKi8KIAkJCXNjLT50cmFuc2Zlcl9zdGF0ZSA9IFRT
 VEFURV9JRExFOwotCQkJc2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNmZXJfcHJpdiwKLQkJ
 CQkJVUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50cmFuc2Zlcl9jYihz
 Yywgc2MtPnRyYW5zZmVyX3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19DTURfRkFJTEVEKTsK
 IAogCQkJcmV0dXJuOwogCiAJCX0gZWxzZSB7CS8qIHN1Y2Nlc3MgKi8KIAkJCXNjLT50cmFuc2Zl
 cl9zdGF0ZSA9IFRTVEFURV9JRExFOwotCQkJc2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNm
 ZXJfcHJpdiwKLQkJCQkJVUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50
 cmFuc2Zlcl9jYihzYywgc2MtPnRyYW5zZmVyX3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19D
 TURfT0spOwogCiAJCQlyZXR1cm47CkluZGV4OiB1bWFzc19xdWlya3MuYwo9PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
 UyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi91c2IvdW1hc3NfcXVpcmtzLmMsdgpyZXRyaWV2
 aW5nIHJldmlzaW9uIDEuNzYKZGlmZiAtdSAtcjEuNzYgdW1hc3NfcXVpcmtzLmMKLS0tIHVtYXNz
 X3F1aXJrcy5jCTI3IE9jdCAyMDA4IDIxOjQ2OjQzIC0wMDAwCTEuNzYKKysrIHVtYXNzX3F1aXJr
 cy5jCTI1IE9jdCAyMDA5IDA2OjE3OjA4IC0wMDAwCkBAIC0yMjEsNiArMjIxLDE3IEBACiAJICBV
 TUFUQ0hfVkVORE9SX1BST0RVQ1QsCiAJICBOVUxMLCBOVUxMCiAJfSwKKworCS8qCisJICogRGV2
 aWNlcyB3aXRoIGJhZCByZXNpZHVlLgorCSAqLworCXsgeyBVU0JfVkVORE9SX1NVUEVSVE9QLCBV
 U0JfUFJPRFVDVF9TVVBFUlRPUF9JREVCUklER0UgfSwKKwkgIFVNQVNTX1dQUk9UT19VTlNQRUMs
 IFVNQVNTX0NQUk9UT19VTlNQRUMsCisJICBVTUFTU19RVUlSS19JR05PUkVfUkVTSURVRSwKKwkg
 IDAsCisJICBVTUFUQ0hfVkVORE9SX1BST0RVQ1QsCisJICBOVUxMLCBOVUxMCisJfSwKIH07CiAK
 IGNvbnN0IHN0cnVjdCB1bWFzc19xdWlyayAqCkluZGV4OiB1bWFzc3Zhci5oCj09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
 UkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3VzYi91bWFzc3Zhci5oLHYKcmV0cmlldmlu
 ZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXIxLjI3IHVtYXNzdmFyLmgKLS0tIHVtYXNzdmFyLmgJ
 NiBTZXAgMjAwOCAyMTo0OTowMCAtMDAwMAkxLjI3CisrKyB1bWFzc3Zhci5oCTI1IE9jdCAyMDA5
 IDA2OjE3OjA4IC0wMDAwCkBAIC0xODAsNiArMTgwLDcgQEAKICNkZWZpbmUJVU1BU1NfUVVJUktf
 V1JPTkdfQ1NXVEFHCTB4MDAwMDAwMDIKICNkZWZpbmUJVU1BU1NfUVVJUktfUkJDX1BBRF9UT18x
 MgkweDAwMDAwMDA0CiAjZGVmaW5lCVVNQVNTX1FVSVJLX05PR0VUTUFYTFVOCQkweDAwMDAwMDA4
 CisjZGVmaW5lIFVNQVNTX1FVSVJLX0lHTk9SRV9SRVNJRFVFCTB4MDAwMDAwMTAKIAogI2RlZmlu
 ZSBVTUFTU19RVUlSS19VU0VfREVGQVVMVE1BVENICS0xCiAKSW5kZXg6IHVzYmRldnMKPT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvdXNiL3VzYmRldnMsdgpyZXRyaWV2
 aW5nIHJldmlzaW9uIDEuNTE5LjQuMgpkaWZmIC11IC1yMS41MTkuNC4yIHVzYmRldnMKLS0tIHVz
 YmRldnMJMTAgT2N0IDIwMDkgMjA6MzQ6NDUgLTAwMDAJMS41MTkuNC4yCisrKyB1c2JkZXZzCTI1
 IE9jdCAyMDA5IDA2OjE3OjA5IC0wMDAwCkBAIC00NTQsNiArNDU0LDcgQEAKIHZlbmRvciBSQUxJ
 TksJCTB4MTQ4NQlSYWxpbmsgVGVjaG5vbG9neQogdmVuZG9yIFJBTElOS18yCQkweDE0OGYJUmFs
 aW5rIFRlY2hub2xvZ3kKIHZlbmRvciBDT05DRVBUUk9OSUMJMHgxNGIyCUNvbmNlcHRyb25pYwor
 dmVuZG9yIFNVUEVSVE9QCQkweDE0Y2QJU3VwZXJUb3AKIHZlbmRvciBQTEFORVgzCQkweDE0ZWEJ
 UGxhbmV4IENvbW11bmljYXRpb25zCiB2ZW5kb3IgU0lMSUNPTlBPUlRBTFMJMHgxNTI3CVNpbGlj
 b24gUG9ydGFscwogdmVuZG9yIE9RTwkJMHgxNTU3CU9RTwpAQCAtMjE5MSw2ICsyMTkyLDkgQEAK
 IHByb2R1Y3QgU1VOIEtFWUJPQVJEX1RZUEVfNwkweDAwYTIJVHlwZSA3IFVTQiBrZXlib2FyZAog
 LyogWFhYIFRoZSBhYm92ZSBpcyBhIE5vcnRoIEFtZXJpY2FuIFBDIHN0eWxlIGtleWJvYXJkIHBv
 c3NpYmx5ICovCiBwcm9kdWN0IFNVTiBNT1VTRQkJMHgwMTAwCVR5cGUgNiBVU0IgbW91c2UKKy8q
 IFN1cGVyVG9wIHByb2R1Y3RzICovCitwcm9kdWN0IFNVUEVSVE9QIElERUJSSURHRQkweDY2MDAJ
 U3VwZXJUb3AgSURFIEJyaWRnZQorCiAKIC8qIFN1cHJhIHByb2R1Y3RzICovCiBwcm9kdWN0IERJ
 QU1PTkQyIFNVUFJBRVhQUkVTUzU2SyAweDA3ZGEgU3VwcmEgRXhwcmVzcyA1NksgbW9kZW0KSW5k
 ZXg6IHVzYmRldnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi91
 c2IvdXNiZGV2cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxNS40LjIKZGlmZiAtdSAtcjEu
 NTE1LjQuMiB1c2JkZXZzLmgKLS0tIHVzYmRldnMuaAkxMCBPY3QgMjAwOSAyMDozNToxOSAtMDAw
 MAkxLjUxNS40LjIKKysrIHVzYmRldnMuaAkyNSBPY3QgMjAwOSAwNjoxNzoxMCAtMDAwMApAQCAt
 MSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHVzYmRldnMuaCx2IDEuNTE1LjQuMiAyMDA5LzEwLzEw
 IDIwOjM1OjE5IHNib3JyaWxsIEV4cCAkCSovCisvKgkkTmV0QlNEJAkqLwogCiAvKgogICogVEhJ
 UyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVELiAgRE8gTk9UIEVESVQuCkBAIC00NjEs
 NiArNDYxLDcgQEAKICNkZWZpbmUJVVNCX1ZFTkRPUl9SQUxJTksJMHgxNDg1CQkvKiBSYWxpbmsg
 VGVjaG5vbG9neSAqLwogI2RlZmluZQlVU0JfVkVORE9SX1JBTElOS18yCTB4MTQ4ZgkJLyogUmFs
 aW5rIFRlY2hub2xvZ3kgKi8KICNkZWZpbmUJVVNCX1ZFTkRPUl9DT05DRVBUUk9OSUMJMHgxNGIy
 CQkvKiBDb25jZXB0cm9uaWMgKi8KKyNkZWZpbmUJVVNCX1ZFTkRPUl9TVVBFUlRPUAkweDE0Y2QJ
 CS8qIFN1cGVyVG9wICovCiAjZGVmaW5lCVVTQl9WRU5ET1JfUExBTkVYMwkweDE0ZWEJCS8qIFBs
 YW5leCBDb21tdW5pY2F0aW9ucyAqLwogI2RlZmluZQlVU0JfVkVORE9SX1NJTElDT05QT1JUQUxT
 CTB4MTUyNwkJLyogU2lsaWNvbiBQb3J0YWxzICovCiAjZGVmaW5lCVVTQl9WRU5ET1JfT1FPCTB4
 MTU1NwkJLyogT1FPICovCkBAIC0yMTk4LDYgKzIxOTksOSBAQAogI2RlZmluZQlVU0JfUFJPRFVD
 VF9TVU5fS0VZQk9BUkRfVFlQRV83CTB4MDBhMgkJLyogVHlwZSA3IFVTQiBrZXlib2FyZCAqLwog
 LyogWFhYIFRoZSBhYm92ZSBpcyBhIE5vcnRoIEFtZXJpY2FuIFBDIHN0eWxlIGtleWJvYXJkIHBv
 c3NpYmx5ICovCiAjZGVmaW5lCVVTQl9QUk9EVUNUX1NVTl9NT1VTRQkweDAxMDAJCS8qIFR5cGUg
 NiBVU0IgbW91c2UgKi8KKy8qIFN1cGVyVG9wIHByb2R1Y3RzICovCisjZGVmaW5lCVVTQl9QUk9E
 VUNUX1NVUEVSVE9QX0lERUJSSURHRQkweDY2MDAJCS8qIFN1cGVyVG9wIElERSBCcmlkZ2UgKi8K
 KwogCiAvKiBTdXByYSBwcm9kdWN0cyAqLwogI2RlZmluZQlVU0JfUFJPRFVDVF9ESUFNT05EMl9T
 VVBSQUVYUFJFU1M1NksJMHgwN2RhCQkvKiBTdXByYSBFeHByZXNzIDU2SyBtb2RlbSAqLwpJbmRl
 eDogdXNiZGV2c19kYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9k
 ZXYvdXNiL3VzYmRldnNfZGF0YS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxNi40LjIKZGlm
 ZiAtdSAtcjEuNTE2LjQuMiB1c2JkZXZzX2RhdGEuaAotLS0gdXNiZGV2c19kYXRhLmgJMTAgT2N0
 IDIwMDkgMjA6MzU6MjAgLTAwMDAJMS41MTYuNC4yCisrKyB1c2JkZXZzX2RhdGEuaAkyNSBPY3Qg
 MjAwOSAwNjoxNzoxMiAtMDAwMApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IHVzYmRldnNf
 ZGF0YS5oLHYgMS41MTYuNC4yIDIwMDkvMTAvMTAgMjA6MzU6MjAgc2JvcnJpbGwgRXhwICQJKi8K
 Ky8qCSROZXRCU0QkCSovCiAKIC8qCiAgKiBUSElTIEZJTEUgSVMgQVVUT01BVElDQUxMWSBHRU5F
 UkFURUQuICBETyBOT1QgRURJVC4KQEAgLTE2MzksNiArMTYzOSwxMCBAQAogCSAgICAiQ29uY2Vw
 dHJvbmljIiwKIAl9LAogCXsKKwkgICAgVVNCX1ZFTkRPUl9TVVBFUlRPUCwKKwkgICAgIlN1cGVy
 VG9wIiwKKwl9LAorCXsKIAkgICAgVVNCX1ZFTkRPUl9QTEFORVgzLAogCSAgICAiUGxhbmV4IENv
 bW11bmljYXRpb25zIiwKIAl9LApAQCAtMTg1NSw3ICsxODU5LDcgQEAKIAkgICAgIkdOVSBSYWRp
 byBVU1JQIiwKIAl9LAogfTsKLWNvbnN0IGludCB1c2JfbnZlbmRvcnMgPSA0NTQ7Citjb25zdCBp
 bnQgdXNiX252ZW5kb3JzID0gNDU1OwogCiBjb25zdCBzdHJ1Y3QgdXNiX3Byb2R1Y3QgdXNiX3By
 b2R1Y3RzW10gPSB7CiAJewpAQCAtNjM1MSw2ICs2MzU1LDEwIEBACiAJICAgICJUeXBlIDYgVVNC
 IG1vdXNlIiwKIAl9LAogCXsKKwkgICAgVVNCX1ZFTkRPUl9TVVBFUlRPUCwgVVNCX1BST0RVQ1Rf
 U1VQRVJUT1BfSURFQlJJREdFLAorCSAgICAiU3VwZXJUb3AgSURFIEJyaWRnZSIsCisJfSwKKwl7
 CiAJICAgIFVTQl9WRU5ET1JfRElBTU9ORDIsIFVTQl9QUk9EVUNUX0RJQU1PTkQyX1NVUFJBRVhQ
 UkVTUzU2SywKIAkgICAgIlN1cHJhIEV4cHJlc3MgNTZLIG1vZGVtIiwKIAl9LApAQCAtNjgyNyw0
 ICs2ODM1LDQgQEAKIAkgICAgIlByZXN0aWdlIiwKIAl9LAogfTsKLWNvbnN0IGludCB1c2JfbnBy
 b2R1Y3RzID0gMTI0MjsKK2NvbnN0IGludCB1c2JfbnByb2R1Y3RzID0gMTI0MzsK

 --MP_/4T/71M2Z8Xq_A51UiZoIeJ5
 Content-Type: application/octet-stream; name=patch-sansun-CURRENT-u
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-sansun-CURRENT-u

 SW5kZXg6IHVtYXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYv
 dXNiL3VtYXNzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM0CmRpZmYgLXUgLXIxLjEzNCB1
 bWFzcy5jCi0tLSB1bWFzcy5jCTIzIFNlcCAyMDA5IDE5OjA3OjE5IC0wMDAwCTEuMTM0CisrKyB1
 bWFzcy5jCTI1IE9jdCAyMDA5IDA2OjE3OjI0IC0wMDAwCkBAIC0xMDEyLDYgKzEwMTIsNyBAQAog
 ewogCXN0cnVjdCB1bWFzc19zb2Z0YyAqc2MgPSAoc3RydWN0IHVtYXNzX3NvZnRjICopIHByaXY7
 CiAJdXNiZF94ZmVyX2hhbmRsZSBuZXh0X3hmZXI7CisJaW50IHJlc2lkdWU7CiAKIAlLQVNTRVJU
 KHNjLT5zY193aXJlICYgVU1BU1NfV1BST1RPX0JCQiwKIAkJKCJzYy0+c2Nfd2lyZSA9PSAweCUw
 Mnggd3JvbmcgZm9yIHVtYXNzX2JiYl9zdGF0ZVxuIiwKQEAgLTExODQsNiArMTE4NSwxMSBAQAog
 CiAJCURJRihVRE1BU1NfQkJCLCB1bWFzc19iYmJfZHVtcF9jc3coc2MsICZzYy0+Y3N3KSk7CiAK
 KwkJaWYgKHNjLT5zY19xdWlya3MgJiBVTUFTU19RVUlSS19JR05PUkVfUkVTSURVRSkKKyAgICAg
 ICAgICAgICAgICAgICAgcmVzaWR1ZSA9IHNjLT50cmFuc2Zlcl9kYXRhbGVuIC0gc2MtPnRyYW5z
 ZmVyX2FjdGxlbjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJl
 c2lkdWUgPSBVR0VURFcoc2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpOworCiAJCS8qIFRyYW5zbGF0
 ZSB3ZWlyZCBjb21tYW5kLXN0YXR1cyBzaWduYXR1cmVzLiAqLwogCQlpZiAoKHNjLT5zY19xdWly
 a3MgJiBVTUFTU19RVUlSS19XUk9OR19DU1dTSUcpICYmCiAJCSAgICBVR0VURFcoc2MtPmNzdy5k
 Q1NXU2lnbmF0dXJlKSA9PSBDU1dTSUdOQVRVUkVfT0xZTVBVU19DMSkKQEAgLTEyMjYsOCArMTIz
 Miw3IEBACiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoc2MtPmNzdy5iQ1NXU3RhdHVzID09IENT
 V1NUQVRVU19QSEFTRSkgewogCQkJcHJpbnRmKCIlczogUGhhc2UgRXJyb3IsIHJlc2lkdWUgPSAl
 ZFxuIiwKLQkJCQlkZXZpY2VfeG5hbWUoc2MtPnNjX2RldiksCi0JCQkJVUdFVERXKHNjLT5jc3cu
 ZENTV0RhdGFSZXNpZHVlKSk7CisJCQkJZGV2aWNlX3huYW1lKHNjLT5zY19kZXYpLCByZXNpZHVl
 KTsKIAogCQkJdW1hc3NfYmJiX3Jlc2V0KHNjLCBTVEFUVVNfV0lSRV9GQUlMRUQpOwogCQkJcmV0
 dXJuOwpAQCAtMTIzOSwzMiArMTI0NCwyOSBAQAogCQkJCXNjLT50cmFuc2Zlcl9hY3RsZW4sIHNj
 LT50cmFuc2Zlcl9kYXRhbGVuKTsKICNpZiAwCiAJCX0gZWxzZSBpZiAoc2MtPnRyYW5zZmVyX2Rh
 dGFsZW4gLSBzYy0+dHJhbnNmZXJfYWN0bGVuCi0JCQkgICAhPSBVR0VURFcoc2MtPmNzdy5kQ1NX
 RGF0YVJlc2lkdWUpKSB7CisJCQkgICAhPSByZXNpZHVlKSB7CiAJCQlEUFJJTlRGKFVETUFTU19C
 QkIsICgiJXM6IGFjdGxlbj0lZCAhPSByZXNpZHVlPSVkXG4iLAogCQkJCWRldmljZV94bmFtZShz
 Yy0+c2NfZGV2KSwKIAkJCQlzYy0+dHJhbnNmZXJfZGF0YWxlbiAtIHNjLT50cmFuc2Zlcl9hY3Rs
 ZW4sCi0JCQkJVUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSkpOworCQkJCXJlc2lkdWUp
 KTsKIAogCQkJdW1hc3NfYmJiX3Jlc2V0KHNjLCBTVEFUVVNfV0lSRV9GQUlMRUQpOwogCQkJcmV0
 dXJuOwogI2VuZGlmCiAJCX0gZWxzZSBpZiAoc2MtPmNzdy5iQ1NXU3RhdHVzID09IENTV1NUQVRV
 U19GQUlMRUQpIHsKIAkJCURQUklOVEYoVURNQVNTX0JCQiwgKCIlczogQ29tbWFuZCBGYWlsZWQs
 IHJlcyA9ICVkXG4iLAotCQkJCWRldmljZV94bmFtZShzYy0+c2NfZGV2KSwKLQkJCQlVR0VURFco
 c2MtPmNzdy5kQ1NXRGF0YVJlc2lkdWUpKSk7CisJCQkJZGV2aWNlX3huYW1lKHNjLT5zY19kZXYp
 LCByZXNpZHVlKSk7CiAKIAkJCS8qIFNDU0kgY29tbWFuZCBmYWlsZWQgYnV0IHRyYW5zZmVyIHdh
 cyBzdWNjZXNmdWwgKi8KIAkJCXNjLT50cmFuc2Zlcl9zdGF0ZSA9IFRTVEFURV9JRExFOwotCQkJ
 c2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNmZXJfcHJpdiwKLQkJCQkJVUdFVERXKHNjLT5j
 c3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50cmFuc2Zlcl9jYihzYywgc2MtPnRyYW5zZmVy
 X3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19DTURfRkFJTEVEKTsKIAogCQkJcmV0dXJuOwog
 CiAJCX0gZWxzZSB7CS8qIHN1Y2Nlc3MgKi8KIAkJCXNjLT50cmFuc2Zlcl9zdGF0ZSA9IFRTVEFU
 RV9JRExFOwotCQkJc2MtPnRyYW5zZmVyX2NiKHNjLCBzYy0+dHJhbnNmZXJfcHJpdiwKLQkJCQkJ
 VUdFVERXKHNjLT5jc3cuZENTV0RhdGFSZXNpZHVlKSwKKwkJCXNjLT50cmFuc2Zlcl9jYihzYywg
 c2MtPnRyYW5zZmVyX3ByaXYsIHJlc2lkdWUsCiAJCQkJCVNUQVRVU19DTURfT0spOwogCiAJCQly
 ZXR1cm47CkluZGV4OiB1bWFzc19xdWlya3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
 dC9zcmMvc3lzL2Rldi91c2IvdW1hc3NfcXVpcmtzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
 NzcKZGlmZiAtdSAtcjEuNzcgdW1hc3NfcXVpcmtzLmMKLS0tIHVtYXNzX3F1aXJrcy5jCTEyIE9j
 dCAyMDA5IDIzOjQzOjA1IC0wMDAwCTEuNzcKKysrIHVtYXNzX3F1aXJrcy5jCTI1IE9jdCAyMDA5
 IDA2OjE3OjI1IC0wMDAwCkBAIC0yMjksNiArMjI5LDE3IEBACiAJICBVTUFUQ0hfVkVORE9SX1BS
 T0RVQ1QsCiAJICBOVUxMLCBOVUxMCiAJfSwKKworICAgICAgICAvKgorICAgICAgICAgKiBEZXZp
 Y2VzIHdpdGggYmFkIHJlc2lkdWUuCisgICAgICAgICAqLworICAgICAgICB7IHsgVVNCX1ZFTkRP
 Ul9TVVBFUlRPUCwgVVNCX1BST0RVQ1RfU1VQRVJUT1BfSURFQlJJREdFIH0sCisgICAgICAgICAg
 VU1BU1NfV1BST1RPX1VOU1BFQywgVU1BU1NfQ1BST1RPX1VOU1BFQywKKyAgICAgICAgICBVTUFT
 U19RVUlSS19JR05PUkVfUkVTSURVRSwKKyAgICAgICAgICAwLAorICAgICAgICAgIFVNQVRDSF9W
 RU5ET1JfUFJPRFVDVCwKKyAgICAgICAgICBOVUxMLCBOVUxMCisgICAgICAgIH0sCiB9OwogCiBj
 b25zdCBzdHJ1Y3QgdW1hc3NfcXVpcmsgKgpJbmRleDogdW1hc3N2YXIuaAo9PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
 UyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi91c2IvdW1hc3N2YXIuaCx2CnJldHJpZXZpbmcg
 cmV2aXNpb24gMS4yNwpkaWZmIC11IC1yMS4yNyB1bWFzc3Zhci5oCi0tLSB1bWFzc3Zhci5oCTYg
 U2VwIDIwMDggMjE6NDk6MDAgLTAwMDAJMS4yNworKysgdW1hc3N2YXIuaAkyNSBPY3QgMjAwOSAw
 NjoxNzoyNSAtMDAwMApAQCAtMTgwLDYgKzE4MCw3IEBACiAjZGVmaW5lCVVNQVNTX1FVSVJLX1dS
 T05HX0NTV1RBRwkweDAwMDAwMDAyCiAjZGVmaW5lCVVNQVNTX1FVSVJLX1JCQ19QQURfVE9fMTIJ
 MHgwMDAwMDAwNAogI2RlZmluZQlVTUFTU19RVUlSS19OT0dFVE1BWExVTgkJMHgwMDAwMDAwOAor
 I2RlZmluZSBVTUFTU19RVUlSS19JR05PUkVfUkVTSURVRSAgICAgIDB4MDAwMDAwMTAKIAogI2Rl
 ZmluZSBVTUFTU19RVUlSS19VU0VfREVGQVVMVE1BVENICS0xCiAKSW5kZXg6IHVzYmRldnMKPT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvdXNiL3VzYmRldnMsdgpyZXRy
 aWV2aW5nIHJldmlzaW9uIDEuNTM0CmRpZmYgLXUgLXIxLjUzNCB1c2JkZXZzCi0tLSB1c2JkZXZz
 CTEyIE9jdCAyMDA5IDIyOjI4OjE1IC0wMDAwCTEuNTM0CisrKyB1c2JkZXZzCTI1IE9jdCAyMDA5
 IDA2OjE3OjI2IC0wMDAwCkBAIC00NjQsNiArNDY0LDcgQEAKIHZlbmRvciBSQUxJTksJCTB4MTQ4
 NQlSYWxpbmsgVGVjaG5vbG9neQogdmVuZG9yIFJBTElOS18yCQkweDE0OGYJUmFsaW5rIFRlY2hu
 b2xvZ3kKIHZlbmRvciBDT05DRVBUUk9OSUMJMHgxNGIyCUNvbmNlcHRyb25pYwordmVuZG9yIFNV
 UEVSVE9QCQkweDE0Y2QgIFN1cGVyVG9wCiB2ZW5kb3IgUExBTkVYMwkJMHgxNGVhCVBsYW5leCBD
 b21tdW5pY2F0aW9ucwogdmVuZG9yIFNJTElDT05QT1JUQUxTCTB4MTUyNwlTaWxpY29uIFBvcnRh
 bHMKIHZlbmRvciBPUU8JCTB4MTU1NwlPUU8KQEAgLTIyMzQsNiArMjIzNSw5IEBACiAvKiBYWFgg
 VGhlIGFib3ZlIGlzIGEgTm9ydGggQW1lcmljYW4gUEMgc3R5bGUga2V5Ym9hcmQgcG9zc2libHkg
 Ki8KIHByb2R1Y3QgU1VOIE1PVVNFCQkweDAxMDAJVHlwZSA2IFVTQiBtb3VzZQogCisvKiBTdXBl
 clRvcCBwcm9kdWN0cyAqLworcHJvZHVjdCBTVVBFUlRPUCBJREVCUklER0UgICAgICAweDY2MDAg
 IFN1cGVyVG9wIElERSBCcmlkZ2UKKwogLyogU3VwcmEgcHJvZHVjdHMgKi8KIHByb2R1Y3QgRElB
 TU9ORDIgU1VQUkFFWFBSRVNTNTZLIDB4MDdkYSBTdXByYSBFeHByZXNzIDU2SyBtb2RlbQogcHJv
 ZHVjdCBESUFNT05EMiBTVVBSQTI4OTAJMHgwYjRhCVN1cHJhTWF4IDI4OTAgNTZLIE1vZGVtCklu
 ZGV4OiB1c2JkZXZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYv
 dXNiL3VzYmRldnMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MjgKZGlmZiAtdSAtcjEuNTI4
 IHVzYmRldnMuaAotLS0gdXNiZGV2cy5oCTEyIE9jdCAyMDA5IDIyOjI5OjE2IC0wMDAwCTEuNTI4
 CisrKyB1c2JkZXZzLmgJMjUgT2N0IDIwMDkgMDY6MTc6MjcgLTAwMDAKQEAgLTEsNCArMSw0IEBA
 Ci0vKgkkTmV0QlNEOiB1c2JkZXZzLmgsdiAxLjUyOCAyMDA5LzEwLzEyIDIyOjI5OjE2IHdpeiBF
 eHAgJAkqLworLyoJJE5ldEJTRCQJKi8KIAogLyoKICAqIFRISVMgRklMRSBJUyBBVVRPTUFUSUNB
 TExZIEdFTkVSQVRFRC4gIERPIE5PVCBFRElULgpAQCAtNDcxLDYgKzQ3MSw3IEBACiAjZGVmaW5l
 CVVTQl9WRU5ET1JfUkFMSU5LCTB4MTQ4NQkJLyogUmFsaW5rIFRlY2hub2xvZ3kgKi8KICNkZWZp
 bmUJVVNCX1ZFTkRPUl9SQUxJTktfMgkweDE0OGYJCS8qIFJhbGluayBUZWNobm9sb2d5ICovCiAj
 ZGVmaW5lCVVTQl9WRU5ET1JfQ09OQ0VQVFJPTklDCTB4MTRiMgkJLyogQ29uY2VwdHJvbmljICov
 CisjZGVmaW5lCVVTQl9WRU5ET1JfU1VQRVJUT1AJMHgxNGNkCQkvKiBTdXBlclRvcCAqLwogI2Rl
 ZmluZQlVU0JfVkVORE9SX1BMQU5FWDMJMHgxNGVhCQkvKiBQbGFuZXggQ29tbXVuaWNhdGlvbnMg
 Ki8KICNkZWZpbmUJVVNCX1ZFTkRPUl9TSUxJQ09OUE9SVEFMUwkweDE1MjcJCS8qIFNpbGljb24g
 UG9ydGFscyAqLwogI2RlZmluZQlVU0JfVkVORE9SX09RTwkweDE1NTcJCS8qIE9RTyAqLwpAQCAt
 MjI0MSw2ICsyMjQyLDkgQEAKIC8qIFhYWCBUaGUgYWJvdmUgaXMgYSBOb3J0aCBBbWVyaWNhbiBQ
 QyBzdHlsZSBrZXlib2FyZCBwb3NzaWJseSAqLwogI2RlZmluZQlVU0JfUFJPRFVDVF9TVU5fTU9V
 U0UJMHgwMTAwCQkvKiBUeXBlIDYgVVNCIG1vdXNlICovCiAKKy8qIFN1cGVyVG9wIHByb2R1Y3Rz
 ICovCisjZGVmaW5lCVVTQl9QUk9EVUNUX1NVUEVSVE9QX0lERUJSSURHRQkweDY2MDAJCS8qIFN1
 cGVyVG9wIElERSBCcmlkZ2UgKi8KKwogLyogU3VwcmEgcHJvZHVjdHMgKi8KICNkZWZpbmUJVVNC
 X1BST0RVQ1RfRElBTU9ORDJfU1VQUkFFWFBSRVNTNTZLCTB4MDdkYQkJLyogU3VwcmEgRXhwcmVz
 cyA1NksgbW9kZW0gKi8KICNkZWZpbmUJVVNCX1BST0RVQ1RfRElBTU9ORDJfU1VQUkEyODkwCTB4
 MGI0YQkJLyogU3VwcmFNYXggMjg5MCA1NksgTW9kZW0gKi8KSW5kZXg6IHVzYmRldnNfZGF0YS5o
 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3VzYi91c2JkZXZzX2Rh
 dGEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MjkKZGlmZiAtdSAtcjEuNTI5IHVzYmRldnNf
 ZGF0YS5oCi0tLSB1c2JkZXZzX2RhdGEuaAkxMiBPY3QgMjAwOSAyMjoyOToxNiAtMDAwMAkxLjUy
 OQorKysgdXNiZGV2c19kYXRhLmgJMjUgT2N0IDIwMDkgMDY6MTc6MjkgLTAwMDAKQEAgLTEsNCAr
 MSw0IEBACi0vKgkkTmV0QlNEOiB1c2JkZXZzX2RhdGEuaCx2IDEuNTI5IDIwMDkvMTAvMTIgMjI6
 Mjk6MTYgd2l6IEV4cCAkCSovCisvKgkkTmV0QlNEJAkqLwogCiAvKgogICogVEhJUyBGSUxFIElT
 IEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVELiAgRE8gTk9UIEVESVQuCkBAIC0xNjYzLDYgKzE2NjMs
 MTAgQEAKIAkgICAgIkNvbmNlcHRyb25pYyIsCiAJfSwKIAl7CisJICAgIFVTQl9WRU5ET1JfU1VQ
 RVJUT1AsCisJICAgICJTdXBlclRvcCIsCisJfSwKKwl7CiAJICAgIFVTQl9WRU5ET1JfUExBTkVY
 MywKIAkgICAgIlBsYW5leCBDb21tdW5pY2F0aW9ucyIsCiAJfSwKQEAgLTE4ODMsNyArMTg4Nyw3
 IEBACiAJICAgICJHTlUgUmFkaW8gVVNSUCIsCiAJfSwKIH07Ci1jb25zdCBpbnQgdXNiX252ZW5k
 b3JzID0gNDYxOworY29uc3QgaW50IHVzYl9udmVuZG9ycyA9IDQ2MjsKIAogY29uc3Qgc3RydWN0
 IHVzYl9wcm9kdWN0IHVzYl9wcm9kdWN0c1tdID0gewogCXsKQEAgLTY0NTUsNiArNjQ1OSwxMCBA
 QAogCSAgICAiVHlwZSA2IFVTQiBtb3VzZSIsCiAJfSwKIAl7CisJICAgIFVTQl9WRU5ET1JfU1VQ
 RVJUT1AsIFVTQl9QUk9EVUNUX1NVUEVSVE9QX0lERUJSSURHRSwKKwkgICAgIlN1cGVyVG9wIElE
 RSBCcmlkZ2UiLAorCX0sCisJewogCSAgICBVU0JfVkVORE9SX0RJQU1PTkQyLCBVU0JfUFJPRFVD
 VF9ESUFNT05EMl9TVVBSQUVYUFJFU1M1NkssCiAJICAgICJTdXByYSBFeHByZXNzIDU2SyBtb2Rl
 bSIsCiAJfSwKQEAgLTY5MzUsNCArNjk0Myw0IEBACiAJICAgICJQcmVzdGlnZSIsCiAJfSwKIH07
 Ci1jb25zdCBpbnQgdXNiX25wcm9kdWN0cyA9IDEyNjI7Citjb25zdCBpbnQgdXNiX25wcm9kdWN0
 cyA9IDEyNjM7Cg==

 --MP_/4T/71M2Z8Xq_A51UiZoIeJ5--

From: Ignatios Souvatzis <is@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: src/sys/dev/usb
Date: Fri, 30 Oct 2009 16:22:33 +0000

 Module Name:	src
 Committed By:	is
 Date:		Fri Oct 30 16:22:32 UTC 2009

 Modified Files:
 	src/sys/dev/usb: umass.c umass_quirks.c umassvar.h usbdevs

 Log Message:
 Quirk to regenerate residue for borken UMASS devices; needed (at least)
 for Supertop IDE bridge. From Matthias Kretschmer, PR 42225.


 To generate a diff of this commit:
 cvs rdiff -u -r1.134 -r1.135 src/sys/dev/usb/umass.c
 cvs rdiff -u -r1.77 -r1.78 src/sys/dev/usb/umass_quirks.c
 cvs rdiff -u -r1.27 -r1.28 src/sys/dev/usb/umassvar.h
 cvs rdiff -u -r1.534 -r1.535 src/sys/dev/usb/usbdevs

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: Ignatios Souvatzis <is@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: src/sys/dev/usb
Date: Fri, 30 Oct 2009 16:25:46 +0000

 Module Name:	src
 Committed By:	is
 Date:		Fri Oct 30 16:25:46 UTC 2009

 Modified Files:
 	src/sys/dev/usb: usbdevs.h usbdevs_data.h

 Log Message:
 regenerate:
 Quirk to regenerate residue for borken UMASS devices; needed (at least)
 for Supertop IDE bridge. From Matthias Kretschmer, PR 42225.


 To generate a diff of this commit:
 cvs rdiff -u -r1.528 -r1.529 src/sys/dev/usb/usbdevs.h
 cvs rdiff -u -r1.529 -r1.530 src/sys/dev/usb/usbdevs_data.h

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->analyzed
State-Changed-By: is@NetBSD.org
State-Changed-When: Tue, 03 Nov 2009 10:18:39 +0000
State-Changed-Why:
The proposed patch has been committed to -current as a workaround, but is
considered unclean by martin@. 

USB experts will have to tell whether it's safe to consider all non-failing
zero-length transfers as being full-length transfers, or whether there's a
third method to handle such devices.


Responsible-Changed-From-To: kern-bug-people->martin
Responsible-Changed-By: martin@NetBSD.org
Responsible-Changed-When: Tue, 03 Nov 2009 10:30:32 +0000
Responsible-Changed-Why:
take


From: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
To: gnats-bugs@NetBSD.org
Cc: martin@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Wed, 10 Feb 2010 15:50:06 +0100

 the relevant dmesg output...

 umass0 at uhub2 port 3 configuration 1 interface 0
 umass0: Super Top USB 2.0  IDE DEVICE, rev 2.00/2.01, addr 2
 umass0: using SCSI over Bulk-Only
 scsibus0 at umass0: 2 targets, 1 lun per target
 sd0 at scsibus0 target 0 lun 0: <SAMSUNG, MP0402H, 0\0000> disk fixed
 sd0: 38204 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 78242976 sectors

From: Martin Husemann <martin@duskware.de>
To: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Wed, 10 Feb 2010 16:31:31 +0100

 You say dCSWDataResidue is always zero, but what are the sc->transfer_datalen,
 the sc->transfer_actlen and bCSWStatus values?

 Does it work if you make sure to limit the length at 

   min(sc->transfer_actlen, sc->transfer_datalen-UGETDW(dCSWDataResidue))

 instead (unconditionally, no quirk)?

 According to the spec paragraph 6.7.2 [case 7 or 8]:

   If the device actually transfers less data than the host indicated, then
 	The device may end the transfer with a short packet.
 	The device shall STALL the Bulk-In pipe.


 Martin

From: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
To: Martin Husemann <martin@duskware.de>
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Thu, 11 Feb 2010 10:39:46 +0100

 - bCSWStatus I do not know;  I can check if required

 - I changed the code for setting "residue" to

   residue = UGETDW(dCSWDataResidue);
   if (residue < sc->transfer_datalen - sc->transfer_actlen)
       residue = sc->transfer_datalen - sc->transfer_actlen;

   which works with my usb device.  I just do not have another umass
   at hand to test with.

 Matthias

From: Martin Husemann <martin@duskware.de>
To: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Thu, 11 Feb 2010 11:09:25 +0100

 On Thu, Feb 11, 2010 at 10:39:46AM +0100, Matthias Kretschmer wrote:
 > - I changed the code for setting "residue" to
 > 
 >   residue = UGETDW(dCSWDataResidue);
 >   if (residue < sc->transfer_datalen - sc->transfer_actlen)
 >       residue = sc->transfer_datalen - sc->transfer_actlen;
 > 
 >   which works with my usb device.  I just do not have another umass
 >   at hand to test with.

 Cool - this is what I expected.

 IMHO this can go in unconditionally. There is no way for the device to 
 "reconnect" and send more data later, so limiting to the actual transfer
 length can not cause any harm.

 I will test with a few other devices and commit ASAP.

 Martin

From: Martin Husemann <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: src/sys/dev/usb
Date: Sat, 13 Feb 2010 02:09:42 +0000

 Module Name:	src
 Committed By:	martin
 Date:		Sat Feb 13 02:09:41 UTC 2010

 Modified Files:
 	src/sys/dev/usb: umass.c umass_quirks.c umassvar.h

 Log Message:
 Remove UMASS_QUIRK_IGNORE_RESIDUE, instead max out the expected response
 size at the actual transfer length. Fixes PR kern/42225 differently.


 To generate a diff of this commit:
 cvs rdiff -u -r1.136 -r1.137 src/sys/dev/usb/umass.c
 cvs rdiff -u -r1.78 -r1.79 src/sys/dev/usb/umass_quirks.c
 cvs rdiff -u -r1.28 -r1.29 src/sys/dev/usb/umassvar.h

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: analyzed->pending-pullups
State-Changed-By: martin@NetBSD.org
State-Changed-When: Sat, 13 Feb 2010 02:13:10 +0000
State-Changed-Why:
fixed in -current, waiting on pullup-5 #1123


From: Soren Jacobsen <snj@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: [netbsd-5] src/sys/dev/usb
Date: Tue, 9 Mar 2010 03:45:43 +0000

 Module Name:	src
 Committed By:	snj
 Date:		Tue Mar  9 03:45:43 UTC 2010

 Modified Files:
 	src/sys/dev/usb [netbsd-5]: umass.c usbdevs

 Log Message:
 Pull up following revision(s) (requested by is/martin):
 	sys/dev/usb/usbdevs: revision 1.535
 	sys/dev/usb/umass.c: revision 1.137
 Add SuperTop and SuperTop IDE Bridge to usbdevs.
 --
 Max out the expected response size at the actual transfer length.
 Fixes PR kern/42225.


 To generate a diff of this commit:
 cvs rdiff -u -r1.129.4.1 -r1.129.4.2 src/sys/dev/usb/umass.c
 cvs rdiff -u -r1.519.4.4 -r1.519.4.5 src/sys/dev/usb/usbdevs

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: pending-pullups->closed
State-Changed-By: martin@NetBSD.org
State-Changed-When: Tue, 09 Mar 2010 09:16:26 +0000
State-Changed-Why:
pullups complete
thanks for the report + help during testing!


From: Markus W Kilbinger <mk@kilbi.de>
To: current-users@netbsd.org
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Sun, 4 Apr 2010 22:18:48 +0200

 Hi!

 After several months I've reactivated my SuperTop hardware:

   umass1 at uhub5 port 4 configuration 1 interface 0
   umass1: Super Top USB 2.0  IDE DEVICE, rev 2.00/2.01, addr 3
   umass1: using SCSI over Bulk-Only
   scsibus1 at umass1: 2 targets, 1 lun per target
   sd1 at scsibus1 target 0 lun 0: <ST316002, 3A, 0\0000> disk fixed
   sd1: 149 GB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 312581808 sectors

 on my -current machine

   NetBSD 5.99.25 (Q) #8: Sun Apr  4 21:43:29 MEST 2010  .../amd64/compile/Q amd64

 , but it didn't work! I could see the dmesg, fdisk and disklabel
 output, but reading more than 1 block seems to fail (it works at/with
 other machines / os's).

 So, looking at the source and the initial and final patches I've made
 the following change:

 Index: umass.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/usb/umass.c,v
 retrieving revision 1.138
 diff -u -r1.138 umass.c
 --- umass.c     13 Feb 2010 02:16:51 -0000      1.138
 +++ umass.c     4 Apr 2010 20:07:22 -0000
 @@ -1179,7 +1179,7 @@
                 DIF(UDMASS_BBB, umass_bbb_dump_csw(sc, &sc->csw));

                 residue = UGETDW(sc->csw.dCSWDataResidue);
 -               if (residue < sc->transfer_datalen - sc->transfer_actlen)
 +               if (residue != sc->transfer_datalen - sc->transfer_actlen)
                         residue = sc->transfer_datalen - sc->transfer_actlen;

                 /* Translate weird command-status signatures. */


 With this little change my usb disk works! (?)
 I only have (tested) some usb memory sticks as other umasses and did
 not see any problem with this change/patch.

 If not requiring a quirk (for several usb ide bridges) what is residue
 good for?

 Comments?

 Markus.

From: Martin Husemann <martin@duskware.de>
To: Markus W Kilbinger <mk@kilbi.de>
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Mon, 5 Apr 2010 00:30:19 +0200

 On Sun, Apr 04, 2010 at 10:18:48PM +0200, Markus W Kilbinger wrote:
 >                 residue = UGETDW(sc->csw.dCSWDataResidue);
 > -               if (residue < sc->transfer_datalen - sc->transfer_actlen)
 > +               if (residue != sc->transfer_datalen - sc->transfer_actlen)
 >                         residue = sc->transfer_datalen - sc->transfer_actlen;

 Please add a few printfs and provide more detailed data, especially the
 values of residue, sc->transfer_datalen, sc->transfer_datalen and bCSWStatus.

 Martin
 P.S.: it is not very usefull to cross-post to gnats and some other mailing list

From: Markus W Kilbinger <mk@kilbi.de>
To: Martin Husemann <martin@duskware.de>
Cc: gnats-bugs@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Tue, 6 Apr 2010 12:21:04 +0200

 >>>>> "Martin" == Martin Husemann <martin@duskware.de> writes:

     >> residue = UGETDW(sc->csw.dCSWDataResidue);
     >> - if (residue < sc->transfer_datalen - sc->transfer_actlen)
     >> + if (residue != sc->transfer_datalen - sc->transfer_actlen)
     >> residue = sc->transfer_datalen - sc->transfer_actlen;

     Martin> Please add a few printfs and provide more detailed data,
     Martin> especially the values of residue, sc->transfer_datalen,
     Martin> sc->transfer_datalen and bCSWStatus.

 Following debug patch:

   Index: umass.c
   ===================================================================
   RCS file: /cvsroot/src/sys/dev/usb/umass.c,v
   retrieving revision 1.138
   diff -u -r1.138 umass.c
   --- umass.c	13 Feb 2010 02:16:51 -0000	1.138
   +++ umass.c	6 Apr 2010 10:12:07 -0000
   @@ -1179,8 +1179,12 @@
    		DIF(UDMASS_BBB, umass_bbb_dump_csw(sc, &sc->csw));

    		residue = UGETDW(sc->csw.dCSWDataResidue);
   -		if (residue < sc->transfer_datalen - sc->transfer_actlen)
   +		if (residue != sc->transfer_datalen - sc->transfer_actlen) {
   +		  printf("***UMASS residue = %d, datalen = %d, actlen = %d, status = %d\n", 
   +			 residue, sc->transfer_datalen, sc->transfer_actlen,
   +			 sc->csw.bCSWStatus);
    			residue = sc->transfer_datalen - sc->transfer_actlen;
   +		}

    		/* Translate weird command-status signatures. */
    		if ((sc->sc_quirks & UMASS_QUIRK_WRONG_CSWSIG) &&

 produced the following (additional) dmesg output during booting:

   umass0 at uhub5 port 2 configuration 1 interface 0
   umass0: Super Top USB 2.0  IDE DEVICE, rev 2.00/2.01, addr 2
   umass0: using SCSI over Bulk-Only
   scsibus0 at umass0: 2 targets, 1 lun per target
   sd0 at scsibus0 target 0 lun 0: <ST316002, 3A, 0\0000> disk fixed
   ***UMASS residue = 0, datalen = 32, actlen = 18, status = 0
   ***UMASS residue = 0, datalen = 32, actlen = 18, status = 0
   ***UMASS residue = 4, datalen = 40, actlen = 20, status = 0
   sd0: 149 GB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 312581808 sectors
   ***UMASS residue = 0, datalen = 32, actlen = 18, status = 0
   ***UMASS residue = 0, datalen = 32, actlen = 18, status = 0
   ***UMASS residue = 4, datalen = 40, actlen = 20, status = 0
   ***UMASS residue = 512, datalen = 512, actlen = 512, status = 0
   ***UMASS residue = 1536, datalen = 1536, actlen = 1536, status = 0
   ***UMASS residue = 512, datalen = 512, actlen = 512, status = 0
   ***UMASS residue = 512, datalen = 512, actlen = 512, status = 0
   [...]
   ***UMASS residue = 2048, datalen = 2048, actlen = 2048, status = 0
   ***UMASS residue = 2048, datalen = 2048, actlen = 2048, status = 0

 and 'dd if=/dev/rsd0d of=/dev/null count=2' produces

   ***UMASS residue = 512, datalen = 512, actlen = 512, status = 0
   ***UMASS residue = 512, datalen = 512, actlen = 512, status = 0

 More/other info needed?

 Markus.

From: Matthias Kretschmer <mccratch@gmx.net>
To: gnats-bugs@netbsd.org
Cc: martin@NetBSD.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Wed, 15 Sep 2010 16:17:19 +0200

 Hi,

 On Sun, Apr 04, 2010 at 10:35:02PM +0000, Martin Husemann wrote:
 >  On Sun, Apr 04, 2010 at 10:18:48PM +0200, Markus W Kilbinger wrote:
 >  >                 residue = UGETDW(sc->csw.dCSWDataResidue);
 >  > -               if (residue < sc->transfer_datalen - sc->transfer_actlen)
 >  > +               if (residue != sc->transfer_datalen - sc->transfer_actlen)
 >  >                         residue = sc->transfer_datalen - sc->transfer_actlen;

 I'm sorry I haven't answered before.

 I had required to HDD build into the SuperTOP usb<->ata bridge into a
 computer, such that I couldn't test.  I now put another hdd into my
 supertop drive and it now emits the same problem as described by Markus.
 I assume that the controller chip is heavily broken by design and emits
 useless residue data which may be greater or less than the real value.
 The patch proposed by Markus works fine for me.

 I have tested the patch on my 5.1_RC3 system and attached and used two
 different (different vendors and sizes) usb-sticks and three different
 hdd-cases (including the SuperTOP).  The other four umass devices do not
 have the problem, but are not rendered non-functional by the patch.  As
 it seems the sc->transfer_datalen and sc->transfer_actlen information is
 more reliable than the residue information, one could even shorten this,
 to just use this information without reading the residue from the
 device.

 --
 Matthias

State-Changed-From-To: closed->open
State-Changed-By: jakllsch@NetBSD.org
State-Changed-When: Thu, 16 Jun 2011 00:51:21 +0000
State-Changed-Why:
martin's fix doesn't work


From: "Jonathan A. Kollasch" <jakllsch@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: src/sys/dev/usb
Date: Sun, 31 Jul 2011 16:32:02 +0000

 Module Name:	src
 Committed By:	jakllsch
 Date:		Sun Jul 31 16:32:02 UTC 2011

 Modified Files:
 	src/sys/dev/usb: umass.c umass_quirks.c umassvar.h

 Log Message:
 Restore original residue quirk proposed in PR#42225, it is necessary.


 To generate a diff of this commit:
 cvs rdiff -u -r1.138 -r1.139 src/sys/dev/usb/umass.c
 cvs rdiff -u -r1.84 -r1.85 src/sys/dev/usb/umass_quirks.c
 cvs rdiff -u -r1.30 -r1.31 src/sys/dev/usb/umassvar.h

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->feedback
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Tue, 02 Aug 2011 02:53:01 +0000
State-Changed-Why:
Does it work now as committed?


From: Matthias Kretschmer <kretschm@cs.uni-bonn.de>
To: gnats-bugs@NetBSD.org
Cc: martin@NetBSD.org, netbsd-bugs@netbsd.org,
	gnats-admin@netbsd.org, dholland@NetBSD.org
Subject: Re: kern/42225 (can't read data from SuperTop IDE Bridge (umass))
Date: Mon, 29 Aug 2011 10:46:57 +0200

 Hello,


 On Tue, Aug 02, 2011 at 02:53:02AM +0000, dholland@NetBSD.org wrote:
 > Synopsis: can't read data from SuperTop IDE Bridge (umass)
 > 
 > State-Changed-From-To: open->feedback
 > State-Changed-By: dholland@NetBSD.org
 > State-Changed-When: Tue, 02 Aug 2011 02:53:01 +0000
 > State-Changed-Why:
 > Does it work now as committed?


 maybe it is the best to ignore the residue field completely and
 calculate for oneself.  This removes the need of reading the additional
 information from the transfer result data and the check if the residue
 and the calculated residue are the same.

 Even though Linux has a quirk for that, Darwin [1] just ignores this
 and I think it is a good idea.  Haiku [2] ignores the residue, too, and
 calculates it by itself.  Nobody seems to have a problem there.


 [1] http://www.opensource.apple.com/source/IOUSBMassStorageClass/IOUSBMassStorageClass-261.0.3/USBMassStorageClassBulkOnly.cpp
 [2] http://dev.haiku-os.org/ticket/6604


 --
 Matthias Kretschmer

State-Changed-From-To: feedback->open
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Mon, 30 Apr 2012 23:04:19 +0000
State-Changed-Why:
Feedback was received last August, and should be looked at by someone
who knows more about USB than I do.


From: "Matthias Drochner" <drochner@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/42225 CVS commit: src/sys/dev/usb
Date: Fri, 24 Aug 2012 12:20:03 +0000

 Module Name:	src
 Committed By:	drochner
 Date:		Fri Aug 24 12:20:02 UTC 2012

 Modified Files:
 	src/sys/dev/usb: umass.c umass_quirks.c umassvar.h

 Log Message:
 Another contribution to PR kern/42225 which will hopefully
 bring the story to an end:

 Always ignore the residue from the CSW, just use the real
 transfer length counted by the USB stack. This was first
 proposed by Markus Kilbinger but unfortunately ignored
 later. (Too many cooks...)
 According to Matthias Kretschmer, Darwin and Haiku do
 the same.

 Remove the "UMASS_QUIRK_IGNORE_RESIDUE" quirk which was
 just for the one "SuperTop" device mentioned in the PR.
 This device was successfully tested by Matthias Kretschmer /
 Ignatios Souvatzis.

 I've tested the patch with various other devices and
 didn't find regressions.


 To generate a diff of this commit:
 cvs rdiff -u -r1.145 -r1.146 src/sys/dev/usb/umass.c
 cvs rdiff -u -r1.93 -r1.94 src/sys/dev/usb/umass_quirks.c
 cvs rdiff -u -r1.33 -r1.34 src/sys/dev/usb/umassvar.h

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: Markus W Kilbinger <mk@kilbi.de>
To: gnats-bugs@NetBSD.org
Cc: martin@NetBSD.org,
    gnats-admin@netbsd.org,
    netbsd-bugs@netbsd.org,
    kretschm@cs.uni-bonn.de
Subject: Re: PR/42225 CVS commit: src/sys/dev/usb
Date: Sat, 25 Aug 2012 11:07:35 +0200

 >>>>> "Matthias" == Matthias Drochner <drochner@netbsd.org> writes:

     Matthias>  Modified Files:
     Matthias>  	src/sys/dev/usb: umass.c umass_quirks.c umassvar.h

     Matthias>  Log Message: Another contribution to PR kern/42225
     Matthias>  which will hopefully bring the story to an end:

     Matthias>  Always ignore the residue from the CSW, just use the
     Matthias>  real transfer length counted by the USB stack.

     Matthias>  To generate a diff of this commit:
     Matthias>  cvs rdiff -u -r1.145 -r1.146 src/sys/dev/usb/umass.c
     Matthias>  cvs rdiff -u -r1.93 -r1.94 src/sys/dev/usb/umass_quirks.c
     Matthias>  cvs rdiff -u -r1.33 -r1.34 src/sys/dev/usb/umassvar.h

 Fine! :-)

 What abount netbsd-* pullups?

 Markus.

State-Changed-From-To: open->closed
State-Changed-By: prlw1@NetBSD.org
State-Changed-When: Tue, 05 Nov 2019 11:43:13 +0000
State-Changed-Why:
Fixed and the pullups effectively happened by waiting ;-)


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.43 2018/01/16 07:36:43 maya Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2017 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.