From nobody Mon Apr 28 04:00:17 2025 X-Original-To: freebsd-net@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Zm8qp0S85z5tn2J for ; Mon, 28 Apr 2025 04:00:38 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Zm8qn0lSkz40BR for ; Mon, 28 Apr 2025 04:00:37 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); spf=pass (mx1.freebsd.org: domain of adrian.chadd@gmail.com designates 209.85.167.53 as permitted sender) smtp.mailfrom=adrian.chadd@gmail.com Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-54e7967cf67so4573086e87.0 for ; Sun, 27 Apr 2025 21:00:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745812833; x=1746417633; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=eWQhn7TFEZOc1o4LBY/ysELWwBy557W+GmJr5C2R+ZQ=; b=AY1P9M2VHW8fBlEykOkfeiMf1/jbN+gMWDLbi1Mekq6NgMw+zMxubLM6lbwl3FFVTn 6ZdMXVcF+MUKo9mZwR88oeQt4Uy7iVlOs97//WAu16Ytp25H2CP04xlBDzO4danATxmi HLqpwH+8dnVpwHyRkzPX8dXJbZl3VMB7+t+HBoKipGA7n/NNFMV/5NN7V3ptGQSF+Yvu tcNq7hib4CZCKcLevJeLsp9xngpg7YWG7zuHDPDlZ2uJaMD5Tff/izVwN8Drax4L6+GR JA3Rx2Ey43lMzZf6yLHKrNG9f4lh3OAjPjli7C47Ec87kQajpvGoJcmNn/PDMar97XbE KH0w== X-Gm-Message-State: AOJu0Yy90sLMMMbuVhjie38HY0IElRWwD5x3MnJL/2EpieFbkVLywtEz 86glVL+ImNoV+gsFstbxePoznGsvh8eaVatP38O5ZflvJsUO63qwdiChSWjM1N8uRRCfdkaTWhX i2yh5k8A9LnZqvArVJUHyJbs/h8vMCAxe X-Gm-Gg: ASbGncvBep890pObELGpDPD0g2647YJ03tH+U0RyhVz77fcFpvqEUI0yE6VPHcrVC+Y bl/9/4XVS+4iD0OLVQ5l3XX9T4up6kSKpLjY2HMe58Lnaqksx119zSUFk4qOF55eE8jh+HhspXu tWGyX89Zwep5Fnm0C6VorgM3t6N6m5RYDkpA== X-Google-Smtp-Source: AGHT+IFIMb3xqGECNtejWKISns65WQ1QNbkmhYYPXKPXfUCjnfXddh5qR/OkaXgcAT9w9QkNyu+BiGbM2OJiXo2HSpg= X-Received: by 2002:a2e:a58b:0:b0:30b:971c:96e6 with SMTP id 38308e7fff4ca-319084c61ccmr38448391fa.26.1745812833180; Sun, 27 Apr 2025 21:00:33 -0700 (PDT) List-Id: Networking and TCP/IP with FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-net List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-net@FreeBSD.org MIME-Version: 1.0 From: Adrian Chadd Date: Sun, 27 Apr 2025 21:00:17 -0700 X-Gm-Features: ATxdqUG7kM79O0alX0XvuVu6B83x5HSZzKJCqVTZe1GDfIZ0G7yWebaz1saaDC8 Message-ID: Subject: ixgbe, mdio, and marvell ethernet switches To: freebsd-net@freebsd.org Content-Type: multipart/mixed; boundary="000000000000c440600633ceb9da" X-Spamd-Result: default: False [1.29 / 15.00]; NEURAL_SPAM_MEDIUM(1.00)[1.000]; NEURAL_SPAM_LONG(1.00)[0.997]; NEURAL_HAM_SHORT(-0.80)[-0.804]; FORGED_SENDER(0.30)[adrian@freebsd.org,adrianchadd@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17:c]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; MIME_GOOD(-0.10)[multipart/mixed,multipart/alternative,text/plain]; TAGGED_FROM(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; RCPT_COUNT_ONE(0.00)[1]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; ARC_NA(0.00)[]; HAS_ATTACHMENT(0.00)[]; MISSING_XM_UA(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; PREVIOUSLY_DELIVERED(0.00)[freebsd-net@freebsd.org]; TO_DN_NONE(0.00)[]; FROM_NEQ_ENVFROM(0.00)[adrian@freebsd.org,adrianchadd@gmail.com]; RCVD_IN_DNSWL_NONE(0.00)[209.85.167.53:from]; MLMMJ_DEST(0.00)[freebsd-net@freebsd.org]; TO_DOM_EQ_FROM_DOM(0.00)[]; R_DKIM_NA(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.167.53:from]; FROM_HAS_DN(0.00)[] X-Rspamd-Queue-Id: 4Zm8qn0lSkz40BR X-Spamd-Bar: + --000000000000c440600633ceb9da Content-Type: multipart/alternative; boundary="000000000000c4405d0633ceb9d8" --000000000000c4405d0633ceb9d8 Content-Type: text/plain; charset="UTF-8" A few weeks ago I started poking at some netgate hardware to use as freebsd wifi test boxes in my little test lab here. The two I'm using are ADI (now Silicom) boxes that needed some fun deep dives into BIOS versions, interrupt storms and compatible mini-PCIe cards (some just don't actually get probed!) Anyway. I ended up stumbling across one of the Silicom OEM boxes that got turned into an AT&T open compute platform box back in 2018/2019 that has an integrated Marvell 88E6190X switch hanging off of the intel X553 backplane (the ixgbe driver.) However, it wasn't supported in FreeBSD, and the instructions to get the switch up in linux were hit and miss. People had gotten the etherswitch driver patched to work, but only against pfsense plus, which has the MDIO support for ixgbe. But, I couldn't find any diffs online to implement it. So I did what I normally do, I got distracted from wifi stuff and decided to get it going. Having a working amd64 etherswitch platform would be nice for general etherswitch tinkering outside of the arm/mips/ppc world, and then no-one would have any excuses getting involved in improving it! It took a few days, but I figured it out. Here's the fun deep dive. Firstly, DPDK introduced some support for the MDIO bus being exposed on the X553, but with a couple caveats: * it started as clause 22 (which is PHYs pre-2000) diff , but it eventually got turned into a clause 45 (PHYs post-2000) diff, and they .. just deleted the clause 22 code * the MDIO support is really focused on talking MDIO to the PHYs internally inside the X550 series hardware - clause 45, fixed PHY number, etc So it wasn't enough to really bring up the marvell switch, as these all seem to want clause 22 MDIO commands. Then i went digging into the X550 and X553 datasheets. * the X550 datasheet says that it only supports clause 45 * the X553 datasheet says it supports both clause 22 and clause 45, but makes a point of (a) telling you if you need to, you should speak into intel customer engineering, and (b) deleted the MDIO registers from their register programming guide Ok, so the X553 does do Clause 22, but .. how. Then I went through the DPDK and linux driver history and lo and behold, linux actually HAS the correct mdio bus support! specifically, they have a /separate/ mdio bus driver hiding in their X550/X553 support, which: * handles both clause 22 and clause 45 IO * does the correct semaphore handshaking, since MDIO is shared between multiple ethernet MACs, hardware and firmware * exposes only one MDIO bus on the X553, as it only has a single MDIO bus shared between the 1 to 4 MACs the chipset can expose Armed with that I committed some driver sins and got it working. The in progress absolutely disgusting hack diff is attached, so it won't get lost / forgotten. Anyway, on the etherswitch side I did a bunch of cleanup to support etherswitch/miiproxy/e6000sw as modules, and fix a bunch of e6000sw bugs, and they're in -HEAD: * https://reviews.freebsd.org/D50024 to https://reviews.freebsd.org/D50031 are all cleanups * https://reviews.freebsd.org/D50044 adds the 88E6190X support But then the next fun problem - none of the ports came up. Well, I lie. Only one of them came up. I went digging into the PHY registers and found that the marvell gige PHY code didn't actually power up the PHY if it was powered down, so I fixed that too: * https://reviews.freebsd.org/D50045 Then with some hints, I could see and use all of the switch ports on the AT&T ATT-150 CPE device: hint.mdio.0.at="ix0" hint.e6000sw.0.addr="0x10" hint.e6000sw.0.port0disabled="1" hint.e6000sw.0.is6190x=1 hint.e6000sw.0.port9cpu=1 hint.e6000sw.0.port10cpu=1 hint.e6000sw.0.port9speed=2500 hint.e6000sw.0.port10speed=2500 Then, I also acquired a wireguard M270 box, as it also apprently has a marvell switch attached to an X553 backplane, and none of the ethernet ports work at all out of the box. The above hints worked on that too - with addr set to "0x0" instead of "0x10". So, now i have two Atom C3558 boxes w/ X553 2.5gbit backplane ports hooked into an 8 port marvell gige switch working on -HEAD (save the ixgbe mdio diff that I attached; I'll sort that out soon). All it took was like $250 in hardware, staring at intel documentation and linux/dpdk driver code, and three evenings thinking to myself "surely this can't be THAT hard. --000000000000c4405d0633ceb9d8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
A few weeks ago I started poking at some netgate hard= ware to use as freebsd wifi test boxes in my little test lab here. The two = I'm using are ADI (now Silicom) boxes that needed some fun deep dives i= nto BIOS versions, interrupt storms and compatible mini-PCIe cards (some ju= st don't actually get probed!)

Anyway.

I ended up stumbling across one of the Silicom OEM boxes = that got turned into an AT&T open compute platform box back in 2018/201= 9 that has an integrated Marvell 88E6190X switch hanging off of the intel X= 553 backplane (the ixgbe driver.) However, it wasn't supported in FreeB= SD, and the instructions to get the switch up in linux were hit and miss.

People had gotten the etherswitch driver patched to= work, but only against pfsense plus, which has the MDIO support for ixgbe.= But, I couldn't find any diffs online to implement it.

<= /div>
So I did what I normally do, I got distracted from wifi stuff and= decided to get it going. Having a working amd64 etherswitch platform would= be nice for general etherswitch tinkering outside of the arm/mips/ppc worl= d, and then no-one would have any excuses getting involved in improving it!=

It took a few days, but I figured it out. Here= 9;s the fun deep dive.

Firstly, DPDK introduced so= me support for the MDIO bus being exposed on the X553, but with a couple ca= veats:

* it started as clause 22 (which is PHYs pr= e-2000) diff , but it eventually got turned into a clause 45 (PHYs post-200= 0) diff, and they .. just deleted the clause 22 code
* the MDIO s= upport is really focused on talking MDIO to the PHYs internally inside the = X550 series hardware - clause 45, fixed PHY number, etc

So it wasn't enough to really bring up the marvell switch, as the= se all seem to want clause 22 MDIO commands.

Then = i went digging into the X550 and X553 datasheets.

= * the X550 datasheet says that it only supports clause 45
* the X= 553 datasheet says it supports both clause 22 and clause 45, but makes a po= int of (a) telling you if you need to, you should speak into intel customer= engineering, and (b) deleted the MDIO registers from their register progra= mming guide

Ok, so the X553 does do Clause 22, but= .. how.

Then I went through the DPDK and linux dr= iver history and lo and behold, linux actually HAS the correct mdio bus sup= port! specifically, they have a /separate/ mdio bus driver hiding in their = X550/X553 support, which:

* handles both clause 22= and clause 45 IO
* does the correct semaphore handshaking, since= MDIO is shared between multiple ethernet MACs, hardware and firmware
=
* exposes only one MDIO bus on the X553, as it only has a single MDIO = bus shared between the 1 to 4 MACs the chipset can expose

Armed with that I committed some driver sins and got it working. Th= e in progress absolutely disgusting hack diff is attached, so it won't = get lost / forgotten.

Anyway, on the etherswitch s= ide I did a bunch of cleanup to support etherswitch/miiproxy/e6000sw as mod= ules, and fix a bunch of e6000sw bugs, and they're in -HEAD:
=
* https://reviews.freebsd.org/D500= 44 adds the 88E6190X support

But then the next= fun problem - none of the ports came up. Well, I lie. Only one of them cam= e up. I went digging into the PHY registers and found that the marvell gige= PHY code didn't actually power up the PHY if it was powered down, so I= fixed that too:


=
Then with some hints, I could see and use all of the switch ports on t= he AT&T ATT-150 CPE device:

hint.mdio.0.at=3D"ix0"
hint.e6000sw.0.addr= =3D"0x10"
hint.e6000sw.0.port0disabled=3D"1"<= /div>
hint.e6000sw.0.is6190x=3D1
hint.e6000sw.0.port9cpu=3D1
hint= .e6000sw.0.port10cpu=3D1
hint.e6000sw.0.port9speed=3D2500
hint.e6000s= w.0.port10speed=3D2500

Then, I also acquired a wir= eguard M270 box, as it also apprently has a marvell switch attached to an X= 553 backplane, and none of the ethernet ports work at all out of the box.
The above hints worked on that too - with addr set to "0x0&qu= ot; instead of "0x10".

So, now i have tw= o Atom C3558 boxes w/ X553 2.5gbit backplane ports hooked into an 8 port ma= rvell gige switch working on -HEAD (save the ixgbe mdio diff that I attache= d; I'll sort that out soon). All it took was like $250 in hardware, sta= ring at intel documentation and linux/dpdk driver code, and three evenings = thinking to myself "surely this can't be THAT hard.
--000000000000c4405d0633ceb9d8-- --000000000000c440600633ceb9da Content-Type: application/octet-stream; name="20250427-ixgbe-mdio-in-progress-1.diff" Content-Disposition: attachment; filename="20250427-ixgbe-mdio-in-progress-1.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ma0jl3o70 ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaWZfaXguYyBiL3N5cy9kZXYvaXhnYmUvaWZfaXgu YwppbmRleCA5NTlhZmE3OWU3ZGEuLjg4OTRjYmUxZmY1NiAxMDA2NDQKLS0tIGEvc3lzL2Rldi9p eGdiZS9pZl9peC5jCisrKyBiL3N5cy9kZXYvaXhnYmUvaWZfaXguYwpAQCAtMzYsMTAgKzM2LDEy IEBACiAjaW5jbHVkZSAib3B0X3Jzcy5oIgogCiAjaW5jbHVkZSAiaXhnYmUuaCIKKyNpbmNsdWRl ICJtZGlvX2lmLmgiCiAjaW5jbHVkZSAiaXhnYmVfc3Jpb3YuaCIKICNpbmNsdWRlICJpZmRpX2lm LmgiCiAKICNpbmNsdWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8ZGV2L21kaW8vbWRpby5o PgogI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX2tlcm4uaD4KIAogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgpAQCAtMjU0LDYgKzI1NiwxMzkgQEAgc3RhdGljIHZvaWQgaXhnYmVfaGFuZGxlX21zZih2b2lk ICopOwogc3RhdGljIHZvaWQgaXhnYmVfaGFuZGxlX21vZCh2b2lkICopOwogc3RhdGljIHZvaWQg aXhnYmVfaGFuZGxlX3BoeSh2b2lkICopOwogCitzdGF0aWMgczMyCitpeGdiZV9yZWFkX3BoeV9y ZWdfbWRpXzIyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBwaHksIHUxNiByZWcsIHUxNiAqcGh5 X2RhdGEpCit7CisJdTMyIGksIGRhdGEsIGNvbW1hbmQ7CisKKyAgICAgICAgLyogU2V0dXAgYW5k IHdyaXRlIHRoZSByZWFkIGNvbW1hbmQgKi8KKyAgICAgICAgY29tbWFuZCA9IChyZWcgPDwgSVhH QkVfTVNDQV9ERVZfVFlQRV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgKHBoeSA8PCBJWEdC RV9NU0NBX1BIWV9BRERSX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICBJWEdCRV9NU0NBX09M RF9QUk9UT0NPTCB8IElYR0JFX01TQ0FfUkVBRF9BVVRPSU5DIHwKKyAgICAgICAgICAgICAgICAg IElYR0JFX01TQ0FfTURJX0NPTU1BTkQ7CisKKyAgICAgICAgSVhHQkVfV1JJVEVfUkVHKGh3LCBJ WEdCRV9NU0NBLCBjb21tYW5kKTsKKworICAgICAgICAvKiBDaGVjayBldmVyeSAxMCB1c2VjIHRv IHNlZSBpZiB0aGUgYWNjZXNzIGNvbXBsZXRlZC4KKyAgICAgICAgICogVGhlIE1ESSBDb21tYW5k IGJpdCB3aWxsIGNsZWFyIHdoZW4gdGhlIG9wZXJhdGlvbiBpcworICAgICAgICAgKiBjb21wbGV0 ZQorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElYR0JFX01ESU9fQ09NTUFO RF9USU1FT1VUOyBpKyspIHsKKyAgICAgICAgICAgICAgICB1c2VjX2RlbGF5KDEwKTsKKworICAg ICAgICAgICAgICAgIGNvbW1hbmQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVNDQSk7Cisg ICAgICAgICAgICAgICAgaWYgKCEoY29tbWFuZCAmIElYR0JFX01TQ0FfTURJX0NPTU1BTkQpKQor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo Y29tbWFuZCAmIElYR0JFX01TQ0FfTURJX0NPTU1BTkQpIHsKKyAgICAgICAgICAgICAgICBFUlJP Ul9SRVBPUlQxKElYR0JFX0VSUk9SX1BPTExJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUEhZIHJlYWQgY29tbWFuZCBkaWQgbm90IGNvbXBsZXRlLlxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuIElYR0JFX0VSUl9QSFk7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZWFk IG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4gIEdldCB0aGUgZGF0YSBmcm9tIE1TUldEICovCisgICAg ICAgIGRhdGEgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVNSV0QpOworICAgICAgICBkYXRh ID4+PSBJWEdCRV9NU1JXRF9SRUFEX0RBVEFfU0hJRlQ7CisgICAgICAgICpwaHlfZGF0YSA9ICh1 MTYpZGF0YTsKKworICAgICAgICByZXR1cm4gSVhHQkVfU1VDQ0VTUzsKK30KKworCitzdGF0aWMg czMyCitpeGdiZV93cml0ZV9waHlfcmVnX21kaV8yMihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYg cGh5LCB1MTYgcmVnLCB1MTYgcGh5X2RhdGEpCit7CisgICAgICAgIHUzMiBpLCBjb21tYW5kOwor CisgICAgICAgIC8qIFB1dCB0aGUgZGF0YSBpbiB0aGUgTURJIHNpbmdsZSByZWFkIGFuZCB3cml0 ZSBkYXRhIHJlZ2lzdGVyKi8KKyAgICAgICAgSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NU1JX RCwgKHUzMilwaHlfZGF0YSk7CisKKyAgICAgICAgLyogU2V0dXAgYW5kIHdyaXRlIHRoZSB3cml0 ZSBjb21tYW5kICovCisgICAgICAgIGNvbW1hbmQgPSAocmVnIDw8IElYR0JFX01TQ0FfREVWX1RZ UEVfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAgIChwaHkgPDwgSVhHQkVfTVNDQV9QSFlfQURE Ul9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgSVhHQkVfTVNDQV9PTERfUFJPVE9DT0wgfCBJ WEdCRV9NU0NBX1dSSVRFIHwKKyAgICAgICAgICAgICAgICAgIElYR0JFX01TQ0FfTURJX0NPTU1B TkQ7CisKKyAgICAgICAgSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NU0NBLCBjb21tYW5kKTsK KworICAgICAgICAvKiBDaGVjayBldmVyeSAxMCB1c2VjIHRvIHNlZSBpZiB0aGUgYWNjZXNzIGNv bXBsZXRlZC4KKyAgICAgICAgICogVGhlIE1ESSBDb21tYW5kIGJpdCB3aWxsIGNsZWFyIHdoZW4g dGhlIG9wZXJhdGlvbiBpcworICAgICAgICAgKiBjb21wbGV0ZQorICAgICAgICAgKi8KKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IElYR0JFX01ESU9fQ09NTUFORF9USU1FT1VUOyBpKyspIHsKKyAg ICAgICAgICAgICAgICB1c2VjX2RlbGF5KDEwKTsKKworICAgICAgICAgICAgICAgIGNvbW1hbmQg PSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVNDQSk7CisgICAgICAgICAgICAgICAgaWYgKCEo Y29tbWFuZCAmIElYR0JFX01TQ0FfTURJX0NPTU1BTkQpKQorICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29tbWFuZCAmIElYR0JFX01TQ0Ff TURJX0NPTU1BTkQpIHsKKyAgICAgICAgICAgICAgICBFUlJPUl9SRVBPUlQxKElYR0JFX0VSUk9S X1BPTExJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEhZIHdyaXRlIGNtZCBk aWRuJ3QgY29tcGxldGVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBJWEdCRV9FUlJfUEhZ OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIElYR0JFX1NVQ0NFU1M7Cit9CisKK3N0YXRp YyBpbnQKK2l4Z2JlX21kaW9fcmVhZHJlZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcp Cit7CisJaWZfY3R4X3QgY3R4ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpeGdi ZV9zb2Z0YyAqc2MgPSBpZmxpYl9nZXRfc29mdGMoY3R4KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3 ID0gJnNjLT5odzsKKwl1aW50MTZfdCB2YWwgPSAwOworCWludDMyX3QgcmV0ID0gMDsKKworI2lm IDAKKwkvKiBUaGUgaW50ZXJmYWNlIHRha2VzIGEgcmVnaXN0ZXIsIGNsYXVzZSA0NSBkZXZ0eXBl IGFuZCBkYXRhICovCisJcmV0ID0gaHctPnBoeS5vcHMucmVhZF9yZWdfbWRpKGh3LCByZWcsIHBo eSwgJnZhbCk7CisjZWxzZQorCXUzMiBnc3NyID0gaHctPnBoeS5waHlfc2VtYXBob3JlX21hc2sg fCBJWEdCRV9HU1NSX1BIWTBfU00gfCBJWEdCRV9HU1NSX1RPS0VOX1NNOworCisJaWYgKGh3LT5t YWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBnc3NyKSkgeworCQlkZXZpY2VfcHJpbnRmKGRl diwgIiVzOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAo LTEpOworCX0KKwlyZXQgPSBpeGdiZV9yZWFkX3BoeV9yZWdfbWRpXzIyKGh3LCBwaHksIHJlZywg JnZhbCk7CisJaWYgKHJldCAhPSBJWEdCRV9TVUNDRVNTKSB7CisJCWRldmljZV9wcmludGYoZGV2 LCAiJXM6IHJlYWRfbWRpXzIyIGZhaWxlZCAoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwl9CisJ aHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIGdzc3IpOworCSh2b2lkKSByZXQ7IC8v IFhYWCByZXR1cm4gYSBzdWl0YWJsZSBlcnJvciBpZiB0aGlzIGlzIG5vbi16ZXJvCisjZW5kaWYK KwlyZXR1cm4gKHZhbCk7Cit9CisKK3N0YXRpYyBpbnQKK2l4Z2JlX21kaW9fd3JpdGVyZWcoZGV2 aWNlX3QgZGV2LCBpbnQgcGh5LCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwlpZl9jdHhfdCBjdHgg PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGl4Z2JlX3NvZnRjICpzYyA9IGlmbGli X2dldF9zb2Z0YyhjdHgpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmc2MtPmh3OworCWludDMy X3QgcmV0OworCisjaWYgMAorCXJldCA9IGh3LT5waHkub3BzLndyaXRlX3JlZ19tZGkoaHcsIHJl ZywgcGh5LCBkYXRhKTsKKyNlbHNlCisJdTMyIGdzc3IgPSBody0+cGh5LnBoeV9zZW1hcGhvcmVf bWFzayB8IElYR0JFX0dTU1JfUEhZMF9TTSB8IElYR0JFX0dTU1JfVE9LRU5fU007CisKKwlpZiAo aHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIGdzc3IpKSB7CisJCWRldmljZV9wcmlu dGYoZGV2LCAiJXM6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2tcbiIsIF9fZnVuY19fKTsKKwkJcmV0 dXJuICgtMSk7CisJfQorCXJldCA9IGl4Z2JlX3dyaXRlX3BoeV9yZWdfbWRpXzIyKGh3LCBwaHks IHJlZywgZGF0YSk7CisJaWYgKHJldCAhPSBJWEdCRV9TVUNDRVNTKSB7CisJCWRldmljZV9wcmlu dGYoZGV2LCAiJXM6IHdyaXRlX21kaV8yMiBmYWlsZWQgKCVkKVxuIiwgX19mdW5jX18sIHJldCk7 CisJfQorCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBnc3NyKTsKKwkodm9pZCkg cmV0OyAvLyBYWFggcmV0dXJuIGEgc3VpdGFibGUgZXJyb3IgaWYgdGhpcyBpcyBub24temVybwor I2VuZGlmCisJcmV0dXJuICgwKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogIEZyZWVCU0Qg RGV2aWNlIEludGVyZmFjZSBFbnRyeSBQb2ludHMKICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNzEs NiArNDA2LDEzIEBAIHN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaXhfbWV0aG9kc1tdID0gewogCURF Vk1FVEhPRChwY2lfaW92X3VuaW5pdCwgaWZsaWJfZGV2aWNlX2lvdl91bmluaXQpLAogCURFVk1F VEhPRChwY2lfaW92X2FkZF92ZiwgaWZsaWJfZGV2aWNlX2lvdl9hZGRfdmYpLAogI2VuZGlmIC8q IFBDSV9JT1YgKi8KKworCURFVk1FVEhPRChidXNfYWRkX2NoaWxkLAlkZXZpY2VfYWRkX2NoaWxk X29yZGVyZWQpLAorI2lmIDEKKwlERVZNRVRIT0QobWRpb19yZWFkcmVnLCBpeGdiZV9tZGlvX3Jl YWRyZWcpLAorCURFVk1FVEhPRChtZGlvX3dyaXRlcmVnLCBpeGdiZV9tZGlvX3dyaXRlcmVnKSwK KyNlbmRpZgorCiAJREVWTUVUSE9EX0VORAogfTsKIApAQCAtMjc5LDEwICs0MjEsMTIgQEAgc3Rh dGljIGRyaXZlcl90IGl4X2RyaXZlciA9IHsKIH07CiAKIERSSVZFUl9NT0RVTEUoaXgsIHBjaSwg aXhfZHJpdmVyLCAwLCAwKTsKK0RSSVZFUl9NT0RVTEUobWRpbywgaXgsIG1kaW9fZHJpdmVyLCAw LCAwKTsKIElGTElCX1BOUF9JTkZPKHBjaSwgaXhfZHJpdmVyLCBpeGdiZV92ZW5kb3JfaW5mb19h cnJheSk7CiBNT0RVTEVfREVQRU5EKGl4LCBwY2ksIDEsIDEsIDEpOwogTU9EVUxFX0RFUEVORChp eCwgZXRoZXIsIDEsIDEsIDEpOwogTU9EVUxFX0RFUEVORChpeCwgaWZsaWIsIDEsIDEsIDEpOwor TU9EVUxFX0RFUEVORChpeCwgbWRpbywgMSwgMSwgMSk7CiAKIHN0YXRpYyBkZXZpY2VfbWV0aG9k X3QgaXhnYmVfaWZfbWV0aG9kc1tdID0gewogCURFVk1FVEhPRChpZmRpX2F0dGFjaF9wcmUsIGl4 Z2JlX2lmX2F0dGFjaF9wcmUpLApkaWZmIC0tZ2l0IGEvc3lzL2Rldi9peGdiZS9peGdiZV9waHku YyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfcGh5LmMKaW5kZXggMmE3MzVlYWQ5YTEyLi4yYmZiMjg2 YzkxYzQgMTAwNjQ0Ci0tLSBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfcGh5LmMKKysrIGIvc3lzL2Rl di9peGdiZS9peGdiZV9waHkuYwpAQCAtNTk5LDYgKzU5OSw4IEBAIHMzMiBpeGdiZV9yZWFkX3Bo eV9yZWdfbWRpKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWdfYWRkciwgdTMyIGRldmljZV90 eXBlLAogewogCXUzMiBpLCBkYXRhLCBjb21tYW5kOwogCisJcHJpbnRmKCIlczogY2FsbGVkOyBy ZWdfYWRkcj0lZCwgdHlwZT0lZCwgcGh5LmFkZHI9JWRcbiIsIF9fZnVuY19fLCByZWdfYWRkciwg ZGV2aWNlX3R5cGUsIGh3LT5waHkuYWRkcik7CisKIAkvKiBTZXR1cCBhbmQgd3JpdGUgdGhlIGFk ZHJlc3MgY3ljbGUgY29tbWFuZCAqLwogCWNvbW1hbmQgPSAoKHJlZ19hZGRyIDw8IElYR0JFX01T Q0FfTlBfQUREUl9TSElGVCkgIHwKIAkJICAgKGRldmljZV90eXBlIDw8IElYR0JFX01TQ0FfREVW X1RZUEVfU0hJRlQpIHwKQEAgLTYzNiw2ICs2MzgsNyBAQCBzMzIgaXhnYmVfcmVhZF9waHlfcmVn X21kaShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnX2FkZHIsIHUzMiBkZXZpY2VfdHlwZSwK IAkJICAgKGh3LT5waHkuYWRkciA8PCBJWEdCRV9NU0NBX1BIWV9BRERSX1NISUZUKSB8CiAJCSAg IChJWEdCRV9NU0NBX1JFQUQgfCBJWEdCRV9NU0NBX01ESV9DT01NQU5EKSk7CiAKKwlwcmludGYo IiVzOiB3cml0aW5nIDB4JTA4eCAtPiBNU0NBXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CiAJSVhH QkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NU0NBLCBjb21tYW5kKTsKIAogCS8qCkBAIC02NTIsNiAr NjU1LDcgQEAgczMyIGl4Z2JlX3JlYWRfcGh5X3JlZ19tZGkoc3RydWN0IGl4Z2JlX2h3ICpodywg dTMyIHJlZ19hZGRyLCB1MzIgZGV2aWNlX3R5cGUsCiAJfQogCiAJaWYgKChjb21tYW5kICYgSVhH QkVfTVNDQV9NRElfQ09NTUFORCkgIT0gMCkgeworCQlwcmludGYoIiVzOiB0aW1lb3V0IVxuIiwg X19mdW5jX18pOwogCQlFUlJPUl9SRVBPUlQxKElYR0JFX0VSUk9SX1BPTExJTkcsICJQSFkgcmVh ZCBjb21tYW5kIGRpZG4ndCBjb21wbGV0ZVxuIik7CiAJCURFQlVHT1VUKCJQSFkgcmVhZCBjb21t YW5kIGRpZG4ndCBjb21wbGV0ZSwgcmV0dXJuaW5nIElYR0JFX0VSUl9QSFlcbiIpOwogCQlyZXR1 cm4gSVhHQkVfRVJSX1BIWTsKQEAgLTY2Miw2ICs2NjYsNyBAQCBzMzIgaXhnYmVfcmVhZF9waHlf cmVnX21kaShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnX2FkZHIsIHUzMiBkZXZpY2VfdHlw ZSwKIAkgKiBmcm9tIE1TUldECiAJICovCiAJZGF0YSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdC RV9NU1JXRCk7CisJcHJpbnRmKCIlczogcmVhZCAweCUwOHggPC0gTVNSV0RcbiIsIF9fZnVuY19f LCBkYXRhKTsKIAlkYXRhID4+PSBJWEdCRV9NU1JXRF9SRUFEX0RBVEFfU0hJRlQ7CiAJKnBoeV9k YXRhID0gKHUxNikoZGF0YSk7CiAKQEAgLTcwNyw2ICs3MTIsOCBAQCBzMzIgaXhnYmVfd3JpdGVf cGh5X3JlZ19tZGkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAogewogCXUzMiBp LCBjb21tYW5kOwogCisJcHJpbnRmKCIlczogY2FsbGVkOyByZWdfYWRkcj0lZCwgdHlwZT0lZCwg cGh5LmFkZHI9JWRcbiIsIF9fZnVuY19fLCByZWdfYWRkciwgZGV2aWNlX3R5cGUsIGh3LT5waHku YWRkcik7CisKIAkvKiBQdXQgdGhlIGRhdGEgaW4gdGhlIE1ESSBzaW5nbGUgcmVhZCBhbmQgd3Jp dGUgZGF0YSByZWdpc3RlciovCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NU1JXRCwgKHUz MilwaHlfZGF0YSk7CiAKQEAgLTcxNiw2ICs3MjMsNyBAQCBzMzIgaXhnYmVfd3JpdGVfcGh5X3Jl Z19tZGkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAogCQkgICAoaHctPnBoeS5h ZGRyIDw8IElYR0JFX01TQ0FfUEhZX0FERFJfU0hJRlQpIHwKIAkJICAgKElYR0JFX01TQ0FfQURE Ul9DWUNMRSB8IElYR0JFX01TQ0FfTURJX0NPTU1BTkQpKTsKIAorCXByaW50ZigiJXM6ICgxKSB3 cml0aW5nIDB4JTA4eCAtPiBNU0NBXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CiAJSVhHQkVfV1JJ VEVfUkVHKGh3LCBJWEdCRV9NU0NBLCBjb21tYW5kKTsKIAogCS8qCkBAIC03MzIsNiArNzQwLDcg QEAgczMyIGl4Z2JlX3dyaXRlX3BoeV9yZWdfbWRpKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBy ZWdfYWRkciwKIAl9CiAKIAlpZiAoKGNvbW1hbmQgJiBJWEdCRV9NU0NBX01ESV9DT01NQU5EKSAh PSAwKSB7CisJCXByaW50ZigiJXM6IHRpbWVvdXQgKDEpIVxuIiwgX19mdW5jX18pOwogCQlFUlJP Ul9SRVBPUlQxKElYR0JFX0VSUk9SX1BPTExJTkcsICJQSFkgYWRkcmVzcyBjbWQgZGlkbid0IGNv bXBsZXRlXG4iKTsKIAkJcmV0dXJuIElYR0JFX0VSUl9QSFk7CiAJfQpAQCAtNzQ1LDYgKzc1NCw3 IEBAIHMzMiBpeGdiZV93cml0ZV9waHlfcmVnX21kaShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIg cmVnX2FkZHIsCiAJCSAgIChody0+cGh5LmFkZHIgPDwgSVhHQkVfTVNDQV9QSFlfQUREUl9TSElG VCkgfAogCQkgICAoSVhHQkVfTVNDQV9XUklURSB8IElYR0JFX01TQ0FfTURJX0NPTU1BTkQpKTsK IAorCXByaW50ZigiJXM6ICgyKSB3cml0aW5nIDB4JTA4eCAtPiBNU0NBXG4iLCBfX2Z1bmNfXywg Y29tbWFuZCk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NU0NBLCBjb21tYW5kKTsKIAog CS8qCkBAIC03NjEsNiArNzcxLDcgQEAgczMyIGl4Z2JlX3dyaXRlX3BoeV9yZWdfbWRpKHN0cnVj dCBpeGdiZV9odyAqaHcsIHUzMiByZWdfYWRkciwKIAl9CiAKIAlpZiAoKGNvbW1hbmQgJiBJWEdC RV9NU0NBX01ESV9DT01NQU5EKSAhPSAwKSB7CisJCXByaW50ZigiJXM6IHRpbWVvdXQgKDIpIVxu IiwgX19mdW5jX18pOwogCQlFUlJPUl9SRVBPUlQxKElYR0JFX0VSUk9SX1BPTExJTkcsICJQSFkg d3JpdGUgY21kIGRpZG4ndCBjb21wbGV0ZVxuIik7CiAJCXJldHVybiBJWEdCRV9FUlJfUEhZOwog CX0KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfeDU1MC5jIGIvc3lzL2Rldi9peGdi ZS9peGdiZV94NTUwLmMKaW5kZXggN2YwNzE5MGY4MzJjLi41OTQ3ZDg5ZmUxMWUgMTAwNjQ0Ci0t LSBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfeDU1MC5jCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVf eDU1MC5jCkBAIC01MjAsMTUgKzUyMCwzOCBAQCBzMzIgaXhnYmVfc2h1dGRvd25fZndfcGh5KHN0 cnVjdCBpeGdiZV9odyAqaHcpCiBzdGF0aWMgczMyIGl4Z2JlX3JlYWRfcGh5X3JlZ194NTUwZW0o c3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAogCQkJCSAgICAgdTMyIGRldmljZV90 eXBlLCB1MTYgKnBoeV9kYXRhKQogewotCVVOUkVGRVJFTkNFRF80UEFSQU1FVEVSKCpodywgcmVn X2FkZHIsIGRldmljZV90eXBlLCAqcGh5X2RhdGEpOwotCXJldHVybiBJWEdCRV9OT1RfSU1QTEVN RU5URUQ7CisJczMyIHN0YXR1czsKKwl1MzIgbWFzayA9IGh3LT5waHkucGh5X3NlbWFwaG9yZV9t YXNrIHwgSVhHQkVfR1NTUl9UT0tFTl9TTTsKKworCURFQlVHRlVOQygiaXhnYmVfcmVhZF9waHlf cmVnX3g1NTBlbSIpOworCisJaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBt YXNrKSkKKwkJcmV0dXJuIElYR0JFX0VSUl9TV0ZXX1NZTkM7CisKKwlzdGF0dXMgPSBody0+cGh5 Lm9wcy5yZWFkX3JlZ19tZGkoaHcsIHJlZ19hZGRyLCBkZXZpY2VfdHlwZSwgcGh5X2RhdGEpOwor CisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIG1hc2spOworCisJcmV0dXJuIHN0 YXR1czsKIH0KIAogc3RhdGljIHMzMiBpeGdiZV93cml0ZV9waHlfcmVnX3g1NTBlbShzdHJ1Y3Qg aXhnYmVfaHcgKmh3LCB1MzIgcmVnX2FkZHIsCiAJCQkJICAgICAgdTMyIGRldmljZV90eXBlLCB1 MTYgcGh5X2RhdGEpCiB7Ci0JVU5SRUZFUkVOQ0VEXzRQQVJBTUVURVIoKmh3LCByZWdfYWRkciwg ZGV2aWNlX3R5cGUsIHBoeV9kYXRhKTsKLQlyZXR1cm4gSVhHQkVfTk9UX0lNUExFTUVOVEVEOwor CXMzMiBzdGF0dXM7CisJdTMyIG1hc2sgPSBody0+cGh5LnBoeV9zZW1hcGhvcmVfbWFzayB8IElY R0JFX0dTU1JfVE9LRU5fU007CisKKwlERUJVR0ZVTkMoIml4Z2JlX3dyaXRlX3BoeV9yZWdfeDU1 MGVtIik7CisKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIG1hc2spID09 IElYR0JFX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gaHctPnBoeS5vcHMud3JpdGVfcmVnX21kaSho dywgcmVnX2FkZHIsIGRldmljZV90eXBlLAorCQkJCQkJCXBoeV9kYXRhKTsKKwkJaHctPm1hYy5v cHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIG1hc2spOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IElY R0JFX0VSUl9TV0ZXX1NZTkM7CisJfQorCisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0y Mjc1LDExICsyMjk4LDE1IEBAIHMzMiBpeGdiZV9pbml0X3BoeV9vcHNfWDU1MGVtKHN0cnVjdCBp eGdiZV9odyAqaHcpCiAJLyogU2V0IGZ1bmN0aW9ucyBwb2ludGVycyBiYXNlZCBvbiBwaHkgdHlw ZSAqLwogCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CiAJY2FzZSBpeGdiZV9waHlfeDU1MGVtX2t4 NDoKKwkJcHJpbnRmKCIlczogeDU1MGVtX2t4NFxuIiwgX19mdW5jX18pOwogCQlwaHktPm9wcy5z ZXR1cF9saW5rID0gTlVMTDsKIAkJcGh5LT5vcHMucmVhZF9yZWcgPSBpeGdiZV9yZWFkX3BoeV9y ZWdfeDU1MGVtOwogCQlwaHktPm9wcy53cml0ZV9yZWcgPSBpeGdiZV93cml0ZV9waHlfcmVnX3g1 NTBlbTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9waHlfeDU1MGVtX2tyOgorCQlwcmludGYoIiVz OiB4NTUwZW1fa3JcbiIsIF9fZnVuY19fKTsKKwkJcGh5LT5vcHMucmVhZF9yZWdfbWRpID0gaXhn YmVfcmVhZF9waHlfcmVnX21kaTsKKwkJcGh5LT5vcHMud3JpdGVfcmVnX21kaSA9IGl4Z2JlX3dy aXRlX3BoeV9yZWdfbWRpOwogCQlwaHktPm9wcy5zZXR1cF9saW5rID0gaXhnYmVfc2V0dXBfa3Jf eDU1MGVtOwogCQlwaHktPm9wcy5yZWFkX3JlZyA9IGl4Z2JlX3JlYWRfcGh5X3JlZ194NTUwZW07 CiAJCXBoeS0+b3BzLndyaXRlX3JlZyA9IGl4Z2JlX3dyaXRlX3BoeV9yZWdfeDU1MGVtOwpAQCAt MjI5MCwxMiArMjMxNywxNCBAQCBzMzIgaXhnYmVfaW5pdF9waHlfb3BzX1g1NTBlbShzdHJ1Y3Qg aXhnYmVfaHcgKmh3KQogCQlwaHktPm9wcy5yZXNldCA9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2Ug aXhnYmVfcGh5X3g1NTBlbV94Zmk6CisJCXByaW50ZigiJXM6IHg1NTBlbV94ZmlcbiIsIF9fZnVu Y19fKTsKIAkJLyogbGluayBpcyBtYW5hZ2VkIGJ5IEhXICovCiAJCXBoeS0+b3BzLnNldHVwX2xp bmsgPSBOVUxMOwogCQlwaHktPm9wcy5yZWFkX3JlZyA9IGl4Z2JlX3JlYWRfcGh5X3JlZ194NTUw ZW07CiAJCXBoeS0+b3BzLndyaXRlX3JlZyA9IGl4Z2JlX3dyaXRlX3BoeV9yZWdfeDU1MGVtOwog CQlicmVhazsKIAljYXNlIGl4Z2JlX3BoeV94NTUwZW1fZXh0X3Q6CisJCXByaW50ZigiJXM6IHg1 NTBlbV9leHRfdFxuIiwgX19mdW5jX18pOwogCQkvKiBJZiBpbnRlcm5hbCBsaW5rIG1vZGUgaXMg WEZJLCB0aGVuIHNldHVwIGlYRkkgaW50ZXJuYWwgbGluaywKIAkJICogZWxzZSBzZXR1cCBLUiBu b3cuCiAJCSAqLwpAQCAtMjMxMiwxMyArMjM0MSwxNiBAQCBzMzIgaXhnYmVfaW5pdF9waHlfb3Bz X1g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogCQlwaHktPm9wcy5yZXNldCA9IGl4Z2JlX3Jl c2V0X3BoeV90X1g1NTBlbTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9waHlfc2dtaWk6CisJCXBy aW50ZigiJXM6IHBoeV9zZ21paVxuIiwgX19mdW5jX18pOwogCQlwaHktPm9wcy5zZXR1cF9saW5r ID0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9waHlfZnc6CisJCXByaW50ZigiJXM6IHBo eV9md1xuIiwgX19mdW5jX18pOwogCQlwaHktPm9wcy5zZXR1cF9saW5rID0gaXhnYmVfc2V0dXBf ZndfbGluazsKIAkJcGh5LT5vcHMucmVzZXQgPSBpeGdiZV9yZXNldF9waHlfZnc7CiAJCWJyZWFr OwogCWRlZmF1bHQ6CisJCXByaW50ZigiJXM6IGRlZmF1bHRcbiIsIF9fZnVuY19fKTsKIAkJYnJl YWs7CiAJfQogCXJldHVybiByZXRfdmFsOwpAQCAtMjMzMiw2ICsyMzY0LDggQEAgc3RhdGljIHZv aWQgaXhnYmVfc2V0X21kaW9fc3BlZWQoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAl1MzIgaGxy ZWcwOwogCisJcHJpbnRmKCIlczogY2FsbGVkLCBkZXZpY2VfaWQ9JTA0eFxuIiwgX19mdW5jX18s IGh3LT5kZXZpY2VfaWQpOworCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CiAJY2FzZSBJWEdC RV9ERVZfSURfWDU1MEVNX1hfMTBHX1Q6CiAJY2FzZSBJWEdCRV9ERVZfSURfWDU1MEVNX0FfU0dN SUk6CkBAIC0yMzU0LDYgKzIzODgsOSBAQCBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfbWRpb19zcGVl ZChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKworCXByaW50 ZigiJXM6IEhMUkVHMD0weCUwOHhcbiIsIF9fZnVuY19fLAorCSAgICBJWEdCRV9SRUFEX1JFRyho dywgSVhHQkVfSExSRUcwKSk7CiB9CiAKIC8qKgo= --000000000000c440600633ceb9da--