From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomeu Vizoso Subject: [PATCH v10 2/9] clk: Move all drivers to use internal API Date: Tue, 9 Sep 2014 16:04:57 +0200 Message-ID: <1410271497-27148-1-git-send-email-tomeu.vizoso@collabora.com> References: <1410271329-26637-1-git-send-email-tomeu.vizoso@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1410271329-26637-1-git-send-email-tomeu.vizoso@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: Mike Turquette Cc: Andrew Lunn , Ulf Hansson , Prashant Gaikwad , Tony Lindgren , tomasz.figa@gmail.com, Liam Girdwood , Thierry Reding , Paul Mackerras , Sylwester Nawrocki , Daniel Walker , linux-arch@vger.kernel.org, Boris Brezillon , linux-samsung-soc@vger.kernel.org, Kukjin Kim , Russell King , =?UTF-8?q?Emilio=20L=C3=B3pez?= , Takashi Iwai , Michal Simek , Kyungmin Park , Kevin Hilman , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.wolfsonmicro.com, Viresh List-Id: linux-tegra@vger.kernel.org SW4gcHJlcGFyYXRpb24gdG8gY2hhbmdlIHRoZSBwdWJsaWMgQVBJIHRvIHJldHVybiBhIHBlci11 c2VyIGNsayBzdHJ1Y3R1cmUsCnJlbW92ZSBhbnkgdXNhZ2Ugb2YgdGhpcyBwdWJsaWMgQVBJIGZy b20gdGhlIGNsb2NrIGltcGxlbWVudGF0aW9ucy4KClRoZSByZWFzb24gZm9yIGhhdmluZyB0aGlz IGluIGEgc2VwYXJhdGUgY29tbWl0IGZyb20gdGhlIG9uZSB0aGF0IGludHJvZHVjZXMKdGhlIGlt cGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25zIGlzIHRvIHNlcGFyYXRlIHRoZSBjaGFu Z2VzIGdlbmVyYXRlZAp3aXRoIENvY2NpbmVsbGUgZnJvbSB0aGUgcmVzdCwgYW5kIGtlZXAgdGhl IHBhdGNoZXMnIHNpemUgcmVhc29uYWJsZS4KClNpZ25lZC1vZmYtYnk6IFRvbWV1IFZpem9zbyA8 dG9tZXUudml6b3NvQGNvbGxhYm9yYS5jb20+ClRlc3RlZC1ieTogQm9yaXMgQnJlemlsbG9uIDxi b3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgpUZXN0ZWQtYnk6IEhlaWtvIFN0dWVi bmVyIDxoZWlrb0BzbnRlY2guZGU+CkFja2VkLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJy ZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CgotLS0KCnYxMDogKiBBZGQgYSBmZXcgbW9yZSBm aWxlcyB0byBiZSBjb252ZXJ0ZWQKICAgICAqIFJlLWdlbmVyYXRlIHRoZSBwYXRjaCBvbiB0b3Ag b2YgdGhlIGxhdGVzdCBjaGFuZ2VzCgp2OTogKiBGb2xkIGluIGNoYW5nZXMgdG8gbXhzLXNhaWYu Yywgc28gdG8gbm90IGJyZWFrIGJpc2VjdGFiaWxpdHkKICAgICogUmUtZ2VuZXJhdGUgdGhlIHBh dGNoIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IGNoYW5nZXMKICAgICogUmVtb3ZlIGxpbnV4L2Nsay5o IGluY2x1ZGVzIGZyb20gY2xrIGltcGxlbWVudGF0aW9ucwotLS0KIGFyY2gvYXJtL21hY2gtZG92 ZS9jb21tb24uYyAgICAgICAgICAgICAgICAgICB8ICAxMCArLQogYXJjaC9hcm0vbWFjaC1pbXgv Y2xrLWJ1c3kuYyAgICAgICAgICAgICAgICAgIHwgICA5ICstCiBhcmNoL2FybS9tYWNoLWlteC9j bGstZml4dXAtZGl2LmMgICAgICAgICAgICAgfCAgIDQgKy0KIGFyY2gvYXJtL21hY2gtaW14L2Ns ay1maXh1cC1tdXguYyAgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9hcm0vbWFjaC1pbXgvY2xr LWdhdGUtZXhjbHVzaXZlLmMgICAgICAgIHwgICA0ICstCiBhcmNoL2FybS9tYWNoLWlteC9jbGst Z2F0ZTIuYyAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1p bXgxLmMgICAgICAgICAgICAgICAgICB8ICAgMyArLQogYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlt eDIxLmMgICAgICAgICAgICAgICAgIHwgICAzICstCiBhcmNoL2FybS9tYWNoLWlteC9jbGstaW14 MjUuYyAgICAgICAgICAgICAgICAgfCAgIDkgKy0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgy Ny5jICAgICAgICAgICAgICAgICB8ICAgNSArLQogYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDMx LmMgICAgICAgICAgICAgICAgIHwgIDExICstCiBhcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzUu YyAgICAgICAgICAgICAgICAgfCAgMjMgKy0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1p bXg1My5jICAgICAgICAgICB8ICA3OCArKystLS0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2 cS5jICAgICAgICAgICAgICAgICB8ICA3NSArKysrLS0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1p bXg2c2wuYyAgICAgICAgICAgICAgICB8ICA0MyArLS0KIGFyY2gvYXJtL21hY2gtaW14L2Nsay1p bXg2c3guYyAgICAgICAgICAgICAgICB8IDExOSArKysrKy0tLS0KIGFyY2gvYXJtL21hY2gtaW14 L2Nsay1wZmQuYyAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogYXJjaC9hcm0vbWFjaC1pbXgv Y2xrLXBsbHYxLmMgICAgICAgICAgICAgICAgIHwgICA1ICstCiBhcmNoL2FybS9tYWNoLWlteC9j bGstcGxsdjIuYyAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGFyY2gvYXJtL21hY2gtaW14L2Ns ay1wbGx2My5jICAgICAgICAgICAgICAgICB8ICAgNSArLQogYXJjaC9hcm0vbWFjaC1pbXgvY2xr LXZmNjEwLmMgICAgICAgICAgICAgICAgIHwgIDQ1ICsrLS0KIGFyY2gvYXJtL21hY2gtaW14L2Ns ay5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQogYXJjaC9hcm0vbWFjaC1pbXgvY2xr LmggICAgICAgICAgICAgICAgICAgICAgIHwgIDQ0ICstLQogYXJjaC9hcm0vbWFjaC1tc20vY2xv Y2stcGNvbS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBhcmNoL2FybS9tYWNoLW12Nzh4eDAv Y29tbW9uLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvYm9h cmQtY20tdDM1LmMgICAgICAgICAgICB8ICAgMiArLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9jY2xv Y2szeHh4X2RhdGEuYyAgICAgICAgIHwgMzcxICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBh cmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGwuYyAgICAgICAgICAgfCAgIDUgKy0KIGFy Y2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYyAgICAgICB8ICAgNSArLQogYXJj aC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMgIHwgIDExICstCiBhcmNo L2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYyAgICAgICAgfCAgIDMgKy0KIGFyY2gv YXJtL21hY2gtb21hcDIvY2xrdF9jbGtzZWwuYyAgICAgICAgICAgICB8ICA0NiArKy0tCiBhcmNo L2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jICAgICAgICAgICAgICAgfCAgIDggKy0KIGFyY2gv YXJtL21hY2gtb21hcDIvY2xvY2suYyAgICAgICAgICAgICAgICAgICB8ICA1MiArKy0tCiBhcmNo L2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggICAgICAgICAgICAgICAgICAgfCAgMTggKy0KIGFyY2gv YXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMgICAgICAgICAgICAgICB8ICAyMyArLQogYXJjaC9h cm0vbWFjaC1vbWFwMi9jbG9jazN4eHguaCAgICAgICAgICAgICAgIHwgICA0ICstCiBhcmNoL2Fy bS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMgICAgICAgfCAgIDIgKy0KIGFyY2gvYXJt L21hY2gtb21hcDIvY2xvY2tkb21haW4uYyAgICAgICAgICAgICB8ICAgOSArLQogYXJjaC9hcm0v bWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oICAgICAgICAgICAgIHwgICA0ICstCiBhcmNoL2FybS9t YWNoLW9tYXAyL2Rpc3BsYXkuYyAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGFyY2gvYXJtL21h Y2gtb21hcDIvZHBsbDN4eHguYyAgICAgICAgICAgICAgICB8ICAyOSArLQogYXJjaC9hcm0vbWFj aC1vbWFwMi9kcGxsNDR4eC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBhcmNoL2FybS9tYWNo LW9tYXAyL21jYnNwLmMgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGFyY2gvYXJtL21hY2gt b21hcDIvb21hcF9kZXZpY2UuYyAgICAgICAgICAgICB8ICAgOSArLQogYXJjaC9hcm0vbWFjaC1v bWFwMi9vbWFwX2h3bW9kLmMgICAgICAgICAgICAgIHwgIDQyICstLQogYXJjaC9hcm0vbWFjaC1v bWFwMi9vbWFwX2h3bW9kLmggICAgICAgICAgICAgIHwgIDEyICstCiBhcmNoL2FybS9tYWNoLW9t YXAyL3BtMjR4eC5jICAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIGFyY2gvYXJtL21hY2gtb3Jp b241eC9jb21tb24uYyAgICAgICAgICAgICAgICB8ICAgMiArLQogYXJjaC9hcm0vbWFjaC1zaG1v YmlsZS9jbG9jay5jICAgICAgICAgICAgICAgIHwgICA5ICstCiBhcmNoL2FybS9tYWNoLXZleHBy ZXNzL3NwYy5jICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGFyY2gvYXJtL3BsYXQtb3Jpb24v Y29tbW9uLmMgICAgICAgICAgICAgICAgICB8ICAyMSArLQogYXJjaC9hcm0vcGxhdC1vcmlvbi9p bmNsdWRlL3BsYXQvY29tbW9uLmggICAgIHwgIDEyICstCiBhcmNoL21pcHMvYWxjaGVteS9jb21t b24vY2xvY2suYyAgICAgICAgICAgICAgfCAgNDIgKy0tCiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1z LzUxMngvY2xvY2stY29tbW9uY2xrLmMgfCAgNDggKystLQogZHJpdmVycy9hY3BpL2FjcGlfbHBz cy5jICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2Nsay9hdDkxL2Nsay1t YWluLmMgICAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvY2xrL2F0OTEvY2xrLW1h c3Rlci5jICAgICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvYXQ5MS9jbGstcGVy aXBoZXJhbC5jICAgICAgICAgICAgIHwgIDEyICstCiBkcml2ZXJzL2Nsay9hdDkxL2Nsay1wbGwu YyAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbGRp di5jICAgICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvYXQ5MS9jbGstcHJvZ3Jh bW1hYmxlLmMgICAgICAgICAgIHwgIDEwICstCiBkcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMg ICAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvY2xrL2F0OTEvY2xrLXNtZC5jICAg ICAgICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvYXQ5MS9jbGstc3lzdGVtLmMg ICAgICAgICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2Nsay9hdDkxL2Nsay11c2IuYyAgICAg ICAgICAgICAgICAgICAgfCAgMjAgKy0KIGRyaXZlcnMvY2xrL2F0OTEvY2xrLXV0bWkuYyAgICAg ICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvYmNtL2Nsay1rb25hLXNldHVwLmMg ICAgICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2Nsay9iY20vY2xrLWtvbmEuYyAgICAgICAg ICAgICAgICAgICAgfCAgMTIgKy0KIGRyaXZlcnMvY2xrL2JjbS9jbGsta29uYS5oICAgICAgICAg ICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvYmVybGluL2JlcmxpbjItYXZwbGwuYyAg ICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1hdnBsbC5oICAg ICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLWRpdi5jICAgICAg ICAgICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvYmVybGluL2JlcmxpbjItZGl2LmggICAgICAg ICAgICAgIHwgICAyICstCiBkcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1wbGwuYyAgICAgICAg ICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLXBsbC5oICAgICAgICAg ICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvYmVybGluL2JnMi5jICAgICAgICAgICAgICAgICAg ICAgIHwgIDEzICstCiBkcml2ZXJzL2Nsay9iZXJsaW4vYmcycS5jICAgICAgICAgICAgICAgICAg ICAgfCAgIDkgKy0KIGRyaXZlcnMvY2xrL2Nsay1heGktY2xrZ2VuLmMgICAgICAgICAgICAgICAg ICB8ICAgMyArLQogZHJpdmVycy9jbGsvY2xrLWF4bTU1MTYuYyAgICAgICAgICAgICAgICAgICAg IHwgICA0ICstCiBkcml2ZXJzL2Nsay9jbGstYmNtMjgzNS5jICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKy0KIGRyaXZlcnMvY2xrL2Nsay1jbHBzNzExeC5jICAgICAgICAgICAgICAgICAgICB8 ICAgMyArLQogZHJpdmVycy9jbGsvY2xrLWNvbXBvc2l0ZS5jICAgICAgICAgICAgICAgICAgIHwg IDExICstCiBkcml2ZXJzL2Nsay9jbGstY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg MTcgKy0KIGRyaXZlcnMvY2xrL2Nsay1kaXZpZGVyLmMgICAgICAgICAgICAgICAgICAgICB8ICAg OCArLQogZHJpdmVycy9jbGsvY2xrLWVmbTMyZ2cuYyAgICAgICAgICAgICAgICAgICAgIHwgICAz ICstCiBkcml2ZXJzL2Nsay9jbGstZml4ZWQtZmFjdG9yLmMgICAgICAgICAgICAgICAgfCAgIDYg Ky0KIGRyaXZlcnMvY2xrL2Nsay1maXhlZC1yYXRlLmMgICAgICAgICAgICAgICAgICB8ICAgOCAr LQogZHJpdmVycy9jbGsvY2xrLWZyYWN0aW9uYWwtZGl2aWRlci5jICAgICAgICAgIHwgICA0ICst CiBkcml2ZXJzL2Nsay9jbGstZ2F0ZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0K IGRyaXZlcnMvY2xrL2Nsay1oaWdoYmFuay5jICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQog ZHJpdmVycy9jbGsvY2xrLWxzMXguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICstCiBk cml2ZXJzL2Nsay9jbGstbWF4Nzc2ODYuYyAgICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIGRy aXZlcnMvY2xrL2Nsay1tb3hhcnQuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQogZHJp dmVycy9jbGsvY2xrLW11eC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICstCiBkcml2 ZXJzL2Nsay9jbGstbm9tYWRpay5jICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0KIGRyaXZl cnMvY2xrL2Nsay1uc3BpcmUuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogZHJpdmVy cy9jbGsvY2xrLXBhbG1hcy5jICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICstCiBkcml2ZXJz L2Nsay9jbGstcHBjLWNvcmVuZXQuYyAgICAgICAgICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMv Y2xrL2Nsay1zMm1wczExLmMgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9j bGsvY2xrLXNpNTM1MS5jICAgICAgICAgICAgICAgICAgICAgIHwgIDE3ICstCiBkcml2ZXJzL2Ns ay9jbGstc2k1NzAuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvY2xr L2Nsay10d2w2MDQwLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9jbGsv Y2xrLXUzMDAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2Nsay9j bGstdnQ4NTAwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvY2xrL2Ns ay13bTgzMXguYyAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArLQogZHJpdmVycy9jbGsvY2xr LXhnZW5lLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICstCiBkcml2ZXJzL2Nsay9jbGsu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvY2xrL2hpc2ls aWNvbi9jbGstaGkzNjIwLmMgICAgICAgICAgICB8ICAgOSArLQogZHJpdmVycy9jbGsvaGlzaWxp Y29uL2Nsay1oaXAwNC5jICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xrL2hpc2lsaWNv bi9jbGsuYyAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogZHJpdmVycy9jbGsvaGlzaWxpY29u L2Nsay5oICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2Nsay9oaXNpbGljb24v Y2xrZ2F0ZS1zZXBhcmF0ZWQuYyAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xrL2tleXN0b25lL2dh dGUuYyAgICAgICAgICAgICAgICAgICB8ICAgNyArLQogZHJpdmVycy9jbGsva2V5c3RvbmUvcGxs LmMgICAgICAgICAgICAgICAgICAgIHwgIDExICstCiBkcml2ZXJzL2Nsay9tbXAvY2xrLWFwYmMu YyAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xrL21tcC9jbGstYXBtdS5j ICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogZHJpdmVycy9jbGsvbW1wL2Nsay1mcmFjLmMg ICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2Nsay9tbXAvY2xrLW1tcDIuYyAg ICAgICAgICAgICAgICAgICAgfCAgMTQgKy0KIGRyaXZlcnMvY2xrL21tcC9jbGstcHhhMTY4LmMg ICAgICAgICAgICAgICAgICB8ICAxMiArLQogZHJpdmVycy9jbGsvbW1wL2Nsay1weGE5MTAuYyAg ICAgICAgICAgICAgICAgIHwgIDEyICstCiBkcml2ZXJzL2Nsay9tbXAvY2xrLmggICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvY2xrL212ZWJ1L2Nsay1jb3JlZGl2LmMg ICAgICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9jbGsvbXZlYnUvY2xrLWNwdS5jICAgICAg ICAgICAgICAgICAgIHwgICA4ICstCiBkcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYyAgICAgICAg ICAgICAgICAgICAgfCAgMTUgKy0KIGRyaXZlcnMvY2xrL212ZWJ1L2tpcmt3b29kLmMgICAgICAg ICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvbXhzL2Nsay1kaXYuYyAgICAgICAgICAg ICAgICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2Nsay9teHMvY2xrLWZyYWMuYyAgICAgICAgICAg ICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xrL214cy9jbGstaW14MjMuYyAgICAgICAgICAg ICAgICAgICB8ICAgNSArLQogZHJpdmVycy9jbGsvbXhzL2Nsay1pbXgyOC5jICAgICAgICAgICAg ICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2Nsay9teHMvY2xrLXBsbC5jICAgICAgICAgICAgICAg ICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xrL214cy9jbGstcmVmLmMgICAgICAgICAgICAgICAg ICAgICB8ICAgNSArLQogZHJpdmVycy9jbGsvbXhzL2Nsay1zc3AuYyAgICAgICAgICAgICAgICAg ICAgIHwgICAzICstCiBkcml2ZXJzL2Nsay9teHMvY2xrLmggICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMTcgKy0KIGRyaXZlcnMvY2xrL3Fjb20vY2xrLXJjZy5jICAgICAgICAgICAgICAgICAg ICB8ICAgOCArLQogZHJpdmVycy9jbGsvcWNvbS9jbGstcmNnMi5jICAgICAgICAgICAgICAgICAg IHwgIDE0ICstCiBkcml2ZXJzL2Nsay9xY29tL2Nsay1yZWdtYXAuYyAgICAgICAgICAgICAgICAg fCAgIDIgKy0KIGRyaXZlcnMvY2xrL3Fjb20vY2xrLXJlZ21hcC5oICAgICAgICAgICAgICAgICB8 ICAgMiArLQogZHJpdmVycy9jbGsvcWNvbS9jb21tb24uYyAgICAgICAgICAgICAgICAgICAgIHwg ICA2ICstCiBkcml2ZXJzL2Nsay9xY29tL2djYy1hcHE4MDg0LmMgICAgICAgICAgICAgICAgfCAg IDIgKy0KIGRyaXZlcnMvY2xrL3Fjb20vZ2NjLWlwcTgwNnguYyAgICAgICAgICAgICAgICB8ICAg MiArLQogZHJpdmVycy9jbGsvcWNvbS9nY2MtbXNtODY2MC5jICAgICAgICAgICAgICAgIHwgICAy ICstCiBkcml2ZXJzL2Nsay9xY29tL2djYy1tc204OTYwLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIGRyaXZlcnMvY2xrL3Fjb20vZ2NjLW1zbTg5NzQuYyAgICAgICAgICAgICAgICB8ICAgMiAr LQogZHJpdmVycy9jbGsvcWNvbS9tbWNjLW1zbTg5NjAuYyAgICAgICAgICAgICAgIHwgICA2ICst CiBkcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcGxsLmMgICAgICAgICAgICAgICAgfCAgIDkgKy0K IGRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMxODguYyAgICAgICAgICAgICB8ICAgMiArLQog ZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jICAgICAgICAgICAgIHwgICAyICstCiBk cml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcm9ja2NoaXAuYyAgICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvY2xrL3JvY2tjaGlwL2Nsay5jICAgICAgICAgICAgICAgICAgICB8ICAyMyArLQogZHJp dmVycy9jbGsvcm9ja2NoaXAvY2xrLmggICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBkcml2 ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MtYXVkc3MuYyAgICAgICAgfCAgMTYgKy0KIGRyaXZl cnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vcy1jbGtvdXQuYyAgICAgICB8ICAgOSArLQogZHJpdmVy cy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMzI1MC5jICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMv Y2xrL3NhbXN1bmcvY2xrLWV4eW5vczQuYyAgICAgICAgICAgICB8ICAgNyArLQogZHJpdmVycy9j bGsvc2Ftc3VuZy9jbGstZXh5bm9zNTI1MC5jICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xr L3NhbXN1bmcvY2xrLWV4eW5vczUyNjAuYyAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2Nsay9z YW1zdW5nL2Nsay1leHlub3M1NDEwLmMgICAgICAgICAgfCAgIDEgLQogZHJpdmVycy9jbGsvc2Ft c3VuZy9jbGstZXh5bm9zNTQyMC5jICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xrL3NhbXN1 bmcvY2xrLWV4eW5vczU0NDAuYyAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2Nsay9zYW1zdW5n L2Nsay1wbGwuYyAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvY2xrL3NhbXN1bmcv Y2xrLXBsbC5oICAgICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvc2Ftc3VuZy9j bGstczNjMjQxMC1kY2xrLmMgICAgICAgIHwgIDMwICstLQogZHJpdmVycy9jbGsvc2Ftc3VuZy9j bGstczNjMjQxMC5jICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xrL3NhbXN1bmcvY2xr LXMzYzI0MTIuYyAgICAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1z M2MyNDQzLmMgICAgICAgICAgICAgfCAgIDEgLQogZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNj NjR4eC5jICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXM1cHYy MTAtYXVkc3MuYyAgICAgICB8ICAxNiArLQogZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczVwdjIx MC5jICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmMgICAgICAg ICAgICAgICAgICAgICB8ICAyMiArLQogZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGsuaCAgICAgICAg ICAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstZGl2Ni5jICAg ICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1lbWV2Mi5jICAg ICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9jbGsvc2htb2JpbGUvY2xrLW1zdHAuYyAgICAg ICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcjhhNzc0MC5jICAg ICAgICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1yOGE3Nzc5LmMgICAg ICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvc2htb2JpbGUvY2xrLXJjYXItZ2VuMi5jICAg ICAgICAgIHwgIDEwICstCiBkcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcnouYyAgICAgICAgICAg ICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvY2xrL3NpcmYvY2xrLWF0bGFzNi5jICAgICAgICAgICAg ICAgICB8ICAgMyArLQogZHJpdmVycy9jbGsvc2lyZi9jbGstY29tbW9uLmMgICAgICAgICAgICAg ICAgIHwgIDMwICstLQogZHJpdmVycy9jbGsvc2lyZi9jbGstcHJpbWEyLmMgICAgICAgICAgICAg ICAgIHwgICAzICstCiBkcml2ZXJzL2Nsay9zb2NmcGdhL2Nsay1nYXRlLmMgICAgICAgICAgICAg ICAgfCAgIDMgKy0KIGRyaXZlcnMvY2xrL3NvY2ZwZ2EvY2xrLXBlcmlwaC5jICAgICAgICAgICAg ICB8ICAgMyArLQogZHJpdmVycy9jbGsvc29jZnBnYS9jbGstcGxsLmMgICAgICAgICAgICAgICAg IHwgICA1ICstCiBkcml2ZXJzL2Nsay9zcGVhci9jbGstYXV4LXN5bnRoLmMgICAgICAgICAgICAg fCAgIDggKy0KIGRyaXZlcnMvY2xrL3NwZWFyL2Nsay1mcmFjLXN5bnRoLmMgICAgICAgICAgICB8 ICAgNCArLQogZHJpdmVycy9jbGsvc3BlYXIvY2xrLWdwdC1zeW50aC5jICAgICAgICAgICAgIHwg ICA0ICstCiBkcml2ZXJzL2Nsay9zcGVhci9jbGstdmNvLXBsbC5jICAgICAgICAgICAgICAgfCAg IDggKy0KIGRyaXZlcnMvY2xrL3NwZWFyL2Nsay5oICAgICAgICAgICAgICAgICAgICAgICB8ICAx NCArLQogZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIxMzEwX2Nsb2NrLmMgICAgICAgICAgIHwgICAz ICstCiBkcml2ZXJzL2Nsay9zcGVhci9zcGVhcjEzNDBfY2xvY2suYyAgICAgICAgICAgfCAgIDMg Ky0KIGRyaXZlcnMvY2xrL3NwZWFyL3NwZWFyM3h4X2Nsb2NrLmMgICAgICAgICAgICB8ICAxNyAr LQogZHJpdmVycy9jbGsvc3BlYXIvc3BlYXI2eHhfY2xvY2suYyAgICAgICAgICAgIHwgICAzICst CiBkcml2ZXJzL2Nsay9zdC9jbGstZmxleGdlbi5jICAgICAgICAgICAgICAgICAgfCAgMTIgKy0K IGRyaXZlcnMvY2xrL3N0L2Nsa2dlbi1mc3luLmMgICAgICAgICAgICAgICAgICB8ICAyMiArLQog ZHJpdmVycy9jbGsvc3QvY2xrZ2VuLW11eC5jICAgICAgICAgICAgICAgICAgIHwgIDMyICstLQog ZHJpdmVycy9jbGsvc3QvY2xrZ2VuLXBsbC5jICAgICAgICAgICAgICAgICAgIHwgIDM0ICstLQog ZHJpdmVycy9jbGsvc3VueGkvY2xrLWExMC1ob3NjLmMgICAgICAgICAgICAgIHwgICAyICstCiBk cml2ZXJzL2Nsay9zdW54aS9jbGstYTIwLWdtYWMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvY2xrL3N1bnhpL2Nsay1mYWN0b3JzLmMgICAgICAgICAgICAgICB8ICAgNCArLQogZHJp dmVycy9jbGsvc3VueGkvY2xrLXN1bjZpLWFwYjAtZ2F0ZXMuYyAgICAgIHwgICAyICstCiBkcml2 ZXJzL2Nsay9zdW54aS9jbGstc3VuNmktYXBiMC5jICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZl cnMvY2xrL3N1bnhpL2Nsay1zdW42aS1hcjEwMC5jICAgICAgICAgICB8ICAgNiArLQogZHJpdmVy cy9jbGsvc3VueGkvY2xrLXN1bjhpLWFwYjAuYyAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJz L2Nsay9zdW54aS9jbGstc3VueGkuYyAgICAgICAgICAgICAgICAgfCAgMTggKy0KIGRyaXZlcnMv Y2xrL3RlZ3JhL2Nsay1hdWRpby1zeW5jLmMgICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9j bGsvdGVncmEvY2xrLWRpdmlkZXIuYyAgICAgICAgICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2Ns ay90ZWdyYS9jbGstcGVyaXBoLWdhdGUuYyAgICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xr L3RlZ3JhL2Nsay1wZXJpcGguYyAgICAgICAgICAgICAgICB8ICAgOSArLQogZHJpdmVycy9jbGsv dGVncmEvY2xrLXBsbC1vdXQuYyAgICAgICAgICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2Nsay90 ZWdyYS9jbGstcGxsLmMgICAgICAgICAgICAgICAgICAgfCAgNDEgKystCiBkcml2ZXJzL2Nsay90 ZWdyYS9jbGstc3VwZXIuYyAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvY2xrL3Rl Z3JhL2Nsay10ZWdyYS1hdWRpby5jICAgICAgICAgICB8ICAgNSArLQogZHJpdmVycy9jbGsvdGVn cmEvY2xrLXRlZ3JhLWZpeGVkLmMgICAgICAgICAgIHwgICA5ICstCiBkcml2ZXJzL2Nsay90ZWdy YS9jbGstdGVncmEtcGVyaXBoLmMgICAgICAgICAgfCAgMTMgKy0KIGRyaXZlcnMvY2xrL3RlZ3Jh L2Nsay10ZWdyYS1wbWMuYyAgICAgICAgICAgICB8ICAgNSArLQogZHJpdmVycy9jbGsvdGVncmEv Y2xrLXRlZ3JhLXN1cGVyLWdlbjQuYyAgICAgIHwgICA5ICstCiBkcml2ZXJzL2Nsay90ZWdyYS9j bGstdGVncmExMTQuYyAgICAgICAgICAgICAgfCAgMTEgKy0KIGRyaXZlcnMvY2xrL3RlZ3JhL2Ns ay10ZWdyYTEyNC5jICAgICAgICAgICAgICB8ICAgNyArLQogZHJpdmVycy9jbGsvdGVncmEvY2xr LXRlZ3JhMjAuYyAgICAgICAgICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2Nsay90ZWdyYS9jbGst dGVncmEzMC5jICAgICAgICAgICAgICAgfCAgIDkgKy0KIGRyaXZlcnMvY2xrL3RlZ3JhL2Nsay5j ICAgICAgICAgICAgICAgICAgICAgICB8ICAyNSArLQogZHJpdmVycy9jbGsvdGVncmEvY2xrLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgIDM4ICstLQogZHJpdmVycy9jbGsvdGkvYXBsbC5jICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBkcml2ZXJzL2Nsay90aS9jbGstMnh4eC5j ICAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvY2xrL3RpL2Nsay0zM3h4LmMg ICAgICAgICAgICAgICAgICAgICB8ICAxOCArLQogZHJpdmVycy9jbGsvdGkvY2xrLTN4eHguYyAg ICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBkcml2ZXJzL2Nsay90aS9jbGstNDN4eC5jICAg ICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvY2xrL3RpL2Nsay00NHh4LmMgICAg ICAgICAgICAgICAgICAgICB8ICAxNiArLQogZHJpdmVycy9jbGsvdGkvY2xrLTU0eHguYyAgICAg ICAgICAgICAgICAgICAgIHwgIDI1ICstCiBkcml2ZXJzL2Nsay90aS9jbGstN3h4LmMgICAgICAg ICAgICAgICAgICAgICAgfCAgMjggKy0KIGRyaXZlcnMvY2xrL3RpL2Nsay1kcmE3LWF0bC5jICAg ICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvdGkvY2xrLmMgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2Nsay90aS9jbG9ja2RvbWFpbi5jICAgICAg ICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvY2xrL3RpL2NvbXBvc2l0ZS5jICAgICAgICAg ICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvdGkvZGl2aWRlci5jICAgICAgICAgICAg ICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2Nsay90aS9kcGxsLmMgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvY2xrL3RpL2ZpeGVkLWZhY3Rvci5jICAgICAgICAg ICAgICAgICB8ICAgMiArLQogZHJpdmVycy9jbGsvdGkvZ2F0ZS5jICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyICstCiBkcml2ZXJzL2Nsay90aS9pbnRlcmZhY2UuYyAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvY2xrL3RpL211eC5jICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNiArLQogZHJpdmVycy9jbGsvdXg1MDAvYWJ4NTAwLWNsay5jICAgICAgICAgICAg ICAgIHwgICAzICstCiBkcml2ZXJzL2Nsay91eDUwMC9jbGstcHJjYy5jICAgICAgICAgICAgICAg ICAgfCAgIDggKy0KIGRyaXZlcnMvY2xrL3V4NTAwL2Nsay1wcmNtdS5jICAgICAgICAgICAgICAg ICB8ICAxNiArLQogZHJpdmVycy9jbGsvdXg1MDAvY2xrLXN5c2N0cmwuYyAgICAgICAgICAgICAg IHwgIDEwICstCiBkcml2ZXJzL2Nsay91eDUwMC9jbGsuaCAgICAgICAgICAgICAgICAgICAgICAg fCAgMjMgKy0KIGRyaXZlcnMvY2xrL3V4NTAwL3U4NTAwX2Nsay5jICAgICAgICAgICAgICAgICB8 ICAgMyArLQogZHJpdmVycy9jbGsvdXg1MDAvdTg1MDBfb2ZfY2xrLmMgICAgICAgICAgICAgIHwg IDEzICstCiBkcml2ZXJzL2Nsay91eDUwMC91ODU0MF9jbGsuYyAgICAgICAgICAgICAgICAgfCAg IDMgKy0KIGRyaXZlcnMvY2xrL3V4NTAwL3U5NTQwX2Nsay5jICAgICAgICAgICAgICAgICB8ICAg MSAtCiBkcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuYyAgICAgICAgICAgICAgfCAgIDUg Ky0KIGRyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstaWNzdC5oICAgICAgICAgICAgICB8ICAgMiAr LQogZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1pbXBkMS5jICAgICAgICAgICAgIHwgIDE5ICst CiBkcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXJlYWx2aWV3LmMgICAgICAgICAgfCAgIDMgKy0K IGRyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstc3A4MTAuYyAgICAgICAgICAgICB8ICAzMCArKy0K IGRyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmVyc2F0aWxlLmMgICAgICAgICB8ICAgMyArLQog ZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYyAgICAgIHwgICAyICstCiBk cml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLmMgICAgICAgICAgfCAgIDYgKy0KIGRy aXZlcnMvY2xrL3g4Ni9jbGstbHB0LmMgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogZHJp dmVycy9jbGsvenlucS9jbGtjLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyICstCiBkcml2 ZXJzL2Nsay96eW5xL3BsbC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZl cnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BoeV84OTYwLmMgICAgICB8ICAgMyArLQogZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL21lZGlhLWRldi5jIHwgIDE3ICstCiBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2V4eW5vczQtaXMvbWVkaWEtZGV2LmggfCAgIDcgKy0KIGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwLmggICAgICAgICB8ICAgMiArLQogZHJpdmVycy9y dGMvcnRjLWh5bTg1NjMuYyAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL3Nw aS9zcGktcHhhMnh4LXBjaS5jICAgICAgICAgICAgICAgICAgfCAgIDEgLQogZHJpdmVycy9zdGFn aW5nL2lteC1kcm0vaW14LXR2ZS5jICAgICAgICAgICAgIHwgIDI3ICstCiBpbmNsdWRlL2FzbS1n ZW5lcmljL2Nsa2Rldi5oICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGluY2x1ZGUvbGludXgv Y2xrL3RpLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArLQogaW5jbHVkZS9saW51eC9j bGsvenlucS5oICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBpbmNsdWRlL2xpbnV4L3Bs YXRmb3JtX2RhdGEvc2k1MzUxLmggICAgICAgICAgfCAgIDQgKy0KIHNvdW5kL3NvYy9teHMvbXhz LXNhaWYuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogMjczIGZpbGVzIGNoYW5nZWQs IDE1MjggaW5zZXJ0aW9ucygrKSwgMTU3NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNo L2FybS9tYWNoLWRvdmUvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMKaW5k ZXggMGQxYTg5Mi4uNGQ5NTY4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1v bi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYwpAQCAtNzEsOSArNzEsOSBAQCB2 b2lkIF9faW5pdCBkb3ZlX21hcF9pbyh2b2lkKQogc3RhdGljIGludCBkb3ZlX3RjbGs7CiAKIHN0 YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2F0aW5nX2xvY2spOwotc3RhdGljIHN0cnVjdCBjbGsgKnRj bGs7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICp0Y2xrOwogCi1zdGF0aWMgc3RydWN0IGNsayBf X2luaXQgKmRvdmVfcmVnaXN0ZXJfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHN0cnVj dCBjbGtfY29yZSBfX2luaXQgKmRvdmVfcmVnaXN0ZXJfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAog CQkJCQkgICAgIGNvbnN0IGNoYXIgKnBhcmVudCwgdTggYml0X2lkeCkKIHsKIAlyZXR1cm4gY2xr X3JlZ2lzdGVyX2dhdGUoTlVMTCwgbmFtZSwgcGFyZW50LCAwLApAQCAtODMsOSArODMsOSBAQCBz dGF0aWMgc3RydWN0IGNsayBfX2luaXQgKmRvdmVfcmVnaXN0ZXJfZ2F0ZShjb25zdCBjaGFyICpu YW1lLAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG92ZV9jbGtfaW5pdCh2b2lkKQogewotCXN0cnVj dCBjbGsgKnVzYjAsICp1c2IxLCAqc2F0YSwgKnBleDAsICpwZXgxLCAqc2RpbzAsICpzZGlvMTsK LQlzdHJ1Y3QgY2xrICpuYW5kLCAqY2FtZXJhLCAqaTJzMCwgKmkyczEsICpjcnlwdG8sICphYzk3 LCAqcGRtYTsKLQlzdHJ1Y3QgY2xrICp4b3IwLCAqeG9yMSwgKmdlLCAqZ2VwaHk7CisJc3RydWN0 IGNsa19jb3JlICp1c2IwLCAqdXNiMSwgKnNhdGEsICpwZXgwLCAqcGV4MSwgKnNkaW8wLCAqc2Rp bzE7CisJc3RydWN0IGNsa19jb3JlICpuYW5kLCAqY2FtZXJhLCAqaTJzMCwgKmkyczEsICpjcnlw dG8sICphYzk3LCAqcGRtYTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnhvcjAsICp4b3IxLCAqZ2UsICpn ZXBoeTsKIAogCXRjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAidGNsayIsIE5V TEwsIENMS19JU19ST09ULAogCQkJCSAgICAgICBkb3ZlX3RjbGspOwpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vbWFjaC1pbXgvY2xrLWJ1c3kuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1idXN5LmMK aW5kZXggNGJiMWJjNC4uYmIzZWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xr LWJ1c3kuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstYnVzeS5jCkBAIC0xMCw3ICsxMCw2 IEBACiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwogCi0jaW5j bHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5j bHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC03OCwxMiArNzcs MTIgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19idXN5X2RpdmlkZXJfb3BzID0gewogCS5z ZXRfcmF0ZSA9IGNsa19idXN5X2RpdmlkZXJfc2V0X3JhdGUsCiB9OwogCi1zdHJ1Y3QgY2xrICpp bXhfY2xrX2J1c3lfZGl2aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRf bmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19idXN5X2RpdmlkZXIoY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJIHZvaWQgX19pb21lbSAqcmVnLCB1 OCBzaGlmdCwgdTggd2lkdGgsCiAJCQkJIHZvaWQgX19pb21lbSAqYnVzeV9yZWcsIHU4IGJ1c3lf c2hpZnQpCiB7CiAJc3RydWN0IGNsa19idXN5X2RpdmlkZXIgKmJ1c3k7Ci0Jc3RydWN0IGNsayAq Y2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 CiAKIAlidXN5ID0ga3phbGxvYyhzaXplb2YoKmJ1c3kpLCBHRlBfS0VSTkVMKTsKQEAgLTE1Miwx MiArMTUxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfYnVzeV9tdXhfb3BzID0gewog CS5zZXRfcGFyZW50ID0gY2xrX2J1c3lfbXV4X3NldF9wYXJlbnQsCiB9OwogCi1zdHJ1Y3QgY2xr ICppbXhfY2xrX2J1c3lfbXV4KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgX19pb21lbSAqcmVnLCB1 OCBzaGlmdCwKK3N0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19idXN5X211eChjb25zdCBjaGFyICpu YW1lLCB2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQsCiAJCQkgICAgIHU4IHdpZHRoLCB2b2lk IF9faW9tZW0gKmJ1c3lfcmVnLCB1OCBidXN5X3NoaWZ0LAogCQkJICAgICBjb25zdCBjaGFyICoq cGFyZW50X25hbWVzLCBpbnQgbnVtX3BhcmVudHMpCiB7CiAJc3RydWN0IGNsa19idXN5X211eCAq YnVzeTsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0 IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWJ1c3kgPSBremFsbG9jKHNpemVvZigqYnVzeSksIEdG UF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWZpeHVwLWRpdi5j IGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWZpeHVwLWRpdi5jCmluZGV4IDIxZGIwMjAuLjhhNjJi ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1maXh1cC1kaXYuYworKysgYi9h cmNoL2FybS9tYWNoLWlteC9jbGstZml4dXAtZGl2LmMKQEAgLTkyLDEyICs5MiwxMiBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX2ZpeHVwX2Rpdl9vcHMgPSB7CiAJLnNldF9yYXRl ID0gY2xrX2ZpeHVwX2Rpdl9zZXRfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfZml4 dXBfZGl2aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCitzdHJ1Y3Qg Y2xrX2NvcmUgKmlteF9jbGtfZml4dXBfZGl2aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj aGFyICpwYXJlbnQsCiAJCQkJICB2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQsIHU4IHdpZHRo LAogCQkJCSAgdm9pZCAoKmZpeHVwKSh1MzIgKnZhbCkpCiB7CiAJc3RydWN0IGNsa19maXh1cF9k aXYgKmZpeHVwX2RpdjsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7 CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWlmICghZml4dXApCmRpZmYgLS1naXQg YS9hcmNoL2FybS9tYWNoLWlteC9jbGstZml4dXAtbXV4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9j bGstZml4dXAtbXV4LmMKaW5kZXggMGQ0MGIzNS4uZTI5ZGM2MiAxMDA2NDQKLS0tIGEvYXJjaC9h cm0vbWFjaC1pbXgvY2xrLWZpeHVwLW11eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1m aXh1cC1tdXguYwpAQCAtNzEsMTIgKzcxLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29w cyBjbGtfZml4dXBfbXV4X29wcyA9IHsKIAkuc2V0X3BhcmVudCA9IGNsa19maXh1cF9tdXhfc2V0 X3BhcmVudCwKIH07CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfZml4dXBfbXV4KGNvbnN0IGNoYXIg Km5hbWUsIHZvaWQgX19pb21lbSAqcmVnLAorc3RydWN0IGNsa19jb3JlICppbXhfY2xrX2ZpeHVw X211eChjb25zdCBjaGFyICpuYW1lLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJCSAgICAgIHU4IHNo aWZ0LCB1OCB3aWR0aCwgY29uc3QgY2hhciAqKnBhcmVudHMsCiAJCQkgICAgICBpbnQgbnVtX3Bh cmVudHMsIHZvaWQgKCpmaXh1cCkodTMyICp2YWwpKQogewogCXN0cnVjdCBjbGtfZml4dXBfbXV4 ICpmaXh1cF9tdXg7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwog CXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIWZpeHVwKQpkaWZmIC0tZ2l0IGEv YXJjaC9hcm0vbWFjaC1pbXgvY2xrLWdhdGUtZXhjbHVzaXZlLmMgYi9hcmNoL2FybS9tYWNoLWlt eC9jbGstZ2F0ZS1leGNsdXNpdmUuYwppbmRleCBjMTJmNWYyLi5iMDM2NjQ2IDEwMDY0NAotLS0g YS9hcmNoL2FybS9tYWNoLWlteC9jbGstZ2F0ZS1leGNsdXNpdmUuYworKysgYi9hcmNoL2FybS9t YWNoLWlteC9jbGstZ2F0ZS1leGNsdXNpdmUuYwpAQCAtNTgsMTIgKzU4LDEyIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfZ2F0ZV9leGNsdXNpdmVfb3BzID0gewogCS5pc19lbmFi bGVkID0gY2xrX2dhdGVfZXhjbHVzaXZlX2lzX2VuYWJsZWQsCiB9OwogCi1zdHJ1Y3QgY2xrICpp bXhfY2xrX2dhdGVfZXhjbHVzaXZlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVu dCwKK3N0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19nYXRlX2V4Y2x1c2l2ZShjb25zdCBjaGFyICpu YW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCiAJIHZvaWQgX19pb21lbSAqcmVnLCB1OCBzaGlmdCwg dTMyIGV4Y2x1c2l2ZV9tYXNrKQogewogCXN0cnVjdCBjbGtfZ2F0ZV9leGNsdXNpdmUgKmV4Z2F0 ZTsKIAlzdHJ1Y3QgY2xrX2dhdGUgKmdhdGU7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoZXhjbHVz aXZlX21hc2sgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1nYXRlMi5j IGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWdhdGUyLmMKaW5kZXggODRhY2RmZC4uZDc4ZjQwOSAx MDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWdhdGUyLmMKKysrIGIvYXJjaC9hcm0v bWFjaC1pbXgvY2xrLWdhdGUyLmMKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qg Y2xrX29wcyBjbGtfZ2F0ZTJfb3BzID0gewogCS5pc19lbmFibGVkID0gY2xrX2dhdGUyX2lzX2Vu YWJsZWQsCiB9OwogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfZ2F0ZTIoc3RydWN0IGRldmlj ZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJf Z2F0ZTIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFy ICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdm9pZCBfX2lvbWVtICpyZWcs IHU4IGJpdF9pZHgsCiAJCXU4IGNsa19nYXRlMl9mbGFncywgc3BpbmxvY2tfdCAqbG9jaywKIAkJ dW5zaWduZWQgaW50ICpzaGFyZV9jb3VudCkKIHsKIAlzdHJ1Y3QgY2xrX2dhdGUyICpnYXRlOwot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2lu aXRfZGF0YSBpbml0OwogCiAJZ2F0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGtfZ2F0ZTIp LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgxLmMg Yi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MS5jCmluZGV4IDM3YzMwN2EuLjg0NTliZDcgMTAw NjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgxLmMKKysrIGIvYXJjaC9hcm0vbWFj aC1pbXgvY2xrLWlteDEuYwpAQCAtMTUsNyArMTUsNiBAQAogICogNTEgRnJhbmtsaW4gU3QsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8 bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0zMiw3ICszMSw3IEBA IHN0YXRpYyBjb25zdCBjaGFyICpwcmVtX3NlbF9jbGtzW10gPSB7ICJjbGszMl9wcmVtdWx0Iiwg ImNsazE2bSIsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqY2xrb19zZWxfY2xrc1tdID0geyAicGVy MSIsICJoY2xrIiwgImNsazQ4bSIsICJjbGsxNm0iLAogCQkJCSAgICAgICAicHJlbSIsICJmY2xr IiwgfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa1tJTVgxX0NMS19NQVhdOworc3RhdGljIHN0 cnVjdCBjbGtfY29yZSAqY2xrW0lNWDFfQ0xLX01BWF07CiBzdGF0aWMgc3RydWN0IGNsa19vbmVj ZWxsX2RhdGEgY2xrX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNjbSBfX2luaXRkYXRh OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDIxLmMgYi9hcmNoL2FybS9t YWNoLWlteC9jbGstaW14MjEuYwppbmRleCA0YjRjNzUzLi41NmQ3OTljIDEwMDY0NAotLS0gYS9h cmNoL2FybS9tYWNoLWlteC9jbGstaW14MjEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGst aW14MjEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4K ICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYu aD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtMzYsNyArMzUsNyBAQCBzdGF0aWMgY29uc3Qg Y2hhciAqbXBsbF9zZWxfY2xrc1tdID0geyAiZnBtX2dhdGUiLCAibXBsbF9vc2Nfc2VsIiwgfTsK IHN0YXRpYyBjb25zdCBjaGFyICpzcGxsX3NlbF9jbGtzW10gPSB7ICJmcG1fZ2F0ZSIsICJtcGxs X29zY19zZWwiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnNzaV9zZWxfY2xrc1tdID0geyAic3Bs bF9nYXRlIiwgIm1wbGxfZ2F0ZSIsIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtbSU1YMjFf Q0xLX01BWF07CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtbSU1YMjFfQ0xLX01BWF07CiBz dGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9f aW5pdCBfbXgyMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGxyZWYsIHVuc2lnbmVkIGxvbmcg aHJlZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgyNS5jIGIvYXJjaC9h cm0vbWFjaC1pbXgvY2xrLWlteDI1LmMKaW5kZXggNTljMGM4NS4uMDZkMmM3MiAxMDA2NDQKLS0t IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDI1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgv Y2xrLWlteDI1LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgv Y2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC04Nyw3ICs4Niw3IEBAIGVudW0g bXgyNV9jbGtzIHsKIAl3ZHRfaXBnLCBja29fZGl2LCBja29fc2VsLCBja28sIGNsa19tYXgKIH07 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtbY2xrX21heF07CitzdGF0aWMgc3RydWN0IGNsa19j b3JlICpjbGtbY2xrX21heF07CiAKIHN0YXRpYyBpbnQgX19pbml0IF9fbXgyNV9jbG9ja3NfaW5p dCh1bnNpZ25lZCBsb25nIG9zY19yYXRlLAogCQkJCSAgICAgdm9pZCBfX2lvbWVtICpjY21fYmFz ZSkKQEAgLTIyNSwxNiArMjI0LDE2IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fbXgyNV9jbG9ja3Nf aW5pdCh1bnNpZ25lZCBsb25nIG9zY19yYXRlLAogCiAJaW14X2NoZWNrX2Nsb2NrcyhjbGssIEFS UkFZX1NJWkUoY2xrKSk7CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2VtaV9haGJdKTsKKwlj bGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW2VtaV9haGJdKTsKIAogCS8qIENsb2NrIHNv dXJjZSBmb3IgZ3B0IG11c3QgYmUgZGVyaXZlZCBmcm9tIEFIQiAqLwotCWNsa19zZXRfcGFyZW50 KGNsa1twZXI1X3NlbF0sIGNsa1thaGJdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtb cGVyNV9zZWxdLCBjbGtbYWhiXSk7CiAKIAkvKgogCSAqIExldCdzIGluaXRpYWxseSBzZXQgdXAg Q0xLTyBwYXJlbnQgYXMgaXBnLCBzaW5jZSB0aGlzIGNvbmZpZ3VyYXRpb24KIAkgKiBpcyB1c2Vk IG9uIHNvbWUgaW14MjUgYm9hcmQgZGVzaWducyB0byBjbG9jayB0aGUgYXVkaW8gY29kZWMuCiAJ ICovCi0JY2xrX3NldF9wYXJlbnQoY2xrW2Nrb19zZWxdLCBjbGtbaXBnXSk7CisJY2xrX3Byb3Zp ZGVyX3NldF9wYXJlbnQoY2xrW2Nrb19zZWxdLCBjbGtbaXBnXSk7CiAKIAlyZXR1cm4gMDsKIH0K ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgyNy5jIGIvYXJjaC9hcm0vbWFj aC1pbXgvY2xrLWlteDI3LmMKaW5kZXggYWI2MzQ5ZS4uN2IwZjAxYyAxMDA2NDQKLS0tIGEvYXJj aC9hcm0vbWFjaC1pbXgvY2xrLWlteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlt eDI3LmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8 bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVk ZSA8bGludXgvZXJyLmg+CkBAIC0zOSw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjbGtv X3NlbF9jbGtzW10gPSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzc2lfc2VsX2Nsa3NbXSA9IHsg InNwbGxfZ2F0ZSIsICJtcGxsIiwgfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa1tJTVgyN19D TEtfTUFYXTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKmNsa1tJTVgyN19DTEtfTUFYXTsKIHN0 YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogc3RhdGljIHZvaWQgX19p bml0IF9teDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKQEAgLTE1Niw3ICsxNTUs NyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgX214MjdfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBm cmVmKQogCiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbSU1YMjdfQ0xLX0NQVV9ESVZdLCBOVUxM LCAiY3B1MCIpOwogCi0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVgyN19DTEtfRU1JX0FIQl9H QVRFXSk7CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVgyN19DTEtfRU1JX0FI Ql9HQVRFXSk7CiAKIAlpbXhfcHJpbnRfc2lsaWNvbl9yZXYoImkuTVgyNyIsIG14MjdfcmV2aXNp b24oKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzEuYyBiL2Fy Y2gvYXJtL21hY2gtaW14L2Nsay1pbXgzMS5jCmluZGV4IDI4NmVmNDIuLmM5NWZjNWMgMTAwNjQ0 Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgzMS5jCisrKyBiL2FyY2gvYXJtL21hY2gt aW14L2Nsay1pbXgzMS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rl di5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00 NSw3ICs0NCw3IEBAIGVudW0gbXgzMV9jbGtzIHsKIAlnYWNjX2dhdGUsIGVtaV9nYXRlLCBydGlj X2dhdGUsIGZpcmlfZ2F0ZSwgY2xrX21heAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa1tj bGtfbWF4XTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKmNsa1tjbGtfbWF4XTsKIHN0YXRpYyBz dHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogaW50IF9faW5pdCBteDMxX2Nsb2Nr c19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKQEAgLTE3NiwxMSArMTc1LDExIEBAIGludCBfX2lu aXQgbXgzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiAJY2xrX3JlZ2lzdGVyX2Ns a2RldihjbGtbc2RtYV9nYXRlXSwgTlVMTCwgImlteDMxLXNkbWEiKTsKIAljbGtfcmVnaXN0ZXJf Y2xrZGV2KGNsa1tpaW1fZ2F0ZV0sICJpaW0iLCBOVUxMKTsKIAotCWNsa19zZXRfcGFyZW50KGNs a1tjc2ldLCBjbGtbdXBsbF0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbZW1pX2dhdGVdKTsK LQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2lpbV9nYXRlXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9w YXJlbnQoY2xrW2NzaV0sIGNsa1t1cGxsXSk7CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxl KGNsa1tlbWlfZ2F0ZV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbaWltX2dh dGVdKTsKIAlteDMxX3JldmlzaW9uKCk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsa1tpaW1f Z2F0ZV0pOworCWNsa19wcm92aWRlcl9kaXNhYmxlX3VucHJlcGFyZShjbGtbaWltX2dhdGVdKTsK IAogCW14Y190aW1lcl9pbml0KE1YMzFfSU9fQUREUkVTUyhNWDMxX0dQVDFfQkFTRV9BRERSKSwg TVgzMV9JTlRfR1BUKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDM1 LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzUuYwppbmRleCBhMGQyYjU3Li44NDZiMmNj IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzUuYworKysgYi9hcmNoL2Fy bS9tYWNoLWlteC9jbGstaW14MzUuYwpAQCAtOCw3ICs4LDYgQEAKICAqLwogI2luY2x1ZGUgPGxp bnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsu aD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2lu Y2x1ZGUgPGxpbnV4L29mLmg+CkBAIC02Nyw3ICs2Niw3IEBAIGVudW0gbXgzNV9jbGtzIHsKIAln cHUyZF9nYXRlLCBjbGtfbWF4CiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrW2Nsa19tYXhd Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqY2xrW2Nsa19tYXhdOwogCiBpbnQgX19pbml0IG14 MzVfY2xvY2tzX2luaXQodm9pZCkKIHsKQEAgLTk5LDcgKzk4LDcgQEAgaW50IF9faW5pdCBteDM1 X2Nsb2Nrc19pbml0KHZvaWQpCiAJZWxzZQogCQljbGtbYXJtXSA9IGlteF9jbGtfZml4ZWRfZmFj dG9yKCJhcm0iLCAibXBsbCIsIDEsIGFhZC0+YXJtKTsKIAotCWlmIChjbGtfZ2V0X3JhdGUoY2xr W2FybV0pID4gNDAwMDAwMDAwKQorCWlmIChjbGtfcHJvdmlkZXJfZ2V0X3JhdGUoY2xrW2FybV0p ID4gNDAwMDAwMDAwKQogCQloc3BfZGl2ID0gaHNwX2Rpdl81MzI7CiAJZWxzZQogCQloc3BfZGl2 ID0gaHNwX2Rpdl80MDA7CkBAIC0yNTcsMTQgKzI1NiwxNCBAQCBpbnQgX19pbml0IG14MzVfY2xv Y2tzX2luaXQodm9pZCkKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tjc2lfZ2F0ZV0sIE5VTEws ICJteDMtY2FtZXJhLjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1thZG11eF9nYXRlXSwg ImF1ZG11eCIsIE5VTEwpOwogCi0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tzcGJhX2dhdGVdKTsK LQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2dwaW8xX2dhdGVdKTsKLQljbGtfcHJlcGFyZV9lbmFi bGUoY2xrW2dwaW8yX2dhdGVdKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2dwaW8zX2dhdGVd KTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2lpbV9nYXRlXSk7Ci0JY2xrX3ByZXBhcmVfZW5h YmxlKGNsa1tlbWlfZ2F0ZV0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbbWF4X2dhdGVdKTsK LQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW2lvbXV4Y19nYXRlXSk7CisJY2xrX3Byb3ZpZGVyX3By ZXBhcmVfZW5hYmxlKGNsa1tzcGJhX2dhdGVdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFi bGUoY2xrW2dwaW8xX2dhdGVdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW2dw aW8yX2dhdGVdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW2dwaW8zX2dhdGVd KTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW2lpbV9nYXRlXSk7CisJY2xrX3By b3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa1tlbWlfZ2F0ZV0pOworCWNsa19wcm92aWRlcl9wcmVw YXJlX2VuYWJsZShjbGtbbWF4X2dhdGVdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUo Y2xrW2lvbXV4Y19nYXRlXSk7CiAKIAkvKgogCSAqIFNDQyBpcyBuZWVkZWQgdG8gYm9vdCB2aWEg bW1jIGFmdGVyIGEgd2F0Y2hkb2cgcmVzZXQuIFRoZSBjbG9jayBjb2RlCkBAIC0yNzIsNyArMjcx LDcgQEAgaW50IF9faW5pdCBteDM1X2Nsb2Nrc19pbml0KHZvaWQpCiAJICogaGFuZGxlZCBoZXJl IGFuZCBub3QgbmVlZGVkIGZvciBtbWMpIGFuZCBJSU0gKHdoaWNoIGlzIGVuYWJsZWQKIAkgKiB1 bmNvbmRpdGlvbmFsbHkgYWJvdmUpLgogCSAqLwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbc2Nj X2dhdGVdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW3NjY19nYXRlXSk7CiAK IAlpbXhfcHJpbnRfc2lsaWNvbl9yZXYoImkuTVgzNSIsIG14MzVfcmV2aXNpb24oKSk7CiAKZGlm ZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jIGIvYXJjaC9hcm0v bWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKaW5kZXggNzJkNjUyMS4uZmE5ZmM4NCAxMDA2NDQK LS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKKysrIGIvYXJjaC9hcm0v bWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKQEAgLTgsNyArOCw2IEBACiAgKi8KICNpbmNsdWRl IDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4K ICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KQEAgLTEyNiw3ICsxMjUsNyBAQCBzdGF0 aWMgY29uc3QgY2hhciAqc3BkaWZfc2VsW10gPSB7ICJwbGwxX3N3IiwgInBsbDJfc3ciLCAicGxs M19zdyIsICJzcGRpZl94dGFsXwogc3RhdGljIGNvbnN0IGNoYXIgKnNwZGlmMF9jb21fc2VsW10g PSB7ICJzcGRpZjBfcG9kZiIsICJzc2kxX3Jvb3RfZ2F0ZSIsIH07CiBzdGF0aWMgY29uc3QgY2hh ciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyAic3BkaWYxX3BvZGYiLCAic3NpMl9yb290X2dh dGUiLCB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrW0lNWDVfQ0xLX0VORF07CitzdGF0aWMg c3RydWN0IGNsa19jb3JlICpjbGtbSU1YNV9DTEtfRU5EXTsKIHN0YXRpYyBzdHJ1Y3QgY2xrX29u ZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogc3RhdGljIHZvaWQgX19pbml0IG14NV9jbG9ja3NfY29t bW9uX2luaXQodm9pZCBfX2lvbWVtICpjY21fYmFzZSkKQEAgLTI4OSwyNiArMjg4LDI4IEBAIHN0 YXRpYyB2b2lkIF9faW5pdCBteDVfY2xvY2tzX2NvbW1vbl9pbml0KHZvaWQgX19pb21lbSAqY2Nt X2Jhc2UpCiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbSU1YNV9DTEtfR1BDX0RWRlNdLCAiZ3Bj X2R2ZnMiLCBOVUxMKTsKIAogCS8qIFNldCBTREhDIHBhcmVudHMgdG8gYmUgUExMMiAqLwotCWNs a19zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19FU0RIQ19BX1NFTF0sIGNsa1tJTVg1X0NMS19QTEwy X1NXXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrW0lNWDVfQ0xLX0VTREhDX0JfU0VMXSwgY2xrW0lN WDVfQ0xLX1BMTDJfU1ddKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNV9DTEtf RVNESENfQV9TRUxdLAorCQkJCWNsa1tJTVg1X0NMS19QTEwyX1NXXSk7CisJY2xrX3Byb3ZpZGVy X3NldF9wYXJlbnQoY2xrW0lNWDVfQ0xLX0VTREhDX0JfU0VMXSwKKwkJCQljbGtbSU1YNV9DTEtf UExMMl9TV10pOwogCiAJLyogbW92ZSB1c2IgcGh5IGNsayB0byAyNE1IeiAqLwotCWNsa19zZXRf cGFyZW50KGNsa1tJTVg1X0NMS19VU0JfUEhZX1NFTF0sIGNsa1tJTVg1X0NMS19PU0NdKTsKLQot CWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfR1BDX0RWRlNdKTsKLQljbGtfcHJlcGFy ZV9lbmFibGUoY2xrW0lNWDVfQ0xLX0FIQl9NQVhdKTsgLyogZXNkaGMzICovCi0JY2xrX3ByZXBh cmVfZW5hYmxlKGNsa1tJTVg1X0NMS19BSVBTX1RaMV0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShj bGtbSU1YNV9DTEtfQUlQU19UWjJdKTsgLyogZmVjICovCi0JY2xrX3ByZXBhcmVfZW5hYmxlKGNs a1tJTVg1X0NMS19TUEJBXSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19FTUlf RkFTVF9HQVRFXSk7IC8qIGZlYyAqLwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtf RU1JX1NMT1dfR0FURV0pOyAvKiBlaW0gKi8KLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVf Q0xLX01JUElfSFNDMV9HQVRFXSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19N SVBJX0hTQzJfR0FURV0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfTUlQSV9F U0NfR0FURV0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfTUlQSV9IU1BfR0FU RV0pOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfVE1BWDFdKTsKLQljbGtfcHJl cGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX1RNQVgyXSk7IC8qIGVzZGhjMiwgZmVjICovCi0JY2xr X3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19UTUFYM10pOyAvKiBlc2RoYzEsIGVzZGhjNCAq LworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19VU0JfUEhZX1NFTF0sIGNs a1tJTVg1X0NMS19PU0NdKTsKKworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1Y NV9DTEtfR1BDX0RWRlNdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVf Q0xLX0FIQl9NQVhdKTsgLyogZXNkaGMzICovCisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxl KGNsa1tJTVg1X0NMS19BSVBTX1RaMV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShj bGtbSU1YNV9DTEtfQUlQU19UWjJdKTsgLyogZmVjICovCisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVf ZW5hYmxlKGNsa1tJTVg1X0NMS19TUEJBXSk7CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxl KGNsa1tJTVg1X0NMS19FTUlfRkFTVF9HQVRFXSk7IC8qIGZlYyAqLworCWNsa19wcm92aWRlcl9w cmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfRU1JX1NMT1dfR0FURV0pOyAvKiBlaW0gKi8KKwlj bGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX01JUElfSFNDMV9HQVRFXSk7 CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19NSVBJX0hTQzJfR0FU RV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfTUlQSV9FU0Nf R0FURV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfTUlQSV9I U1BfR0FURV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfVE1B WDFdKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX1RNQVgyXSk7 IC8qIGVzZGhjMiwgZmVjICovCisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1 X0NMS19UTUFYM10pOyAvKiBlc2RoYzEsIGVzZGhjNCAqLwogfQogCiBzdGF0aWMgdm9pZCBfX2lu aXQgbXg1MF9jbG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQpAQCAtMzYxLDE1ICsz NjIsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IG14NTBfY2xvY2tzX2luaXQoc3RydWN0IGRldmlj ZV9ub2RlICpucCkKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX29uZWNlbGxf Z2V0LCAmY2xrX2RhdGEpOwogCiAJLyogc2V0IFNESEMgcm9vdCBjbG9jayB0byAyMDBNSFoqLwot CWNsa19zZXRfcmF0ZShjbGtbSU1YNV9DTEtfRVNESENfQV9QT0RGXSwgMjAwMDAwMDAwKTsKLQlj bGtfc2V0X3JhdGUoY2xrW0lNWDVfQ0xLX0VTREhDX0JfUE9ERl0sIDIwMDAwMDAwMCk7CisJY2xr X3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tJTVg1X0NMS19FU0RIQ19BX1BPREZdLCAyMDAwMDAwMDAp OworCWNsa19wcm92aWRlcl9zZXRfcmF0ZShjbGtbSU1YNV9DTEtfRVNESENfQl9QT0RGXSwgMjAw MDAwMDAwKTsKIAotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfSUlNX0dBVEVdKTsK KwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CiAJ aW14X3ByaW50X3NpbGljb25fcmV2KCJpLk1YNTAiLCBJTVhfQ0hJUF9SRVZJU0lPTl8xXzEpOwot CWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGtbSU1YNV9DTEtfSUlNX0dBVEVdKTsKKwljbGtfcHJv dmlkZXJfZGlzYWJsZV91bnByZXBhcmUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CiAKLQlyID0g Y2xrX3JvdW5kX3JhdGUoY2xrW0lNWDVfQ0xLX1VTQk9IM19QRVJfR0FURV0sIDU0MDAwMDAwKTsK LQljbGtfc2V0X3JhdGUoY2xrW0lNWDVfQ0xLX1VTQk9IM19QRVJfR0FURV0sIHIpOworCXIgPSBj bGtfcHJvdmlkZXJfcm91bmRfcmF0ZShjbGtbSU1YNV9DTEtfVVNCT0gzX1BFUl9HQVRFXSwgNTQw MDAwMDApOworCWNsa19wcm92aWRlcl9zZXRfcmF0ZShjbGtbSU1YNV9DTEtfVVNCT0gzX1BFUl9H QVRFXSwgcik7CiB9CiBDTEtfT0ZfREVDTEFSRShpbXg1MF9jY20sICJmc2wsaW14NTAtY2NtIiwg bXg1MF9jbG9ja3NfaW5pdCk7CiAKQEAgLTQzNSwxNSArNDM2LDE2IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCBteDUxX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJb2ZfY2xrX2Fk ZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwgJmNsa19kYXRhKTsKIAogCS8q IHNldCB0aGUgdXNib2gzIHBhcmVudCB0byBwbGwyX3N3ICovCi0JY2xrX3NldF9wYXJlbnQoY2xr W0lNWDVfQ0xLX1VTQk9IM19TRUxdLCBjbGtbSU1YNV9DTEtfUExMMl9TV10pOworCWNsa19wcm92 aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19VU0JPSDNfU0VMXSwKKwkJCQljbGtbSU1YNV9D TEtfUExMMl9TV10pOwogCiAJLyogc2V0IFNESEMgcm9vdCBjbG9jayB0byAxNjYuMjVNSFoqLwot CWNsa19zZXRfcmF0ZShjbGtbSU1YNV9DTEtfRVNESENfQV9QT0RGXSwgMTY2MjUwMDAwKTsKLQlj bGtfc2V0X3JhdGUoY2xrW0lNWDVfQ0xLX0VTREhDX0JfUE9ERl0sIDE2NjI1MDAwMCk7CisJY2xr X3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tJTVg1X0NMS19FU0RIQ19BX1BPREZdLCAxNjYyNTAwMDAp OworCWNsa19wcm92aWRlcl9zZXRfcmF0ZShjbGtbSU1YNV9DTEtfRVNESENfQl9QT0RGXSwgMTY2 MjUwMDAwKTsKIAotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNV9DTEtfSUlNX0dBVEVdKTsK KwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CiAJ aW14X3ByaW50X3NpbGljb25fcmV2KCJpLk1YNTEiLCBteDUxX3JldmlzaW9uKCkpOwotCWNsa19k aXNhYmxlX3VucHJlcGFyZShjbGtbSU1YNV9DTEtfSUlNX0dBVEVdKTsKKwljbGtfcHJvdmlkZXJf ZGlzYWJsZV91bnByZXBhcmUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CiAKIAkvKgogCSAqIFJl ZmVyZW5jZSBNYW51YWwgc2F5czogRnVuY3Rpb25hbGl0eSBvZiBDQ0RSWzE4XSBhbmQgQ0xQQ1Jb MjNdIGlzIG5vCkBAIC01NDUsMTcgKzU0NywxNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbXg1M19j bG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogCW9mX2Nsa19hZGRfcHJvdmlkZXIo bnAsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsICZjbGtfZGF0YSk7CiAKIAkvKiBzZXQgU0RIQyBy b290IGNsb2NrIHRvIDIwME1IWiovCi0JY2xrX3NldF9yYXRlKGNsa1tJTVg1X0NMS19FU0RIQ19B X1BPREZdLCAyMDAwMDAwMDApOwotCWNsa19zZXRfcmF0ZShjbGtbSU1YNV9DTEtfRVNESENfQl9Q T0RGXSwgMjAwMDAwMDAwKTsKKwljbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrW0lNWDVfQ0xLX0VT REhDX0FfUE9ERl0sIDIwMDAwMDAwMCk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tJTVg1 X0NMS19FU0RIQ19CX1BPREZdLCAyMDAwMDAwMDApOwogCiAJLyogbW92ZSBjYW4gYnVzIGNsayB0 byAyNE1IeiAqLwotCWNsa19zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19DQU5fU0VMXSwgY2xrW0lN WDVfQ0xLX0xQX0FQTV0pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19D QU5fU0VMXSwgY2xrW0lNWDVfQ0xLX0xQX0FQTV0pOwogCi0JY2xrX3ByZXBhcmVfZW5hYmxlKGNs a1tJTVg1X0NMS19JSU1fR0FURV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtb SU1YNV9DTEtfSUlNX0dBVEVdKTsKIAlpbXhfcHJpbnRfc2lsaWNvbl9yZXYoImkuTVg1MyIsIG14 NTNfcmV2aXNpb24oKSk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsa1tJTVg1X0NMS19JSU1f R0FURV0pOworCWNsa19wcm92aWRlcl9kaXNhYmxlX3VucHJlcGFyZShjbGtbSU1YNV9DTEtfSUlN X0dBVEVdKTsKIAotCXIgPSBjbGtfcm91bmRfcmF0ZShjbGtbSU1YNV9DTEtfVVNCT0gzX1BFUl9H QVRFXSwgNTQwMDAwMDApOwotCWNsa19zZXRfcmF0ZShjbGtbSU1YNV9DTEtfVVNCT0gzX1BFUl9H QVRFXSwgcik7CisJciA9IGNsa19wcm92aWRlcl9yb3VuZF9yYXRlKGNsa1tJTVg1X0NMS19VU0JP SDNfUEVSX0dBVEVdLCA1NDAwMDAwMCk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tJTVg1 X0NMS19VU0JPSDNfUEVSX0dBVEVdLCByKTsKIH0KIENMS19PRl9ERUNMQVJFKGlteDUzX2NjbSwg ImZzbCxpbXg1My1jY20iLCBteDUzX2Nsb2Nrc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L21hY2gtaW14L2Nsay1pbXg2cS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMKaW5k ZXggNGVlNmU3Ny4uMjE3MWViZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlt eDZxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMKQEAgLTEyLDcgKzEyLDYg QEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgot I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1 ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC04Miw3ICs4MSw3IEBA IHN0YXRpYyBjb25zdCBjaGFyICpwbGw1X2J5cGFzc19zZWxzW10gPSB7ICJwbGw1IiwgInBsbDVf YnlwYXNzX3NyYyIsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGxsNl9ieXBhc3Nfc2Vsc1tdID0g eyAicGxsNiIsICJwbGw2X2J5cGFzc19zcmMiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBsbDdf YnlwYXNzX3NlbHNbXSA9IHsgInBsbDciLCAicGxsN19ieXBhc3Nfc3JjIiwgfTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgKmNsa1tJTVg2UURMX0NMS19FTkRdOworc3RhdGljIHN0cnVjdCBjbGtfY29y ZSAqY2xrW0lNWDZRRExfQ0xLX0VORF07CiBzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEg Y2xrX2RhdGE7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgY2xrc19pbml0X29uW10gX19p bml0Y29uc3QgPSB7CkBAIC0xNzMsMTMgKzE3MiwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW14 NnFfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjY21fbm9kZSkKIAljbGtbSU1YNlFE TF9QTEw3X0JZUEFTU10gPSBpbXhfY2xrX211eF9mbGFncygicGxsN19ieXBhc3MiLCBiYXNlICsg MHgyMCwgMTYsIDEsIHBsbDdfYnlwYXNzX3NlbHMsIEFSUkFZX1NJWkUocGxsN19ieXBhc3Nfc2Vs cyksIENMS19TRVRfUkFURV9QQVJFTlQpOwogCiAJLyogRG8gbm90IGJ5cGFzcyBQTExzIGluaXRp YWxseSAqLwotCWNsa19zZXRfcGFyZW50KGNsa1tJTVg2UURMX1BMTDFfQllQQVNTXSwgY2xrW0lN WDZRRExfQ0xLX1BMTDFdKTsKLQljbGtfc2V0X3BhcmVudChjbGtbSU1YNlFETF9QTEwyX0JZUEFT U10sIGNsa1tJTVg2UURMX0NMS19QTEwyXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrW0lNWDZRRExf UExMM19CWVBBU1NdLCBjbGtbSU1YNlFETF9DTEtfUExMM10pOwotCWNsa19zZXRfcGFyZW50KGNs a1tJTVg2UURMX1BMTDRfQllQQVNTXSwgY2xrW0lNWDZRRExfQ0xLX1BMTDRdKTsKLQljbGtfc2V0 X3BhcmVudChjbGtbSU1YNlFETF9QTEw1X0JZUEFTU10sIGNsa1tJTVg2UURMX0NMS19QTEw1XSk7 Ci0JY2xrX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfUExMNl9CWVBBU1NdLCBjbGtbSU1YNlFETF9D TEtfUExMNl0pOwotCWNsa19zZXRfcGFyZW50KGNsa1tJTVg2UURMX1BMTDdfQllQQVNTXSwgY2xr W0lNWDZRRExfQ0xLX1BMTDddKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFE TF9QTEwxX0JZUEFTU10sCisJCQkJY2xrW0lNWDZRRExfQ0xLX1BMTDFdKTsKKwljbGtfcHJvdmlk ZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9QTEwyX0JZUEFTU10sCisJCQkJY2xrW0lNWDZRRExf Q0xLX1BMTDJdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9QTEwzX0JZ UEFTU10sCisJCQkJY2xrW0lNWDZRRExfQ0xLX1BMTDNdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3Bh cmVudChjbGtbSU1YNlFETF9QTEw0X0JZUEFTU10sCisJCQkJY2xrW0lNWDZRRExfQ0xLX1BMTDRd KTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9QTEw1X0JZUEFTU10sCisJ CQkJY2xrW0lNWDZRRExfQ0xLX1BMTDVdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtb SU1YNlFETF9QTEw2X0JZUEFTU10sCisJCQkJY2xrW0lNWDZRRExfQ0xLX1BMTDZdKTsKKwljbGtf cHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9QTEw3X0JZUEFTU10sCisJCQkJY2xrW0lN WDZRRExfQ0xLX1BMTDddKTsKIAogCWNsa1tJTVg2UURMX0NMS19QTEwxX1NZU10gICAgICA9IGlt eF9jbGtfZ2F0ZSgicGxsMV9zeXMiLCAgICAgICJwbGwxX2J5cGFzcyIsIGJhc2UgKyAweDAwLCAx Myk7CiAJY2xrW0lNWDZRRExfQ0xLX1BMTDJfQlVTXSAgICAgID0gaW14X2Nsa19nYXRlKCJwbGwy X2J1cyIsICAgICAgInBsbDJfYnlwYXNzIiwgYmFzZSArIDB4MzAsIDEzKTsKQEAgLTQ3MSw1MCAr NDc3LDY1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg2cV9jbG9ja3NfaW5pdChzdHJ1Y3QgZGV2 aWNlX25vZGUgKmNjbV9ub2RlKQogCiAJaWYgKChpbXhfZ2V0X3NvY19yZXZpc2lvbigpICE9IElN WF9DSElQX1JFVklTSU9OXzFfMCkgfHwKIAkgICAgY3B1X2lzX2lteDZkbCgpKSB7Ci0JCWNsa19z ZXRfcGFyZW50KGNsa1tJTVg2UURMX0NMS19MREJfREkwX1NFTF0sIGNsa1tJTVg2UURMX0NMS19Q TEw1X1ZJREVPX0RJVl0pOwotCQljbGtfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfTERCX0RJ MV9TRUxdLCBjbGtbSU1YNlFETF9DTEtfUExMNV9WSURFT19ESVZdKTsKKwkJY2xrX3Byb3ZpZGVy X3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX0xEQl9ESTBfU0VMXSwKKwkJCQkJY2xrW0lNWDZR RExfQ0xLX1BMTDVfVklERU9fRElWXSk7CisJCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJ TVg2UURMX0NMS19MREJfREkxX1NFTF0sCisJCQkJCWNsa1tJTVg2UURMX0NMS19QTEw1X1ZJREVP X0RJVl0pOwogCX0KIAotCWNsa19zZXRfcGFyZW50KGNsa1tJTVg2UURMX0NMS19JUFUxX0RJMF9Q UkVfU0VMXSwgY2xrW0lNWDZRRExfQ0xLX1BMTDVfVklERU9fRElWXSk7Ci0JY2xrX3NldF9wYXJl bnQoY2xrW0lNWDZRRExfQ0xLX0lQVTFfREkxX1BSRV9TRUxdLCBjbGtbSU1YNlFETF9DTEtfUExM NV9WSURFT19ESVZdKTsKLQljbGtfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfSVBVMl9ESTBf UFJFX1NFTF0sIGNsa1tJTVg2UURMX0NMS19QTEw1X1ZJREVPX0RJVl0pOwotCWNsa19zZXRfcGFy ZW50KGNsa1tJTVg2UURMX0NMS19JUFUyX0RJMV9QUkVfU0VMXSwgY2xrW0lNWDZRRExfQ0xLX1BM TDVfVklERU9fRElWXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX0lQVTFfREkw X1NFTF0sIGNsa1tJTVg2UURMX0NMS19JUFUxX0RJMF9QUkVdKTsKLQljbGtfc2V0X3BhcmVudChj bGtbSU1YNlFETF9DTEtfSVBVMV9ESTFfU0VMXSwgY2xrW0lNWDZRRExfQ0xLX0lQVTFfREkxX1BS RV0pOwotCWNsa19zZXRfcGFyZW50KGNsa1tJTVg2UURMX0NMS19JUFUyX0RJMF9TRUxdLCBjbGtb SU1YNlFETF9DTEtfSVBVMl9ESTBfUFJFXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrW0lNWDZRRExf Q0xLX0lQVTJfREkxX1NFTF0sIGNsa1tJTVg2UURMX0NMS19JUFUyX0RJMV9QUkVdKTsKKwljbGtf cHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfSVBVMV9ESTBfUFJFX1NFTF0sCisJ CQkJY2xrW0lNWDZRRExfQ0xLX1BMTDVfVklERU9fRElWXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9w YXJlbnQoY2xrW0lNWDZRRExfQ0xLX0lQVTFfREkxX1BSRV9TRUxdLAorCQkJCWNsa1tJTVg2UURM X0NMS19QTEw1X1ZJREVPX0RJVl0pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg2 UURMX0NMS19JUFUyX0RJMF9QUkVfU0VMXSwKKwkJCQljbGtbSU1YNlFETF9DTEtfUExMNV9WSURF T19ESVZdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfSVBVMl9E STFfUFJFX1NFTF0sCisJCQkJY2xrW0lNWDZRRExfQ0xLX1BMTDVfVklERU9fRElWXSk7CisJY2xr X3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX0lQVTFfREkwX1NFTF0sCisJCQkJ Y2xrW0lNWDZRRExfQ0xLX0lQVTFfREkwX1BSRV0pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50 KGNsa1tJTVg2UURMX0NMS19JUFUxX0RJMV9TRUxdLAorCQkJCWNsa1tJTVg2UURMX0NMS19JUFUx X0RJMV9QUkVdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfSVBV Ml9ESTBfU0VMXSwKKwkJCQljbGtbSU1YNlFETF9DTEtfSVBVMl9ESTBfUFJFXSk7CisJY2xrX3By b3ZpZGVyX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX0lQVTJfREkxX1NFTF0sCisJCQkJY2xr W0lNWDZRRExfQ0xLX0lQVTJfREkxX1BSRV0pOwogCiAJLyoKIAkgKiBUaGUgZ3BtaSBuZWVkcyAx MDBNSHogZnJlcXVlbmN5IGluIHRoZSBFRE8vU3luYyBtb2RlLAogCSAqIFdlIGNhbiBub3QgZ2V0 IHRoZSAxMDBNSHogZnJvbSB0aGUgcGxsMl9wZmQwXzM1Mm0uCiAJICogU28gY2hvb3NlIHBsbDJf cGZkMl8zOTZtIGFzIGVuZmNfc2VsJ3MgcGFyZW50LgogCSAqLwotCWNsa19zZXRfcGFyZW50KGNs a1tJTVg2UURMX0NMS19FTkZDX1NFTF0sIGNsa1tJTVg2UURMX0NMS19QTEwyX1BGRDJfMzk2TV0p OworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg2UURMX0NMS19FTkZDX1NFTF0sCisJ CQkJY2xrW0lNWDZRRExfQ0xLX1BMTDJfUEZEMl8zOTZNXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjbGtzX2luaXRfb24pOyBpKyspCi0JCWNsa19wcmVwYXJlX2VuYWJsZShjbGtb Y2xrc19pbml0X29uW2ldXSk7CisJCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbY2xr c19pbml0X29uW2ldXSk7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX01YU19QSFkpKSB7 Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNlFETF9DTEtfVVNCUEhZMV9HQVRFXSk7Ci0J CWNsa19wcmVwYXJlX2VuYWJsZShjbGtbSU1YNlFETF9DTEtfVVNCUEhZMl9HQVRFXSk7CisJCWNs a19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1YNlFETF9DTEtfVVNCUEhZMV9HQVRFXSk7 CisJCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtbSU1YNlFETF9DTEtfVVNCUEhZMl9H QVRFXSk7CiAJfQogCiAJLyoKIAkgKiBMZXQncyBpbml0aWFsbHkgc2V0IHVwIENMS08gd2l0aCBP U0MyNE0sIHNpbmNlIHRoaXMgY29uZmlndXJhdGlvbgogCSAqIGlzIHdpZGVseSB1c2VkIGJ5IGlt eDZxIGJvYXJkIGRlc2lnbnMgdG8gY2xvY2sgYXVkaW8gY29kZWMuCiAJICovCi0JcmV0ID0gY2xr X3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX0NLTzJfU0VMXSwgY2xrW0lNWDZRRExfQ0xLX09T Q10pOworCXJldCA9IGNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tJTVg2UURMX0NMS19DS08y X1NFTF0sCisJCQkJICAgICAgY2xrW0lNWDZRRExfQ0xLX09TQ10pOwogCWlmICghcmV0KQotCQly ZXQgPSBjbGtfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfQ0tPXSwgY2xrW0lNWDZRRExfQ0xL X0NLTzJdKTsKKwkJcmV0ID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xL X0NLT10sCisJCQkJCSAgICAgIGNsa1tJTVg2UURMX0NMS19DS08yXSk7CiAJaWYgKHJldCkKIAkJ cHJfd2FybigiZmFpbGVkIHRvIHNldCB1cCBDTEtPOiAlZFxuIiwgcmV0KTsKIAogCS8qIEF1ZGlv LXJlbGF0ZWQgY2xvY2tzIGNvbmZpZ3VyYXRpb24gKi8KLQljbGtfc2V0X3BhcmVudChjbGtbSU1Y NlFETF9DTEtfU1BESUZfU0VMXSwgY2xrW0lNWDZRRExfQ0xLX1BMTDNfUEZEM180NTRNXSk7CisJ Y2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrW0lNWDZRRExfQ0xLX1NQRElGX1NFTF0sCisJCQkJ Y2xrW0lNWDZRRExfQ0xLX1BMTDNfUEZEM180NTRNXSk7CiAKIAkvKiBBbGwgZXhpc3RpbmcgYm9h cmRzIHdpdGggUENJZSB1c2UgTFZEUzEgKi8KIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX0lN WDYpKQotCQljbGtfc2V0X3BhcmVudChjbGtbSU1YNlFETF9DTEtfTFZEUzFfU0VMXSwgY2xrW0lN WDZRRExfQ0xLX1NBVEFfUkVGXzEwME1dKTsKKwkJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xr W0lNWDZRRExfQ0xLX0xWRFMxX1NFTF0sCisJCQkJCWNsa1tJTVg2UURMX0NMS19TQVRBX1JFRl8x MDBNXSk7CiAKIAkvKiBTZXQgaW5pdGlhbCBwb3dlciBtb2RlICovCiAJaW14NnFfc2V0X2xwbShX QUlUX0NMT0NLRUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzbC5j IGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzbC5jCmluZGV4IDY3OTFmZjMuLjIzZTZkMTAg MTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c2wuYworKysgYi9hcmNoL2Fy bS9tYWNoLWlteC9jbGstaW14NnNsLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxs aW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtOTUsNyArOTQsNyBAQCBzdGF0 aWMgc3RydWN0IGNsa19kaXZfdGFibGUgdmlkZW9fZGl2X3RhYmxlW10gPSB7CiAJeyB9CiB9Owog Ci1zdGF0aWMgc3RydWN0IGNsayAqY2xrc1tJTVg2U0xfQ0xLX0VORF07CitzdGF0aWMgc3RydWN0 IGNsa19jb3JlICpjbGtzW0lNWDZTTF9DTEtfRU5EXTsKIHN0YXRpYyBzdHJ1Y3QgY2xrX29uZWNl bGxfZGF0YSBjbGtfZGF0YTsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNjbV9iYXNlOwogc3RhdGlj IHZvaWQgX19pb21lbSAqYW5hdG9wX2Jhc2U7CkBAIC0yMjUsMTMgKzIyNCwyMCBAQCBzdGF0aWMg dm9pZCBfX2luaXQgaW14NnNsX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25v ZGUpCiAJY2xrc1tJTVg2U0xfUExMN19CWVBBU1NdID0gaW14X2Nsa19tdXhfZmxhZ3MoInBsbDdf YnlwYXNzIiwgYmFzZSArIDB4MjAsIDE2LCAxLCBwbGw3X2J5cGFzc19zZWxzLCBBUlJBWV9TSVpF KHBsbDdfYnlwYXNzX3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKIAogCS8qIERvIG5vdCBi eXBhc3MgUExMcyBpbml0aWFsbHkgKi8KLQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTTF9QTEwx X0JZUEFTU10sIGNsa3NbSU1YNlNMX0NMS19QTEwxXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrc1tJ TVg2U0xfUExMMl9CWVBBU1NdLCBjbGtzW0lNWDZTTF9DTEtfUExMMl0pOwotCWNsa19zZXRfcGFy ZW50KGNsa3NbSU1YNlNMX1BMTDNfQllQQVNTXSwgY2xrc1tJTVg2U0xfQ0xLX1BMTDNdKTsKLQlj bGtfc2V0X3BhcmVudChjbGtzW0lNWDZTTF9QTEw0X0JZUEFTU10sIGNsa3NbSU1YNlNMX0NMS19Q TEw0XSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfUExMNV9CWVBBU1NdLCBjbGtzW0lN WDZTTF9DTEtfUExMNV0pOwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNMX1BMTDZfQllQQVNT XSwgY2xrc1tJTVg2U0xfQ0xLX1BMTDZdKTsKLQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTTF9Q TEw3X0JZUEFTU10sIGNsa3NbSU1YNlNMX0NMS19QTEw3XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9w YXJlbnQoY2xrc1tJTVg2U0xfUExMMV9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEwx XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfUExMMl9CWVBBU1NdLAor CQkJCWNsa3NbSU1YNlNMX0NMS19QTEwyXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xr c1tJTVg2U0xfUExMM19CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEwzXSk7CisJY2xr X3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfUExMNF9CWVBBU1NdLAorCQkJCWNsa3Nb SU1YNlNMX0NMS19QTEw0XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xf UExMNV9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEw1XSk7CisJY2xrX3Byb3ZpZGVy X3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfUExMNl9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNMX0NM S19QTEw2XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfUExMN19CWVBB U1NdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEw3XSk7CiAKIAljbGtzW0lNWDZTTF9DTEtfUExM MV9TWVNdICAgICAgPSBpbXhfY2xrX2dhdGUoInBsbDFfc3lzIiwgICAgICAicGxsMV9ieXBhc3Mi LCBiYXNlICsgMHgwMCwgMTMpOwogCWNsa3NbSU1YNlNMX0NMS19QTEwyX0JVU10gICAgICA9IGlt eF9jbGtfZ2F0ZSgicGxsMl9idXMiLCAgICAgICJwbGwyX2J5cGFzcyIsIGJhc2UgKyAweDMwLCAx Myk7CkBAIC00MTAsNyArNDE2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGlteDZzbF9jbG9ja3Nf aW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNjbV9ub2RlKQogCW9mX2Nsa19hZGRfcHJvdmlkZXIo bnAsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsICZjbGtfZGF0YSk7CiAKIAkvKiBFbnN1cmUgdGhl IEFIQiBjbGsgaXMgYXQgMTMyTUh6LiAqLwotCXJldCA9IGNsa19zZXRfcmF0ZShjbGtzW0lNWDZT TF9DTEtfQUhCXSwgMTMyMDAwMDAwKTsKKwlyZXQgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xr c1tJTVg2U0xfQ0xLX0FIQl0sIDEzMjAwMDAwMCk7CiAJaWYgKHJldCkKIAkJcHJfd2FybigiJXM6 IGZhaWxlZCB0byBzZXQgQUhCIGNsb2NrIHJhdGUgJWQhXG4iLAogCQkJX19mdW5jX18sIHJldCk7 CkBAIC00MjAsMjIgKzQyNiwyMyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW14NnNsX2Nsb2Nrc19p bml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpCiAJICogdXNlY291bnQgYW5kIGVuYWJs aW5nL2Rpc2FibGluZyBvZiBwYXJlbnQgUExMcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjbGtzX2luaXRfb24pOyBpKyspCi0JCWNsa19wcmVwYXJlX2VuYWJsZShjbGtzW2Ns a3NfaW5pdF9vbltpXV0pOworCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tjbGtz X2luaXRfb25baV1dKTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0JfTVhTX1BIWSkpIHsK LQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsa3NbSU1YNlNMX0NMS19VU0JQSFkxX0dBVEVdKTsKLQkJ Y2xrX3ByZXBhcmVfZW5hYmxlKGNsa3NbSU1YNlNMX0NMS19VU0JQSFkyX0dBVEVdKTsKKwkJY2xr X3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa3NbSU1YNlNMX0NMS19VU0JQSFkxX0dBVEVdKTsK KwkJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa3NbSU1YNlNMX0NMS19VU0JQSFkyX0dB VEVdKTsKIAl9CiAKIAkvKiBBdWRpby1yZWxhdGVkIGNsb2NrcyBjb25maWd1cmF0aW9uICovCi0J Y2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfQ0xLX1NQRElGMF9TRUxdLCBjbGtzW0lNWDZTTF9D TEtfUExMM19QRkQzXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U0xfQ0xL X1NQRElGMF9TRUxdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEwzX1BGRDNdKTsKIAogCS8qIHNl dCBQTEw1IHZpZGVvIGFzIGxjZGlmIHBpeCBwYXJlbnQgY2xvY2sgKi8KLQljbGtfc2V0X3BhcmVu dChjbGtzW0lNWDZTTF9DTEtfTENESUZfUElYX1NFTF0sCi0JCQljbGtzW0lNWDZTTF9DTEtfUExM NV9WSURFT19ESVZdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTTF9DTEtf TENESUZfUElYX1NFTF0sCisJCQkJY2xrc1tJTVg2U0xfQ0xLX1BMTDVfVklERU9fRElWXSk7CiAK LQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTTF9DTEtfTENESUZfQVhJX1NFTF0sCi0JCSAgICAg ICBjbGtzW0lNWDZTTF9DTEtfUExMMl9QRkQyXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQo Y2xrc1tJTVg2U0xfQ0xLX0xDRElGX0FYSV9TRUxdLAorCQkJCWNsa3NbSU1YNlNMX0NMS19QTEwy X1BGRDJdKTsKIAogCS8qIFNldCBpbml0aWFsIHBvd2VyIG1vZGUgKi8KIAlpbXg2cV9zZXRfbHBt KFdBSVRfQ0xPQ0tFRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4 LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMKaW5kZXggMjcwNzBhNy4uNWZlNjQz ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzeC5jCisrKyBiL2FyY2gv YXJtL21hY2gtaW14L2Nsay1pbXg2c3guYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNs dWRlIDxkdC1iaW5kaW5ncy9jbG9jay9pbXg2c3gtY2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9j bGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4K ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC05MCw3ICs4OSw3IEBAIHN0YXRpYyBjb25zdCBj aGFyICpwbGw1X2J5cGFzc19zZWxzW10gPSB7ICJwbGw1IiwgInBsbDVfYnlwYXNzX3NyYyIsIH07 CiBzdGF0aWMgY29uc3QgY2hhciAqcGxsNl9ieXBhc3Nfc2Vsc1tdID0geyAicGxsNiIsICJwbGw2 X2J5cGFzc19zcmMiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBsbDdfYnlwYXNzX3NlbHNbXSA9 IHsgInBsbDciLCAicGxsN19ieXBhc3Nfc3JjIiwgfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNs a3NbSU1YNlNYX0NMS19DTEtfRU5EXTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKmNsa3NbSU1Y NlNYX0NMS19DTEtfRU5EXTsKIHN0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0 YTsKIAogc3RhdGljIGludCBjb25zdCBjbGtzX2luaXRfb25bXSBfX2luaXRjb25zdCA9IHsKQEAg LTE0NCwxMiArMTQzLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg2c3hfY2xvY2tzX2luaXQo c3RydWN0IGRldmljZV9ub2RlICpjY21fbm9kZSkKIAogCWNsa3NbSU1YNlNYX0NMS19EVU1NWV0g PSBpbXhfY2xrX2ZpeGVkKCJkdW1teSIsIDApOwogCi0JY2xrc1tJTVg2U1hfQ0xLX0NLSUxdID0g b2ZfY2xrX2dldF9ieV9uYW1lKGNjbV9ub2RlLCAiY2tpbCIpOwotCWNsa3NbSU1YNlNYX0NMS19P U0NdID0gb2ZfY2xrX2dldF9ieV9uYW1lKGNjbV9ub2RlLCAib3NjIik7CisJY2xrc1tJTVg2U1hf Q0xLX0NLSUxdID0gb2ZfY2xrX3Byb3ZpZGVyX2dldF9ieV9uYW1lKGNjbV9ub2RlLCAiY2tpbCIp OworCWNsa3NbSU1YNlNYX0NMS19PU0NdID0gb2ZfY2xrX3Byb3ZpZGVyX2dldF9ieV9uYW1lKGNj bV9ub2RlLCAib3NjIik7CiAKIAkvKiBpcHBfZGkgY2xvY2sgaXMgZXh0ZXJuYWwgaW5wdXQgKi8K LQljbGtzW0lNWDZTWF9DTEtfSVBQX0RJMF0gPSBvZl9jbGtfZ2V0X2J5X25hbWUoY2NtX25vZGUs ICJpcHBfZGkwIik7Ci0JY2xrc1tJTVg2U1hfQ0xLX0lQUF9ESTFdID0gb2ZfY2xrX2dldF9ieV9u YW1lKGNjbV9ub2RlLCAiaXBwX2RpMSIpOworCWNsa3NbSU1YNlNYX0NMS19JUFBfREkwXSA9IG9m X2Nsa19wcm92aWRlcl9nZXRfYnlfbmFtZShjY21fbm9kZSwKKwkJCQkJCQkgICAgICAgImlwcF9k aTAiKTsKKwljbGtzW0lNWDZTWF9DTEtfSVBQX0RJMV0gPSBvZl9jbGtfcHJvdmlkZXJfZ2V0X2J5 X25hbWUoY2NtX25vZGUsCisJCQkJCQkJICAgICAgICJpcHBfZGkxIik7CiAKIAkvKiBDbG9jayBz b3VyY2UgZnJvbSBleHRlcm5hbCBjbG9jayB2aWEgQ0xLMSBQQUQgKi8KIAljbGtzW0lNWDZTWF9D TEtfQU5BQ0xLMV0gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJhbmFjbGsxIiwgMCk7CkBAIC0x ODQsMTMgKzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2Nsb2Nrc19pbml0KHN0 cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpCiAJY2xrc1tJTVg2U1hfUExMN19CWVBBU1NdID0g aW14X2Nsa19tdXhfZmxhZ3MoInBsbDdfYnlwYXNzIiwgYmFzZSArIDB4MjAsIDE2LCAxLCBwbGw3 X2J5cGFzc19zZWxzLCBBUlJBWV9TSVpFKHBsbDdfYnlwYXNzX3NlbHMpLCBDTEtfU0VUX1JBVEVf UEFSRU5UKTsKIAogCS8qIERvIG5vdCBieXBhc3MgUExMcyBpbml0aWFsbHkgKi8KLQljbGtfc2V0 X3BhcmVudChjbGtzW0lNWDZTWF9QTEwxX0JZUEFTU10sIGNsa3NbSU1YNlNYX0NMS19QTEwxXSk7 Ci0JY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfUExMMl9CWVBBU1NdLCBjbGtzW0lNWDZTWF9D TEtfUExMMl0pOwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX1BMTDNfQllQQVNTXSwgY2xr c1tJTVg2U1hfQ0xLX1BMTDNdKTsKLQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9QTEw0X0JZ UEFTU10sIGNsa3NbSU1YNlNYX0NMS19QTEw0XSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2 U1hfUExMNV9CWVBBU1NdLCBjbGtzW0lNWDZTWF9DTEtfUExMNV0pOwotCWNsa19zZXRfcGFyZW50 KGNsa3NbSU1YNlNYX1BMTDZfQllQQVNTXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDZdKTsKLQljbGtf c2V0X3BhcmVudChjbGtzW0lNWDZTWF9QTEw3X0JZUEFTU10sIGNsa3NbSU1YNlNYX0NMS19QTEw3 XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfUExMMV9CWVBBU1NdLAor CQkJCWNsa3NbSU1YNlNYX0NMS19QTEwxXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xr c1tJTVg2U1hfUExMMl9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNYX0NMS19QTEwyXSk7CisJY2xr X3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfUExMM19CWVBBU1NdLAorCQkJCWNsa3Nb SU1YNlNYX0NMS19QTEwzXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hf UExMNF9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNYX0NMS19QTEw0XSk7CisJY2xrX3Byb3ZpZGVy X3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfUExMNV9CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNYX0NM S19QTEw1XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfUExMNl9CWVBB U1NdLAorCQkJCWNsa3NbSU1YNlNYX0NMS19QTEw2XSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJl bnQoY2xrc1tJTVg2U1hfUExMN19CWVBBU1NdLAorCQkJCWNsa3NbSU1YNlNYX0NMS19QTEw3XSk7 CiAKIAljbGtzW0lNWDZTWF9DTEtfUExMMV9TWVNdICAgICAgPSBpbXhfY2xrX2dhdGUoInBsbDFf c3lzIiwgICAgICAicGxsMV9ieXBhc3MiLCBiYXNlICsgMHgwMCwgMTMpOwogCWNsa3NbSU1YNlNY X0NMS19QTEwyX0JVU10gICAgICA9IGlteF9jbGtfZ2F0ZSgicGxsMl9idXMiLCAgICAgICJwbGwy X2J5cGFzcyIsIGJhc2UgKyAweDMwLCAxMyk7CkBAIC00OTgsNjUgKzUwNiw4MCBAQCBzdGF0aWMg dm9pZCBfX2luaXQgaW14NnN4X2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25v ZGUpCiAJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwgJmNs a19kYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsa3NfaW5pdF9vbik7IGkr KykKLQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsa3NbY2xrc19pbml0X29uW2ldXSk7CisJCWNsa19w cm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtzW2Nsa3NfaW5pdF9vbltpXV0pOwogCiAJaWYgKElT X0VOQUJMRUQoQ09ORklHX1VTQl9NWFNfUEhZKSkgewotCQljbGtfcHJlcGFyZV9lbmFibGUoY2xr c1tJTVg2U1hfQ0xLX1VTQlBIWTFfR0FURV0pOwotCQljbGtfcHJlcGFyZV9lbmFibGUoY2xrc1tJ TVg2U1hfQ0xLX1VTQlBIWTJfR0FURV0pOworCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUo Y2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTFfR0FURV0pOworCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9l bmFibGUoY2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTJfR0FURV0pOwogCX0KIAogCS8qIFNldCB0aGUg ZGVmYXVsdCAxMzJNSHogZm9yIEVJTSBtb2R1bGUgKi8KLQljbGtfc2V0X3BhcmVudChjbGtzW0lN WDZTWF9DTEtfRUlNX1NMT1dfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDJfUEZEMl0pOwotCWNs a19zZXRfcmF0ZShjbGtzW0lNWDZTWF9DTEtfRUlNX1NMT1ddLCAxMzIwMDAwMDApOworCWNsa19w cm92aWRlcl9zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19FSU1fU0xPV19TRUxdLAorCQkJCWNs a3NbSU1YNlNYX0NMS19QTEwyX1BGRDJdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrc1tJ TVg2U1hfQ0xLX0VJTV9TTE9XXSwgMTMyMDAwMDAwKTsKIAogCS8qIHNldCBwYXJlbnQgY2xvY2sg Zm9yIExDRElGMSBwaXhlbCBjbG9jayAqLwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NM S19MQ0RJRjFfUFJFX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEw1X1ZJREVPX0RJVl0pOwotCWNs a19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19MQ0RJRjFfU0VMXSwgY2xrc1tJTVg2U1hfQ0xL X0xDRElGMV9QT0RGXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xL X0xDRElGMV9QUkVfU0VMXSwKKwkJCQljbGtzW0lNWDZTWF9DTEtfUExMNV9WSURFT19ESVZdKTsK KwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfTENESUYxX1NFTF0sCisJ CQkJY2xrc1tJTVg2U1hfQ0xLX0xDRElGMV9QT0RGXSk7CiAKIAkvKiBTZXQgdGhlIHBhcmVudCBj bGtzIG9mIFBDSWUgbHZkczEgYW5kIHBjaWVfYXhpIHRvIGJlIHBjaWUgcmVmLCBheGkgKi8KLQlp ZiAoY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0xWRFMxX1NFTF0sIGNsa3NbSU1YNlNY X0NMS19QQ0lFX1JFRl8xMjVNXSkpCisJaWYgKGNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa3Nb SU1YNlNYX0NMS19MVkRTMV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUENJRV9SRUZfMTI1TV0pKQog CQlwcl9lcnIoIkZhaWxlZCB0byBzZXQgcGNpZSBidXMgcGFyZW50IGNsay5cbiIpOwotCWlmIChj bGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfUENJRV9BWElfU0VMXSwgY2xrc1tJTVg2U1hf Q0xLX0FYSV0pKQorCWlmIChjbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtf UENJRV9BWElfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX0FYSV0pKQogCQlwcl9lcnIoIkZhaWxlZCB0 byBzZXQgcGNpZSBwYXJlbnQgY2xrLlxuIik7CiAKIAkvKgogCSAqIEluaXQgZW5ldCBzeXN0ZW0g QUhCIGNsb2NrLCBzZXQgdG8gMjAwTWh6CiAJICogcGxsMl9wZmQyXzM5Nm0tPiBFTkVUX1BPREYt PiBFTkVUX0FIQgogCSAqLwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19FTkVUX1BS RV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMMl9QRkQyXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xr c1tJTVg2U1hfQ0xLX0VORVRfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX0VORVRfUE9ERl0pOwotCWNs a19zZXRfcmF0ZShjbGtzW0lNWDZTWF9DTEtfRU5FVF9QT0RGXSwgMjAwMDAwMDAwKTsKLQljbGtf c2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0VORVRfUkVGXSwgMTI1MDAwMDAwKTsKLQljbGtfc2V0 X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0VORVQyX1JFRl0sIDEyNTAwMDAwMCk7CisJY2xrX3Byb3Zp ZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0VORVRfUFJFX1NFTF0sCisJCQkJY2xrc1tJ TVg2U1hfQ0xLX1BMTDJfUEZEMl0pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa3NbSU1Y NlNYX0NMS19FTkVUX1NFTF0sCisJCQkJY2xrc1tJTVg2U1hfQ0xLX0VORVRfUE9ERl0pOworCWNs a19wcm92aWRlcl9zZXRfcmF0ZShjbGtzW0lNWDZTWF9DTEtfRU5FVF9QT0RGXSwgMjAwMDAwMDAw KTsKKwljbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0VORVRfUkVGXSwgMTI1 MDAwMDAwKTsKKwljbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0VORVQyX1JF Rl0sIDEyNTAwMDAwMCk7CiAKIAkvKiBBdWRpbyBjbG9ja3MgKi8KLQljbGtfc2V0X3JhdGUoY2xr c1tJTVg2U1hfQ0xLX1BMTDRfQVVESU9fRElWXSwgMzkzMjE2MDAwKTsKLQotCWNsa19zZXRfcGFy ZW50KGNsa3NbSU1YNlNYX0NMS19TUERJRl9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMNF9BVURJ T19ESVZdKTsKLQljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX1NQRElGX1BPREZdLCA5ODMw NDAwMCk7Ci0KLQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfQVVESU9fU0VMXSwgY2xr c1tJTVg2U1hfQ0xLX1BMTDNfVVNCX09UR10pOwotCWNsa19zZXRfcmF0ZShjbGtzW0lNWDZTWF9D TEtfQVVESU9fUE9ERl0sIDI0MDAwMDAwKTsKLQotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNY X0NMS19TU0kxX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0pOwotCWNsa19z ZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19TU0kyX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEw0 X0FVRElPX0RJVl0pOwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19TU0kzX1NFTF0s IGNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0pOwotCWNsa19zZXRfcmF0ZShjbGtzW0lN WDZTWF9DTEtfU1NJMV9QT0RGXSwgMjQ1NzYwMDApOwotCWNsa19zZXRfcmF0ZShjbGtzW0lNWDZT WF9DTEtfU1NJMl9QT0RGXSwgMjQ1NzYwMDApOwotCWNsa19zZXRfcmF0ZShjbGtzW0lNWDZTWF9D TEtfU1NJM19QT0RGXSwgMjQ1NzYwMDApOwotCi0JY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hf Q0xLX0VTQUlfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDRfQVVESU9fRElWXSk7Ci0JY2xrX3Nl dF9yYXRlKGNsa3NbSU1YNlNYX0NMS19FU0FJX1BPREZdLCAyNDU3NjAwMCk7CisJY2xrX3Byb3Zp ZGVyX3NldF9yYXRlKGNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0sIDM5MzIxNjAwMCk7 CisKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1BESUZfU0VMXSwK KwkJCQljbGtzW0lNWDZTWF9DTEtfUExMNF9BVURJT19ESVZdKTsKKwljbGtfcHJvdmlkZXJfc2V0 X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX1NQRElGX1BPREZdLCA5ODMwNDAwMCk7CisKKwljbGtfcHJv dmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfQVVESU9fU0VMXSwKKwkJCQljbGtzW0lN WDZTWF9DTEtfUExMM19VU0JfT1RHXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNsa3NbSU1Y NlNYX0NMS19BVURJT19QT0RGXSwgMjQwMDAwMDApOworCisJY2xrX3Byb3ZpZGVyX3NldF9wYXJl bnQoY2xrc1tJTVg2U1hfQ0xLX1NTSTFfU0VMXSwKKwkJCQljbGtzW0lNWDZTWF9DTEtfUExMNF9B VURJT19ESVZdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1NJ Ml9TRUxdLAorCQkJCWNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0pOworCWNsa19wcm92 aWRlcl9zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19TU0kzX1NFTF0sCisJCQkJY2xrc1tJTVg2 U1hfQ0xLX1BMTDRfQVVESU9fRElWXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNsa3NbSU1Y NlNYX0NMS19TU0kxX1BPREZdLCAyNDU3NjAwMCk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNs a3NbSU1YNlNYX0NMS19TU0kyX1BPREZdLCAyNDU3NjAwMCk7CisJY2xrX3Byb3ZpZGVyX3NldF9y YXRlKGNsa3NbSU1YNlNYX0NMS19TU0kzX1BPREZdLCAyNDU3NjAwMCk7CisKKwljbGtfcHJvdmlk ZXJfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfRVNBSV9TRUxdLAorCQkJCWNsa3NbSU1YNlNY X0NMS19QTEw0X0FVRElPX0RJVl0pOworCWNsa19wcm92aWRlcl9zZXRfcmF0ZShjbGtzW0lNWDZT WF9DTEtfRVNBSV9QT0RGXSwgMjQ1NzYwMDApOwogCiAJLyogU2V0IHBhcmVudCBjbG9jayBmb3Ig dmFkYyAqLwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19WSURfU0VMXSwgY2xrc1tJ TVg2U1hfQ0xLX1BMTDNfVVNCX09UR10pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa3Nb SU1YNlNYX0NMS19WSURfU0VMXSwKKwkJCQljbGtzW0lNWDZTWF9DTEtfUExMM19VU0JfT1RHXSk7 CiAKIAkvKiBkZWZhdWx0IHBhcmVudCBvZiBjYW5fc2VsIGNsb2NrIGlzIGludmFsaWQsIG1hbnVh bGx5IHNldCBpdCBoZXJlICovCi0JY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0NBTl9T RUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMM182ME1dKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVu dChjbGtzW0lNWDZTWF9DTEtfQ0FOX1NFTF0sCisJCQkJY2xrc1tJTVg2U1hfQ0xLX1BMTDNfNjBN XSk7CiAKIAkvKiBVcGRhdGUgZ3B1IGNsb2NrIGZyb20gZGVmYXVsdCA1MjhNIHRvIDcyME0gKi8K LQljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfR1BVX0NPUkVfU0VMXSwgY2xrc1tJTVg2 U1hfQ0xLX1BMTDNfUEZEMF0pOwotCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19HUFVf QVhJX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwzX1BGRDBdKTsKKwljbGtfcHJvdmlkZXJfc2V0 X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfR1BVX0NPUkVfU0VMXSwKKwkJCQljbGtzW0lNWDZTWF9D TEtfUExMM19QRkQwXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xL X0dQVV9BWElfU0VMXSwKKwkJCQljbGtzW0lNWDZTWF9DTEtfUExMM19QRkQwXSk7CiAKIAkvKiBT ZXQgaW5pdGlhbCBwb3dlciBtb2RlICovCiAJaW14NnFfc2V0X2xwbShXQUlUX0NMT0NLRUQpOwpk aWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBmZC5jIGIvYXJjaC9hcm0vbWFjaC1p bXgvY2xrLXBmZC5jCmluZGV4IDBiMGY2ZjYuLjdmMTcyYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJt L21hY2gtaW14L2Nsay1wZmQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstcGZkLmMKQEAg LTEwLDcgKzEwLDYgQEAKICAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAog ICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlk ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAg LTEyOCwxMSArMTI3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfcGZkX29w cyA9IHsKIAkuaXNfZW5hYmxlZCAgICAgPSBjbGtfcGZkX2lzX2VuYWJsZWQsCiB9OwogCi1zdHJ1 Y3QgY2xrICppbXhfY2xrX3BmZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRf bmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19wZmQoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQl2b2lkIF9faW9tZW0gKnJlZywgdTggaWR4KQogewog CXN0cnVjdCBjbGtfcGZkICpwZmQ7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29y ZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlwZmQgPSBremFsbG9jKHNp emVvZigqcGZkKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9j bGstcGxsdjEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2MS5jCmluZGV4IGQyMWQxNGMu LjdlZjJjYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2MS5jCisrKyBi L2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2MS5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUg PGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtOTcsMTEgKzk2LDExIEBA IHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfcGxsdjFfb3BzID0gewogCS5yZWNhbGNfcmF0ZSA9 IGNsa19wbGx2MV9yZWNhbGNfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfcGxsdjEo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50LAorc3RydWN0IGNsa19jb3JlICpp bXhfY2xrX3BsbHYxKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudCwKIAkJdm9p ZCBfX2lvbWVtICpiYXNlKQogewogCXN0cnVjdCBjbGtfcGxsdjEgKnBsbDsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5p dDsKIAogCXBsbCA9IGttYWxsb2Moc2l6ZW9mKCpwbGwpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdp dCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2Mi5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xr LXBsbHYyLmMKaW5kZXggMjA4ODlkNS4uM2RjYTdkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFj aC1pbXgvY2xrLXBsbHYyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYyLmMKQEAg LTEsNSArMSw0IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgog I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0yMzcsMTEgKzIzNiwxMSBAQCBzdGF0aWMgc3Ry dWN0IGNsa19vcHMgY2xrX3BsbHYyX29wcyA9IHsKIAkuc2V0X3JhdGUgPSBjbGtfcGxsdjJfc2V0 X3JhdGUsCiB9OwogCi1zdHJ1Y3QgY2xrICppbXhfY2xrX3BsbHYyKGNvbnN0IGNoYXIgKm5hbWUs IGNvbnN0IGNoYXIgKnBhcmVudCwKK3N0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19wbGx2Mihjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCiAJCXZvaWQgX19pb21lbSAqYmFzZSkK IHsKIAlzdHJ1Y3QgY2xrX3BsbHYyICpwbGw7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlwbGwgPSBremFs bG9jKHNpemVvZigqcGxsKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNo LWlteC9jbGstcGxsdjMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2My5jCmluZGV4IDU3 ZGU3NGQuLmVhYmNkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2My5j CisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2My5jCkBAIC0xMCw3ICsxMCw2IEBACiAg KiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwogCi0jaW5jbHVkZSA8 bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjgzLDEzICsyODIsMTMg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19wbGx2M19lbmV0X29wcyA9IHsKIAku cmVjYWxjX3JhdGUJPSBjbGtfcGxsdjNfZW5ldF9yZWNhbGNfcmF0ZSwKIH07CiAKLXN0cnVjdCBj bGsgKmlteF9jbGtfcGxsdjMoZW51bSBpbXhfcGxsdjNfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpu YW1lLAorc3RydWN0IGNsa19jb3JlICppbXhfY2xrX3BsbHYzKGVudW0gaW14X3BsbHYzX3R5cGUg dHlwZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZv aWQgX19pb21lbSAqYmFzZSwKIAkJCSAgdTMyIGRpdl9tYXNrKQogewogCXN0cnVjdCBjbGtfcGxs djMgKnBsbDsKIAljb25zdCBzdHJ1Y3QgY2xrX29wcyAqb3BzOwotCXN0cnVjdCBjbGsgKmNsazsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJ cGxsID0ga3phbGxvYyhzaXplb2YoKnBsbCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstdmY2MTAu YwppbmRleCBhMTc4MTg0Li5kNjMxMzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9j bGstdmY2MTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstdmY2MTAuYwpAQCAtOSw3ICs5 LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmg+CiAK ICNpbmNsdWRlICJjbGsuaCIKQEAgLTk3LDcgKzk2LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfZGl2 X3RhYmxlIHBsbDRfbWFpbl9kaXZfdGFibGVbXSA9IHsKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1 Y3QgY2xrICpjbGtbVkY2MTBfQ0xLX0VORF07CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtb VkY2MTBfQ0xLX0VORF07CiBzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7 CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgY2xrc19pbml0X29uW10gX19pbml0Y29uc3Qg PSB7CkBAIC0zMjEsMjMgKzMyMCwzNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdmY2MTBfY2xvY2tz X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjY21fbm9kZSkKIAogCWlteF9jaGVja19jbG9ja3Mo Y2xrLCBBUlJBWV9TSVpFKGNsaykpOwogCi0JY2xrX3NldF9wYXJlbnQoY2xrW1ZGNjEwX0NMS19R U1BJMF9TRUxdLCBjbGtbVkY2MTBfQ0xLX1BMTDFfUEZENF0pOwotCWNsa19zZXRfcmF0ZShjbGtb VkY2MTBfQ0xLX1FTUEkwX1g0X0RJVl0sIGNsa19nZXRfcmF0ZShjbGtbVkY2MTBfQ0xLX1FTUEkw X1NFTF0pIC8gMik7Ci0JY2xrX3NldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTBfWDJfRElWXSwg Y2xrX2dldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTBfWDRfRElWXSkgLyAyKTsKLQljbGtfc2V0 X3JhdGUoY2xrW1ZGNjEwX0NMS19RU1BJMF9YMV9ESVZdLCBjbGtfZ2V0X3JhdGUoY2xrW1ZGNjEw X0NMS19RU1BJMF9YMl9ESVZdKSAvIDIpOwotCi0JY2xrX3NldF9wYXJlbnQoY2xrW1ZGNjEwX0NM S19RU1BJMV9TRUxdLCBjbGtbVkY2MTBfQ0xLX1BMTDFfUEZENF0pOwotCWNsa19zZXRfcmF0ZShj bGtbVkY2MTBfQ0xLX1FTUEkxX1g0X0RJVl0sIGNsa19nZXRfcmF0ZShjbGtbVkY2MTBfQ0xLX1FT UEkxX1NFTF0pIC8gMik7Ci0JY2xrX3NldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTFfWDJfRElW XSwgY2xrX2dldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTFfWDRfRElWXSkgLyAyKTsKLQljbGtf c2V0X3JhdGUoY2xrW1ZGNjEwX0NMS19RU1BJMV9YMV9ESVZdLCBjbGtfZ2V0X3JhdGUoY2xrW1ZG NjEwX0NMS19RU1BJMV9YMl9ESVZdKSAvIDIpOwotCi0JY2xrX3NldF9wYXJlbnQoY2xrW1ZGNjEw X0NMS19TQUkwX1NFTF0sIGNsa1tWRjYxMF9DTEtfQVVESU9fRVhUXSk7Ci0JY2xrX3NldF9wYXJl bnQoY2xrW1ZGNjEwX0NMS19TQUkxX1NFTF0sIGNsa1tWRjYxMF9DTEtfQVVESU9fRVhUXSk7Ci0J Y2xrX3NldF9wYXJlbnQoY2xrW1ZGNjEwX0NMS19TQUkyX1NFTF0sIGNsa1tWRjYxMF9DTEtfQVVE SU9fRVhUXSk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrW1ZGNjEwX0NMS19TQUkzX1NFTF0sIGNsa1tW RjYxMF9DTEtfQVVESU9fRVhUXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrW1ZGNjEw X0NMS19RU1BJMF9TRUxdLAorCQkJCWNsa1tWRjYxMF9DTEtfUExMMV9QRkQ0XSk7CisJY2xrX3By b3ZpZGVyX3NldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTBfWDRfRElWXSwKKwkJCSAgICAgIGNs a19wcm92aWRlcl9nZXRfcmF0ZShjbGtbVkY2MTBfQ0xLX1FTUEkwX1NFTF0pIC8gMik7CisJY2xr X3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTBfWDJfRElWXSwKKwkJCSAgICAg IGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtbVkY2MTBfQ0xLX1FTUEkwX1g0X0RJVl0pIC8gMik7 CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTBfWDFfRElWXSwKKwkJ CSAgICAgIGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtbVkY2MTBfQ0xLX1FTUEkwX1gyX0RJVl0p IC8gMik7CisKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGtbVkY2MTBfQ0xLX1FTUEkxX1NF TF0sCisJCQkJY2xrW1ZGNjEwX0NMS19QTEwxX1BGRDRdKTsKKwljbGtfcHJvdmlkZXJfc2V0X3Jh dGUoY2xrW1ZGNjEwX0NMS19RU1BJMV9YNF9ESVZdLAorCQkJICAgICAgY2xrX3Byb3ZpZGVyX2dl dF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTFfU0VMXSkgLyAyKTsKKwljbGtfcHJvdmlkZXJfc2V0 X3JhdGUoY2xrW1ZGNjEwX0NMS19RU1BJMV9YMl9ESVZdLAorCQkJICAgICAgY2xrX3Byb3ZpZGVy X2dldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTFfWDRfRElWXSkgLyAyKTsKKwljbGtfcHJvdmlk ZXJfc2V0X3JhdGUoY2xrW1ZGNjEwX0NMS19RU1BJMV9YMV9ESVZdLAorCQkJICAgICAgY2xrX3By b3ZpZGVyX2dldF9yYXRlKGNsa1tWRjYxMF9DTEtfUVNQSTFfWDJfRElWXSkgLyAyKTsKKworCWNs a19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tWRjYxMF9DTEtfU0FJMF9TRUxdLAorCQkJCWNsa1tW RjYxMF9DTEtfQVVESU9fRVhUXSk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrW1ZGNjEw X0NMS19TQUkxX1NFTF0sCisJCQkJY2xrW1ZGNjEwX0NMS19BVURJT19FWFRdKTsKKwljbGtfcHJv dmlkZXJfc2V0X3BhcmVudChjbGtbVkY2MTBfQ0xLX1NBSTJfU0VMXSwKKwkJCQljbGtbVkY2MTBf Q0xLX0FVRElPX0VYVF0pOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsa1tWRjYxMF9DTEtf U0FJM19TRUxdLAorCQkJCWNsa1tWRjYxMF9DTEtfQVVESU9fRVhUXSk7CiAKIAlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjbGtzX2luaXRfb24pOyBpKyspCi0JCWNsa19wcmVwYXJlX2VuYWJs ZShjbGtbY2xrc19pbml0X29uW2ldXSk7CisJCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShj bGtbY2xrc19pbml0X29uW2ldXSk7CiAKIAkvKiBBZGQgdGhlIGNsb2NrcyB0byBwcm92aWRlciBs aXN0ICovCiAJY2xrX2RhdGEuY2xrcyA9IGNsazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gt aW14L2Nsay5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmMKaW5kZXggZGYxMmI1My4uZmM1NDIw MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmMKKysrIGIvYXJjaC9hcm0vbWFj aC1pbXgvY2xrLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5j bHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CkBAIC03LDcgKzYsNyBAQAogCiBERUZJTkVfU1BJTkxPQ0soaW14X2NjbV9sb2Nr KTsKIAotdm9pZCBfX2luaXQgaW14X2NoZWNrX2Nsb2NrcyhzdHJ1Y3QgY2xrICpjbGtzW10sIHVu c2lnbmVkIGludCBjb3VudCkKK3ZvaWQgX19pbml0IGlteF9jaGVja19jbG9ja3Moc3RydWN0IGNs a19jb3JlICpjbGtzW10sIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpOwogCkBA IC0xNywxMCArMTYsMTAgQEAgdm9pZCBfX2luaXQgaW14X2NoZWNrX2Nsb2NrcyhzdHJ1Y3QgY2xr ICpjbGtzW10sIHVuc2lnbmVkIGludCBjb3VudCkKIAkJCSAgICAgICBpLCBQVFJfRVJSKGNsa3Nb aV0pKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQgaW14X29idGFpbl9maXhlZF9j bG9ja19mcm9tX2R0KGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICog X19pbml0IGlteF9vYnRhaW5fZml4ZWRfY2xvY2tfZnJvbV9kdChjb25zdCBjaGFyICpuYW1lKQog ewogCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgcGhhbmRsZTsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBF UlJfUFRSKC1FTk9ERVYpOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gRVJSX1BUUigtRU5PREVW KTsKIAljaGFyICpwYXRoOwogCiAJcGF0aCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiL2Nsb2Nr cy8lcyIsIG5hbWUpOwpAQCAtMzcsMTAgKzM2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICogX19p bml0IGlteF9vYnRhaW5fZml4ZWRfY2xvY2tfZnJvbV9kdChjb25zdCBjaGFyICpuYW1lKQogCXJl dHVybiBjbGs7CiB9CiAKLXN0cnVjdCBjbGsgKiBfX2luaXQgaW14X29idGFpbl9maXhlZF9jbG9j aygKK3N0cnVjdCBjbGtfY29yZSAqIF9faW5pdCBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKAogCQkJ Y29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyByYXRlKQogewotCXN0cnVjdCBjbGsgKmNs azsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWNsayA9IGlteF9vYnRhaW5fZml4ZWRfY2xv Y2tfZnJvbV9kdChuYW1lKTsKIAlpZiAoSVNfRVJSKGNsaykpCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9tYWNoLWlteC9jbGsuaCBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCmluZGV4IDRjZGY4YjYu LmQ0ZDIzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCisrKyBiL2FyY2gv YXJtL21hY2gtaW14L2Nsay5oCkBAIC02LDE0ICs2LDE0IEBACiAKIGV4dGVybiBzcGlubG9ja190 IGlteF9jY21fbG9jazsKIAotdm9pZCBpbXhfY2hlY2tfY2xvY2tzKHN0cnVjdCBjbGsgKmNsa3Nb XSwgdW5zaWduZWQgaW50IGNvdW50KTsKK3ZvaWQgaW14X2NoZWNrX2Nsb2NrcyhzdHJ1Y3QgY2xr X2NvcmUgKmNsa3NbXSwgdW5zaWduZWQgaW50IGNvdW50KTsKIAogZXh0ZXJuIHZvaWQgaW14X2Nz Y21yMV9maXh1cCh1MzIgKnZhbCk7CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfcGxsdjEoY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50LAorc3RydWN0IGNsa19jb3JlICppbXhfY2xr X3BsbHYxKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudCwKIAkJdm9pZCBfX2lv bWVtICpiYXNlKTsKIAotc3RydWN0IGNsayAqaW14X2Nsa19wbGx2Mihjb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICpwYXJlbnQsCitzdHJ1Y3QgY2xrX2NvcmUgKmlteF9jbGtfcGxsdjIoY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50LAogCQl2b2lkIF9faW9tZW0gKmJhc2Up OwogCiBlbnVtIGlteF9wbGx2M190eXBlIHsKQEAgLTI0LDI5ICsyNCwyOSBAQCBlbnVtIGlteF9w bGx2M190eXBlIHsKIAlJTVhfUExMVjNfRU5FVCwKIH07CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtf cGxsdjMoZW51bSBpbXhfcGxsdjNfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorc3RydWN0 IGNsa19jb3JlICppbXhfY2xrX3BsbHYzKGVudW0gaW14X3BsbHYzX3R5cGUgdHlwZSwgY29uc3Qg Y2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19pb21lbSAqYmFz ZSwgdTMyIGRpdl9tYXNrKTsKIAotc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2dhdGUyKHN0cnVj dCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3Jl Z2lzdGVyX2dhdGUyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29u c3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21l bSAqcmVnLCB1OCBiaXRfaWR4LAogCQl1OCBjbGtfZ2F0ZV9mbGFncywgc3BpbmxvY2tfdCAqbG9j aywKIAkJdW5zaWduZWQgaW50ICpzaGFyZV9jb3VudCk7CiAKLXN0cnVjdCBjbGsgKiBpbXhfb2J0 YWluX2ZpeGVkX2Nsb2NrKAorc3RydWN0IGNsa19jb3JlICogaW14X29idGFpbl9maXhlZF9jbG9j aygKIAkJCWNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKLXN0cnVjdCBj bGsgKmlteF9jbGtfZ2F0ZV9leGNsdXNpdmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq cGFyZW50LAorc3RydWN0IGNsa19jb3JlICppbXhfY2xrX2dhdGVfZXhjbHVzaXZlKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudCwKIAkgdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNo aWZ0LCB1MzIgZXhjbHVzaXZlX21hc2spOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsgKmlt eF9jbGtfZ2F0ZTIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50LAorc3RhdGlj IGlubGluZSBzdHJ1Y3QgY2xrX2NvcmUgKmlteF9jbGtfZ2F0ZTIoY29uc3QgY2hhciAqbmFtZSwg Y29uc3QgY2hhciAqcGFyZW50LAogCQl2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQpCiB7CiAJ cmV0dXJuIGNsa19yZWdpc3Rlcl9nYXRlMihOVUxMLCBuYW1lLCBwYXJlbnQsIENMS19TRVRfUkFU RV9QQVJFTlQsIHJlZywKIAkJCXNoaWZ0LCAwLCAmaW14X2NjbV9sb2NrLCBOVUxMKTsKIH0KIAot c3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICppbXhfY2xrX2dhdGUyX3NoYXJlZChjb25zdCBjaGFy ICpuYW1lLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrX2NvcmUgKmlteF9jbGtfZ2F0ZTJfc2hh cmVkKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIgKnBhcmVudCwgdm9pZCBfX2lvbWVt ICpyZWcsIHU4IHNoaWZ0LAogCQl1bnNpZ25lZCBpbnQgKnNoYXJlX2NvdW50KQogewpAQCAtNTQs MzggKzU0LDM4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqaW14X2Nsa19nYXRlMl9zaGFy ZWQoY29uc3QgY2hhciAqbmFtZSwKIAkJCXNoaWZ0LCAwLCAmaW14X2NjbV9sb2NrLCBzaGFyZV9j b3VudCk7CiB9CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfcGZkKGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICppbXhfY2xrX3BmZChjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJdm9pZCBfX2lvbWVtICpy ZWcsIHU4IGlkeCk7CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfYnVzeV9kaXZpZGVyKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICppbXhf Y2xrX2J1c3lfZGl2aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFt ZSwKIAkJCQkgdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0LCB1OCB3aWR0aCwKIAkJCQkgdm9p ZCBfX2lvbWVtICpidXN5X3JlZywgdTggYnVzeV9zaGlmdCk7CiAKLXN0cnVjdCBjbGsgKmlteF9j bGtfYnVzeV9tdXgoY29uc3QgY2hhciAqbmFtZSwgdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0 LAorc3RydWN0IGNsa19jb3JlICppbXhfY2xrX2J1c3lfbXV4KGNvbnN0IGNoYXIgKm5hbWUsIHZv aWQgX19pb21lbSAqcmVnLCB1OCBzaGlmdCwKIAkJCSAgICAgdTggd2lkdGgsIHZvaWQgX19pb21l bSAqYnVzeV9yZWcsIHU4IGJ1c3lfc2hpZnQsCiAJCQkgICAgIGNvbnN0IGNoYXIgKipwYXJlbnRf bmFtZXMsIGludCBudW1fcGFyZW50cyk7CiAKLXN0cnVjdCBjbGsgKmlteF9jbGtfZml4dXBfZGl2 aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCitzdHJ1Y3QgY2xrX2Nv cmUgKmlteF9jbGtfZml4dXBfZGl2aWRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpw YXJlbnQsCiAJCQkJICB2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQsIHU4IHdpZHRoLAogCQkJ CSAgdm9pZCAoKmZpeHVwKSh1MzIgKnZhbCkpOwogCi1zdHJ1Y3QgY2xrICppbXhfY2xrX2ZpeHVw X211eChjb25zdCBjaGFyICpuYW1lLCB2b2lkIF9faW9tZW0gKnJlZywKK3N0cnVjdCBjbGtfY29y ZSAqaW14X2Nsa19maXh1cF9tdXgoY29uc3QgY2hhciAqbmFtZSwgdm9pZCBfX2lvbWVtICpyZWcs CiAJCQkgICAgICB1OCBzaGlmdCwgdTggd2lkdGgsIGNvbnN0IGNoYXIgKipwYXJlbnRzLAogCQkJ ICAgICAgaW50IG51bV9wYXJlbnRzLCB2b2lkICgqZml4dXApKHUzMiAqdmFsKSk7CiAKLXN0YXRp YyBpbmxpbmUgc3RydWN0IGNsayAqaW14X2Nsa19maXhlZChjb25zdCBjaGFyICpuYW1lLCBpbnQg cmF0ZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICppbXhfY2xrX2ZpeGVkKGNvbnN0 IGNoYXIgKm5hbWUsIGludCByYXRlKQogewogCXJldHVybiBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0 ZShOVUxMLCBuYW1lLCBOVUxMLCBDTEtfSVNfUk9PVCwgcmF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxp bmUgc3RydWN0IGNsayAqaW14X2Nsa19kaXZpZGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKnBhcmVudCwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICppbXhfY2xrX2Rpdmlk ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50LAogCQl2b2lkIF9faW9tZW0g KnJlZywgdTggc2hpZnQsIHU4IHdpZHRoKQogewogCXJldHVybiBjbGtfcmVnaXN0ZXJfZGl2aWRl cihOVUxMLCBuYW1lLCBwYXJlbnQsIENMS19TRVRfUkFURV9QQVJFTlQsCiAJCQlyZWcsIHNoaWZ0 LCB3aWR0aCwgMCwgJmlteF9jY21fbG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNs ayAqaW14X2Nsa19kaXZpZGVyX2ZsYWdzKGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgaW5saW5l IHN0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19kaXZpZGVyX2ZsYWdzKGNvbnN0IGNoYXIgKm5hbWUs CiAJCWNvbnN0IGNoYXIgKnBhcmVudCwgdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0LCB1OCB3 aWR0aCwKIAkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTkzLDIxICs5MywyMSBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCBjbGsgKmlteF9jbGtfZGl2aWRlcl9mbGFncyhjb25zdCBjaGFyICpu YW1lLAogCQkJcmVnLCBzaGlmdCwgd2lkdGgsIDAsICZpbXhfY2NtX2xvY2spOwogfQogCi1zdGF0 aWMgaW5saW5lIHN0cnVjdCBjbGsgKmlteF9jbGtfZ2F0ZShjb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICpwYXJlbnQsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtfY29yZSAqaW14X2Nsa19n YXRlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudCwKIAkJdm9pZCBfX2lvbWVt ICpyZWcsIHU4IHNoaWZ0KQogewogCXJldHVybiBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBuYW1l LCBwYXJlbnQsIENMS19TRVRfUkFURV9QQVJFTlQsIHJlZywKIAkJCXNoaWZ0LCAwLCAmaW14X2Nj bV9sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICppbXhfY2xrX2dhdGVfZGlz KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudCwKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGNsa19jb3JlICppbXhfY2xrX2dhdGVfZGlzKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKnBhcmVudCwKIAkJdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0KQogewogCXJldHVybiBj bGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBuYW1lLCBwYXJlbnQsIENMS19TRVRfUkFURV9QQVJFTlQs IHJlZywKIAkJCXNoaWZ0LCBDTEtfR0FURV9TRVRfVE9fRElTQUJMRSwgJmlteF9jY21fbG9jayk7 CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqaW14X2Nsa19tdXgoY29uc3QgY2hhciAq bmFtZSwgdm9pZCBfX2lvbWVtICpyZWcsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtfY29yZSAq aW14X2Nsa19tdXgoY29uc3QgY2hhciAqbmFtZSwgdm9pZCBfX2lvbWVtICpyZWcsCiAJCXU4IHNo aWZ0LCB1OCB3aWR0aCwgY29uc3QgY2hhciAqKnBhcmVudHMsIGludCBudW1fcGFyZW50cykKIHsK IAlyZXR1cm4gY2xrX3JlZ2lzdGVyX211eChOVUxMLCBuYW1lLCBwYXJlbnRzLCBudW1fcGFyZW50 cywKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsgKmlteF9jbGtf bXV4KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgX19pb21lbSAqcmVnLAogCQkJd2lkdGgsIDAsICZp bXhfY2NtX2xvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsgKmlteF9jbGtfbXV4 X2ZsYWdzKGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtfY29yZSAq aW14X2Nsa19tdXhfZmxhZ3MoY29uc3QgY2hhciAqbmFtZSwKIAkJdm9pZCBfX2lvbWVtICpyZWcs IHU4IHNoaWZ0LCB1OCB3aWR0aCwgY29uc3QgY2hhciAqKnBhcmVudHMsCiAJCWludCBudW1fcGFy ZW50cywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMg aW5saW5lIHN0cnVjdCBjbGsgKmlteF9jbGtfbXV4X2ZsYWdzKGNvbnN0IGNoYXIgKm5hbWUsCiAJ CQkmaW14X2NjbV9sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICppbXhfY2xr X2ZpeGVkX2ZhY3Rvcihjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xr X2NvcmUgKmlteF9jbGtfZml4ZWRfZmFjdG9yKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNo YXIgKnBhcmVudCwgdW5zaWduZWQgaW50IG11bHQsIHVuc2lnbmVkIGludCBkaXYpCiB7CiAJcmV0 dXJuIGNsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoTlVMTCwgbmFtZSwgcGFyZW50LApkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stcGNvbS5jIGIvYXJjaC9hcm0vbWFjaC1tc20v Y2xvY2stcGNvbS5jCmluZGV4IDlhODA0NDkuLjE0MzUyYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJt L21hY2gtbXNtL2Nsb2NrLXBjb20uYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1wY29t LmMKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgaW50IG1zbV9jbG9ja19wY29tX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51 bV9sb29rdXBzOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IGNsa19wY29tX2Rlc2MgKmRlc2MgPSAm cGRhdGEtPmxvb2t1cFtpXTsKLQkJc3RydWN0IGNsayAqYzsKKwkJc3RydWN0IGNsa19jb3JlICpj OwogCQlzdHJ1Y3QgY2xrX3Bjb20gKnA7CiAJCXN0cnVjdCBjbGtfaHcgKmh3OwogCQlzdHJ1Y3Qg Y2xrX2luaXRfZGF0YSBpbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2Nv bW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCmluZGV4IGU2YWM2NzkuLmZl ZTI2NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYworKysgYi9h cmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIF9f aW5pdCBtdjc4eHgwX21hcF9pbyh2b2lkKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDTEsg dHJlZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGNsayAqdGNsazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKnRjbGs7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbGtfaW5p dCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUu YyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggMDE4MzUzZC4uMGY0 MTQyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysg Yi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC01NTEsNyArNTUxLDcgQEAg c3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNtX3QzNV9jYW1lcmFfc3Vw cGxpZXNbXSA9IHsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNV9pbml0X2NhbWVyYSh2b2lk KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWNsayA9 IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJtdDl0MDAxLWNsa2luIiwgTlVMTCwgQ0xL X0lTX1JPT1QsCiAJCQkJICAgICAgNDgwMDAwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFj aC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2Nsb2NrM3h4 eF9kYXRhLmMKaW5kZXggZWI4Yzc1ZS4uMTE4MGFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFj aC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NjbG9j azN4eHhfZGF0YS5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcml2 YXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBA IC0xMDcsNyArMTA2LDcgQEAgc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDNfZGQgPSB7CiAJ Lm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAogfTsKIAotc3RhdGljIHN0cnVjdCBj bGsgZHBsbDNfY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRwbGwzX2NrOwogCiBzdGF0aWMg Y29uc3QgY2hhciAqZHBsbDNfY2tfcGFyZW50X25hbWVzW10gPSB7CiAJInN5c19jayIsCkBAIC0x MzcsNyArMTM2LDcgQEAgREVGSU5FX0NMS19ESVZJREVSKGRwbGwzX20yX2NrLCAiZHBsbDNfY2si LCAmZHBsbDNfY2ssIDB4MCwKIAkJICAgT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfV0lE VEgsCiAJCSAgIENMS19ESVZJREVSX09ORV9CQVNFRCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrIGNvcmVfY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGNvcmVfY2s7CiAKIHN0YXRpYyBj b25zdCBjaGFyICpjb3JlX2NrX3BhcmVudF9uYW1lc1tdID0gewogCSJkcGxsM19tMl9jayIsCkBA IC0xNTgsNyArMTU3LDcgQEAgREVGSU5FX0NMS19ESVZJREVSKGw0X2ljaywgImwzX2ljayIsICZs M19pY2ssIDB4MCwKIAkJICAgT01BUDM0MzBfQ0xLU0VMX0w0X1NISUZULCBPTUFQMzQzMF9DTEtT RUxfTDRfV0lEVEgsCiAJCSAgIENMS19ESVZJREVSX09ORV9CQVNFRCwgTlVMTCk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIHNlY3VyaXR5X2w0X2ljazI7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHNl Y3VyaXR5X2w0X2ljazI7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzZWN1cml0eV9sNF9pY2syX3Bh cmVudF9uYW1lc1tdID0gewogCSJsNF9pY2siLApAQCAtMTY3LDcgKzE2Niw3IEBAIHN0YXRpYyBj b25zdCBjaGFyICpzZWN1cml0eV9sNF9pY2syX3BhcmVudF9uYW1lc1tdID0gewogREVGSU5FX1NU UlVDVF9DTEtfSFdfT01BUChzZWN1cml0eV9sNF9pY2syLCBOVUxMKTsKIERFRklORV9TVFJVQ1Rf Q0xLKHNlY3VyaXR5X2w0X2ljazIsIHNlY3VyaXR5X2w0X2ljazJfcGFyZW50X25hbWVzLCBjb3Jl X2NrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfaWNrOworc3RhdGljIHN0cnVjdCBj bGtfY29yZSBhZXMxX2ljazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmFlczFfaWNrX3BhcmVudF9u YW1lc1tdID0gewogCSJzZWN1cml0eV9sNF9pY2syIiwKQEAgLTE5MCw3ICsxODksNyBAQCBzdGF0 aWMgc3RydWN0IGNsa19od19vbWFwIGFlczFfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NM SyhhZXMxX2ljaywgYWVzMV9pY2tfcGFyZW50X25hbWVzLCBhZXMxX2lja19vcHMpOwogCi1zdGF0 aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgY29yZV9s NF9pY2s7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjb3JlX2w0X2lja19vcHMgPSB7 CiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLApAQCAtMTk5LDcgKzE5OCw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjb3JlX2w0X2lja19vcHMgPSB7CiBERUZJTkVfU1RS VUNUX0NMS19IV19PTUFQKGNvcmVfbDRfaWNrLCAiY29yZV9sNF9jbGtkbSIpOwogREVGSU5FX1NU UlVDVF9DTEsoY29yZV9sNF9pY2ssIHNlY3VyaXR5X2w0X2ljazJfcGFyZW50X25hbWVzLCBjb3Jl X2w0X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBhZXMyX2ljazsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgYWVzMl9pY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICphZXMyX2lja19wYXJl bnRfbmFtZXNbXSA9IHsKIAkiY29yZV9sNF9pY2siLApAQCAtMjI0LDcgKzIyMyw3IEBAIHN0YXRp YyBzdHJ1Y3QgY2xrX2h3X29tYXAgYWVzMl9pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xL KGFlczJfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIGRwbGwxX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDFfZmNr OwogCiBzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMV9kZCA9IHsKIAkubXVsdF9kaXYxX3Jl Zwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCkBA IC0yNDgsNyArMjQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDFfZGQgPSB7CiAJ Lm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAogfTsKIAotc3RhdGljIHN0cnVjdCBj bGsgZHBsbDFfY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRwbGwxX2NrOwogCiBzdGF0aWMg Y29uc3Qgc3RydWN0IGNsa19vcHMgZHBsbDFfY2tfb3BzID0gewogCS5pbml0CQk9ICZvbWFwMl9p bml0X2Nsa19jbGtkbSwKQEAgLTI3OSw3ICsyNzgsNyBAQCBERUZJTkVfQ0xLX0RJVklERVIoZHBs bDFfeDJtMl9jaywgImRwbGwxX3gyX2NrIiwgJmRwbGwxX3gyX2NrLCAweDAsCiAJCSAgIE9NQVAz NDMwX01QVV9EUExMX0NMS09VVF9ESVZfV0lEVEgsCiAJCSAgIENMS19ESVZJREVSX09ORV9CQVNF RCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgbXB1X2NrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqbXB1X2NrX3BhcmVudF9uYW1lc1td ID0gewogCSJkcGxsMV94Mm0yX2NrIiwKQEAgLTI5Myw3ICsyOTIsNyBAQCBERUZJTkVfQ0xLX0RJ VklERVIoYXJtX2ZjaywgIm1wdV9jayIsICZtcHVfY2ssIDB4MCwKIAkJICAgT01BUDM0MzBfU1Rf TVBVX0NMS19TSElGVCwgT01BUDM0MzBfU1RfTVBVX0NMS19XSURUSCwKIAkJICAgMHgwLCBOVUxM KTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg Y2FtX2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBjYW1faWNrX2h3ID0gewogCS5o dyA9IHsKQEAgLTM1OCw3ICszNTcsNyBAQCBzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9k ZF8zNjMwIF9faW5pdGRhdGEgPSB7CiAJLmZsYWdzCQk9IERQTExfSl9UWVBFCiB9OwogCi1zdGF0 aWMgc3RydWN0IGNsayBkcGxsNF9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRfY2s7 CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBkcGxsNF9ja19vcHMgPSB7CiAJLmluaXQJ CT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLApAQCAtNDIyLDcgKzQyMSw3IEBAIERFRklORV9DTEtf RElWSURFUihkcGxsNF9tNV9jaywgImRwbGw0X2NrIiwgJmRwbGw0X2NrLCAweDAsCiAJCSAgIE9N QVAzNDMwX0NMS1NFTF9DQU1fU0hJRlQsIE9NQVAzNjMwX0NMS1NFTF9DQU1fV0lEVEgsCiAJCSAg IENMS19ESVZJREVSX09ORV9CQVNFRCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0 X201eDJfY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRwbGw0X201eDJfY2s7CiAKIHN0YXRp YyBjb25zdCBjaGFyICpkcGxsNF9tNXgyX2NrX3BhcmVudF9uYW1lc1tdID0gewogCSJkcGxsNF9t NV9jayIsCkBAIC00NTksNyArNDU4LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkcGxs NF9tNXgyX2NrX2h3ID0gewogREVGSU5FX1NUUlVDVF9DTEtfRkxBR1MoZHBsbDRfbTV4Ml9jaywg ZHBsbDRfbTV4Ml9ja19wYXJlbnRfbmFtZXMsCiAJCQlkcGxsNF9tNXgyX2NrX29wcywgQ0xLX1NF VF9SQVRFX1BBUkVOVCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201eDJfY2tfMzYzMCA9 IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRfbTV4Ml9ja18zNjMwID0gewogCS5uYW1l CQk9ICJkcGxsNF9tNXgyX2NrIiwKIAkuaHcJCT0gJmRwbGw0X201eDJfY2tfaHcuaHcsCiAJLnBh cmVudF9uYW1lcwk9IGRwbGw0X201eDJfY2tfcGFyZW50X25hbWVzLApAQCAtNDY4LDcgKzQ2Nyw3 IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201eDJfY2tfMzYzMCA9IHsKIAkuZmxhZ3MJCT0g Q0xLX1NFVF9SQVRFX1BBUkVOVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9tY2xrOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSBjYW1fbWNsazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNh bV9tY2xrX3BhcmVudF9uYW1lc1tdID0gewogCSJkcGxsNF9tNXgyX2NrIiwKQEAgLTQ4Myw3ICs0 ODIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGNhbV9tY2xrX2h3ID0gewogCS5jbGtk bV9uYW1lCT0gImNhbV9jbGtkbSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9 IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgY2FtX21jbGsgPSB7CiAJLm5hbWUJCT0gImNhbV9t Y2xrIiwKIAkuaHcJCT0gJmNhbV9tY2xrX2h3Lmh3LAogCS5wYXJlbnRfbmFtZXMJPSBjYW1fbWNs a19wYXJlbnRfbmFtZXMsCkBAIC01MTIsNyArNTExLDcgQEAgREVGSU5FX0NMS19ESVZJREVSKGRw bGw0X20yX2NrLCAiZHBsbDRfY2siLCAmZHBsbDRfY2ssIDB4MCwKIAkJICAgT01BUDM0MzBfRElW Xzk2TV9TSElGVCwgT01BUDM2MzBfRElWXzk2TV9XSURUSCwKIAkJICAgQ0xLX0RJVklERVJfT05F X0JBU0VELCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTJ4Ml9jazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRfbTJ4Ml9jazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmRw bGw0X20yeDJfY2tfcGFyZW50X25hbWVzW10gPSB7CiAJImRwbGw0X20yX2NrIiwKQEAgLTUzMSw3 ICs1MzAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGRwbGw0X20yeDJfY2tfaHcgPSB7 CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRwbGw0X20yeDJfY2ssIGRwbGw0X20yeDJfY2tfcGFyZW50 X25hbWVzLCBkcGxsNF9tNXgyX2NrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20y eDJfY2tfMzYzMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRfbTJ4Ml9ja18zNjMw ID0gewogCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKIAkuaHcJCT0gJmRwbGw0X20yeDJfY2tf aHcuaHcsCiAJLnBhcmVudF9uYW1lcwk9IGRwbGw0X20yeDJfY2tfcGFyZW50X25hbWVzLApAQCAt NTM5LDcgKzUzOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yeDJfY2tfMzYzMCA9IHsK IAkub3BzCQk9ICZkcGxsNF9tNXgyX2NrXzM2MzBfb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBj bGsgb21hcF85Nm1fYWx3b25fZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBvbWFwXzk2bV9h bHdvbl9mY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpvbWFwXzk2bV9hbHdvbl9mY2tfcGFyZW50 X25hbWVzW10gPSB7CiAJImRwbGw0X20yeDJfY2siLApAQCAtNTQ5LDcgKzU0OCw3IEBAIERFRklO RV9TVFJVQ1RfQ0xLX0hXX09NQVAob21hcF85Nm1fYWx3b25fZmNrLCBOVUxMKTsKIERFRklORV9T VFJVQ1RfQ0xLKG9tYXBfOTZtX2Fsd29uX2Zjaywgb21hcF85Nm1fYWx3b25fZmNrX3BhcmVudF9u YW1lcywKIAkJICBjb3JlX2NrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNtXzk2bV9mY2s7 CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGNtXzk2bV9mY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFy ICpjbV85Nm1fZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJvbWFwXzk2bV9hbHdvbl9mY2siLApA QCAtNTY4LDcgKzU2Nyw3IEBAIERFRklORV9DTEtfRElWSURFUl9UQUJMRShkcGxsNF9tM19jaywg ImRwbGw0X2NrIiwgJmRwbGw0X2NrLCAweDAsCiAJCSAgIE9NQVAzNDMwX0NMS1NFTF9UVl9TSElG VCwgT01BUDM2MzBfQ0xLU0VMX1RWX1dJRFRILAogCQkgICAwLCBkcGxsNF9teF9ja19kaXZfdGFi bGUsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM3gyX2NrOworc3RhdGljIHN0 cnVjdCBjbGtfY29yZSBkcGxsNF9tM3gyX2NrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZHBsbDRf bTN4Ml9ja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkiZHBsbDRfbTNfY2siLApAQCAtNTg3LDcgKzU4 Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZHBsbDRfbTN4Ml9ja19odyA9IHsKIAog REVGSU5FX1NUUlVDVF9DTEsoZHBsbDRfbTN4Ml9jaywgZHBsbDRfbTN4Ml9ja19wYXJlbnRfbmFt ZXMsIGRwbGw0X201eDJfY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTN4Ml9j a18zNjMwID0geworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBkcGxsNF9tM3gyX2NrXzM2MzAgPSB7 CiAJLm5hbWUJCT0gImRwbGw0X20zeDJfY2siLAogCS5odwkJPSAmZHBsbDRfbTN4Ml9ja19ody5o dywKIAkucGFyZW50X25hbWVzCT0gZHBsbDRfbTN4Ml9ja19wYXJlbnRfbmFtZXMsCkBAIC02NTEs NyArNjUwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9tYXBfNDhtX2Zja19wYXJlbnRfbmFtZXNb XSA9IHsKIAkiY21fOTZtX2ZjayIsICJzeXNfYWx0Y2xrIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrIG9tYXBfNDhtX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgb21hcF80OG1fZmNrOwog CiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgb21hcF80OG1fZmNrX29wcyA9IHsKIAkucmVj YWxjX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKQEAgLTY3Miw3ICs2NzEsNyBAQCBERUZJ TkVfU1RSVUNUX0NMSyhvbWFwXzQ4bV9mY2ssIG9tYXBfNDhtX2Zja19wYXJlbnRfbmFtZXMsIG9t YXBfNDhtX2Zja19vcHMpOwogCiBERUZJTkVfQ0xLX0ZJWEVEX0ZBQ1RPUihvbWFwXzEybV9mY2ss ICJvbWFwXzQ4bV9mY2siLCAmb21hcF80OG1fZmNrLCAweDAsIDEsIDQpOwogCi1zdGF0aWMgc3Ry dWN0IGNsayBjb3JlXzEybV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGNvcmVfMTJtX2Zj azsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvcmVfMTJtX2Zja19wYXJlbnRfbmFtZXNbXSA9IHsK IAkib21hcF8xMm1fZmNrIiwKQEAgLTY4MSw3ICs2ODAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq Y29yZV8xMm1fZmNrX3BhcmVudF9uYW1lc1tdID0gewogREVGSU5FX1NUUlVDVF9DTEtfSFdfT01B UChjb3JlXzEybV9mY2ssICJjb3JlX2w0X2Nsa2RtIik7CiBERUZJTkVfU1RSVUNUX0NMSyhjb3Jl XzEybV9mY2ssIGNvcmVfMTJtX2Zja19wYXJlbnRfbmFtZXMsIGNvcmVfbDRfaWNrX29wcyk7CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfNDhtX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg Y29yZV80OG1fZmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29yZV80OG1fZmNrX3BhcmVudF9u YW1lc1tdID0gewogCSJvbWFwXzQ4bV9mY2siLApAQCAtNjk4LDcgKzY5Nyw3IEBAIERFRklORV9D TEtfTVVYKG9tYXBfOTZtX2Zjaywgb21hcF85Nm1fZmNrX3BhcmVudF9uYW1lcywgTlVMTCwgMHgw LAogCSAgICAgICBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCiAJICAgICAg IE9NQVAzNDMwX1NPVVJDRV85Nk1fU0hJRlQsIE9NQVAzNDMwX1NPVVJDRV85Nk1fV0lEVEgsIDB4 MCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjazsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgY29yZV85Nm1fZmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29yZV85Nm1f ZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJvbWFwXzk2bV9mY2siLApAQCAtNzA3LDcgKzcwNiw3 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb3JlXzk2bV9mY2tfcGFyZW50X25hbWVzW10gPSB7CiBE RUZJTkVfU1RSVUNUX0NMS19IV19PTUFQKGNvcmVfOTZtX2ZjaywgImNvcmVfbDRfY2xrZG0iKTsK IERFRklORV9TVFJVQ1RfQ0xLKGNvcmVfOTZtX2ZjaywgY29yZV85Nm1fZmNrX3BhcmVudF9uYW1l cywgY29yZV9sNF9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2s7Citz dGF0aWMgc3RydWN0IGNsa19jb3JlIGNvcmVfbDNfaWNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAq Y29yZV9sM19pY2tfcGFyZW50X25hbWVzW10gPSB7CiAJImwzX2ljayIsCkBAIC03MTgsNyArNzE3 LDcgQEAgREVGSU5FX1NUUlVDVF9DTEsoY29yZV9sM19pY2ssIGNvcmVfbDNfaWNrX3BhcmVudF9u YW1lcywgY29yZV9sNF9pY2tfb3BzKTsKIAogREVGSU5FX0NMS19GSVhFRF9GQUNUT1IoZHBsbDNf bTJ4Ml9jaywgImRwbGwzX20yX2NrIiwgJmRwbGwzX20yX2NrLCAweDAsIDIsIDEpOwogCi1zdGF0 aWMgc3RydWN0IGNsayBjb3JleDJfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBjb3JleDJf ZmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29yZXgyX2Zja19wYXJlbnRfbmFtZXNbXSA9IHsK IAkiZHBsbDNfbTJ4Ml9jayIsCkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg KmNvcmV4Ml9mY2tfcGFyZW50X25hbWVzW10gPSB7CiBERUZJTkVfU1RSVUNUX0NMS19IV19PTUFQ KGNvcmV4Ml9mY2ssIE5VTEwpOwogREVGSU5FX1NUUlVDVF9DTEsoY29yZXgyX2ZjaywgY29yZXgy X2Zja19wYXJlbnRfbmFtZXMsIGNvcmVfY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY3Bl ZnVzZV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGNwZWZ1c2VfZmNrOwogCiBzdGF0aWMg c3RydWN0IGNsa19od19vbWFwIGNwZWZ1c2VfZmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTc0MCw3 ICs3MzksNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGNwZWZ1c2VfZmNrX2h3ID0gewog CiBERUZJTkVfU1RSVUNUX0NMSyhjcGVmdXNlX2ZjaywgZHBsbDNfY2tfcGFyZW50X25hbWVzLCBh ZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBjc2kyXzk2bV9mY2s7CitzdGF0aWMg c3RydWN0IGNsa19jb3JlIGNzaTJfOTZtX2ZjazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNzaTJf OTZtX2Zja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkiY29yZV85Nm1fZmNrIiwKQEAgLTc1Nyw3ICs3 NTYsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGNzaTJfOTZtX2Zja19odyA9IHsKIAog REVGSU5FX1NUUlVDVF9DTEsoY3NpMl85Nm1fZmNrLCBjc2kyXzk2bV9mY2tfcGFyZW50X25hbWVz LCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBkMmRfMjZtX2ZjazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgZDJkXzI2bV9mY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29t YXAgZDJkXzI2bV9mY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtNzcxLDcgKzc3MCw3IEBAIHN0YXRp YyBzdHJ1Y3QgY2xrX2h3X29tYXAgZDJkXzI2bV9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1Rf Q0xLKGQyZF8yNm1fZmNrLCBkcGxsM19ja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIGRlczFfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBkZXMx X2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkZXMxX2lja19odyA9IHsKIAkuaHcg PSB7CkBAIC03ODQsNyArNzgzLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkZXMxX2lj a19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZGVzMV9pY2ssIGFlczFfaWNrX3BhcmVudF9u YW1lcywgYWVzMV9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZGVzMl9pY2s7CitzdGF0 aWMgc3RydWN0IGNsa19jb3JlIGRlczJfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IGRlczJfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTgwMyw3ICs4MDIsNyBAQCBERUZJTkVfQ0xL X0RJVklERVIoZHBsbDFfZmNrLCAiY29yZV9jayIsICZjb3JlX2NrLCAweDAsCiAJCSAgIE9NQVAz NDMwX01QVV9DTEtfU1JDX1NISUZULCBPTUFQMzQzMF9NUFVfQ0xLX1NSQ19XSURUSCwKIAkJICAg Q0xLX0RJVklERVJfT05FX0JBU0VELCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJf ZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBkcGxsMl9mY2s7CiAKIHN0YXRpYyBzdHJ1Y3Qg ZHBsbF9kYXRhIGRwbGwyX2RkID0gewogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERS KE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCkBAIC04MjgsNyAr ODI3LDcgQEAgc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDJfZGQgPSB7CiAJLm1heF9kaXZp ZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJf Y2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRwbGwyX2NrOwogCiBzdGF0aWMgc3RydWN0IGNs a19od19vbWFwIGRwbGwyX2NrX2h3ID0gewogCS5odyA9IHsKQEAgLTg1Nyw3ICs4NTYsNyBAQCBE RUZJTkVfQ0xLX0RJVklERVIoZHBsbDNfbTNfY2ssICJkcGxsM19jayIsICZkcGxsM19jaywgMHgw LAogCQkgICBPTUFQMzQzMF9ESVZfRFBMTDNfU0hJRlQsIE9NQVAzNDMwX0RJVl9EUExMM19XSURU SCwKIAkJICAgQ0xLX0RJVklERVJfT05FX0JBU0VELCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBj bGsgZHBsbDNfbTN4Ml9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDNfbTN4Ml9jazsK IAogc3RhdGljIGNvbnN0IGNoYXIgKmRwbGwzX20zeDJfY2tfcGFyZW50X25hbWVzW10gPSB7CiAJ ImRwbGwzX20zX2NrIiwKQEAgLTg3Niw3ICs4NzUsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19v bWFwIGRwbGwzX20zeDJfY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRwbGwzX20zeDJf Y2ssIGRwbGwzX20zeDJfY2tfcGFyZW50X25hbWVzLCBkcGxsNF9tNXgyX2NrX29wcyk7CiAKLXN0 YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zeDJfY2tfMzYzMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgZHBsbDNfbTN4Ml9ja18zNjMwID0gewogCS5uYW1lCQk9ICJkcGxsM19tM3gyX2NrIiwK IAkuaHcJCT0gJmRwbGwzX20zeDJfY2tfaHcuaHcsCiAJLnBhcmVudF9uYW1lcwk9IGRwbGwzX20z eDJfY2tfcGFyZW50X25hbWVzLApAQCAtODkxLDcgKzg5MCw3IEBAIERFRklORV9DTEtfRElWSURF Ul9UQUJMRShkcGxsNF9tNF9jaywgImRwbGw0X2NrIiwgJmRwbGw0X2NrLCAweDAsCiAJCSAgIE9N QVAzNDMwX0NMS1NFTF9EU1MxX1NISUZULCBPTUFQMzYzMF9DTEtTRUxfRFNTMV9XSURUSCwKIAkJ ICAgMCwgZHBsbDRfbXhfY2tfZGl2X3RhYmxlLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGsg ZHBsbDRfbTR4Ml9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRfbTR4Ml9jazsKIAog c3RhdGljIGNvbnN0IGNoYXIgKmRwbGw0X200eDJfY2tfcGFyZW50X25hbWVzW10gPSB7CiAJImRw bGw0X200X2NrIiwKQEAgLTkxMSw3ICs5MTAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IGRwbGw0X200eDJfY2tfaHcgPSB7CiBERUZJTkVfU1RSVUNUX0NMS19GTEFHUyhkcGxsNF9tNHgy X2NrLCBkcGxsNF9tNHgyX2NrX3BhcmVudF9uYW1lcywKIAkJZHBsbDRfbTV4Ml9ja19vcHMsIENM S19TRVRfUkFURV9QQVJFTlQpOwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrXzM2 MzAgPSB7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRwbGw0X200eDJfY2tfMzYzMCA9IHsKIAku bmFtZQkJPSAiZHBsbDRfbTR4Ml9jayIsCiAJLmh3CQk9ICZkcGxsNF9tNHgyX2NrX2h3Lmh3LAog CS5wYXJlbnRfbmFtZXMJPSBkcGxsNF9tNHgyX2NrX3BhcmVudF9uYW1lcywKQEAgLTkyNSw3ICs5 MjQsNyBAQCBERUZJTkVfQ0xLX0RJVklERVIoZHBsbDRfbTZfY2ssICJkcGxsNF9jayIsICZkcGxs NF9jaywgMHgwLAogCQkgICBPTUFQMzQzMF9ESVZfRFBMTDRfU0hJRlQsIE9NQVAzNjMwX0RJVl9E UExMNF9XSURUSCwKIAkJICAgQ0xLX0RJVklERVJfT05FX0JBU0VELCBOVUxMKTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHBsbDRf bTZ4Ml9jazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmRwbGw0X202eDJfY2tfcGFyZW50X25hbWVz W10gPSB7CiAJImRwbGw0X202X2NrIiwKQEAgLTk0NCw3ICs5NDMsNyBAQCBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIGRwbGw0X202eDJfY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRw bGw0X202eDJfY2ssIGRwbGw0X202eDJfY2tfcGFyZW50X25hbWVzLCBkcGxsNF9tNXgyX2NrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202eDJfY2tfMzYzMCA9IHsKK3N0YXRpYyBz dHJ1Y3QgY2xrX2NvcmUgZHBsbDRfbTZ4Ml9ja18zNjMwID0gewogCS5uYW1lCQk9ICJkcGxsNF9t NngyX2NrIiwKIAkuaHcJCT0gJmRwbGw0X202eDJfY2tfaHcuaHcsCiAJLnBhcmVudF9uYW1lcwk9 IGRwbGw0X202eDJfY2tfcGFyZW50X25hbWVzLApAQCAtOTc2LDcgKzk3NSw3IEBAIHN0YXRpYyBz dHJ1Y3QgZHBsbF9kYXRhIGRwbGw1X2RkID0gewogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9E UExMX0RJViwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw1X2NrOworc3RhdGljIHN0cnVj dCBjbGtfY29yZSBkcGxsNV9jazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkcGxsNV9j a19odyA9IHsKIAkuaHcgPSB7CkBAIC05OTQsNyArOTkzLDcgQEAgREVGSU5FX0NMS19ESVZJREVS KGRwbGw1X20yX2NrLCAiZHBsbDVfY2siLCAmZHBsbDVfY2ssIDB4MCwKIAkJICAgT01BUDM0MzBF UzJfRElWXzEyME1fU0hJRlQsIE9NQVAzNDMwRVMyX0RJVl8xMjBNX1dJRFRILAogCQkgICBDTEtf RElWSURFUl9PTkVfQkFTRUQsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsayBkc3MxX2Fsd29u X2Zja18zNDMwZXMxOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBkc3MxX2Fsd29uX2Zja18zNDMw ZXMxOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZHNzMV9hbHdvbl9mY2tfMzQzMGVzMV9wYXJlbnRf bmFtZXNbXSA9IHsKIAkiZHBsbDRfbTR4Ml9jayIsCkBAIC0xMDEzLDcgKzEwMTIsNyBAQCBERUZJ TkVfU1RSVUNUX0NMS19GTEFHUyhkc3MxX2Fsd29uX2Zja18zNDMwZXMxLAogCQlkc3MxX2Fsd29u X2Zja18zNDMwZXMxX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzLAogCQlDTEtfU0VUX1JBVEVf UEFSRU5UKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMjsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMjsKIAogc3RhdGljIHN0 cnVjdCBjbGtfaHdfb21hcCBkc3MxX2Fsd29uX2Zja18zNDMwZXMyX2h3ID0gewogCS5odyA9IHsK QEAgLTEwMjksNyArMTAyOCw3IEBAIERFRklORV9TVFJVQ1RfQ0xLX0ZMQUdTKGRzczFfYWx3b25f ZmNrXzM0MzBlczIsCiAJCWRzczFfYWx3b25fZmNrXzM0MzBlczFfcGFyZW50X25hbWVzLCBhZXMy X2lja19vcHMsCiAJCUNMS19TRVRfUkFURV9QQVJFTlQpOwogCi1zdGF0aWMgc3RydWN0IGNsayBk c3MyX2Fsd29uX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHNzMl9hbHdvbl9mY2s7CiAK IHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZHNzMl9hbHdvbl9mY2tfaHcgPSB7CiAJLmh3ID0g ewpAQCAtMTA0Miw3ICsxMDQxLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkc3MyX2Fs d29uX2Zja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZHNzMl9hbHdvbl9mY2ssIGRwbGwz X2NrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHNz Xzk2bV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRzc185Nm1fZmNrOwogCiBzdGF0aWMg c3RydWN0IGNsa19od19vbWFwIGRzc185Nm1fZmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTEwNTUs NyArMTA1NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZHNzXzk2bV9mY2tfaHcgPSB7 CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRzc185Nm1fZmNrLCBjb3JlXzk2bV9mY2tfcGFyZW50X25h bWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrXzM0MzBlczE7 CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGRzc19pY2tfMzQzMGVzMTsKIAogc3RhdGljIHN0cnVj dCBjbGtfaHdfb21hcCBkc3NfaWNrXzM0MzBlczFfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTA2OSw3 ICsxMDY4LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBkc3NfaWNrXzM0MzBlczFfaHcg PSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRzc19pY2tfMzQzMGVzMSwgc2VjdXJpdHlfbDRfaWNr Ml9wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19p Y2tfMzQzMGVzMjsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHNzX2lja18zNDMwZXMyOwogCiBz dGF0aWMgc3RydWN0IGNsa19od19vbWFwIGRzc19pY2tfMzQzMGVzMl9odyA9IHsKIAkuaHcgPSB7 CkBAIC0xMDgzLDcgKzEwODIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGRzc19pY2tf MzQzMGVzMl9odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZHNzX2lja18zNDMwZXMyLCBzZWN1 cml0eV9sNF9pY2syX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVj dCBjbGsgZHNzX3R2X2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZHNzX3R2X2ZjazsKIAog c3RhdGljIGNvbnN0IGNoYXIgKmRzc190dl9mY2tfcGFyZW50X25hbWVzW10gPSB7CiAJIm9tYXBf NTRtX2ZjayIsCkBAIC0xMTAwLDcgKzEwOTksNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IGRzc190dl9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGRzc190dl9mY2ssIGRzc190 dl9mY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBl bWFjX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZW1hY19mY2s7CiAKIHN0YXRpYyBjb25z dCBjaGFyICplbWFjX2Zja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkicm1paV9jayIsCkBAIC0xMTE2 LDcgKzExMTUsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGVtYWNfZmNrX2h3ID0gewog CiBERUZJTkVfU1RSVUNUX0NMSyhlbWFjX2ZjaywgZW1hY19mY2tfcGFyZW50X25hbWVzLCBhZXMx X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBpcHNzX2ljazsKK3N0YXRpYyBzdHJ1Y3Qg Y2xrX2NvcmUgaXBzc19pY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICppcHNzX2lja19wYXJlbnRf bmFtZXNbXSA9IHsKIAkiY29yZV9sM19pY2siLApAQCAtMTEzNCw3ICsxMTMzLDcgQEAgc3RhdGlj IHN0cnVjdCBjbGtfaHdfb21hcCBpcHNzX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEso aXBzc19pY2ssIGlwc3NfaWNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgZW1hY19pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGVtYWNfaWNrOwog CiBzdGF0aWMgY29uc3QgY2hhciAqZW1hY19pY2tfcGFyZW50X25hbWVzW10gPSB7CiAJImlwc3Nf aWNrIiwKQEAgLTExNTIsNyArMTE1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZW1h Y19pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGVtYWNfaWNrLCBlbWFjX2lja19wYXJl bnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9jb3JlX2Fs d29uX2NrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBlbXVfY29yZV9hbHdvbl9jazsKIAogc3Rh dGljIGNvbnN0IGNoYXIgKmVtdV9jb3JlX2Fsd29uX2NrX3BhcmVudF9uYW1lc1tdID0gewogCSJk cGxsM19tM3gyX2NrIiwKQEAgLTExNjIsNyArMTE2MSw3IEBAIERFRklORV9TVFJVQ1RfQ0xLX0hX X09NQVAoZW11X2NvcmVfYWx3b25fY2ssICJkcGxsM19jbGtkbSIpOwogREVGSU5FX1NUUlVDVF9D TEsoZW11X2NvcmVfYWx3b25fY2ssIGVtdV9jb3JlX2Fsd29uX2NrX3BhcmVudF9uYW1lcywKIAkJ ICBjb3JlX2w0X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfbXB1X2Fsd29uX2Nr Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBlbXVfbXB1X2Fsd29uX2NrOwogCiBzdGF0aWMgY29u c3QgY2hhciAqZW11X21wdV9hbHdvbl9ja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkibXB1X2NrIiwK QEAgLTExNzEsNyArMTE3MCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICplbXVfbXB1X2Fsd29uX2Nr X3BhcmVudF9uYW1lc1tdID0gewogREVGSU5FX1NUUlVDVF9DTEtfSFdfT01BUChlbXVfbXB1X2Fs d29uX2NrLCBOVUxMKTsKIERFRklORV9TVFJVQ1RfQ0xLKGVtdV9tcHVfYWx3b25fY2ssIGVtdV9t cHVfYWx3b25fY2tfcGFyZW50X25hbWVzLCBjb3JlX2NrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrIGVtdV9wZXJfYWx3b25fY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGVtdV9wZXJfYWx3 b25fY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICplbXVfcGVyX2Fsd29uX2NrX3BhcmVudF9uYW1l c1tdID0gewogCSJkcGxsNF9tNngyX2NrIiwKQEAgLTEyMjIsNyArMTIyMSw3IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgY2xrX29wcyBlbXVfc3JjX2NrX29wcyA9IHsKIAkuZGlzYWJsZQk9ICZvbWFw Ml9jbGtvcHNfZGlzYWJsZV9jbGtkbSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNf Y2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGVtdV9zcmNfY2s7CiAKIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgZW11X3NyY19ja19odyA9IHsKIAkuaHcgPSB7CkBAIC0xMjQxLDcgKzEyNDAs NyBAQCBERUZJTkVfQ0xLX0RJVklERVIoYXRjbGtfZmNrLCAiZW11X3NyY19jayIsICZlbXVfc3Jj X2NrLCAweDAsCiAJCSAgIE9NQVAzNDMwX0NMS1NFTF9BVENMS19TSElGVCwgT01BUDM0MzBfQ0xL U0VMX0FUQ0xLX1dJRFRILAogCQkgICBDTEtfRElWSURFUl9PTkVfQkFTRUQsIE5VTEwpOwogCi1z dGF0aWMgc3RydWN0IGNsayBmYWNfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBmYWNfaWNr OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGZhY19pY2tfaHcgPSB7CiAJLmh3ID0gewpA QCAtMTI1NSw3ICsxMjU0LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBmYWNfaWNrX2h3 ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhmYWNfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMs IGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGZzaG9zdHVzYl9mY2s7CitzdGF0 aWMgc3RydWN0IGNsa19jb3JlIGZzaG9zdHVzYl9mY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpm c2hvc3R1c2JfZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJjb3JlXzQ4bV9mY2siLApAQCAtMTI3 Myw3ICsxMjcyLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBmc2hvc3R1c2JfZmNrX2h3 ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhmc2hvc3R1c2JfZmNrLCBmc2hvc3R1c2JfZmNrX3Bh cmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2Nr Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBnZnhfbDNfY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgZ2Z4X2wzX2NrX2h3ID0gewogCS5odyA9IHsKQEAgLTEyOTIsNyArMTI5MSw3IEBA IERFRklORV9DTEtfRElWSURFUihnZnhfbDNfZmNrLCAibDNfaWNrIiwgJmwzX2ljaywgMHgwLAog CQkgICBPTUFQX0NMS1NFTF9HRlhfU0hJRlQsIE9NQVBfQ0xLU0VMX0dGWF9XSURUSCwKIAkJICAg Q0xLX0RJVklERVJfT05FX0JBU0VELCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2Nn MV9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ2Z4X2NnMV9jazsKIAogc3RhdGljIGNvbnN0 IGNoYXIgKmdmeF9jZzFfY2tfcGFyZW50X25hbWVzW10gPSB7CiAJImdmeF9sM19mY2siLApAQCAt MTMxMCw3ICsxMzA5LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBnZnhfY2cxX2NrX2h3 ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhnZnhfY2cxX2NrLCBnZnhfY2cxX2NrX3BhcmVudF9u YW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMl9jazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ2Z4X2NnMl9jazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdf b21hcCBnZnhfY2cyX2NrX2h3ID0gewogCS5odyA9IHsKQEAgLTEzMjQsNyArMTMyMyw3IEBAIHN0 YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ2Z4X2NnMl9ja19odyA9IHsKIAogREVGSU5FX1NUUlVD VF9DTEsoZ2Z4X2NnMl9jaywgZ2Z4X2NnMV9ja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3Jl IGdmeF9sM19pY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZnhfbDNfaWNrX3BhcmVudF9uYW1l c1tdID0gewogCSJnZnhfbDNfY2siLApAQCAtMTMzMyw3ICsxMzMyLDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKmdmeF9sM19pY2tfcGFyZW50X25hbWVzW10gPSB7CiBERUZJTkVfU1RSVUNUX0NMS19I V19PTUFQKGdmeF9sM19pY2ssICJnZnhfMzQzMGVzMV9jbGtkbSIpOwogREVGSU5FX1NUUlVDVF9D TEsoZ2Z4X2wzX2ljaywgZ2Z4X2wzX2lja19wYXJlbnRfbmFtZXMsIGNvcmVfbDRfaWNrX29wcyk7 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfMzJrX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Nv cmUgd2t1cF8zMmtfZmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqd2t1cF8zMmtfZmNrX3BhcmVu dF9uYW1lc1tdID0gewogCSJvbWFwXzMya19mY2siLApAQCAtMTM0Miw3ICsxMzQxLDcgQEAgc3Rh dGljIGNvbnN0IGNoYXIgKndrdXBfMzJrX2Zja19wYXJlbnRfbmFtZXNbXSA9IHsKIERFRklORV9T VFJVQ1RfQ0xLX0hXX09NQVAod2t1cF8zMmtfZmNrLCAid2t1cF9jbGtkbSIpOwogREVGSU5FX1NU UlVDVF9DTEsod2t1cF8zMmtfZmNrLCB3a3VwXzMya19mY2tfcGFyZW50X25hbWVzLCBjb3JlX2w0 X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMV9kYmNrOworc3RhdGljIHN0cnVj dCBjbGtfY29yZSBncGlvMV9kYmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZ3BpbzFfZGJja19w YXJlbnRfbmFtZXNbXSA9IHsKIAkid2t1cF8zMmtfZmNrIiwKQEAgLTEzNTksMTIgKzEzNTgsMTIg QEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlvMV9kYmNrX2h3ID0gewogCiBERUZJTkVf U1RSVUNUX0NMSyhncGlvMV9kYmNrLCBncGlvMV9kYmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tf b3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgd2t1cF9sNF9pY2s7CitzdGF0aWMgc3RydWN0IGNs a19jb3JlIHdrdXBfbDRfaWNrOwogCiBERUZJTkVfU1RSVUNUX0NMS19IV19PTUFQKHdrdXBfbDRf aWNrLCAid2t1cF9jbGtkbSIpOwogREVGSU5FX1NUUlVDVF9DTEsod2t1cF9sNF9pY2ssIGRwbGwz X2NrX3BhcmVudF9uYW1lcywgY29yZV9sNF9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsg Z3BpbzFfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBncGlvMV9pY2s7CiAKIHN0YXRpYyBj b25zdCBjaGFyICpncGlvMV9pY2tfcGFyZW50X25hbWVzW10gPSB7CiAJIndrdXBfbDRfaWNrIiwK QEAgLTEzODIsMTMgKzEzODEsMTMgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlvMV9p Y2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGdwaW8xX2ljaywgZ3BpbzFfaWNrX3BhcmVu dF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzMya19hbHdv bl9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHBlcl8zMmtfYWx3b25fZmNrOwogCiBERUZJ TkVfU1RSVUNUX0NMS19IV19PTUFQKHBlcl8zMmtfYWx3b25fZmNrLCAicGVyX2Nsa2RtIik7CiBE RUZJTkVfU1RSVUNUX0NMSyhwZXJfMzJrX2Fsd29uX2Zjaywgd2t1cF8zMmtfZmNrX3BhcmVudF9u YW1lcywKIAkJICBjb3JlX2w0X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMl9k YmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBncGlvMl9kYmNrOwogCiBzdGF0aWMgY29uc3Qg Y2hhciAqZ3BpbzJfZGJja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkicGVyXzMya19hbHdvbl9mY2si LApAQCAtMTQwNSwxMiArMTQwNCwxMiBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwaW8y X2RiY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGdwaW8yX2RiY2ssIGdwaW8yX2RiY2tf cGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfbDRf aWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBwZXJfbDRfaWNrOwogCiBERUZJTkVfU1RSVUNU X0NMS19IV19PTUFQKHBlcl9sNF9pY2ssICJwZXJfY2xrZG0iKTsKIERFRklORV9TVFJVQ1RfQ0xL KHBlcl9sNF9pY2ssIHNlY3VyaXR5X2w0X2ljazJfcGFyZW50X25hbWVzLCBjb3JlX2w0X2lja19v cHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMl9pY2s7CitzdGF0aWMgc3RydWN0IGNsa19j b3JlIGdwaW8yX2ljazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdwaW8yX2lja19wYXJlbnRfbmFt ZXNbXSA9IHsKIAkicGVyX2w0X2ljayIsCkBAIC0xNDI4LDcgKzE0MjcsNyBAQCBzdGF0aWMgc3Ry dWN0IGNsa19od19vbWFwIGdwaW8yX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZ3Bp bzJfaWNrLCBncGlvMl9pY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMg c3RydWN0IGNsayBncGlvM19kYmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBncGlvM19kYmNr OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwaW8zX2RiY2tfaHcgPSB7CiAJLmh3ID0g ewpAQCAtMTQ0MSw3ICsxNDQwLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlvM19k YmNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhncGlvM19kYmNrLCBncGlvMl9kYmNrX3Bh cmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNr Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBncGlvM19pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgZ3BpbzNfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE0NTUsNyArMTQ1NCw3IEBA IHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3BpbzNfaWNrX2h3ID0gewogCiBERUZJTkVfU1RS VUNUX0NMSyhncGlvM19pY2ssIGdwaW8yX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3Jl IGdwaW80X2RiY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3BpbzRfZGJja19odyA9 IHsKIAkuaHcgPSB7CkBAIC0xNDY4LDcgKzE0NjcsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19v bWFwIGdwaW80X2RiY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGdwaW80X2RiY2ssIGdw aW8yX2RiY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNs ayBncGlvNF9pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGdwaW80X2ljazsKIAogc3RhdGlj IHN0cnVjdCBjbGtfaHdfb21hcCBncGlvNF9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTQ4Miw3 ICsxNDgxLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlvNF9pY2tfaHcgPSB7CiAK IERFRklORV9TVFJVQ1RfQ0xLKGdwaW80X2ljaywgZ3BpbzJfaWNrX3BhcmVudF9uYW1lcywgYWVz Ml9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZGJjazsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgZ3BpbzVfZGJjazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlv NV9kYmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE0OTUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1 Y3QgY2xrX2h3X29tYXAgZ3BpbzVfZGJja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZ3Bp bzVfZGJjaywgZ3BpbzJfZGJja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIGdwaW81X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3BpbzVfaWNr OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwaW81X2lja19odyA9IHsKIAkuaHcgPSB7 CkBAIC0xNTA5LDcgKzE1MDgsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwaW81X2lj a19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZ3BpbzVfaWNrLCBncGlvMl9pY2tfcGFyZW50 X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNl9kYmNrOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSBncGlvNl9kYmNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19o d19vbWFwIGdwaW82X2RiY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTUyMiw3ICsxNTIxLDcgQEAg c3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBncGlvNl9kYmNrX2h3ID0gewogCiBERUZJTkVfU1RS VUNUX0NMSyhncGlvNl9kYmNrLCBncGlvMl9kYmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3Bz KTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29y ZSBncGlvNl9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3BpbzZfaWNrX2h3ID0g ewogCS5odyA9IHsKQEAgLTE1MzYsNyArMTUzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29t YXAgZ3BpbzZfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhncGlvNl9pY2ssIGdwaW8y X2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdw bWNfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBncG1jX2ZjazsKIAogc3RhdGljIHN0cnVj dCBjbGtfaHdfb21hcCBncG1jX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0xNTY1LDcgKzE1NjQs NyBAQCBERUZJTkVfQ0xLX09NQVBfTVVYX0dBVEUoZ3B0MTBfZmNrLCAiY29yZV9sNF9jbGtkbSIs IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJCQkgT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsICZjbGto d29wc193YWl0LAogCQkJIGdwdDEwX2Zja19wYXJlbnRfbmFtZXMsIGNsa291dDJfc3JjX2NrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Nv cmUgZ3B0MTBfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwdDEwX2lja19odyA9 IHsKIAkuaHcgPSB7CkBAIC0xNTg2LDcgKzE1ODUsNyBAQCBERUZJTkVfQ0xLX09NQVBfTVVYX0dB VEUoZ3B0MTFfZmNrLCAiY29yZV9sNF9jbGtkbSIsIG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJCQkg T01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsICZjbGtod29wc193YWl0LAogCQkJIGdwdDEwX2Zja19w YXJlbnRfbmFtZXMsIGNsa291dDJfc3JjX2NrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdw dDExX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0MTFfaWNrOwogCiBzdGF0aWMgc3Ry dWN0IGNsa19od19vbWFwIGdwdDExX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0xNjAwLDcgKzE1 OTksNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwdDExX2lja19odyA9IHsKIAogREVG SU5FX1NUUlVDVF9DTEsoZ3B0MTFfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNr X29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgZ3B0MTJfZmNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZ3B0MTJfZmNrX3BhcmVudF9u YW1lc1tdID0gewogCSJzZWN1cmVfMzJrX2ZjayIsCkBAIC0xNjA5LDcgKzE2MDgsNyBAQCBzdGF0 aWMgY29uc3QgY2hhciAqZ3B0MTJfZmNrX3BhcmVudF9uYW1lc1tdID0gewogREVGSU5FX1NUUlVD VF9DTEtfSFdfT01BUChncHQxMl9mY2ssICJ3a3VwX2Nsa2RtIik7CiBERUZJTkVfU1RSVUNUX0NM SyhncHQxMl9mY2ssIGdwdDEyX2Zja19wYXJlbnRfbmFtZXMsIGNvcmVfbDRfaWNrX29wcyk7CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0 MTJfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGdwdDEyX2lja19odyA9IHsKIAku aHcgPSB7CkBAIC0xNjMwLDcgKzE2MjksNyBAQCBERUZJTkVfQ0xLX09NQVBfTVVYX0dBVEUoZ3B0 MV9mY2ssICJ3a3VwX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9F Tl9HUFQxX1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVz LCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncHQxX2ljazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0MV9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29t YXAgZ3B0MV9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTY1MSw3ICsxNjUwLDcgQEAgREVGSU5F X0NMS19PTUFQX01VWF9HQVRFKGdwdDJfZmNrLCAicGVyX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Ns a3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBn cHQxMF9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3Ry dWN0IGNsayBncHQyX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0Ml9pY2s7CiAKIHN0 YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3B0Ml9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTY3 Miw3ICsxNjcxLDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9HQVRFKGdwdDNfZmNrLCAicGVyX2Ns a2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9HUFQzX1NISUZULCAm Y2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19j a19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncHQzX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgZ3B0M19pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3B0M19pY2tfaHcg PSB7CiAJLmh3ID0gewpAQCAtMTY5Myw3ICsxNjkyLDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9H QVRFKGdwdDRfZmNrLCAicGVyX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQ MzQzMF9FTl9HUFQ0X1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50 X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2lj azsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0NF9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgZ3B0NF9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTcxNCw3ICsxNzEzLDcgQEAg REVGSU5FX0NMS19PTUFQX01VWF9HQVRFKGdwdDVfZmNrLCAicGVyX2Nsa2RtIiwgb21hcDM0M3hf Z3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULCAmY2xraHdvcHNfd2FpdCwK IAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0 aWMgc3RydWN0IGNsayBncHQ1X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0NV9pY2s7 CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3B0NV9pY2tfaHcgPSB7CiAJLmh3ID0gewpA QCAtMTczNSw3ICsxNzM0LDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9HQVRFKGdwdDZfZmNrLCAi cGVyX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9HUFQ2X1NI SUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQy X3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljazsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgZ3B0Nl9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3B0Nl9p Y2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTc1Niw3ICsxNzU1LDcgQEAgREVGSU5FX0NMS19PTUFQ X01VWF9HQVRFKGdwdDdfZmNrLCAicGVyX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJ CSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tf cGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBn cHQ3X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0N19pY2s7CiAKIHN0YXRpYyBzdHJ1 Y3QgY2xrX2h3X29tYXAgZ3B0N19pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTc3Nyw3ICsxNzc2 LDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9HQVRFKGdwdDhfZmNrLCAicGVyX2Nsa2RtIiwgb21h cDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULCAmY2xraHdvcHNf d2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwog Ci1zdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0 OF9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgZ3B0OF9pY2tfaHcgPSB7CiAJLmh3 ID0gewpAQCAtMTc5OCw3ICsxNzk3LDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9HQVRFKGdwdDlf ZmNrLCAicGVyX2Nsa2RtIiwgb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9H UFQ5X1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBncHQxMF9mY2tfcGFyZW50X25hbWVzLCBj bGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgZ3B0OV9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAg Z3B0OV9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTgxMiw3ICsxODExLDcgQEAgc3RhdGljIHN0 cnVjdCBjbGtfaHdfb21hcCBncHQ5X2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoZ3B0 OV9pY2ssIGdwaW8yX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIGhkcV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGhkcV9mY2s7CiAKIHN0 YXRpYyBjb25zdCBjaGFyICpoZHFfZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJjb3JlXzEybV9m Y2siLApAQCAtMTgzMCw3ICsxODI5LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBoZHFf ZmNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhoZHFfZmNrLCBoZHFfZmNrX3BhcmVudF9u YW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgaGRxX2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBo ZHFfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE4NDQsNyArMTg0Myw3IEBAIHN0YXRpYyBzdHJ1 Y3QgY2xrX2h3X29tYXAgaGRxX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoaGRxX2lj aywgYWVzMl9pY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0 IGNsayBoZWNjX2NrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBoZWNjX2NrOwogCiBzdGF0aWMg c3RydWN0IGNsa19od19vbWFwIGhlY2NfY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMTg1OCw3ICsx ODU3LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBoZWNjX2NrX2h3ID0gewogCiBERUZJ TkVfU1RSVUNUX0NMSyhoZWNjX2NrLCBkcGxsM19ja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2Zja19hbTM1eHg7CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlIGhzb3RndXNiX2Zja19hbTM1eHg7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3 X29tYXAgaHNvdGd1c2JfZmNrX2FtMzV4eF9odyA9IHsKIAkuaHcgPSB7CkBAIC0xODcxLDcgKzE4 NzAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGhzb3RndXNiX2Zja19hbTM1eHhfaHcg PSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGhzb3RndXNiX2Zja19hbTM1eHgsIGRwbGwzX2NrX3Bh cmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2Jf aWNrXzM0MzBlczE7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGhzb3RndXNiX2lja18zNDMwZXMx OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGhzb3RndXNiX2lja18zNDMwZXMxX2h3ID0g ewogCS5odyA9IHsKQEAgLTE4ODUsNyArMTg4NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29t YXAgaHNvdGd1c2JfaWNrXzM0MzBlczFfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGhzb3Rn dXNiX2lja18zNDMwZXMxLCBpcHNzX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja18zNDMwZXMyOworc3RhdGljIHN0cnVjdCBj bGtfY29yZSBoc290Z3VzYl9pY2tfMzQzMGVzMjsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21h cCBoc290Z3VzYl9pY2tfMzQzMGVzMl9odyA9IHsKIAkuaHcgPSB7CkBAIC0xODk5LDcgKzE4OTgs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGhzb3RndXNiX2lja18zNDMwZXMyX2h3ID0g ewogCiBERUZJTkVfU1RSVUNUX0NMSyhoc290Z3VzYl9pY2tfMzQzMGVzMiwgaXBzc19pY2tfcGFy ZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9p Y2tfYW0zNXh4Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBoc290Z3VzYl9pY2tfYW0zNXh4Owog CiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGhzb3RndXNiX2lja19hbTM1eHhfaHcgPSB7CiAJ Lmh3ID0gewpAQCAtMTkxMyw3ICsxOTEyLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBo c290Z3VzYl9pY2tfYW0zNXh4X2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhoc290Z3VzYl9p Y2tfYW0zNXh4LCBlbWFjX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIGkyYzFfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBpMmMxX2ZjazsK IAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBpMmMxX2Zja19odyA9IHsKIAkuaHcgPSB7CkBA IC0xOTI3LDcgKzE5MjYsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGkyYzFfZmNrX2h3 ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhpMmMxX2ZjaywgY3NpMl85Nm1fZmNrX3BhcmVudF9u YW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2s7CitzdGF0 aWMgc3RydWN0IGNsa19jb3JlIGkyYzFfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IGkyYzFfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE5NDEsNyArMTk0MCw3IEBAIHN0YXRpYyBz dHJ1Y3QgY2xrX2h3X29tYXAgaTJjMV9pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGky YzFfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIGkyYzJfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBpMmMyX2ZjazsKIAog c3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBpMmMyX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0x OTU1LDcgKzE5NTQsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGkyYzJfZmNrX2h3ID0g ewogCiBERUZJTkVfU1RSVUNUX0NMSyhpMmMyX2ZjaywgY3NpMl85Nm1fZmNrX3BhcmVudF9uYW1l cywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2s7CitzdGF0aWMg c3RydWN0IGNsa19jb3JlIGkyYzJfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGky YzJfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE5NjksNyArMTk2OCw3IEBAIHN0YXRpYyBzdHJ1 Y3QgY2xrX2h3X29tYXAgaTJjMl9pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGkyYzJf aWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1 Y3QgY2xrIGkyYzNfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBpMmMzX2ZjazsKIAogc3Rh dGljIHN0cnVjdCBjbGtfaHdfb21hcCBpMmMzX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0xOTgz LDcgKzE5ODIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGkyYzNfZmNrX2h3ID0gewog CiBERUZJTkVfU1RSVUNUX0NMSyhpMmMzX2ZjaywgY3NpMl85Nm1fZmNrX3BhcmVudF9uYW1lcywg YWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaTJjM19pY2s7CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlIGkyYzNfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGkyYzNf aWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTE5OTcsNyArMTk5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgaTJjM19pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKGkyYzNfaWNr LCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrIGljcl9pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIGljcl9pY2s7CiAKIHN0YXRpYyBz dHJ1Y3QgY2xrX2h3X29tYXAgaWNyX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMDExLDcgKzIw MTAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIGljcl9pY2tfaHcgPSB7CiAKIERFRklO RV9TVFJVQ1RfQ0xLKGljcl9pY2ssIGFlczJfaWNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3Bz KTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg aXZhMl9jazsKIAogc3RhdGljIGNvbnN0IGNoYXIgKml2YTJfY2tfcGFyZW50X25hbWVzW10gPSB7 CiAJImRwbGwyX20yX2NrIiwKQEAgLTIwMjksNyArMjAyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgaXZhMl9ja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoaXZhMl9jaywgaXZh Ml9ja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1h ZDJkX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgbWFkMmRfaWNrOwogCiBzdGF0aWMgc3Ry dWN0IGNsa19od19vbWFwIG1hZDJkX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMDQzLDcgKzIw NDIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1hZDJkX2lja19odyA9IHsKIAogREVG SU5FX1NUUlVDVF9DTEsobWFkMmRfaWNrLCBjb3JlX2wzX2lja19wYXJlbnRfbmFtZXMsIGFlczJf aWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2s7CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlIG1haWxib3hlc19pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAg bWFpbGJveGVzX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMDg0LDcgKzIwODMsNyBAQCBERUZJ TkVfQ0xLX09NQVBfTVVYX0dBVEUobWNic3AxX2ZjaywgImNvcmVfbDRfY2xrZG0iLCBtY2JzcF8x NV9jbGtzZWwsCiAJCQkgT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULCAmY2xraHdvcHNfd2FpdCwK IAkJCSBtY2JzcDFfZmNrX3BhcmVudF9uYW1lcywgY2xrb3V0Ml9zcmNfY2tfb3BzKTsKIAotc3Rh dGljIHN0cnVjdCBjbGsgbWNic3AxX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgbWNic3Ax X2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtY2JzcDFfaWNrX2h3ID0gewogCS5o dyA9IHsKQEAgLTIwOTgsNyArMjA5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbWNi c3AxX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsobWNic3AxX2ljaywgYWVzMl9pY2tf cGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfOTZt X2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgcGVyXzk2bV9mY2s7CiAKIERFRklORV9TVFJV Q1RfQ0xLX0hXX09NQVAocGVyXzk2bV9mY2ssICJwZXJfY2xrZG0iKTsKIERFRklORV9TVFJVQ1Rf Q0xLKHBlcl85Nm1fZmNrLCBjbV85Nm1fZmNrX3BhcmVudF9uYW1lcywgY29yZV9sNF9pY2tfb3Bz KTsKQEAgLTIxMjAsNyArMjExOSw3IEBAIERFRklORV9DTEtfT01BUF9NVVhfR0FURShtY2JzcDJf ZmNrLCAicGVyX2Nsa2RtIiwgbWNic3BfMjM0X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9NQ0JT UDJfU0hJRlQsICZjbGtod29wc193YWl0LAogCQkJIG1jYnNwMl9mY2tfcGFyZW50X25hbWVzLCBj bGtvdXQyX3NyY19ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrOworc3Rh dGljIHN0cnVjdCBjbGtfY29yZSBtY2JzcDJfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19v bWFwIG1jYnNwMl9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjE0MSw3ICsyMTQwLDcgQEAgREVG SU5FX0NMS19PTUFQX01VWF9HQVRFKG1jYnNwM19mY2ssICJwZXJfY2xrZG0iLCBtY2JzcF8yMzRf Y2xrc2VsLAogCQkJIE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwgJmNsa2h3b3BzX3dhaXQsCiAJ CQkgbWNic3AyX2Zja19wYXJlbnRfbmFtZXMsIGNsa291dDJfc3JjX2NrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1jYnNwM19p Y2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbWNic3AzX2lja19odyA9IHsKIAkuaHcg PSB7CkBAIC0yMTYyLDcgKzIxNjEsNyBAQCBERUZJTkVfQ0xLX09NQVBfTVVYX0dBVEUobWNic3A0 X2ZjaywgInBlcl9jbGtkbSIsIG1jYnNwXzIzNF9jbGtzZWwsCiAJCQkgT01BUDM0MzBfRU5fTUNC U1A0X1NISUZULCAmY2xraHdvcHNfd2FpdCwKIAkJCSBtY2JzcDJfZmNrX3BhcmVudF9uYW1lcywg Y2xrb3V0Ml9zcmNfY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ljazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgbWNic3A0X2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdf b21hcCBtY2JzcDRfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTIxODMsNyArMjE4Miw3IEBAIERF RklORV9DTEtfT01BUF9NVVhfR0FURShtY2JzcDVfZmNrLCAiY29yZV9sNF9jbGtkbSIsIG1jYnNw XzE1X2Nsa3NlbCwKIAkJCSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsICZjbGtod29wc193YWl0 LAogCQkJIG1jYnNwMV9mY2tfcGFyZW50X25hbWVzLCBjbGtvdXQyX3NyY19ja19vcHMpOwogCi1z dGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBtY2Jz cDVfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jYnNwNV9pY2tfaHcgPSB7CiAJ Lmh3ID0gewpAQCAtMjE5Nyw3ICsyMTk2LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBt Y2JzcDVfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhtY2JzcDVfaWNrLCBhZXMyX2lj a19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3Bp MV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1jc3BpMV9mY2s7CiAKIHN0YXRpYyBzdHJ1 Y3QgY2xrX2h3X29tYXAgbWNzcGkxX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMjExLDcgKzIy MTAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jc3BpMV9mY2tfaHcgPSB7CiAKIERF RklORV9TVFJVQ1RfQ0xLKG1jc3BpMV9mY2ssIGZzaG9zdHVzYl9mY2tfcGFyZW50X25hbWVzLCBh ZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrOworc3RhdGljIHN0 cnVjdCBjbGtfY29yZSBtY3NwaTFfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1j c3BpMV9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjIyNSw3ICsyMjI0LDcgQEAgc3RhdGljIHN0 cnVjdCBjbGtfaHdfb21hcCBtY3NwaTFfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyht Y3NwaTFfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1jc3BpMl9m Y2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbWNzcGkyX2Zja19odyA9IHsKIAkuaHcg PSB7CkBAIC0yMjM5LDcgKzIyMzgsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jc3Bp Ml9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKG1jc3BpMl9mY2ssIGZzaG9zdHVzYl9m Y2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtY3Nw aTJfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBtY3NwaTJfaWNrOwogCiBzdGF0aWMgc3Ry dWN0IGNsa19od19vbWFwIG1jc3BpMl9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjI1Myw3ICsy MjUyLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtY3NwaTJfaWNrX2h3ID0gewogCiBE RUZJTkVfU1RSVUNUX0NMSyhtY3NwaTJfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJf aWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2s7CitzdGF0aWMgc3RydWN0 IGNsa19jb3JlIG1jc3BpM19mY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbWNzcGkz X2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMjY3LDcgKzIyNjYsNyBAQCBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIG1jc3BpM19mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKG1jc3Bp M19mY2ssIGZzaG9zdHVzYl9mY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0 aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBtY3NwaTNf aWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jc3BpM19pY2tfaHcgPSB7CiAJLmh3 ID0gewpAQCAtMjI4MSw3ICsyMjgwLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtY3Nw aTNfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhtY3NwaTNfaWNrLCBhZXMyX2lja19w YXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9m Y2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1jc3BpNF9mY2s7CiAKIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgbWNzcGk0X2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMjk1LDcgKzIyOTQs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jc3BpNF9mY2tfaHcgPSB7CiAKIERFRklO RV9TVFJVQ1RfQ0xLKG1jc3BpNF9mY2ssIGZzaG9zdHVzYl9mY2tfcGFyZW50X25hbWVzLCBhZXMy X2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTRfaWNrOworc3RhdGljIHN0cnVj dCBjbGtfY29yZSBtY3NwaTRfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1jc3Bp NF9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjMwOSw3ICsyMzA4LDcgQEAgc3RhdGljIHN0cnVj dCBjbGtfaHdfb21hcCBtY3NwaTRfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhtY3Nw aTRfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIG1tY2hzMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1tY2hzMV9mY2s7 CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbW1jaHMxX2Zja19odyA9IHsKIAkuaHcgPSB7 CkBAIC0yMzIzLDcgKzIzMjIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1tY2hzMV9m Y2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKG1tY2hzMV9mY2ssIGNzaTJfOTZtX2Zja19w YXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9p Y2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1tY2hzMV9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgbW1jaHMxX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yMzM3LDcgKzIzMzYs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1tY2hzMV9pY2tfaHcgPSB7CiAKIERFRklO RV9TVFJVQ1RfQ0xLKG1tY2hzMV9pY2ssIGFlczJfaWNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tf b3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgbW1jaHMyX2ZjazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtbWNoczJfZmNr X2h3ID0gewogCS5odyA9IHsKQEAgLTIzNTEsNyArMjM1MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgbW1jaHMyX2Zja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsobW1jaHMyX2Zj aywgY3NpMl85Nm1fZmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0 cnVjdCBjbGsgbW1jaHMyX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgbW1jaHMyX2ljazsK IAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtbWNoczJfaWNrX2h3ID0gewogCS5odyA9IHsK QEAgLTIzNjUsNyArMjM2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgbW1jaHMyX2lj a19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsobW1jaHMyX2ljaywgYWVzMl9pY2tfcGFyZW50 X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtbWNoczNfZmNrOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSBtbWNoczNfZmNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19o d19vbWFwIG1tY2hzM19mY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjM3OSw3ICsyMzc4LDcgQEAg c3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtbWNoczNfZmNrX2h3ID0gewogCiBERUZJTkVfU1RS VUNUX0NMSyhtbWNoczNfZmNrLCBjc2kyXzk2bV9mY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19v cHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBtbWNoczNfaWNrOworc3RhdGljIHN0cnVjdCBjbGtf Y29yZSBtbWNoczNfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1tY2hzM19pY2tf aHcgPSB7CiAJLmh3ID0gewpAQCAtMjM5Myw3ICsyMzkyLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtf aHdfb21hcCBtbWNoczNfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhtbWNoczNfaWNr LCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrIG1vZGVtX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgbW9kZW1fZmNrOwogCiBzdGF0 aWMgc3RydWN0IGNsa19od19vbWFwIG1vZGVtX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yNDA3 LDcgKzI0MDYsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1vZGVtX2Zja19odyA9IHsK IAogREVGSU5FX1NUUlVDVF9DTEsobW9kZW1fZmNrLCBkcGxsM19ja19wYXJlbnRfbmFtZXMsIGFl czJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjazsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgbXNwcm9fZmNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1zcHJv X2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yNDIxLDcgKzI0MjAsNyBAQCBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIG1zcHJvX2Zja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsobXNwcm9f ZmNrLCBjc2kyXzk2bV9mY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMg c3RydWN0IGNsayBtc3Byb19pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG1zcHJvX2ljazsK IAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBtc3Byb19pY2tfaHcgPSB7CiAJLmh3ID0gewpA QCAtMjQzNSwxMyArMjQzNCwxMyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIG1zcHJvX2lj a19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsobXNwcm9faWNrLCBhZXMyX2lja19wYXJlbnRf bmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTkybV9hbHdv bl9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG9tYXBfMTkybV9hbHdvbl9mY2s7CiAKIERF RklORV9TVFJVQ1RfQ0xLX0hXX09NQVAob21hcF8xOTJtX2Fsd29uX2ZjaywgTlVMTCk7CiBERUZJ TkVfU1RSVUNUX0NMSyhvbWFwXzE5Mm1fYWx3b25fZmNrLCBvbWFwXzk2bV9hbHdvbl9mY2tfcGFy ZW50X25hbWVzLAogCQkgIGNvcmVfY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgb21hcF8z MmtzeW5jX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgb21hcF8zMmtzeW5jX2ljazsKIAog c3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBvbWFwXzMya3N5bmNfaWNrX2h3ID0gewogCS5odyA9 IHsKQEAgLTI0NjYsNyArMjQ2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBf OTZtX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLXN0 YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2Zja18zNjMwOworc3RhdGljIHN0cnVjdCBj bGtfY29yZSBvbWFwXzk2bV9hbHdvbl9mY2tfMzYzMDsKIAogc3RhdGljIGNvbnN0IGNoYXIgKm9t YXBfOTZtX2Fsd29uX2Zja18zNjMwX3BhcmVudF9uYW1lc1tdID0gewogCSJvbWFwXzE5Mm1fYWx3 b25fZmNrIiwKQEAgLTI0ODcsNyArMjQ4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAg b21hcF85Nm1fYWx3b25fZmNrXzM2MzBfaHcgPSB7CiAJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBf Q0xLU0VMXzk2TV9NQVNLLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fYWx3b25f ZmNrXzM2MzAgPSB7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIG9tYXBfOTZtX2Fsd29uX2Zja18z NjMwID0gewogCS5uYW1lCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCiAJLmh3CT0gJm9tYXBfOTZt X2Fsd29uX2Zja18zNjMwX2h3Lmh3LAogCS5wYXJlbnRfbmFtZXMJPSBvbWFwXzk2bV9hbHdvbl9m Y2tfMzYzMF9wYXJlbnRfbmFtZXMsCkBAIC0yNDk1LDcgKzI0OTQsNyBAQCBzdGF0aWMgc3RydWN0 IGNsayBvbWFwXzk2bV9hbHdvbl9mY2tfMzYzMCA9IHsKIAkub3BzCT0gJm9tYXBfOTZtX2Fsd29u X2Zja18zNjMwX29wcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgb21hcGN0cmxfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19o d19vbWFwIG9tYXBjdHJsX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yNTIwLDE3ICsyNTE5LDE3 IEBAIERFRklORV9DTEtfRElWSURFUihwY2xreDJfZmNrLCAiZW11X3NyY19jayIsICZlbXVfc3Jj X2NrLCAweDAsCiAJCSAgIE9NQVAzNDMwX0NMS1NFTF9QQ0xLWDJfU0hJRlQsIE9NQVAzNDMwX0NM S1NFTF9QQ0xLWDJfV0lEVEgsCiAJCSAgIENMS19ESVZJREVSX09ORV9CQVNFRCwgTlVMTCk7CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl80OG1fZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBw ZXJfNDhtX2ZjazsKIAogREVGSU5FX1NUUlVDVF9DTEtfSFdfT01BUChwZXJfNDhtX2ZjaywgInBl cl9jbGtkbSIpOwogREVGSU5FX1NUUlVDVF9DTEsocGVyXzQ4bV9mY2ssIGNvcmVfNDhtX2Zja19w YXJlbnRfbmFtZXMsIGNvcmVfbDRfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3Vy aXR5X2wzX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgc2VjdXJpdHlfbDNfaWNrOwogCiBE RUZJTkVfU1RSVUNUX0NMS19IV19PTUFQKHNlY3VyaXR5X2wzX2ljaywgTlVMTCk7CiBERUZJTkVf U1RSVUNUX0NMSyhzZWN1cml0eV9sM19pY2ssIGNvcmVfbDNfaWNrX3BhcmVudF9uYW1lcywgY29y ZV9ja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrOworc3RhdGljIHN0cnVjdCBj bGtfY29yZSBwa2FfaWNrOwogCiBzdGF0aWMgY29uc3QgY2hhciAqcGthX2lja19wYXJlbnRfbmFt ZXNbXSA9IHsKIAkic2VjdXJpdHlfbDNfaWNrIiwKQEAgLTI1NTIsNyArMjU1MSw3IEBAIERFRklO RV9DTEtfRElWSURFUihybV9pY2ssICJsNF9pY2siLCAmbDRfaWNrLCAweDAsCiAJCSAgIE9NQVAz NDMwX0NMS1NFTF9STV9TSElGVCwgT01BUDM0MzBfQ0xLU0VMX1JNX1dJRFRILAogCQkgICBDTEtf RElWSURFUl9PTkVfQkFTRUQsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSBybmdfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19v bWFwIHJuZ19pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjU2NSw3ICsyNTY0LDcgQEAgc3RhdGlj IHN0cnVjdCBjbGtfaHdfb21hcCBybmdfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhy bmdfaWNrLCBhZXMxX2lja19wYXJlbnRfbmFtZXMsIGFlczFfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIHNhZDJkX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgc2FkMmRfaWNrOwog CiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNhZDJkX2lja19odyA9IHsKIAkuaHcgPSB7CkBA IC0yNTc5LDcgKzI1NzgsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNhZDJkX2lja19o dyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoc2FkMmRfaWNrLCBjb3JlX2wzX2lja19wYXJlbnRf bmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrOworc3Rh dGljIHN0cnVjdCBjbGtfY29yZSBzZHJjX2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21h cCBzZHJjX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yNjMwLDcgKzI2MjksNyBAQCBzdGF0aWMg Y29uc3QgY2hhciAqc2d4X2Zja19wYXJlbnRfbmFtZXNbXSA9IHsKIAkiY29yZV9jayIsICJjbV85 Nm1fZmNrIiwgIm9tYXBfMTkybV9hbHdvbl9mY2siLCAiY29yZXgyX2ZjayIsCiB9OwogCi1zdGF0 aWMgc3RydWN0IGNsayBzZ3hfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBzZ3hfZmNrOwog CiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2d4X2Zja19vcHMgPSB7CiAJLmluaXQJCT0g Jm9tYXAyX2luaXRfY2xrX2Nsa2RtLApAQCAtMjY1MSw3ICsyNjUwLDcgQEAgREVGSU5FX0NMS19P TUFQX01VWF9HQVRFKHNneF9mY2ssICJzZ3hfY2xrZG0iLCBzZ3hfY2xrc2VsLAogCQkJIE9NQVAz NDMwRVMyX0NNX0ZDTEtFTl9TR1hfRU5fU0dYX1NISUZULAogCQkJICZjbGtod29wc193YWl0LCBz Z3hfZmNrX3BhcmVudF9uYW1lcywgc2d4X2Zja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBz Z3hfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSBzZ3hfaWNrOwogCiBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIHNneF9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjY2NSw3ICsyNjY0LDcg QEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBzZ3hfaWNrX2h3ID0gewogCiBERUZJTkVfU1RS VUNUX0NMSyhzZ3hfaWNrLCBjb3JlX2wzX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTExX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg c2hhMTFfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNoYTExX2lja19odyA9IHsK IAkuaHcgPSB7CkBAIC0yNjc4LDcgKzI2NzcsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IHNoYTExX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsoc2hhMTFfaWNrLCBhZXMxX2lj a19wYXJlbnRfbmFtZXMsIGFlczFfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEy X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgc2hhMTJfaWNrOwogCiBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIHNoYTEyX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yNjkyLDcgKzI2OTEs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNoYTEyX2lja19odyA9IHsKIAogREVGSU5F X1NUUlVDVF9DTEsoc2hhMTJfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3Jl IHNyMV9mY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgc3IxX2Zja19odyA9IHsKIAku aHcgPSB7CkBAIC0yNzA2LDcgKzI3MDUsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNy MV9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHNyMV9mY2ssIGRwbGwzX2NrX3BhcmVu dF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjazsKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgc3IyX2ZjazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21h cCBzcjJfZmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTI3MjAsMTcgKzI3MTksMTcgQEAgc3RhdGlj IHN0cnVjdCBjbGtfaHdfb21hcCBzcjJfZmNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyhz cjJfZmNrLCBkcGxsM19ja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIHNyX2w0X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgc3JfbDRfaWNrOwog CiBERUZJTkVfU1RSVUNUX0NMS19IV19PTUFQKHNyX2w0X2ljaywgImNvcmVfbDRfY2xrZG0iKTsK IERFRklORV9TVFJVQ1RfQ0xLKHNyX2w0X2ljaywgc2VjdXJpdHlfbDRfaWNrMl9wYXJlbnRfbmFt ZXMsIGNvcmVfbDRfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2s7Citz dGF0aWMgc3RydWN0IGNsa19jb3JlIHNzaV9sNF9pY2s7CiAKIERFRklORV9TVFJVQ1RfQ0xLX0hX X09NQVAoc3NpX2w0X2ljaywgImNvcmVfbDRfY2xrZG0iKTsKIERFRklORV9TVFJVQ1RfQ0xLKHNz aV9sNF9pY2ssIHNlY3VyaXR5X2w0X2ljazJfcGFyZW50X25hbWVzLCBjb3JlX2w0X2lja19vcHMp OwogCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczE7CitzdGF0aWMgc3RydWN0IGNs a19jb3JlIHNzaV9pY2tfMzQzMGVzMTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNzaV9pY2tfMzQz MGVzMV9wYXJlbnRfbmFtZXNbXSA9IHsKIAkic3NpX2w0X2ljayIsCkBAIC0yNzQ4LDcgKzI3NDcs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHNzaV9pY2tfMzQzMGVzMV9odyA9IHsKIAog REVGSU5FX1NUUlVDVF9DTEsoc3NpX2lja18zNDMwZXMxLCBzc2lfaWNrXzM0MzBlczFfcGFyZW50 X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBl czI7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHNzaV9pY2tfMzQzMGVzMjsKIAogc3RhdGljIHN0 cnVjdCBjbGtfaHdfb21hcCBzc2lfaWNrXzM0MzBlczJfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjgx Myw3ICsyODEyLDcgQEAgREVGSU5FX0NMS19GSVhFRF9GQUNUT1Ioc3NpX3NzdF9mY2tfMzQzMGVz MSwgInNzaV9zc3JfZmNrXzM0MzBlczEiLAogREVGSU5FX0NMS19GSVhFRF9GQUNUT1Ioc3NpX3Nz dF9mY2tfMzQzMGVzMiwgInNzaV9zc3JfZmNrXzM0MzBlczIiLAogCQkJJnNzaV9zc3JfZmNrXzM0 MzBlczIsIDB4MCwgMSwgMik7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQxOworc3Rh dGljIHN0cnVjdCBjbGtfY29yZSBzeXNfY2xrb3V0MTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN5 c19jbGtvdXQxX3BhcmVudF9uYW1lc1tdID0gewogCSJvc2Nfc3lzX2NrIiwKQEAgLTI4NDMsNyAr Mjg0Miw3IEBAIERFRklORV9DTEtfRElWSURFUih0cmFjZWNsa19mY2ssICJ0cmFjZWNsa19zcmNf ZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIDB4MCwKIAkJICAgT01BUDM0MzBfQ0xLU0VMX1RSQUNF Q0xLX1NISUZULAogCQkgICBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfV0lEVEgsIENMS19ESVZJ REVSX09ORV9CQVNFRCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRzX2ZjazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgdHNfZmNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHRz X2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yODU2LDcgKzI4NTUsNyBAQCBzdGF0aWMgc3RydWN0 IGNsa19od19vbWFwIHRzX2Zja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodHNfZmNrLCB3 a3VwXzMya19mY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0 IGNsayB1YXJ0MV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHVhcnQxX2ZjazsKIAogc3Rh dGljIHN0cnVjdCBjbGtfaHdfb21hcCB1YXJ0MV9mY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjg3 MCw3ICsyODY5LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB1YXJ0MV9mY2tfaHcgPSB7 CiAKIERFRklORV9TVFJVQ1RfQ0xLKHVhcnQxX2ZjaywgZnNob3N0dXNiX2Zja19wYXJlbnRfbmFt ZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljazsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgdWFydDFfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IHVhcnQxX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0yODg0LDcgKzI4ODMsNyBAQCBzdGF0aWMg c3RydWN0IGNsa19od19vbWFwIHVhcnQxX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEso dWFydDFfaWNrLCBhZXMyX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRp YyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgdWFydDJfZmNr OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQyX2Zja19odyA9IHsKIAkuaHcgPSB7 CkBAIC0yODk4LDcgKzI4OTcsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQyX2Zj a19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodWFydDJfZmNrLCBmc2hvc3R1c2JfZmNrX3Bh cmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNr Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB1YXJ0Ml9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgdWFydDJfaWNrX2h3ID0gewogCS5odyA9IHsKQEAgLTI5MTIsNyArMjkxMSw3IEBA IHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgdWFydDJfaWNrX2h3ID0gewogCiBERUZJTkVfU1RS VUNUX0NMSyh1YXJ0Ml9pY2ssIGFlczJfaWNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsK IAotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB1 YXJ0M19mY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICp1YXJ0M19mY2tfcGFyZW50X25hbWVzW10g PSB7CiAJInBlcl80OG1fZmNrIiwKQEAgLTI5MzAsNyArMjkyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgdWFydDNfZmNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyh1YXJ0M19m Y2ssIHVhcnQzX2Zja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1 Y3QgY2xrIHVhcnQzX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgdWFydDNfaWNrOwogCiBz dGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQzX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0y OTQ0LDcgKzI5NDMsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQzX2lja19odyA9 IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodWFydDNfaWNrLCBncGlvMl9pY2tfcGFyZW50X25hbWVz LCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0NF9mY2s7CitzdGF0aWMg c3RydWN0IGNsa19jb3JlIHVhcnQ0X2ZjazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB1 YXJ0NF9mY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMjk1OCw3ICsyOTU3LDcgQEAgc3RhdGljIHN0 cnVjdCBjbGtfaHdfb21hcCB1YXJ0NF9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHVh cnQ0X2ZjaywgdWFydDNfZmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgdWFydDRfZmNrX2FtMzV4eDsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgdWFy dDRfZmNrX2FtMzV4eDsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB1YXJ0NF9mY2tfYW0z NXh4X2h3ID0gewogCS5odyA9IHsKQEAgLTI5NzIsNyArMjk3MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgdWFydDRfZmNrX2FtMzV4eF9odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEso dWFydDRfZmNrX2FtMzV4eCwgZnNob3N0dXNiX2Zja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Nv cmUgdWFydDRfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQ0X2lja19odyA9 IHsKIAkuaHcgPSB7CkBAIC0yOTg2LDcgKzI5ODUsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19v bWFwIHVhcnQ0X2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodWFydDRfaWNrLCBncGlv Ml9pY2tfcGFyZW50X25hbWVzLCBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayB1 YXJ0NF9pY2tfYW0zNXh4Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB1YXJ0NF9pY2tfYW0zNXh4 OwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVhcnQ0X2lja19hbTM1eHhfaHcgPSB7CiAJ Lmh3ID0gewpAQCAtMzAyMyw3ICszMDIyLDcgQEAgREVGSU5FX0NMS19PTUFQX01VWF9HQVRFKHVz Yl9sNF9pY2ssICJjb3JlX2w0X2Nsa2RtIiwgdXNiX2w0X2Nsa3NlbCwKIAkJCSAmY2xraHdvcHNf aWNsa193YWl0LCB1c2JfbDRfaWNrX3BhcmVudF9uYW1lcywKIAkJCSBzc2lfc3NyX2Zja18zNDMw ZXMxX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfMTIwbV9mY2s7CitzdGF0aWMg c3RydWN0IGNsa19jb3JlIHVzYmhvc3RfMTIwbV9mY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICp1 c2Job3N0XzEyMG1fZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJkcGxsNV9tMl9jayIsCkBAIC0z MDQxLDcgKzMwNDAsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVzYmhvc3RfMTIwbV9m Y2tfaHcgPSB7CiBERUZJTkVfU1RSVUNUX0NMSyh1c2Job3N0XzEyMG1fZmNrLCB1c2Job3N0XzEy MG1fZmNrX3BhcmVudF9uYW1lcywKIAkJICBhZXMyX2lja19vcHMpOwogCi1zdGF0aWMgc3RydWN0 IGNsayB1c2Job3N0XzQ4bV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHVzYmhvc3RfNDht X2ZjazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB1c2Job3N0XzQ4bV9mY2tfaHcgPSB7 CiAJLmh3ID0gewpAQCAtMzA1NSw3ICszMDU0LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdfb21h cCB1c2Job3N0XzQ4bV9mY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHVzYmhvc3RfNDht X2ZjaywgY29yZV80OG1fZmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgdXNiaG9zdF9pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHVzYmhvc3Rf aWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHVzYmhvc3RfaWNrX2h3ID0gewogCS5o dyA9IHsKQEAgLTMwNjksNyArMzA2OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgdXNi aG9zdF9pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHVzYmhvc3RfaWNrLCBzZWN1cml0 eV9sNF9pY2syX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBj bGsgdXNidGxsX2ZjazsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgdXNidGxsX2ZjazsKIAogc3Rh dGljIHN0cnVjdCBjbGtfaHdfb21hcCB1c2J0bGxfZmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTMw ODMsNyArMzA4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgdXNidGxsX2Zja19odyA9 IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodXNidGxsX2ZjaywgdXNiaG9zdF8xMjBtX2Zja19wYXJl bnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9pY2s7 CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHVzYnRsbF9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xr X2h3X29tYXAgdXNidGxsX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0zMTI0LDcgKzMxMjMsNyBA QCBzdGF0aWMgY29uc3QgY2hhciAqdXNpbV9mY2tfcGFyZW50X25hbWVzW10gPSB7CiAJIm9tYXBf OTZtX2ZjayIsICJkcGxsNV9tMl9jayIsICJzeXNfY2siLAogfTsKIAotc3RhdGljIHN0cnVjdCBj bGsgdXNpbV9mY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHVzaW1fZmNrOwogCiBzdGF0aWMg Y29uc3Qgc3RydWN0IGNsa19vcHMgdXNpbV9mY2tfb3BzID0gewogCS5lbmFibGUJCT0gJm9tYXAy X2RmbHRfY2xrX2VuYWJsZSwKQEAgLTMxNDIsNyArMzE0MSw3IEBAIERFRklORV9DTEtfT01BUF9N VVhfR0FURSh1c2ltX2ZjaywgTlVMTCwgdXNpbV9jbGtzZWwsCiAJCQkgT01BUDM0MzBFUzJfRU5f VVNJTU9DUF9TSElGVCwgJmNsa2h3b3BzX3dhaXQsCiAJCQkgdXNpbV9mY2tfcGFyZW50X25hbWVz LCB1c2ltX2Zja19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljazsKK3N0YXRpYyBz dHJ1Y3QgY2xrX2NvcmUgdXNpbV9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgdXNp bV9pY2tfaHcgPSB7CiAJLmh3ID0gewpAQCAtMzE1Niw3ICszMTU1LDcgQEAgc3RhdGljIHN0cnVj dCBjbGtfaHdfb21hcCB1c2ltX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsodXNpbV9p Y2ssIGdwaW8xX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1 Y3QgY2xrIHZwZmVfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB2cGZlX2ZjazsKIAogc3Rh dGljIGNvbnN0IGNoYXIgKnZwZmVfZmNrX3BhcmVudF9uYW1lc1tdID0gewogCSJwY2xrX2NrIiwK QEAgLTMxNzIsNyArMzE3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgdnBmZV9mY2tf aHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHZwZmVfZmNrLCB2cGZlX2Zja19wYXJlbnRfbmFt ZXMsIGFlczFfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHZwZmVfaWNrOworc3RhdGlj IHN0cnVjdCBjbGtfY29yZSB2cGZlX2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB2 cGZlX2lja19odyA9IHsKIAkuaHcgPSB7CkBAIC0zMTg2LDEyICszMTg1LDEyIEBAIHN0YXRpYyBz dHJ1Y3QgY2xrX2h3X29tYXAgdnBmZV9pY2tfaHcgPSB7CiAKIERFRklORV9TVFJVQ1RfQ0xLKHZw ZmVfaWNrLCBlbWFjX2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIHdkdDFfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB3ZHQxX2ZjazsKIAog REVGSU5FX1NUUlVDVF9DTEtfSFdfT01BUCh3ZHQxX2ZjaywgIndrdXBfY2xrZG0iKTsKIERFRklO RV9TVFJVQ1RfQ0xLKHdkdDFfZmNrLCBncHQxMl9mY2tfcGFyZW50X25hbWVzLCBjb3JlX2w0X2lj a19vcHMpOwogCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgd2R0MV9pY2s7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgd2R0MV9pY2tfaHcg PSB7CiAJLmh3ID0gewpAQCAtMzIwNSw3ICszMjA0LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfaHdf b21hcCB3ZHQxX2lja19odyA9IHsKIAogREVGSU5FX1NUUlVDVF9DTEsod2R0MV9pY2ssIGdwaW8x X2lja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHdk dDJfZmNrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSB3ZHQyX2ZjazsKIAogc3RhdGljIHN0cnVj dCBjbGtfaHdfb21hcCB3ZHQyX2Zja19odyA9IHsKIAkuaHcgPSB7CkBAIC0zMjE5LDcgKzMyMTgs NyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHdkdDJfZmNrX2h3ID0gewogCiBERUZJTkVf U1RSVUNUX0NMSyh3ZHQyX2ZjaywgZ3BpbzFfZGJja19wYXJlbnRfbmFtZXMsIGFlczJfaWNrX29w cyk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrOworc3RhdGljIHN0cnVjdCBjbGtfY29y ZSB3ZHQyX2ljazsKIAogc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCB3ZHQyX2lja19odyA9IHsK IAkuaHcgPSB7CkBAIC0zMjMzLDcgKzMyMzIsNyBAQCBzdGF0aWMgc3RydWN0IGNsa19od19vbWFw IHdkdDJfaWNrX2h3ID0gewogCiBERUZJTkVfU1RSVUNUX0NMSyh3ZHQyX2ljaywgZ3BpbzFfaWNr X3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19m Y2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHdkdDNfZmNrOwogCiBzdGF0aWMgc3RydWN0IGNs a19od19vbWFwIHdkdDNfZmNrX2h3ID0gewogCS5odyA9IHsKQEAgLTMyNDcsNyArMzI0Niw3IEBA IHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgd2R0M19mY2tfaHcgPSB7CiAKIERFRklORV9TVFJV Q1RfQ0xLKHdkdDNfZmNrLCBncGlvMl9kYmNrX3BhcmVudF9uYW1lcywgYWVzMl9pY2tfb3BzKTsK IAotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2s7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlIHdk dDNfaWNrOwogCiBzdGF0aWMgc3RydWN0IGNsa19od19vbWFwIHdkdDNfaWNrX2h3ID0gewogCS5o dyA9IHsKQEAgLTM2NjEsMTAgKzM2NjAsMTAgQEAgaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfaW5p dCh2b2lkKQogCQkJCSAgICAgQVJSQVlfU0laRShlbmFibGVfaW5pdF9jbGtzKSk7CiAKIAlwcl9p bmZvKCJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogJWxkLiUwMWxkLyVsZC8lbGQg TUh6XG4iLAotCQkoY2xrX2dldF9yYXRlKCZvc2Nfc3lzX2NrKSAvIDEwMDAwMDApLAotCQkoY2xr X2dldF9yYXRlKCZvc2Nfc3lzX2NrKSAvIDEwMDAwMCkgJSAxMCwKLQkJKGNsa19nZXRfcmF0ZSgm Y29yZV9jaykgLyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZSgmYXJtX2ZjaykgLyAxMDAwMDAw KSk7CisJCShjbGtfcHJvdmlkZXJfZ2V0X3JhdGUoJm9zY19zeXNfY2spIC8gMTAwMDAwMCksCisJ CShjbGtfcHJvdmlkZXJfZ2V0X3JhdGUoJm9zY19zeXNfY2spIC8gMTAwMDAwKSAlIDEwLAorCQko Y2xrX3Byb3ZpZGVyX2dldF9yYXRlKCZjb3JlX2NrKSAvIDEwMDAwMDApLAorCQkoY2xrX3Byb3Zp ZGVyX2dldF9yYXRlKCZhcm1fZmNrKSAvIDEwMDAwMDApKTsKIAogCS8qCiAJICogTG9jayBEUExM NSAtLSBoZXJlIG9ubHkgdW50aWwgb3RoZXIgZGV2aWNlIGluaXQgY29kZSBjYW4KQEAgLTM2NzQs OCArMzY3Myw4IEBAIGludCBfX2luaXQgb21hcDN4eHhfY2xrX2luaXQodm9pZCkKIAkJb21hcDNf Y2xrX2xvY2tfZHBsbDUoKTsKIAogCS8qIEF2b2lkIHNsZWVwaW5nIGR1cmluZyBvbWFwM19jb3Jl X2RwbGxfbTJfc2V0X3JhdGUoKSAqLwotCXNkcmNfaWNrX3AgPSBjbGtfZ2V0KE5VTEwsICJzZHJj X2ljayIpOwotCWFybV9mY2tfcCA9IGNsa19nZXQoTlVMTCwgImFybV9mY2siKTsKKwlzZHJjX2lj a19wID0gY2xrX3Byb3ZpZGVyX2dldChOVUxMLCAic2RyY19pY2siKTsKKwlhcm1fZmNrX3AgPSBj bGtfcHJvdmlkZXJfZ2V0KE5VTEwsICJhcm1fZmNrIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAt LWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbC5jIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9jbGt0Mnh4eF9kcGxsLmMKaW5kZXggODI1NzJlMi4uZDdiYmJiNiAxMDA2NDQKLS0t IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsLmMKKysrIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9jbGt0Mnh4eF9kcGxsLmMKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0y Miw3ICsyMSw3IEBACiAKIC8qKgogICogX2FsbG93X2lkbGUgLSBlbmFibGUgRFBMTCBhdXRvaWRs ZSBiaXRzCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgor ICogQGNsazogc3RydWN0IGNsa19jb3JlICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgogICoK ICAqIEVuYWJsZSBEUExMIGF1dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBUaGUgRFBMTCB3aWxsIGVu dGVyIGxvdy1wb3dlcgogICogc3RvcCB3aGVuIGl0cyBkb3duc3RyZWFtIGNsb2NrcyBhcmUgZ2F0 ZWQuICBObyByZXR1cm4gdmFsdWUuCkBAIC0zOSw3ICszOCw3IEBAIHN0YXRpYyB2b2lkIF9hbGxv d19pZGxlKHN0cnVjdCBjbGtfaHdfb21hcCAqY2xrKQogCiAvKioKICAqIF9kZW55X2lkbGUgLSBw cmV2ZW50IERQTEwgZnJvbSBhdXRvbWF0aWNhbGx5IGlkbGluZwotICogQGNsazogc3RydWN0IGNs ayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAq IG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KICAqCiAgKiBEaXNhYmxlIERQTEwgYXV0b21hdGlj IGlkbGUgY29udHJvbC4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9h cm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9j bGt0Mnh4eF9kcGxsY29yZS5jCmluZGV4IDU5Y2YzMTAuLjlhNjBjZTIgMTAwNjQ0Ci0tLSBhL2Fy Y2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYworKysgYi9hcmNoL2FybS9tYWNo LW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCkBA IC00OCw3ICs0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgKmRwbGxfY29yZV9jazsK ICAqIFJldHVybnMgdGhlIENPUkVfQ0xLIHJhdGUuICBDT1JFX0NMSyBjYW4gaGF2ZSBvbmUgb2Yg dGhyZWUgcmF0ZQogICogc291cmNlcyBvbiBPTUFQMnh4eDogdGhlIERQTEwgQ0xLT1VUIHJhdGUs IERQTEwgQ0xLT1VUWDIsIG9yIDMyS0h6CiAgKiAodGhlIGxhdHRlciBpcyB1bnVzdWFsKS4gIFRo aXMgY3VycmVudGx5IHNob3VsZCBiZSBjYWxsZWQgd2l0aAotICogc3RydWN0IGNsayAqZHBsbF9j aywgd2hpY2ggaXMgYSBjb21wb3NpdGUgY2xvY2sgb2YgZHBsbF9jayBhbmQKKyAqIHN0cnVjdCBj bGtfY29yZSAqZHBsbF9jaywgd2hpY2ggaXMgYSBjb21wb3NpdGUgY2xvY2sgb2YgZHBsbF9jayBh bmQKICAqIGNvcmVfY2suCiAgKi8KIHVuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3Jl X3JhdGUodm9pZCkKQEAgLTE3OSw3ICsxNzgsNyBAQCBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxj b3JlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAKIC8qKgogICogb21h cDJ4eHhfY2xrdF9kcGxsY29yZV9pbml0IC0gY2xrIGluaXQgZnVuY3Rpb24gZm9yIGRwbGxfY2sK LSAqIEBjbGs6IHN0cnVjdCBjbGsgKmRwbGxfY2sKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAq ZHBsbF9jawogICoKICAqIFN0b3JlIGEgbG9jYWwgY29weSBvZiBAY2xrIGluIGRwbGxfY29yZV9j ayBzbyBvdGhlciBjb2RlIGNhbiBxdWVyeQogICogdGhlIGNvcmUgcmF0ZSB3aXRob3V0IGhhdmlu ZyB0byBjbGtfZ2V0KCksIHdoaWNoIGNhbiBzbGVlcC4gIE11c3QKZGlmZiAtLWdpdCBhL2FyY2gv YXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jIGIvYXJjaC9hcm0vbWFjaC1v bWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMKaW5kZXggODVlMGIwYzAuLmQ2MjFhNGMgMTAw NjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jCisr KyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jCkBAIC0yOCw3 ICsyOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9l cnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAj aW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE5 OCwxNCArMTk3LDE0IEBAIHZvaWQgb21hcDJ4eHhfY2xrdF92cHNfY2hlY2tfYm9vdGxvYWRlcl9y YXRlcyh2b2lkKQogICovCiB2b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2xhdGVfaW5pdCh2b2lkKQog ewotCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGNsa19jb3JlICpjOwogCi0JYyA9IGNsa19nZXQo TlVMTCwgInN5c19jayIpOworCWMgPSBjbGtfcHJvdmlkZXJfZ2V0KE5VTEwsICJzeXNfY2siKTsK IAlpZiAoSVNfRVJSKGMpKSB7CiAJCVdBUk4oMSwgImNvdWxkIG5vdCBsb2NhdGUgc3lzX2NrXG4i KTsKIAl9IGVsc2UgewotCQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShjKTsKLQkJY2xrX3B1 dChjKTsKKwkJc3lzX2NrX3JhdGUgPSBjbGtfcHJvdmlkZXJfZ2V0X3JhdGUoYyk7CisJCV9fY2xr X3B1dChjKTsKIAl9CiB9CiAKQEAgLTIzMCw3ICsyMjksNyBAQCB2b2lkIG9tYXAyeHh4X2Nsa3Rf dnBzX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0geyBOVUxMIH07 CiAJc3RydWN0IGNsa19od19vbWFwICpodyA9IE5VTEw7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0 cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lID0gIm1wdV9jayI7 CiAJc3RydWN0IGNsa19sb29rdXAgKmxvb2t1cCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2FyY2gv YXJtL21hY2gtb21hcDIvY2xrdDM0eHhfZHBsbDNtMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9j bGt0MzR4eF9kcGxsM20yLmMKaW5kZXggZWI2OWFjZi4uMTZmZjRlZCAxMDA2NDQKLS0tIGEvYXJj aC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1v bWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0z OCw3ICszNyw3IEBACiAKIC8qKgogICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0 IENPUkUgRFBMTCBNMiBkaXZpZGVyCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBz ZXQKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqIG9mIERQTEwgdG8gc2V0CiAgKiBAcmF0ZTog cm91bmRlZCB0YXJnZXQgcmF0ZQogICoKICAqIFByb2dyYW0gdGhlIERQTEwgTTIgZGl2aWRlciB3 aXRoIHRoZSByb3VuZGVkIHRhcmdldCByYXRlLiAgUmV0dXJucwpkaWZmIC0tZ2l0IGEvYXJjaC9h cm0vbWFjaC1vbWFwMi9jbGt0X2Nsa3NlbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2Ns a3NlbC5jCmluZGV4IDdlZTI2MTAuLmI0Nzk2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gt b21hcDIvY2xrdF9jbGtzZWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfY2xrc2Vs LmMKQEAgLTUxLDE1ICs1MSwxNSBAQAogCiAvKioKICAqIF9nZXRfY2xrc2VsX2J5X3BhcmVudCgp IC0gcmV0dXJuIGNsa3NlbCBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gY2xrICYgcGFyZW50Ci0gKiBAY2xr OiBPTUFQIHN0cnVjdCBjbGsgcHRyIHRvIGluc3BlY3QKLSAqIEBzcmNfY2xrOiBPTUFQIHN0cnVj dCBjbGsgcHRyIG9mIHRoZSBwYXJlbnQgY2xrIHRvIHNlYXJjaCBmb3IKKyAqIEBjbGs6IE9NQVAg c3RydWN0IGNsa19jb3JlIHB0ciB0byBpbnNwZWN0CisgKiBAc3JjX2NsazogT01BUCBzdHJ1Y3Qg Y2xrX2NvcmUgcHRyIG9mIHRoZSBwYXJlbnQgY2xrIHRvIHNlYXJjaCBmb3IKICAqCiAgKiBTY2Fu IHRoZSBzdHJ1Y3QgY2xrc2VsIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xvY2sgdG8gZmlu ZAogICogdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBwYXJlbnQgY2xv Y2sgYWRkcmVzcy4KICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrc2VsIG9u IHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtz ZWwgKl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsaywKLQkJCQkJ CSAgc3RydWN0IGNsayAqc3JjX2NsaykKKwkJCQkJCSAgc3RydWN0IGNsa19jb3JlICpzcmNfY2xr KQogewogCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CiAKQEAgLTgyLDcgKzgyLDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgKl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xr X2h3X29tYXAgKmNsaywKIAogLyoqCiAgKiBfd3JpdGVfY2xrc2VsX3JlZygpIC0gcHJvZ3JhbSBh IGNsb2NrJ3MgY2xrc2VsIHJlZ2lzdGVyIGluIGhhcmR3YXJlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xr ICogdG8gcHJvZ3JhbQorICogQGNsazogc3RydWN0IGNsa19jb3JlICogdG8gcHJvZ3JhbQogICog QHY6IGNsa3NlbCBiaXRmaWVsZCB2YWx1ZSB0byBwcm9ncmFtICh3aXRoIExTQiBhdCBiaXQgMCkK ICAqCiAgKiBTaGlmdCB0aGUgY2xrc2VsIHJlZ2lzdGVyIGJpdGZpZWxkIHZhbHVlIEB2IHRvIGl0 cyBhcHByb3ByaWF0ZQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgc3RhdGljIHZvaWQgX3dyaXRlX2Ns a3NlbF9yZWcoc3RydWN0IGNsa19od19vbWFwICpjbGssIHUzMiBmaWVsZF92YWwpCiAKIC8qKgog ICogX2Nsa3NlbF90b19kaXZpc29yKCkgLSB0dXJuIGNsa3NlbCBmaWVsZCB2YWx1ZSBpbnRvIGlu dGVnZXIgZGl2aWRlcgotICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZQorICogQGNsazog T01BUCBzdHJ1Y3QgY2xrX2NvcmUgdG8gdXNlCiAgKiBAZmllbGRfdmFsOiByZWdpc3RlciBmaWVs ZCB2YWx1ZSB0byBmaW5kCiAgKgotICogR2l2ZW4gYSBzdHJ1Y3QgY2xrIG9mIGEgcmF0ZS1zZWxl Y3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgcmVnaXN0ZXIgZmllbGQKKyAqIEdpdmVuIGEgc3Ry dWN0IGNsa19jb3JlIG9mIGEgcmF0ZS1zZWxlY3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgcmVn aXN0ZXIgZmllbGQKICAqIHZhbHVlIHRvIHNlYXJjaCBmb3IsIGZpbmQgdGhlIGNvcnJlc3BvbmRp bmcgY2xvY2sgZGl2aXNvci4gIFRoZSByZWdpc3RlcgogICogZmllbGQgdmFsdWUgc2hvdWxkIGJl IHByZS1tYXNrZWQgYW5kIHNoaWZ0ZWQgZG93biBzbyB0aGUgTFNCIGlzIGF0IGJpdCAwCiAgKiBi ZWZvcmUgY2FsbGluZy4gIFJldHVybnMgMCBvbiBlcnJvciBvciByZXR1cm5zIHRoZSBhY3R1YWwg aW50ZWdlciBkaXZpc29yCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIHUzMiBfY2xrc2VsX3Rv X2Rpdmlzb3Ioc3RydWN0IGNsa19od19vbWFwICpjbGssIHUzMiBmaWVsZF92YWwpCiB7CiAJY29u c3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7 Ci0Jc3RydWN0IGNsayAqcGFyZW50OworCXN0cnVjdCBjbGtfY29yZSAqcGFyZW50OwogCiAJcGFy ZW50ID0gX19jbGtfZ2V0X3BhcmVudChjbGstPmh3LmNsayk7CiAKQEAgLTE0OSwxMCArMTQ5LDEw IEBAIHN0YXRpYyB1MzIgX2Nsa3NlbF90b19kaXZpc29yKHN0cnVjdCBjbGtfaHdfb21hcCAqY2xr LCB1MzIgZmllbGRfdmFsKQogCiAvKioKICAqIF9kaXZpc29yX3RvX2Nsa3NlbCgpIC0gdHVybiBj bGtzZWwgaW50ZWdlciBkaXZpc29yIGludG8gYSBmaWVsZCB2YWx1ZQotICogQGNsazogT01BUCBz dHJ1Y3QgY2xrIHRvIHVzZQorICogQGNsazogT01BUCBzdHJ1Y3QgY2xrX2NvcmUgdG8gdXNlCiAg KiBAZGl2OiBpbnRlZ2VyIGRpdmlzb3IgdG8gc2VhcmNoIGZvcgogICoKLSAqIEdpdmVuIGEgc3Ry dWN0IGNsayBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xvY2ssIGFuZCBhIGNsb2NrCisg KiBHaXZlbiBhIHN0cnVjdCBjbGtfY29yZSBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xv Y2ssIGFuZCBhIGNsb2NrCiAgKiBkaXZpc29yLCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lz dGVyIGZpZWxkIHZhbHVlLiAgUmV0dXJucyB0aGUKICAqIHJlZ2lzdGVyIGZpZWxkIHZhbHVlIF9i ZWZvcmVfIGxlZnQtc2hpZnRpbmcgKGkuZS4sIExTQiBpcyBhdCBiaXQKICAqIDApOyBvciByZXR1 cm5zIDB4RkZGRkZGRkYgKH4wKSB1cG9uIGVycm9yLgpAQCAtMTYxLDcgKzE2MSw3IEBAIHN0YXRp YyB1MzIgX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGtfaHdfb21hcCAqY2xrLCB1MzIgZGl2 KQogewogCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CiAJY29uc3Qgc3RydWN0IGNsa3NlbF9y YXRlICpjbGtyOwotCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVu dDsKIAogCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAlXQVJOX09OKGRpdiA9PSAwKTsKQEAg LTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdTMyIF9kaXZpc29yX3RvX2Nsa3NlbChzdHJ1Y3QgY2xr X2h3X29tYXAgKmNsaywgdTMyIGRpdikKIAogLyoqCiAgKiBfcmVhZF9kaXZpc29yKCkgLSBnZXQg Y3VycmVudCBkaXZpc29yIGFwcGxpZWQgdG8gcGFyZW50IGNsb2NrIChmcm9tIGhkd3IpCi0gKiBA Y2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgorICogQGNsazogT01BUCBzdHJ1Y3QgY2xrX2Nv cmUgdG8gdXNlLgogICoKICAqIFJlYWQgdGhlIGN1cnJlbnQgZGl2aXNvciByZWdpc3RlciB2YWx1 ZSBmb3IgQGNsayB0aGF0IGlzIHByb2dyYW1tZWQKICAqIGludG8gdGhlIGhhcmR3YXJlLCBjb252 ZXJ0IGl0IGludG8gdGhlIGFjdHVhbCBkaXZpc29yIHZhbHVlLCBhbmQKQEAgLTIxNSw3ICsyMTUs NyBAQCBzdGF0aWMgdTMyIF9yZWFkX2Rpdmlzb3Ioc3RydWN0IGNsa19od19vbWFwICpjbGspCiAK IC8qKgogICogb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KCkgLSBmaW5kIGRpdmlzb3IgZm9y IHRoZSBnaXZlbiBjbG9jayBhbmQgcmF0ZQotICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVz ZQorICogQGNsazogT01BUCBzdHJ1Y3QgY2xrX2NvcmUgdG8gdXNlCiAgKiBAdGFyZ2V0X3JhdGU6 IGRlc2lyZWQgY2xvY2sgcmF0ZQogICogQG5ld19kaXY6IHB0ciB0byB3aGVyZSB3ZSBzaG91bGQg c3RvcmUgdGhlIGRpdmlzb3IKICAqCkBAIC0yMzMsNyArMjMzLDcgQEAgdTMyIG9tYXAyX2Nsa3Nl bF9yb3VuZF9yYXRlX2RpdihzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsaywKIAljb25zdCBzdHJ1Y3Qg Y2xrc2VsICpjbGtzOwogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKIAl1MzIgbGFz dF9kaXYgPSAwOwotCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVu dDsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwogCWNvbnN0IGNoYXIgKmNsa19uYW1lOwog CkBAIC0yODYsNyArMjg2LDcgQEAgdTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihzdHJ1 Y3QgY2xrX2h3X29tYXAgKmNsaywKIAogLyoKICAqIENsb2NrdHlwZSBpbnRlcmZhY2UgZnVuY3Rp b25zIHRvIHRoZSBPTUFQIGNsb2NrIGNvZGUKLSAqIChpLmUuLCB0aG9zZSB1c2VkIGluIHN0cnVj dCBjbGsgZmllbGQgZnVuY3Rpb24gcG9pbnRlcnMsIGV0Yy4pCisgKiAoaS5lLiwgdGhvc2UgdXNl ZCBpbiBzdHJ1Y3QgY2xrX2NvcmUgZmllbGQgZnVuY3Rpb24gcG9pbnRlcnMsIGV0Yy4pCiAgKi8K IAogLyoqCkBAIC0zMDksNyArMzA5LDcgQEAgdTggb21hcDJfY2xrc2VsX2ZpbmRfcGFyZW50X2lu ZGV4KHN0cnVjdCBjbGtfaHcgKmh3KQogCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CiAJY29u c3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwogCXUzMiByLCBmb3VuZCA9IDA7Ci0Jc3RydWN0 IGNsayAqcGFyZW50OworCXN0cnVjdCBjbGtfY29yZSAqcGFyZW50OwogCWNvbnN0IGNoYXIgKmNs a19uYW1lOwogCWludCByZXQgPSAwLCBmID0gMDsKIApAQCAtMzQ1LDExICszNDUsMTEgQEAgdTgg b21hcDJfY2xrc2VsX2ZpbmRfcGFyZW50X2luZGV4KHN0cnVjdCBjbGtfaHcgKmh3KQogCiAKIC8q KgotICogb21hcDJfY2xrc2VsX3JlY2FsYygpIC0gZnVuY3Rpb24gcHRyIHRvIHBhc3MgdmlhIHN0 cnVjdCBjbGsgLnJlY2FsYyBmaWVsZAotICogQGNsazogc3RydWN0IGNsayAqCisgKiBvbWFwMl9j bGtzZWxfcmVjYWxjKCkgLSBmdW5jdGlvbiBwdHIgdG8gcGFzcyB2aWEgc3RydWN0IGNsa19jb3Jl IC5yZWNhbGMgZmllbGQKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqCiAgKgogICogVGhpcyBm dW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seSBieSB0aGUgY2xvY2sgZnJhbWV3 b3JrLgotICogRWFjaCBjbGtzZWwgY2xvY2sgc2hvdWxkIGhhdmUgaXRzIHN0cnVjdCBjbGsgLnJl Y2FsYyBmaWVsZCBzZXQgdG8gdGhpcworICogRWFjaCBjbGtzZWwgY2xvY2sgc2hvdWxkIGhhdmUg aXRzIHN0cnVjdCBjbGtfY29yZSAucmVjYWxjIGZpZWxkIHNldCB0byB0aGlzCiAgKiBmdW5jdGlv bi4gIFJldHVybnMgdGhlIGNsb2NrJ3MgY3VycmVudCByYXRlLCBiYXNlZCBvbiBpdHMgcGFyZW50 J3MgcmF0ZQogICogYW5kIGl0cyBjdXJyZW50IGRpdmlzb3Igc2V0dGluZyBpbiB0aGUgaGFyZHdh cmUuCiAgKi8KQEAgLTM3Niw3ICszNzYsNyBAQCB1bnNpZ25lZCBsb25nIG9tYXAyX2Nsa3NlbF9y ZWNhbGMoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCiAKIC8q KgogICogb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoKSAtIGZpbmQgcm91bmRlZCByYXRlIGZvciB0 aGUgZ2l2ZW4gY2xvY2sgYW5kIHJhdGUKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UK KyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsa19jb3JlIHRvIHVzZQogICogQHRhcmdldF9yYXRlOiBk ZXNpcmVkIGNsb2NrIHJhdGUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJl IGNhbGxlZCBvbmx5IGJ5IHRoZSBjbG9jayBmcmFtZXdvcmsuCkBAIC0zOTYsNyArMzk2LDcgQEAg bG9uZyBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQg bG9uZyB0YXJnZXRfcmF0ZSwKIAogLyoqCiAgKiBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoKSAtIHBy b2dyYW0gY2xvY2sgcmF0ZSBpbiBoYXJkd2FyZQotICogQGNsazogc3RydWN0IGNsayAqIHRvIHBy b2dyYW0gcmF0ZQorICogQGNsazogc3RydWN0IGNsa19jb3JlICogdG8gcHJvZ3JhbSByYXRlCiAg KiBAcmF0ZTogdGFyZ2V0IHJhdGUgdG8gcHJvZ3JhbQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMg aW50ZW5kZWQgdG8gYmUgY2FsbGVkIG9ubHkgYnkgdGhlIGNsb2NrIGZyYW1ld29yay4KQEAgLTQz NSw3ICs0MzUsNyBAQCBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LCB1bnNpZ25lZCBsb25nIHJhdGUsCiB9CiAKIC8qCi0gKiBDbGtzZWwgcGFyZW50IHNldHRpbmcg ZnVuY3Rpb24gLSBub3QgcGFzc2VkIGluIHN0cnVjdCBjbGsgZnVuY3Rpb24KKyAqIENsa3NlbCBw YXJlbnQgc2V0dGluZyBmdW5jdGlvbiAtIG5vdCBwYXNzZWQgaW4gc3RydWN0IGNsa19jb3JlIGZ1 bmN0aW9uCiAgKiBwb2ludGVyIC0gaW5zdGVhZCwgdGhlIE9NQVAgY2xvY2sgY29kZSBjdXJyZW50 bHkgYXNzdW1lcyB0aGF0IGFueQogICogcGFyZW50LXNldHRpbmcgY2xvY2sgaXMgYSBjbGtzZWwg Y2xvY2ssIGFuZCBjYWxscwogICogb21hcDJfY2xrc2VsX3NldF9wYXJlbnQoKSBieSBkZWZhdWx0 CkBAIC00NDMsOCArNDQzLDggQEAgaW50IG9tYXAyX2Nsa3NlbF9zZXRfcmF0ZShzdHJ1Y3QgY2xr X2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCiAvKioKICAqIG9tYXAyX2Nsa3NlbF9zZXRf cGFyZW50KCkgLSBjaGFuZ2UgYSBjbG9jaydzIHBhcmVudCBjbG9jawotICogQGNsazogc3RydWN0 IGNsayAqIG9mIHRoZSBjaGlsZCBjbG9jawotICogQG5ld19wYXJlbnQ6IHN0cnVjdCBjbGsgKiBv ZiB0aGUgbmV3IHBhcmVudCBjbG9jaworICogQGNsazogc3RydWN0IGNsa19jb3JlICogb2YgdGhl IGNoaWxkIGNsb2NrCisgKiBAbmV3X3BhcmVudDogc3RydWN0IGNsa19jb3JlICogb2YgdGhlIG5l dyBwYXJlbnQgY2xvY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNh bGxlZCBvbmx5IGJ5IHRoZSBjbG9jayBmcmFtZXdvcmsuCiAgKiBDaGFuZ2UgdGhlIHBhcmVudCBj bG9jayBvZiBjbG9jayBAY2xrIHRvIEBuZXdfcGFyZW50LiAgVGhpcyBpcwpkaWZmIC0tZ2l0IGEv YXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xr dF9kcGxsLmMKaW5kZXggZjI1MWExNC4uMzZmMjYzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFj aC1vbWFwMi9jbGt0X2RwbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5j CkBAIC01Niw3ICs1Niw3IEBACiAKIC8qCiAgKiBfZHBsbF90ZXN0X2ZpbnQgLSB0ZXN0IHdoZXRo ZXIgYW4gRmludCB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIERQTEwKLSAqIEBjbGs6IERQTEwgc3Ry dWN0IGNsayB0byB0ZXN0CisgKiBAY2xrOiBEUExMIHN0cnVjdCBjbGtfY29yZSB0byB0ZXN0CiAg KiBAbjogZGl2aWRlciB2YWx1ZSAoTikgdG8gdGVzdAogICoKICAqIFRlc3RzIHdoZXRoZXIgYSBw YXJ0aWN1bGFyIGRpdmlkZXIgQG4gd2lsbCByZXN1bHQgaW4gYSB2YWxpZCBEUExMCkBAIC0yMTUs NyArMjE1LDcgQEAgdTggb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykK IAl2ICY9IGRkLT5lbmFibGVfbWFzazsKIAl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwog Ci0JLyogUmVwYXJlbnQgdGhlIHN0cnVjdCBjbGsgaW4gY2FzZSB0aGUgZHBsbCBpcyBpbiBieXBh c3MgKi8KKwkvKiBSZXBhcmVudCB0aGUgc3RydWN0IGNsa19jb3JlIGluIGNhc2UgdGhlIGRwbGwg aXMgaW4gYnlwYXNzICovCiAJaWYgKF9vbWFwMl9kcGxsX2lzX2luX2J5cGFzcyh2KSkKIAkJcmV0 dXJuIDE7CiAKQEAgLTIyNCw3ICsyMjQsNyBAQCB1OCBvbWFwMl9pbml0X2RwbGxfcGFyZW50KHN0 cnVjdCBjbGtfaHcgKmh3KQogCiAvKioKICAqIG9tYXAyX2dldF9kcGxsX3JhdGUgLSByZXR1cm5z IHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBh IERQTEwKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqIG9mIGEgRFBMTAogICoKICAqIERQTExz IGNhbiBiZSBsb2NrZWQgb3IgYnlwYXNzZWQgLSBiYXNpY2FsbHksIGVuYWJsZWQgb3IgZGlzYWJs ZWQuCiAgKiBXaGVuIGxvY2tlZCwgdGhlIERQTEwgb3V0cHV0IGRlcGVuZHMgb24gdGhlIE0gYW5k IE4gdmFsdWVzLiAgV2hlbgpAQCAtMjcwLDcgKzI3MCw3IEBAIHVuc2lnbmVkIGxvbmcgb21hcDJf Z2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsaykKIAogLyoqCiAgKiBvbWFwMl9k cGxsX3JvdW5kX3JhdGUgLSByb3VuZCBhIHRhcmdldCByYXRlIGZvciBhbiBPTUFQIERQTEwKLSAq IEBjbGs6IHN0cnVjdCBjbGsgKiBmb3IgYSBEUExMCisgKiBAY2xrOiBzdHJ1Y3QgY2xrX2NvcmUg KiBmb3IgYSBEUExMCiAgKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgRFBMTCBjbG9jayByYXRlCiAg KgogICogR2l2ZW4gYSBEUExMIGFuZCBhIGRlc2lyZWQgdGFyZ2V0IHJhdGUsIHJvdW5kIHRoZSB0 YXJnZXQgcmF0ZSB0byBhCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMg Yi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggNTAwNTMwZC4uYWIzNDFlNCAxMDA2 NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gt b21hcDIvY2xvY2suYwpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyBpbnQgX3dhaXRfaWRsZXN0 X2dlbmVyaWMoc3RydWN0IGNsa19od19vbWFwICpjbGssIHZvaWQgX19pb21lbSAqcmVnLAogCiAv KioKICAqIF9vbWFwMl9tb2R1bGVfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIGFuIE9NQVAgbW9kdWxl IHRvIGxlYXZlIElETEUKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWxvbmdpbmcgdG8gdGhlIG1v ZHVsZQorICogQGNsazogc3RydWN0IGNsa19jb3JlICogYmVsb25naW5nIHRvIHRoZSBtb2R1bGUK ICAqCiAgKiBJZiB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBmb3IgdGhlIE9NQVAgaGFyZHdhcmUgSVAg YmxvY2sgdGhhdAogICogY29ycmVzcG9uZHMgdG8gY2xvY2sgQGNsayBhcmUgZW5hYmxlZCwgdGhl biB3YWl0IGZvciB0aGUgbW9kdWxlIHRvCkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQg X29tYXAyX21vZHVsZV93YWl0X3JlYWR5KHN0cnVjdCBjbGtfaHdfb21hcCAqY2xrKQogICogb21h cDJfaW5pdF9jbGtfY2xrZG0gLSBsb29rIHVwIGEgY2xvY2tkb21haW4gbmFtZSwgc3RvcmUgcG9p bnRlciBpbiBjbGsKICAqIEBjbGs6IE9NQVAgY2xvY2sgc3RydWN0IHB0ciB0byB1c2UKICAqCi0g KiBDb252ZXJ0IGEgY2xvY2tkb21haW4gbmFtZSBzdG9yZWQgaW4gYSBzdHJ1Y3QgY2xrICdjbGsn IGludG8gYQorICogQ29udmVydCBhIGNsb2NrZG9tYWluIG5hbWUgc3RvcmVkIGluIGEgc3RydWN0 IGNsa19jb3JlICdjbGsnIGludG8gYQogICogY2xvY2tkb21haW4gcG9pbnRlciwgYW5kIHNhdmUg aXQgaW50byB0aGUgc3RydWN0IGNsay4gIEludGVuZGVkIHRvIGJlCiAgKiBjYWxsZWQgZHVyaW5n IGNsa19yZWdpc3RlcigpLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCkBAIC0yMjIsNyArMjIyLDcg QEAgdm9pZCBfX2luaXQgb21hcDJfY2xrX2Rpc2FibGVfY2xrZG1fY29udHJvbCh2b2lkKQogCiAv KioKICAqIG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uIC0gZmluZCBjb21wYW5pb24gY2xv Y2sgdG8gQGNsawotICogQGNsazogc3RydWN0IGNsayAqIHRvIGZpbmQgdGhlIGNvbXBhbmlvbiBj bG9jayBvZgorICogQGNsazogc3RydWN0IGNsa19jb3JlICogdG8gZmluZCB0aGUgY29tcGFuaW9u IGNsb2NrIG9mCiAgKiBAb3RoZXJfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gcmV0dXJuIHRoZSBj b21wYW5pb24gY2xvY2sgQ01fKkNMS0VOIHZhIGluCiAgKiBAb3RoZXJfYml0OiB1OCAqKiB0byBy ZXR1cm4gdGhlIGNvbXBhbmlvbiBjbG9jayBiaXQgc2hpZnQgaW4KICAqCkBAIC0yNTgsNyArMjU4 LDcgQEAgdm9pZCBvbWFwMl9jbGtfZGZsdF9maW5kX2NvbXBhbmlvbihzdHJ1Y3QgY2xrX2h3X29t YXAgKmNsaywKIAogLyoqCiAgKiBvbWFwMl9jbGtfZGZsdF9maW5kX2lkbGVzdCAtIGZpbmQgQ01f SURMRVNUIHJlZyB2YSwgYml0IHNoaWZ0IGZvciBAY2xrCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICog dG8gZmluZCBJRExFU1QgaW5mbyBmb3IKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqIHRvIGZp bmQgSURMRVNUIGluZm8gZm9yCiAgKiBAaWRsZXN0X3JlZzogdm9pZCBfX2lvbWVtICoqIHRvIHJl dHVybiB0aGUgQ01fSURMRVNUIHZhIGluCiAgKiBAaWRsZXN0X2JpdDogdTggKiB0byByZXR1cm4g dGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW4KICAqIEBpZGxlc3RfdmFsOiB1OCAqIHRvIHJldHVy biB0aGUgaWRsZSBzdGF0dXMgaW5kaWNhdG9yCkBAIC01MDIsMTQgKzUwMiwxNCBAQCBfX3NldHVw KCJtcHVyYXRlPSIsIG9tYXBfY2xrX3NldHVwKTsKIAogLyoqCiAgKiBvbWFwMl9pbml0X2Nsa19o d19vbWFwX2Nsb2NrcyAtIGluaXRpYWxpemUgYW4gT01BUCBjbG9jawotICogQGNsazogc3RydWN0 IGNsayAqIHRvIGluaXRpYWxpemUKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqIHRvIGluaXRp YWxpemUKICAqCiAgKiBBZGQgYW4gT01BUCBjbG9jayBAY2xrIHRvIHRoZSBpbnRlcm5hbCBsaXN0 IG9mIE9NQVAgY2xvY2tzLiAgVXNlZAogICogdGVtcG9yYXJpbHkgZm9yIGF1dG9pZGxlIGhhbmRs aW5nLCB1bnRpbCB0aGlzIHN1cHBvcnQgY2FuIGJlCiAgKiBpbnRlZ3JhdGVkIGludG8gdGhlIGNv bW1vbiBjbG9jayBmcmFtZXdvcmsgY29kZSBpbiBzb21lIHdheS4gIE5vCiAgKiByZXR1cm4gdmFs dWUuCiAgKi8KLXZvaWQgb21hcDJfaW5pdF9jbGtfaHdfb21hcF9jbG9ja3Moc3RydWN0IGNsayAq Y2xrKQordm9pZCBvbWFwMl9pbml0X2Nsa19od19vbWFwX2Nsb2NrcyhzdHJ1Y3QgY2xrX2NvcmUg KmNsaykKIHsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmM7CiAKQEAgLTU2NiwxMSArNTY2LDExIEBA IGludCBvbWFwMl9jbGtfZGlzYWJsZV9hdXRvaWRsZV9hbGwodm9pZCkKIAogLyoqCiAgKiBvbWFw Ml9jbGtfZGVueV9pZGxlIC0gZGlzYWJsZSBhdXRvaWRsZSBvbiBhbiBPTUFQIGNsb2NrCi0gKiBA Y2xrOiBzdHJ1Y3QgY2xrICogdG8gZGlzYWJsZSBhdXRvaWRsZSBmb3IKKyAqIEBjbGs6IHN0cnVj dCBjbGtfY29yZSAqIHRvIGRpc2FibGUgYXV0b2lkbGUgZm9yCiAgKgogICogRGlzYWJsZSBhdXRv aWRsZSBvbiBhbiBPTUFQIGNsb2NrLgogICovCi1pbnQgb21hcDJfY2xrX2RlbnlfaWRsZShzdHJ1 Y3QgY2xrICpjbGspCitpbnQgb21hcDJfY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrX2NvcmUgKmNs aykKIHsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmM7CiAKQEAgLTU4NSwxMSArNTg1LDExIEBAIGlu dCBvbWFwMl9jbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKIAogLyoqCiAgKiBvbWFwMl9j bGtfYWxsb3dfaWRsZSAtIGVuYWJsZSBhdXRvaWRsZSBvbiBhbiBPTUFQIGNsb2NrCi0gKiBAY2xr OiBzdHJ1Y3QgY2xrICogdG8gZW5hYmxlIGF1dG9pZGxlIGZvcgorICogQGNsazogc3RydWN0IGNs a19jb3JlICogdG8gZW5hYmxlIGF1dG9pZGxlIGZvcgogICoKICAqIEVuYWJsZSBhdXRvaWRsZSBv biBhbiBPTUFQIGNsb2NrLgogICovCi1pbnQgb21hcDJfY2xrX2FsbG93X2lkbGUoc3RydWN0IGNs ayAqY2xrKQoraW50IG9tYXAyX2Nsa19hbGxvd19pZGxlKHN0cnVjdCBjbGtfY29yZSAqY2xrKQog ewogCXN0cnVjdCBjbGtfaHdfb21hcCAqYzsKIApAQCAtNjE0LDEyICs2MTQsMTIgQEAgaW50IG9t YXAyX2Nsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKICAqLwogdm9pZCBvbWFwMl9jbGtf ZW5hYmxlX2luaXRfY2xvY2tzKGNvbnN0IGNoYXIgKipjbGtfbmFtZXMsIHU4IG51bV9jbG9ja3Mp CiB7Ci0Jc3RydWN0IGNsayAqaW5pdF9jbGs7CisJc3RydWN0IGNsa19jb3JlICppbml0X2NsazsK IAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2xvY2tzOyBpKyspIHsKLQkJaW5pdF9j bGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lc1tpXSk7Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShp bml0X2Nsayk7CisJCWluaXRfY2xrID0gY2xrX3Byb3ZpZGVyX2dldChOVUxMLCBjbGtfbmFtZXNb aV0pOworCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoaW5pdF9jbGspOwogCX0KIH0KIApA QCAtNjU1LDMxICs2NTUsMzEgQEAgdm9pZCBfX2luaXQgb21hcF9jbG9ja3NfcmVnaXN0ZXIoc3Ry dWN0IG9tYXBfY2xrIG9jbGtzW10sIGludCBjbnQpCiAgKiB0aGUgT1BQIGxheWVyLiAgWFhYIFRo aXMgaXMgaW50ZW5kZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgT1BQIGxheWVyCiAgKiBjb2RlIGlu IHRoZSBuZWFyIGZ1dHVyZSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2xvY2sgY29k ZS4KICAqIFJldHVybnMgLUVJTlZBTCBpZiAnbXB1cmF0ZScgaXMgemVybyBvciBpZiBjbGtfc2V0 X3JhdGUoKSByZWplY3RzCi0gKiB0aGUgcmF0ZSwgLUVOT0VOVCBpZiB0aGUgc3RydWN0IGNsayBy ZWZlcnJlZCB0byBieSBAbXB1cmF0ZV9ja19uYW1lCisgKiB0aGUgcmF0ZSwgLUVOT0VOVCBpZiB0 aGUgc3RydWN0IGNsa19jb3JlIHJlZmVycmVkIHRvIGJ5IEBtcHVyYXRlX2NrX25hbWUKICAqIGNh bm5vdCBiZSBmb3VuZCwgb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KIGludCBfX2luaXQgb21hcDJf Y2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoY29uc3QgY2hhciAqbXB1cmF0ZV9ja19uYW1lKQog ewotCXN0cnVjdCBjbGsgKm1wdXJhdGVfY2s7CisJc3RydWN0IGNsa19jb3JlICptcHVyYXRlX2Nr OwogCWludCByOwogCiAJaWYgKCFtcHVyYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1wdXJh dGVfY2sgPSBjbGtfZ2V0KE5VTEwsIG1wdXJhdGVfY2tfbmFtZSk7CisJbXB1cmF0ZV9jayA9IGNs a19wcm92aWRlcl9nZXQoTlVMTCwgbXB1cmF0ZV9ja19uYW1lKTsKIAlpZiAoV0FSTihJU19FUlIo bXB1cmF0ZV9jayksICJGYWlsZWQgdG8gZ2V0ICVzLlxuIiwgbXB1cmF0ZV9ja19uYW1lKSkKIAkJ cmV0dXJuIC1FTk9FTlQ7CiAKLQlyID0gY2xrX3NldF9yYXRlKG1wdXJhdGVfY2ssIG1wdXJhdGUp OworCXIgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUobXB1cmF0ZV9jaywgbXB1cmF0ZSk7CiAJaWYg KHIgPCAwKSB7CiAJCVdBUk4oMSwgImNsb2NrOiAlczogdW5hYmxlIHRvIHNldCBNUFUgcmF0ZSB0 byAlZDogJWRcbiIsCiAJCSAgICAgbXB1cmF0ZV9ja19uYW1lLCBtcHVyYXRlLCByKTsKLQkJY2xr X3B1dChtcHVyYXRlX2NrKTsKKwkJX19jbGtfcHV0KG1wdXJhdGVfY2spOwogCQlyZXR1cm4gLUVJ TlZBTDsKIAl9CiAKIAljYWxpYnJhdGVfZGVsYXkoKTsKLQljbGtfcHV0KG1wdXJhdGVfY2spOwor CV9fY2xrX3B1dChtcHVyYXRlX2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzAwLDI3ICs3MDAs MjcgQEAgdm9pZCBfX2luaXQgb21hcDJfY2xrX3ByaW50X25ld19yYXRlcyhjb25zdCBjaGFyICpo ZmNsa2luX2NrX25hbWUsCiAJCQkJICAgICAgY29uc3QgY2hhciAqY29yZV9ja19uYW1lLAogCQkJ CSAgICAgIGNvbnN0IGNoYXIgKm1wdV9ja19uYW1lKQogewotCXN0cnVjdCBjbGsgKmhmY2xraW5f Y2ssICpjb3JlX2NrLCAqbXB1X2NrOworCXN0cnVjdCBjbGtfY29yZSAqaGZjbGtpbl9jaywgKmNv cmVfY2ssICptcHVfY2s7CiAJdW5zaWduZWQgbG9uZyBoZmNsa2luX3JhdGU7CiAKLQltcHVfY2sg PSBjbGtfZ2V0KE5VTEwsIG1wdV9ja19uYW1lKTsKKwltcHVfY2sgPSBjbGtfcHJvdmlkZXJfZ2V0 KE5VTEwsIG1wdV9ja19uYW1lKTsKIAlpZiAoV0FSTihJU19FUlIobXB1X2NrKSwgImNsb2NrOiBm YWlsZWQgdG8gZ2V0ICVzLlxuIiwgbXB1X2NrX25hbWUpKQogCQlyZXR1cm47CiAKLQljb3JlX2Nr ID0gY2xrX2dldChOVUxMLCBjb3JlX2NrX25hbWUpOworCWNvcmVfY2sgPSBjbGtfcHJvdmlkZXJf Z2V0KE5VTEwsIGNvcmVfY2tfbmFtZSk7CiAJaWYgKFdBUk4oSVNfRVJSKGNvcmVfY2spLCAiY2xv Y2s6IGZhaWxlZCB0byBnZXQgJXMuXG4iLCBjb3JlX2NrX25hbWUpKQogCQlyZXR1cm47CiAKLQlo ZmNsa2luX2NrID0gY2xrX2dldChOVUxMLCBoZmNsa2luX2NrX25hbWUpOworCWhmY2xraW5fY2sg PSBjbGtfcHJvdmlkZXJfZ2V0KE5VTEwsIGhmY2xraW5fY2tfbmFtZSk7CiAJaWYgKFdBUk4oSVNf RVJSKGhmY2xraW5fY2spLCAiRmFpbGVkIHRvIGdldCAlcy5cbiIsIGhmY2xraW5fY2tfbmFtZSkp CiAJCXJldHVybjsKIAotCWhmY2xraW5fcmF0ZSA9IGNsa19nZXRfcmF0ZShoZmNsa2luX2NrKTsK KwloZmNsa2luX3JhdGUgPSBjbGtfcHJvdmlkZXJfZ2V0X3JhdGUoaGZjbGtpbl9jayk7CiAKIAlw cl9pbmZvKCJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9Db3JlL01QVSk6 ICVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKIAkJKGhmY2xraW5fcmF0ZSAvIDEwMDAwMDApLCAo KGhmY2xraW5fcmF0ZSAvIDEwMDAwMCkgJSAxMCksCi0JCShjbGtfZ2V0X3JhdGUoY29yZV9jaykg LyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZShtcHVfY2spIC8gMTAwMDAwMCkpOworCQkoY2xr X3Byb3ZpZGVyX2dldF9yYXRlKGNvcmVfY2spIC8gMTAwMDAwMCksCisJCShjbGtfcHJvdmlkZXJf Z2V0X3JhdGUobXB1X2NrKSAvIDEwMDAwMDApKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNo L2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5k ZXggNDU5MmEyNy4uNzA2ODY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9j ay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtNDAsNyArNDAsNyBAQCBz dHJ1Y3Qgb21hcF9jbGsgewogc3RydWN0IGNsb2NrZG9tYWluOwogCiAjZGVmaW5lIERFRklORV9T VFJVQ1RfQ0xLKF9uYW1lLCBfcGFyZW50X2FycmF5X25hbWUsIF9jbGtvcHNfbmFtZSkJXAotCXN0 YXRpYyBzdHJ1Y3QgY2xrIF9uYW1lID0gewkJCQlcCisJc3RhdGljIHN0cnVjdCBjbGtfY29yZSBf bmFtZSA9IHsJCQkJXAogCQkubmFtZSA9ICNfbmFtZSwJCQkJCVwKIAkJLmh3ID0gJl9uYW1lIyNf aHcuaHcsCQkJCVwKIAkJLnBhcmVudF9uYW1lcyA9IF9wYXJlbnRfYXJyYXlfbmFtZSwJCVwKQEAg LTUwLDcgKzUwLDcgQEAgc3RydWN0IGNsb2NrZG9tYWluOwogCiAjZGVmaW5lIERFRklORV9TVFJV Q1RfQ0xLX0ZMQUdTKF9uYW1lLCBfcGFyZW50X2FycmF5X25hbWUsCVwKIAkJCQlfY2xrb3BzX25h bWUsIF9mbGFncykJCVwKLQlzdGF0aWMgc3RydWN0IGNsayBfbmFtZSA9IHsJCQkJXAorCXN0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgX25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgPSAjX25hbWUsCQkJCQlc CiAJCS5odyA9ICZfbmFtZSMjX2h3Lmh3LAkJCQlcCiAJCS5wYXJlbnRfbmFtZXMgPSBfcGFyZW50 X2FycmF5X25hbWUsCQlcCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBjbG9ja2RvbWFpbjsKICNk ZWZpbmUgREVGSU5FX0NMS19PTUFQX01VWChfbmFtZSwgX2Nsa2RtX25hbWUsIF9jbGtzZWwsCVwK IAkJCSAgICBfY2xrc2VsX3JlZywgX2Nsa3NlbF9tYXNrLAkJXAogCQkJICAgIF9wYXJlbnRfbmFt ZXMsIF9vcHMpCQlcCi0Jc3RhdGljIHN0cnVjdCBjbGsgX25hbWU7CQkJCVwKKwlzdGF0aWMgc3Ry dWN0IGNsa19jb3JlIF9uYW1lOwkJCQlcCiAJc3RhdGljIHN0cnVjdCBjbGtfaHdfb21hcCBfbmFt ZSMjX2h3ID0gewkJXAogCQkuaHcgPSB7CQkJCQkJXAogCQkJLmNsayA9ICZfbmFtZSwJCQkJXApA QCAtODYsNyArODYsNyBAQCBzdHJ1Y3QgY2xvY2tkb21haW47CiAJCQkJIF9jbGtzZWxfcmVnLCBf Y2xrc2VsX21hc2ssCVwKIAkJCQkgX2VuYWJsZV9yZWcsIF9lbmFibGVfYml0LAlcCiAJCQkJIF9o d29wcywgX3BhcmVudF9uYW1lcywgX29wcykJXAotCXN0YXRpYyBzdHJ1Y3QgY2xrIF9uYW1lOwkJ CQlcCisJc3RhdGljIHN0cnVjdCBjbGtfY29yZSBfbmFtZTsJCQkJXAogCXN0YXRpYyBzdHJ1Y3Qg Y2xrX2h3X29tYXAgX25hbWUjI19odyA9IHsJCVwKIAkJLmh3ID0gewkJCQkJCVwKIAkJCS5jbGsg PSAmX25hbWUsCQkJCVwKQEAgLTE0MiwxNCArMTQyLDE0IEBAIHN0cnVjdCBjbGtzZWxfcmF0ZSB7 CiAKIC8qKgogICogc3RydWN0IGNsa3NlbCAtIGF2YWlsYWJsZSBwYXJlbnQgY2xvY2tzLCBhbmQg YSBwb2ludGVyIHRvIHRoZWlyIGRpdmlzb3JzCi0gKiBAcGFyZW50OiBzdHJ1Y3QgY2xrICogdG8g YSBwb3NzaWJsZSBwYXJlbnQgY2xvY2sKKyAqIEBwYXJlbnQ6IHN0cnVjdCBjbGtfY29yZSAqIHRv IGEgcG9zc2libGUgcGFyZW50IGNsb2NrCiAgKiBAcmF0ZXM6IGF2YWlsYWJsZSBkaXZpc29ycyBm b3IgdGhpcyBwYXJlbnQgY2xvY2sKICAqCiAgKiBBIHN0cnVjdCBjbGtzZWwgaXMgYWx3YXlzIGFz c29jaWF0ZWQgd2l0aCBvbmUgb3IgbW9yZSBzdHJ1Y3QgY2xrcwogICogYW5kIG9uZSBvciBtb3Jl IHN0cnVjdCBjbGtzZWxfcmF0ZXMuCiAgKi8KIHN0cnVjdCBjbGtzZWwgewotCXN0cnVjdCBjbGsJ CSAqcGFyZW50OworCXN0cnVjdCBjbGtfY29yZQkJICpwYXJlbnQ7CiAJY29uc3Qgc3RydWN0IGNs a3NlbF9yYXRlICpyYXRlczsKIH07CiAKQEAgLTIwOCw4ICsyMDgsOCBAQCB2b2lkIG9tYXAyX2Ns a19kZmx0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGtfaHdfb21hcCAqY2xrLAogCQkJCXZvaWQgX19p b21lbSAqKmlkbGVzdF9yZWcsCiAJCQkJdTggKmlkbGVzdF9iaXQsIHU4ICppZGxlc3RfdmFsKTsK IGludCBvbWFwMl9jbGtfZW5hYmxlX2F1dG9pZGxlX2FsbCh2b2lkKTsKLWludCBvbWFwMl9jbGtf YWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotaW50IG9tYXAyX2Nsa19kZW55X2lkbGUoc3Ry dWN0IGNsayAqY2xrKTsKK2ludCBvbWFwMl9jbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrX2NvcmUg KmNsayk7CitpbnQgb21hcDJfY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrX2NvcmUgKmNsayk7CiBp bnQgb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoY29uc3QgY2hhciAqbXB1cmF0ZV9j a19uYW1lKTsKIHZvaWQgb21hcDJfY2xrX3ByaW50X25ld19yYXRlcyhjb25zdCBjaGFyICpoZmNs a2luX2NrX25hbWUsCiAJCQkgICAgICAgY29uc3QgY2hhciAqY29yZV9ja19uYW1lLApAQCAtMjQ3 LDcgKzI0Nyw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ3B0XzMya19yYXRl c1tdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfc3lzX3JhdGVzW107CiBl eHRlcm4gY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdmeF9sM19yYXRlc1tdOwogZXh0ZXJuIGNv bnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfaWNrX3JhdGVzW107Ci1leHRlcm4gc3RydWN0IGNs ayBkdW1teV9jazsKK2V4dGVybiBzdHJ1Y3QgY2xrX2NvcmUgZHVtbXlfY2s7CiAKIGV4dGVybiBj b25zdCBzdHJ1Y3QgY2xrX2h3X29tYXBfb3BzIGNsa2h3b3BzX2ljbGtfd2FpdDsKIGV4dGVybiBj b25zdCBzdHJ1Y3QgY2xrX2h3X29tYXBfb3BzIGNsa2h3b3BzX3dhaXQ7CmRpZmYgLS1naXQgYS9h cmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9j azN4eHguYwppbmRleCAwYjAyYjQxLi44ZDFiODQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNo LW9tYXAyL2Nsb2NrM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMK QEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUg PGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgv aW8uaD4KIAogI2luY2x1ZGUgInNvYy5oIgpAQCAtMzcsNyArMzYsNyBAQAogI2RlZmluZSBEUExM NV9GUkVRX0ZPUl9VU0JIT1NUCQkxMjAwMDAwMDAKIAogLyogbmVlZGVkIGJ5IG9tYXAzX2NvcmVf ZHBsbF9tMl9zZXRfcmF0ZSgpICovCi1zdHJ1Y3QgY2xrICpzZHJjX2lja19wLCAqYXJtX2Zja19w Oworc3RydWN0IGNsa19jb3JlICpzZHJjX2lja19wLCAqYXJtX2Zja19wOwogaW50IG9tYXAzX2Rw bGw0X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJ dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKIHsKQEAgLTU2LDIwICs1NSwyMCBAQCBpbnQgb21h cDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK IAogdm9pZCBfX2luaXQgb21hcDNfY2xrX2xvY2tfZHBsbDUodm9pZCkKIHsKLQlzdHJ1Y3QgY2xr ICpkcGxsNV9jbGs7Ci0Jc3RydWN0IGNsayAqZHBsbDVfbTJfY2xrOworCXN0cnVjdCBjbGtfY29y ZSAqZHBsbDVfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqZHBsbDVfbTJfY2xrOwogCi0JZHBsbDVf Y2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfY2siKTsKLQljbGtfc2V0X3JhdGUoZHBsbDVfY2xr LCBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoZHBsbDVfY2xr KTsKKwlkcGxsNV9jbGsgPSBjbGtfcHJvdmlkZXJfZ2V0KE5VTEwsICJkcGxsNV9jayIpOworCWNs a19wcm92aWRlcl9zZXRfcmF0ZShkcGxsNV9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOwor CWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShkcGxsNV9jbGspOwogCiAJLyogUHJvZ3JhbSBk cGxsNV9tMl9jbGsgZGl2aWRlciBmb3Igbm8gZGl2aXNpb24gKi8KLQlkcGxsNV9tMl9jbGsgPSBj bGtfZ2V0KE5VTEwsICJkcGxsNV9tMl9jayIpOwotCWNsa19wcmVwYXJlX2VuYWJsZShkcGxsNV9t Ml9jbGspOwotCWNsa19zZXRfcmF0ZShkcGxsNV9tMl9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhP U1QpOworCWRwbGw1X20yX2NsayA9IGNsa19wcm92aWRlcl9nZXQoTlVMTCwgImRwbGw1X20yX2Nr Iik7CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGRwbGw1X20yX2Nsayk7CisJY2xrX3By b3ZpZGVyX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CiAK LQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBsbDVfbTJfY2xrKTsKLQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHBsbDVfY2xrKTsKKwljbGtfcHJvdmlkZXJfZGlzYWJsZV91bnByZXBhcmUoZHBsbDVf bTJfY2xrKTsKKwljbGtfcHJvdmlkZXJfZGlzYWJsZV91bnByZXBhcmUoZHBsbDVfY2xrKTsKIAly ZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4Lmgg Yi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5oCmluZGV4IDc4ZDlmNTYuLjA2M2ZiZjEg MTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmgKKysrIGIvYXJjaC9h cm0vbWFjaC1vbWFwMi9jbG9jazN4eHguaApAQCAtMTIsOCArMTIsOCBAQCBpbnQgb21hcDN4eHhf Y2xrX2luaXQodm9pZCk7CiBpbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBj bGtfaHcgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVu dF9yYXRlKTsKIAotZXh0ZXJuIHN0cnVjdCBjbGsgKnNkcmNfaWNrX3A7Ci1leHRlcm4gc3RydWN0 IGNsayAqYXJtX2Zja19wOworZXh0ZXJuIHN0cnVjdCBjbGtfY29yZSAqc2RyY19pY2tfcDsKK2V4 dGVybiBzdHJ1Y3QgY2xrX2NvcmUgKmFybV9mY2tfcDsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBj bGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21h Y2gtb21hcDIvY2xvY2tfY29tbW9uX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tf Y29tbW9uX2RhdGEuYwppbmRleCBlZjRkMjFiLi4zMWUzZTc5IDEwMDY0NAotLS0gYS9hcmNoL2Fy bS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFw Mi9jbG9ja19jb21tb25fZGF0YS5jCkBAIC0xMTksNyArMTE5LDcgQEAgY29uc3Qgc3RydWN0IGNs a3NlbF9yYXRlIGRpdjMxXzF0bzMxX3JhdGVzW10gPSB7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29w cyBkdW1teV9ja19vcHMgPSB7fTsKIAotc3RydWN0IGNsayBkdW1teV9jayA9IHsKK3N0cnVjdCBj bGtfY29yZSBkdW1teV9jayA9IHsKIAkubmFtZSA9ICJkdW1teV9jbGsiLAogCS5vcHMgPSAmZHVt bXlfY2tfb3BzLAogCS5mbGFncyA9IENMS19JU19CQVNJQywKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21h aW4uYwppbmRleCAyZGEzYjVlLi5kZDg5MDk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9t YXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5j CkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5o PgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgpAQCAtMTE0MSw3ICsxMTQwLDcgQEAg c3RhdGljIGludCBfY2xrZG1fY2xrX2h3bW9kX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNs a2RtKQogLyoqCiAgKiBjbGtkbV9jbGtfZW5hYmxlIC0gYWRkIGFuIGVuYWJsZWQgZG93bnN0cmVh bSBjbG9jayB0byB0aGlzIGNsa2RtCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0g KiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jaworICog QGNsazogc3RydWN0IGNsa19jb3JlICogb2YgdGhlIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jawog ICoKICAqIEluY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBh bmQgZW5zdXJlIHRoYXQgaXQKICAqIGlzIGF3YWtlIGJlZm9yZSBAY2xrIGlzIGVuYWJsZWQuICBJ bnRlbmRlZCB0byBiZSBjYWxsZWQgYnkKQEAgLTExNTIsNyArMTE1MSw3IEBAIHN0YXRpYyBpbnQg X2Nsa2RtX2Nsa19od21vZF9lbmFibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKICAqIGJ5 IG9uLWNoaXAgcHJvY2Vzc29ycy4gIFJldHVybnMgLUVJTlZBTCBpZiBwYXNzZWQgbnVsbCBwb2lu dGVyczsKICAqIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IgaWYgdGhlIGNsb2NrZG9tYWluIGlz IGluIGh3c3VwIGlkbGUgbW9kZS4KICAqLwotaW50IGNsa2RtX2Nsa19lbmFibGUoc3RydWN0IGNs b2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKQoraW50IGNsa2RtX2Nsa19lbmFibGUo c3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsa19jb3JlICpjbGspCiB7CiAJLyoK IAkgKiBYWFggUmV3cml0ZSB0aGlzIGNvZGUgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGVuYWJsZWQK QEAgLTExNjgsNyArMTE2Nyw3IEBAIGludCBjbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2Rv bWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKIC8qKgogICogY2xrZG1fY2xrX2Rpc2FibGUg LSByZW1vdmUgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIGZyb20gdGhpcyBjbGtkbQogICog QGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRo ZSBkaXNhYmxlZCBkb3duc3RyZWFtIGNsb2NrCisgKiBAY2xrOiBzdHJ1Y3QgY2xrX2NvcmUgKiBv ZiB0aGUgZGlzYWJsZWQgZG93bnN0cmVhbSBjbG9jawogICoKICAqIERlY3JlbWVudCB0aGUgdXNl Y291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiBAY2xrZG0gd2hlbiBAY2xrIGlzCiAgKiBkaXNhYmxl ZC4gIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjbGtfZGlzYWJsZSgpIGNvZGUuICBJZiB0aGUK QEAgLTExNzgsNyArMTE3Nyw3IEBAIGludCBjbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2Rv bWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKICAqIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRo ZSBAY2xrZG0gdXNlY291bnQgdW5kZXJmbG93czsgb3IgcmV0dXJucyAwCiAgKiB1cG9uIHN1Y2Nl c3Mgb3IgaWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGh3c3VwIGlkbGUgbW9kZS4KICAqLwotaW50 IGNsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsg KmNsaykKK2ludCBjbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBz dHJ1Y3QgY2xrX2NvcmUgKmNsaykKIHsKIAlpZiAoIWNsa2RtIHx8ICFjbGsgfHwgIWFyY2hfY2xr ZG0gfHwgIWFyY2hfY2xrZG0tPmNsa2RtX2Nsa19kaXNhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsK ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJt L21hY2gtb21hcDIvY2xvY2tkb21haW4uaAppbmRleCA4MmMzN2IxLi5mMWEyY2FkIDEwMDY0NAot LS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9jbG9ja2RvbWFpbi5oCkBAIC0yMDcsOCArMjA3LDggQEAgaW50IGNsa2RtX3dha2V1 cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIGludCBjbGtkbV9zbGVlcF9ub2xvY2soc3Ry dWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CiBpbnQgY2xrZG1fc2xlZXAoc3RydWN0IGNsb2NrZG9t YWluICpjbGtkbSk7CiAKLWludCBjbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAq Y2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7Ci1pbnQgY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNs b2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKTsKK2ludCBjbGtkbV9jbGtfZW5hYmxl KHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGtfY29yZSAqY2xrKTsKK2ludCBj bGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrX2Nv cmUgKmNsayk7CiBpbnQgY2xrZG1faHdtb2RfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xr ZG0sIHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiBpbnQgY2xrZG1faHdtb2RfZGlzYWJsZShzdHJ1 Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCmRpZmYgLS1n aXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Rpc3BsYXkuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIv ZGlzcGxheS5jCmluZGV4IDBmOWU0NzkuLmZmMWY2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21h Y2gtb21hcDIvZGlzcGxheS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGlzcGxheS5jCkBA IC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGlu dXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTUyNCw3ICs1MjMsNyBAQCBp bnQgb21hcF9kc3NfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogCiAJZm9yIChpID0gb2gt Pm9wdF9jbGtzX2NudCwgb2MgPSBvaC0+b3B0X2Nsa3M7IGkgPiAwOyBpLS0sIG9jKyspCiAJCWlm IChvYy0+X2NsaykKLQkJCWNsa19wcmVwYXJlX2VuYWJsZShvYy0+X2Nsayk7CisJCQljbGtfcHJv dmlkZXJfcHJlcGFyZV9lbmFibGUob2MtPl9jbGspOwogCiAJZGlzcGNfZGlzYWJsZV9vdXRwdXRz KCk7CiAKQEAgLTU1MSw3ICs1NTAsNyBAQCBpbnQgb21hcF9kc3NfcmVzZXQoc3RydWN0IG9tYXBf aHdtb2QgKm9oKQogCiAJZm9yIChpID0gb2gtPm9wdF9jbGtzX2NudCwgb2MgPSBvaC0+b3B0X2Ns a3M7IGkgPiAwOyBpLS0sIG9jKyspCiAJCWlmIChvYy0+X2NsaykKLQkJCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShvYy0+X2Nsayk7CisJCQljbGtfcHJvdmlkZXJfZGlzYWJsZV91bnByZXBhcmUob2Mt Pl9jbGspOwogCiAJciA9IChjID09IE1BWF9NT0RVTEVfU09GVFJFU0VUX1dBSVQpID8gLUVUSU1F RE9VVCA6IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYyBi L2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYwppbmRleCBhYzNkNzg5Li4zOWMzODYxIDEw MDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKKysrIGIvYXJjaC9hcm0v bWFjaC1vbWFwMi9kcGxsM3h4eC5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgv bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1 ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgpAQCAtMjg4LDcg KzI4Nyw3IEBAIHN0YXRpYyB2b2lkIF9sb29rdXBfc2RkaXYoc3RydWN0IGNsa19od19vbWFwICpj bGssIHU4ICpzZF9kaXYsIHUxNiBtLCB1OCBuKQogCiAvKgogICogX29tYXAzX25vbmNvcmVfZHBs bF9wcm9ncmFtIC0gc2V0IG5vbi1jb3JlIERQTEwgTSxOIHZhbHVlcyBkaXJlY3RseQotICogQGNs azoJc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0CisgKiBAY2xrOglzdHJ1Y3QgY2xrX2NvcmUg KiBvZiBEUExMIHRvIHNldAogICogQGZyZXFzZWw6CUZSRVFTRUwgdmFsdWUgdG8gc2V0CiAgKgog ICogUHJvZ3JhbSB0aGUgRFBMTCB3aXRoIHRoZSBsYXN0IE0sIE4gdmFsdWVzIGNhbGN1bGF0ZWQs IGFuZCB3YWl0IGZvcgpAQCAtNDEwLDcgKzQwOSw3IEBAIGludCBvbWFwM19ub25jb3JlX2RwbGxf ZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQogCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrID0gdG9f Y2xrX2h3X29tYXAoaHcpOwogCWludCByOwogCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXN0cnVj dCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVudDsKIAogCWRkID0gY2xrLT5k cGxsX2RhdGE7CiAJaWYgKCFkZCkKQEAgLTQ2MSw3ICs0NjAsNyBAQCB2b2lkIG9tYXAzX25vbmNv cmVfZHBsbF9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQogCiAvKioKICAqIG9tYXAzX25vbmNv cmVfZHBsbF9zZXRfcmF0ZSAtIHNldCBub24tY29yZSBEUExMIHJhdGUKLSAqIEBjbGs6IHN0cnVj dCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQGNsazogc3RydWN0IGNsa19jb3JlICogb2YgRFBM TCB0byBzZXQKICAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCiAgKgogICogU2V0IHRoZSBE UExMIENMS09VVCB0byB0aGUgdGFyZ2V0IHJhdGUuICBJZiB0aGUgRFBMTCBjYW4gZW50ZXIKQEAg LTQ3NCw3ICs0NzMsNyBAQCBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCiB7CiAJc3RydWN0IGNsa19od19vbWFwICpjbGsgPSB0b19jbGtfaHdfb21hcChodyk7 Ci0Jc3RydWN0IGNsayAqbmV3X3BhcmVudCA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpuZXdf cGFyZW50ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIHJyYXRlOwogCXUxNiBmcmVxc2VsID0gMDsK IAlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKQEAgLTQ5MywxNSArNDkyLDE1IEBAIGludCBvbWFwM19u b25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0 ZSwKIAkJCSBfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNsaykpOwogCiAJCV9fY2xrX3By ZXBhcmUoZGQtPmNsa19ieXBhc3MpOwotCQljbGtfZW5hYmxlKGRkLT5jbGtfYnlwYXNzKTsKKwkJ Y2xrX3Byb3ZpZGVyX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7CiAJCXJldCA9IF9vbWFwM19ub25j b3JlX2RwbGxfYnlwYXNzKGNsayk7CiAJCWlmICghcmV0KQogCQkJbmV3X3BhcmVudCA9IGRkLT5j bGtfYnlwYXNzOwotCQljbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7CisJCWNsa19wcm92aWRl cl9kaXNhYmxlKGRkLT5jbGtfYnlwYXNzKTsKIAkJX19jbGtfdW5wcmVwYXJlKGRkLT5jbGtfYnlw YXNzKTsKIAl9IGVsc2UgewogCQlfX2Nsa19wcmVwYXJlKGRkLT5jbGtfcmVmKTsKLQkJY2xrX2Vu YWJsZShkZC0+Y2xrX3JlZik7CisJCWNsa19wcm92aWRlcl9lbmFibGUoZGQtPmNsa19yZWYpOwog CiAJCS8qIFhYWCB0aGlzIGNoZWNrIGlzIHByb2JhYmx5IHBvaW50bGVzcyBpbiB0aGUgQ0NGIGNv bnRleHQgKi8KIAkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSAhPSByYXRlKSB7CkBAIC01MzAs NyArNTI5LDcgQEAgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJv Z3JhbShjbGssIGZyZXFzZWwpOwogCQlpZiAoIXJldCkKIAkJCW5ld19wYXJlbnQgPSBkZC0+Y2xr X3JlZjsKLQkJY2xrX2Rpc2FibGUoZGQtPmNsa19yZWYpOworCQljbGtfcHJvdmlkZXJfZGlzYWJs ZShkZC0+Y2xrX3JlZik7CiAJCV9fY2xrX3VucHJlcGFyZShkZC0+Y2xrX3JlZik7CiAJfQogCS8q CkBAIC01NDAsNyArNTM5LDcgQEAgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCSogc3R1ZmYgaXMgaW5oZXJpdGVk IGZvciBmcmVlCiAJKi8KIAotCWlmICghcmV0ICYmIGNsa19nZXRfcGFyZW50KGh3LT5jbGspICE9 IG5ld19wYXJlbnQpCisJaWYgKCFyZXQgJiYgY2xrX3Byb3ZpZGVyX2dldF9wYXJlbnQoaHctPmNs aykgIT0gbmV3X3BhcmVudCkKIAkJX19jbGtfcmVwYXJlbnQoaHctPmNsaywgbmV3X3BhcmVudCk7 CiAKIAlyZXR1cm4gMDsKQEAgLTU1MCwxMCArNTQ5LDEwIEBAIGludCBvbWFwM19ub25jb3JlX2Rw bGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAogLyoq CiAgKiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQgLSByZWFkIGEgRFBMTCdzIGF1dG9pZGxlIGJp dHMKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byByZWFkCisgKiBAY2xrOiBz dHJ1Y3QgY2xrX2NvcmUgKiBvZiB0aGUgRFBMTCB0byByZWFkCiAgKgogICogUmV0dXJuIHRoZSBE UExMJ3MgYXV0b2lkbGUgYml0cywgc2hpZnRlZCBkb3duIHRvIGJpdCAwLiAgUmV0dXJucwotICog LUVJTlZBTCBpZiBwYXNzZWQgYSBudWxsIHBvaW50ZXIgb3IgaWYgdGhlIHN0cnVjdCBjbGsgZG9l cyBub3QKKyAqIC1FSU5WQUwgaWYgcGFzc2VkIGEgbnVsbCBwb2ludGVyIG9yIGlmIHRoZSBzdHJ1 Y3QgY2xrX2NvcmUgZG9lcyBub3QKICAqIGFwcGVhciB0byByZWZlciB0byBhIERQTEwuCiAgKi8K IHUzMiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoc3RydWN0IGNsa19od19vbWFwICpjbGspCkBA IC01NzgsNyArNTc3LDcgQEAgdTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xr X2h3X29tYXAgKmNsaykKIAogLyoqCiAgKiBvbWFwM19kcGxsX2FsbG93X2lkbGUgLSBlbmFibGUg RFBMTCBhdXRvaWRsZSBiaXRzCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8g b3BlcmF0ZSBvbgorICogQGNsazogc3RydWN0IGNsa19jb3JlICogb2YgdGhlIERQTEwgdG8gb3Bl cmF0ZSBvbgogICoKICAqIEVuYWJsZSBEUExMIGF1dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBUaGlz IGF1dG9tYXRpYyBpZGxlIG1vZGUKICAqIHN3aXRjaGluZyB0YWtlcyBlZmZlY3Qgb25seSB3aGVu IHRoZSBEUExMIGlzIGxvY2tlZCwgYXQgbGVhc3Qgb24KQEAgLTYxMiw3ICs2MTEsNyBAQCB2b2lk IG9tYXAzX2RwbGxfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsaykKIAogLyoqCiAg KiBvbWFwM19kcGxsX2RlbnlfaWRsZSAtIHByZXZlbnQgRFBMTCBmcm9tIGF1dG9tYXRpY2FsbHkg aWRsaW5nCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgor ICogQGNsazogc3RydWN0IGNsa19jb3JlICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgogICoK ICAqIERpc2FibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgTm8gcmV0dXJuIHZhbHVl LgogICovCkBAIC02NDIsNyArNjQxLDcgQEAgdm9pZCBvbWFwM19kcGxsX2RlbnlfaWRsZShzdHJ1 Y3QgY2xrX2h3X29tYXAgKmNsaykKIHN0YXRpYyBzdHJ1Y3QgY2xrX2h3X29tYXAgKm9tYXAzX2Zp bmRfY2xrb3V0eDJfZHBsbChzdHJ1Y3QgY2xrX2h3ICpodykKIHsKIAlzdHJ1Y3QgY2xrX2h3X29t YXAgKnBjbGsgPSBOVUxMOwotCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX2NvcmUg KnBhcmVudDsKIAogCS8qIFdhbGsgdXAgdGhlIHBhcmVudHMgb2YgY2xrLCBsb29raW5nIGZvciBh IERQTEwgKi8KIAlkbyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4 LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMKaW5kZXggNDYxM2YxZS4uNzI2YjI1 NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsNDR4eC5jCisrKyBiL2FyY2gv YXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYwpAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5o PgogCkBAIC0xMjQsNyArMTIzLDcgQEAgc3RhdGljIHZvaWQgb21hcDRfZHBsbF9scG1vZGVfcmVj YWxjKHN0cnVjdCBkcGxsX2RhdGEgKmRkKQogCiAvKioKICAqIG9tYXA0X2RwbGxfcmVnbTR4ZW5f cmVjYWxjIC0gY29tcHV0ZSBEUExMIHJhdGUsIGNvbnNpZGVyaW5nIFJFR000WEVOIGJpdAotICog QGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIGNvbXB1dGUgdGhlIHJhdGUgZm9yCisg KiBAY2xrOiBzdHJ1Y3QgY2xrX2NvcmUgKiBvZiB0aGUgRFBMTCB0byBjb21wdXRlIHRoZSByYXRl IGZvcgogICoKICAqIENvbXB1dGUgdGhlIG91dHB1dCByYXRlIGZvciB0aGUgT01BUDQgRFBMTCBy ZXByZXNlbnRlZCBieSBAY2xrLgogICogVGFrZXMgdGhlIFJFR000WEVOIGJpdCBpbnRvIGNvbnNp ZGVyYXRpb24sIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlCkBAIC0xNTYsNyArMTU1LDcgQEAgdW5z aWduZWQgbG9uZyBvbWFwNF9kcGxsX3JlZ200eGVuX3JlY2FsYyhzdHJ1Y3QgY2xrX2h3ICpodywK IAogLyoqCiAgKiBvbWFwNF9kcGxsX3JlZ200eGVuX3JvdW5kX3JhdGUgLSByb3VuZCBEUExMIHJh dGUsIGNvbnNpZGVyaW5nIFJFR000WEVOIGJpdAotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRo ZSBEUExMIHRvIHJvdW5kIGEgcmF0ZSBmb3IKKyAqIEBjbGs6IHN0cnVjdCBjbGtfY29yZSAqIG9m IHRoZSBEUExMIHRvIHJvdW5kIGEgcmF0ZSBmb3IKICAqIEB0YXJnZXRfcmF0ZTogdGhlIGRlc2ly ZWQgcmF0ZSBvZiB0aGUgRFBMTAogICoKICAqIENvbXB1dGUgdGhlIHJhdGUgdGhhdCB3b3VsZCBi ZSBwcm9ncmFtbWVkIGludG8gdGhlIERQTEwgaGFyZHdhcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L21hY2gtb21hcDIvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwppbmRleCBi NGFjM2FmLi4xNDI0YzkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMK KysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKi8K ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5j bHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGlu dXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtMzQsNyArMzMsNyBAQAogI2luY2x1 ZGUgImNtM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCi1zdGF0aWMgc3Ry dWN0IGNsayAqbWNic3BfaWNsa3NbNV07CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICptY2JzcF9p Y2xrc1s1XTsKIAogc3RhdGljIGludCBvbWFwM19lbmFibGVfc3RfY2xvY2sodW5zaWduZWQgaW50 IGlkLCBib29sIGVuYWJsZSkKIHsKQEAgLTk4LDcgKzk3LDcgQEAgc3RhdGljIGludCBfX2luaXQg b21hcF9pbml0X21jYnNwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqdW51c2VkKQogCQko c3RydWN0IG9tYXBfbWNic3BfZGV2X2F0dHIgKikob2gtPmRldl9hdHRyKSktPnNpZGV0b25lKTsK IAkJcGRhdGEtPmVuYWJsZV9zdF9jbG9jayA9IG9tYXAzX2VuYWJsZV9zdF9jbG9jazsKIAkJc3By aW50ZihjbGtfbmFtZSwgIm1jYnNwJWRfaWNrIiwgaWQpOwotCQltY2JzcF9pY2xrc1tpZF0gPSBj bGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKwkJbWNic3BfaWNsa3NbaWRdID0gY2xrX3Byb3ZpZGVy X2dldChOVUxMLCBjbGtfbmFtZSk7CiAJCWNvdW50Kys7CiAJfQogCXBkZXYgPSBvbWFwX2Rldmlj ZV9idWlsZF9zcyhuYW1lLCBpZCwgb2hfZGV2aWNlLCBjb3VudCwgcGRhdGEsCmRpZmYgLS1naXQg YS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAy L29tYXBfZGV2aWNlLmMKaW5kZXggZjEzOGE2Mi4uYzUzODZhNCAxMDA2NDQKLS0tIGEvYXJjaC9h cm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21h cF9kZXZpY2UuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNp bmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KQEAgLTQ3LDcgKzQ2 LDcgQEAKIHN0YXRpYyB2b2lkIF9hZGRfY2xrZGV2KHN0cnVjdCBvbWFwX2RldmljZSAqb2QsIGNv bnN0IGNoYXIgKmNsa19hbGlhcywKIAkJICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lKQogewot CXN0cnVjdCBjbGsgKnI7CisJc3RydWN0IGNsa19jb3JlICpyOwogCXN0cnVjdCBjbGtfbG9va3Vw ICpsOwogCiAJaWYgKCFjbGtfYWxpYXMgfHwgIWNsa19uYW1lKQpAQCAtNTUsMTUgKzU0LDE1IEBA IHN0YXRpYyB2b2lkIF9hZGRfY2xrZGV2KHN0cnVjdCBvbWFwX2RldmljZSAqb2QsIGNvbnN0IGNo YXIgKmNsa19hbGlhcywKIAogCWRldl9kYmcoJm9kLT5wZGV2LT5kZXYsICJDcmVhdGluZyAlcyAt PiAlc1xuIiwgY2xrX2FsaWFzLCBjbGtfbmFtZSk7CiAKLQlyID0gY2xrX2dldF9zeXMoZGV2X25h bWUoJm9kLT5wZGV2LT5kZXYpLCBjbGtfYWxpYXMpOworCXIgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5 cyhkZXZfbmFtZSgmb2QtPnBkZXYtPmRldiksIGNsa19hbGlhcyk7CiAJaWYgKCFJU19FUlIocikp IHsKIAkJZGV2X2RiZygmb2QtPnBkZXYtPmRldiwKIAkJCSAiYWxpYXMgJXMgYWxyZWFkeSBleGlz dHNcbiIsIGNsa19hbGlhcyk7Ci0JCWNsa19wdXQocik7CisJCV9fY2xrX3B1dChyKTsKIAkJcmV0 dXJuOwogCX0KIAotCXIgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKwlyID0gY2xrX3Byb3Zp ZGVyX2dldChOVUxMLCBjbGtfbmFtZSk7CiAJaWYgKElTX0VSUihyKSkgewogCQlkZXZfZXJyKCZv ZC0+cGRldi0+ZGV2LAogCQkJImNsa19nZXQgZm9yICVzIGZhaWxlZFxuIiwgY2xrX25hbWUpOwpk aWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9t YWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCA4ZmQ4N2EzLi5jNjFiMzkyIDEwMDY0NAotLS0g YS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9t YXAyL29tYXBfaHdtb2QuYwpAQCAtNzUzLDcgKzc1Myw3IEBAIHN0YXRpYyBpbnQgX2RlbF9pbml0 aWF0b3JfZGVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgc3RydWN0IG9tYXBfaHdtb2QgKmluaXRf b2gpCiB9CiAKIC8qKgotICogX2luaXRfbWFpbl9jbGsgLSBnZXQgYSBzdHJ1Y3QgY2xrICogZm9y IHRoZSB0aGUgaHdtb2QncyBtYWluIGZ1bmN0aW9uYWwgY2xrCisgKiBfaW5pdF9tYWluX2NsayAt IGdldCBhIHN0cnVjdCBjbGtfY29yZSAqIGZvciB0aGUgdGhlIGh3bW9kJ3MgbWFpbiBmdW5jdGlv bmFsIGNsawogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgogICogQ2FsbGVkIGZyb20g X2luaXRfY2xvY2tzKCkuICBQb3B1bGF0ZXMgdGhlIEBvaCBfY2xrIChtYWluCkBAIC03NjcsNyAr NzY3LDcgQEAgc3RhdGljIGludCBfaW5pdF9tYWluX2NsayhzdHJ1Y3Qgb21hcF9od21vZCAqb2gp CiAJaWYgKCFvaC0+bWFpbl9jbGspCiAJCXJldHVybiAwOwogCi0Jb2gtPl9jbGsgPSBjbGtfZ2V0 KE5VTEwsIG9oLT5tYWluX2Nsayk7CisJb2gtPl9jbGsgPSBjbGtfcHJvdmlkZXJfZ2V0KE5VTEws IG9oLT5tYWluX2Nsayk7CiAJaWYgKElTX0VSUihvaC0+X2NsaykpIHsKIAkJcHJfd2FybmluZygi b21hcF9od21vZDogJXM6IGNhbm5vdCBjbGtfZ2V0IG1haW5fY2xrICVzXG4iLAogCQkJICAgb2gt Pm5hbWUsIG9oLT5tYWluX2Nsayk7CkBAIC03ODEsNyArNzgxLDcgQEAgc3RhdGljIGludCBfaW5p dF9tYWluX2NsayhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiAJICogc29tZSBwb2ludCB3aGVyZSBz dWJzeXN0ZW1zIGxpa2UgaTJjIGFuZCBwbWljIGJlY29tZQogCSAqIGF2YWlsYWJsZS4KIAkgKi8K LQljbGtfcHJlcGFyZShvaC0+X2Nsayk7CisJY2xrX3Byb3ZpZGVyX3ByZXBhcmUob2gtPl9jbGsp OwogCiAJaWYgKCFfZ2V0X2Nsa2RtKG9oKSkKIAkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBt aXNzaW5nIGNsb2NrZG9tYWluIGZvciAlcy5cbiIsCkBAIC03OTEsNyArNzkxLDcgQEAgc3RhdGlj IGludCBfaW5pdF9tYWluX2NsayhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB9CiAKIC8qKgotICog X2luaXRfaW50ZXJmYWNlX2Nsa3MgLSBnZXQgYSBzdHJ1Y3QgY2xrICogZm9yIHRoZSB0aGUgaHdt b2QncyBpbnRlcmZhY2UgY2xrcworICogX2luaXRfaW50ZXJmYWNlX2Nsa3MgLSBnZXQgYSBzdHJ1 Y3QgY2xrX2NvcmUgKiBmb3IgdGhlIHRoZSBod21vZCdzIGludGVyZmFjZSBjbGtzCiAgKiBAb2g6 IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCiAgKiBDYWxsZWQgZnJvbSBfaW5pdF9jbG9ja3MoKS4g IFBvcHVsYXRlcyB0aGUgQG9oIE9DUCBzbGF2ZSBpbnRlcmZhY2UKQEAgLTgwMSw3ICs4MDEsNyBA QCBzdGF0aWMgaW50IF9pbml0X2ludGVyZmFjZV9jbGtzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkK IHsKIAlzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9zOwogCXN0cnVjdCBsaXN0X2hlYWQgKnA7 Ci0Jc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmM7CiAJaW50IGkgPSAwOwogCWlu dCByZXQgPSAwOwogCkBAIC04MTIsNyArODEyLDcgQEAgc3RhdGljIGludCBfaW5pdF9pbnRlcmZh Y2VfY2xrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiAJCWlmICghb3MtPmNsaykKIAkJCWNvbnRp bnVlOwogCi0JCWMgPSBjbGtfZ2V0KE5VTEwsIG9zLT5jbGspOworCQljID0gY2xrX3Byb3ZpZGVy X2dldChOVUxMLCBvcy0+Y2xrKTsKIAkJaWYgKElTX0VSUihjKSkgewogCQkJcHJfd2FybmluZygi b21hcF9od21vZDogJXM6IGNhbm5vdCBjbGtfZ2V0IGludGVyZmFjZV9jbGsgJXNcbiIsCiAJCQkJ ICAgb2gtPm5hbWUsIG9zLT5jbGspOwpAQCAtODI4LDE0ICs4MjgsMTQgQEAgc3RhdGljIGludCBf aW5pdF9pbnRlcmZhY2VfY2xrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiAJCSAqIHNvbWUgcG9p bnQgd2hlcmUgc3Vic3lzdGVtcyBsaWtlIGkyYyBhbmQgcG1pYyBiZWNvbWUKIAkJICogYXZhaWxh YmxlLgogCQkgKi8KLQkJY2xrX3ByZXBhcmUob3MtPl9jbGspOworCQljbGtfcHJvdmlkZXJfcHJl cGFyZShvcy0+X2Nsayk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBfaW5pdF9v cHRfY2xrIC0gZ2V0IGEgc3RydWN0IGNsayAqIGZvciB0aGUgdGhlIGh3bW9kJ3Mgb3B0aW9uYWwg Y2xvY2tzCisgKiBfaW5pdF9vcHRfY2xrIC0gZ2V0IGEgc3RydWN0IGNsa19jb3JlICogZm9yIHRo ZSB0aGUgaHdtb2QncyBvcHRpb25hbCBjbG9ja3MKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2Qg KgogICoKICAqIENhbGxlZCBmcm9tIF9pbml0X2Nsb2NrcygpLiAgUG9wdWxhdGVzIHRoZSBAb2gg b21hcF9od21vZF9vcHRfY2xrCkBAIC04NDQsMTIgKzg0NCwxMiBAQCBzdGF0aWMgaW50IF9pbml0 X2ludGVyZmFjZV9jbGtzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHN0YXRpYyBpbnQgX2luaXRf b3B0X2Nsa3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewogCXN0cnVjdCBvbWFwX2h3bW9kX29w dF9jbGsgKm9jOwotCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGNsa19jb3JlICpjOwogCWludCBp OwogCWludCByZXQgPSAwOwogCiAJZm9yIChpID0gb2gtPm9wdF9jbGtzX2NudCwgb2MgPSBvaC0+ b3B0X2Nsa3M7IGkgPiAwOyBpLS0sIG9jKyspIHsKLQkJYyA9IGNsa19nZXQoTlVMTCwgb2MtPmNs ayk7CisJCWMgPSBjbGtfcHJvdmlkZXJfZ2V0KE5VTEwsIG9jLT5jbGspOwogCQlpZiAoSVNfRVJS KGMpKSB7CiAJCQlwcl93YXJuaW5nKCJvbWFwX2h3bW9kOiAlczogY2Fubm90IGNsa19nZXQgb3B0 X2NsayAlc1xuIiwKIAkJCQkgICBvaC0+bmFtZSwgb2MtPmNsayk7CkBAIC04NjUsNyArODY1LDcg QEAgc3RhdGljIGludCBfaW5pdF9vcHRfY2xrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiAJCSAq IHNvbWUgcG9pbnQgd2hlcmUgc3Vic3lzdGVtcyBsaWtlIGkyYyBhbmQgcG1pYyBiZWNvbWUKIAkJ ICogYXZhaWxhYmxlLgogCQkgKi8KLQkJY2xrX3ByZXBhcmUob2MtPl9jbGspOworCQljbGtfcHJv dmlkZXJfcHJlcGFyZShvYy0+X2Nsayk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTg4Nyw3ICs4 ODcsNyBAQCBzdGF0aWMgaW50IF9lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkK IAlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IGVuYWJsaW5nIGNsb2Nrc1xuIiwgb2gtPm5hbWUp OwogCiAJaWYgKG9oLT5fY2xrKQotCQljbGtfZW5hYmxlKG9oLT5fY2xrKTsKKwkJY2xrX3Byb3Zp ZGVyX2VuYWJsZShvaC0+X2Nsayk7CiAKIAlwID0gb2gtPnNsYXZlX3BvcnRzLm5leHQ7CiAKQEAg LTg5NSw3ICs4OTUsNyBAQCBzdGF0aWMgaW50IF9lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2h3 bW9kICpvaCkKIAkJb3MgPSBfZmV0Y2hfbmV4dF9vY3BfaWYoJnAsICZpKTsKIAogCQlpZiAob3Mt Pl9jbGsgJiYgKG9zLT5mbGFncyAmIE9DUElGX1NXU1VQX0lETEUpKQotCQkJY2xrX2VuYWJsZShv cy0+X2Nsayk7CisJCQljbGtfcHJvdmlkZXJfZW5hYmxlKG9zLT5fY2xrKTsKIAl9CiAKIAkvKiBU aGUgb3B0IGNsb2NrcyBhcmUgY29udHJvbGxlZCBieSB0aGUgZGV2aWNlIGRyaXZlci4gKi8KQEAg LTkxOCw3ICs5MTgsNyBAQCBzdGF0aWMgaW50IF9kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9o d21vZCAqb2gpCiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBkaXNhYmxpbmcgY2xvY2tzXG4i LCBvaC0+bmFtZSk7CiAKIAlpZiAob2gtPl9jbGspCi0JCWNsa19kaXNhYmxlKG9oLT5fY2xrKTsK KwkJY2xrX3Byb3ZpZGVyX2Rpc2FibGUob2gtPl9jbGspOwogCiAJcCA9IG9oLT5zbGF2ZV9wb3J0 cy5uZXh0OwogCkBAIC05MjYsNyArOTI2LDcgQEAgc3RhdGljIGludCBfZGlzYWJsZV9jbG9ja3Mo c3RydWN0IG9tYXBfaHdtb2QgKm9oKQogCQlvcyA9IF9mZXRjaF9uZXh0X29jcF9pZigmcCwgJmkp OwogCiAJCWlmIChvcy0+X2NsayAmJiAob3MtPmZsYWdzICYgT0NQSUZfU1dTVVBfSURMRSkpCi0J CQljbGtfZGlzYWJsZShvcy0+X2Nsayk7CisJCQljbGtfcHJvdmlkZXJfZGlzYWJsZShvcy0+X2Ns ayk7CiAJfQogCiAJLyogVGhlIG9wdCBjbG9ja3MgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGRldmlj ZSBkcml2ZXIuICovCkBAIC05NDUsNyArOTQ1LDcgQEAgc3RhdGljIHZvaWQgX2VuYWJsZV9vcHRp b25hbF9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogCQlpZiAob2MtPl9jbGspIHsKIAkJ CXByX2RlYnVnKCJvbWFwX2h3bW9kOiBlbmFibGUgJXM6JXNcbiIsIG9jLT5yb2xlLAogCQkJCSBf X2Nsa19nZXRfbmFtZShvYy0+X2NsaykpOwotCQkJY2xrX2VuYWJsZShvYy0+X2Nsayk7CisJCQlj bGtfcHJvdmlkZXJfZW5hYmxlKG9jLT5fY2xrKTsKIAkJfQogfQogCkBAIC05NjAsNyArOTYwLDcg QEAgc3RhdGljIHZvaWQgX2Rpc2FibGVfb3B0aW9uYWxfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9k ICpvaCkKIAkJaWYgKG9jLT5fY2xrKSB7CiAJCQlwcl9kZWJ1Zygib21hcF9od21vZDogZGlzYWJs ZSAlczolc1xuIiwgb2MtPnJvbGUsCiAJCQkJIF9fY2xrX2dldF9uYW1lKG9jLT5fY2xrKSk7Ci0J CQljbGtfZGlzYWJsZShvYy0+X2Nsayk7CisJCQljbGtfcHJvdmlkZXJfZGlzYWJsZShvYy0+X2Ns ayk7CiAJCX0KIH0KIApAQCAtMjU4OSw3ICsyNTg5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IF9z ZXR1cF9pY2xrX2F1dG9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIAkJCS8qIFhYWCBvbWFw X2ljbGtfZGVueV9pZGxlKGMpOyAqLwogCQl9IGVsc2UgewogCQkJLyogWFhYIG9tYXBfaWNsa19h bGxvd19pZGxlKGMpOyAqLwotCQkJY2xrX2VuYWJsZShvcy0+X2Nsayk7CisJCQljbGtfcHJvdmlk ZXJfZW5hYmxlKG9zLT5fY2xrKTsKIAkJfQogCX0KIApAQCAtMzM5Niw3ICszMzk2LDcgQEAgc3Rh dGljIHZvaWQgX19pbml0IF9lbnN1cmVfbXB1X2h3bW9kX2lzX3NldHVwKHN0cnVjdCBvbWFwX2h3 bW9kICpvaCkKICAqIEluaXRpYWxpemUgYW5kIHNldCB1cCBhIHNpbmdsZSBod21vZC4gIEludGVu ZGVkIHRvIGJlIHVzZWQgZm9yIGEKICAqIHNtYWxsIG51bWJlciBvZiBlYXJseSBkZXZpY2VzLCBz dWNoIGFzIHRoZSB0aW1lciBJUCBibG9ja3MgdXNlZCBmb3IKICAqIHRoZSBzY2hlZHVsZXIgY2xv Y2suICBNdXN0IGJlIGNhbGxlZCBhZnRlciBvbWFwMl9jbGtfaW5pdCgpLgotICogUmVzb2x2ZXMg dGhlIHN0cnVjdCBjbGsgbmFtZXMgdG8gc3RydWN0IGNsayBwb2ludGVycyBmb3IgZWFjaAorICog UmVzb2x2ZXMgdGhlIHN0cnVjdCBjbGtfY29yZSBuYW1lcyB0byBzdHJ1Y3QgY2xrX2NvcmUgcG9p bnRlcnMgZm9yIGVhY2gKICAqIHJlZ2lzdGVyZWQgb21hcF9od21vZC4gIEFsc28gY2FsbHMgX3Nl dHVwKCkgb24gZWFjaCBod21vZC4gIFJldHVybnMKICAqIC1FSU5WQUwgdXBvbiBlcnJvciBvciAw IHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtMzQyNSw3ICszNDI1LDcgQEAgaW50IF9faW5pdCBvbWFw X2h3bW9kX3NldHVwX29uZShjb25zdCBjaGFyICpvaF9uYW1lKQogICoKICAqIEluaXRpYWxpemUg YW5kIHNldCB1cCBhbGwgSVAgYmxvY2tzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgaHdtb2QgY29kZS4K ICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIG9tYXAyX2Nsa19pbml0KCkuICBSZXNvbHZlcyB0aGUg c3RydWN0IGNsawotICogbmFtZXMgdG8gc3RydWN0IGNsayBwb2ludGVycyBmb3IgZWFjaCByZWdp c3RlcmVkIG9tYXBfaHdtb2QuICBBbHNvCisgKiBuYW1lcyB0byBzdHJ1Y3QgY2xrX2NvcmUgcG9p bnRlcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBvbWFwX2h3bW9kLiAgQWxzbwogICogY2FsbHMgX3Nl dHVwKCkgb24gZWFjaCBod21vZC4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KIHN0YXRp YyBpbnQgX19pbml0IG9tYXBfaHdtb2Rfc2V0dXBfYWxsKHZvaWQpCkBAIC0zNzkyLDcgKzM3OTIs NyBAQCBpbnQgb21hcF9od21vZF9nZXRfcmVzb3VyY2VfYnluYW1lKHN0cnVjdCBvbWFwX2h3bW9k ICpvaCwgdW5zaWduZWQgaW50IHR5cGUsCiAgKi8KIHN0cnVjdCBwb3dlcmRvbWFpbiAqb21hcF9o d21vZF9nZXRfcHdyZG0oc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCXN0cnVjdCBjbGsgKmM7 CisJc3RydWN0IGNsa19jb3JlICpjOwogCXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb2k7CiAJ c3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsazsKZGlm ZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9vbWFwX2h3bW9kLmgKaW5kZXggMGY5N2Q2My4uNDZmZmQwNiAxMDA2NDQKLS0tIGEv YXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFw Mi9vbWFwX2h3bW9kLmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdHJ1Y3Qgb21hcF9od21vZF9yc3Rf aW5mbyB7CiAgKiBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIC0gb3B0aW9uYWwgY2xvY2tzIHVz ZWQgYnkgdGhpcyBod21vZAogICogQHJvbGU6ICJzeXMiLCAiMzJrIiwgInR2IiwgZXRjIC0tIGZv ciB1c2UgaW4gY2xrX2dldCgpCiAgKiBAY2xrOiBvcHQgY2xvY2s6IE9NQVAgY2xvY2sgbmFtZQot ICogQF9jbGs6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbGsgKGZpbGxlZCBpbiBhdCBydW50aW1l KQorICogQF9jbGs6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbGtfY29yZSAoZmlsbGVkIGluIGF0 IHJ1bnRpbWUpCiAgKgogICogVGhlIG1vZHVsZSdzIGludGVyZmFjZSBjbG9jayBhbmQgbWFpbiBm dW5jdGlvbmFsIGNsb2NrIHNob3VsZCBub3QKICAqIGJlIGFkZGVkIGFzIG9wdGlvbmFsIGNsb2Nr cy4KQEAgLTIxNSw3ICsyMTUsNyBAQCBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyB7CiBzdHJ1 Y3Qgb21hcF9od21vZF9vcHRfY2xrIHsKIAljb25zdCBjaGFyCSpyb2xlOwogCWNvbnN0IGNoYXIJ KmNsazsKLQlzdHJ1Y3QgY2xrCSpfY2xrOworCXN0cnVjdCBjbGtfY29yZQkqX2NsazsKIH07CiAK IApAQCAtMjg5LDcgKzI4OSw3IEBAIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UgewogICog QHNsYXZlOiBzdHJ1Y3Qgb21hcF9od21vZCB0aGF0IHJlc3BvbmRzIHRvIE9DUCB0cmFuc2FjdGlv bnMgb24gdGhpcyBsaW5rCiAgKiBAYWRkcjogYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGgg dGhpcyBsaW5rCiAgKiBAY2xrOiBpbnRlcmZhY2UgY2xvY2s6IE9NQVAgY2xvY2sgbmFtZQotICog QF9jbGs6IHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3QgY2xrIChmaWxsZWQgaW4gYXQg cnVudGltZSkKKyAqIEBfY2xrOiBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0IGNsa19j b3JlIChmaWxsZWQgaW4gYXQgcnVudGltZSkKICAqIEBmdzogaW50ZXJmYWNlIGZpcmV3YWxsIGRh dGEKICAqIEB3aWR0aDogT0NQIGRhdGEgd2lkdGgKICAqIEB1c2VyOiBpbml0aWF0b3JzIHVzaW5n IHRoaXMgaW50ZXJmYWNlIChzZWUgT0NQX1VTRVJfKiBtYWNyb3MgYWJvdmUpCkBAIC0zMDYsNyAr MzA2LDcgQEAgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIHsKIAlzdHJ1Y3Qgb21hcF9od21vZAkJ KnNsYXZlOwogCXN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UJKmFkZHI7CiAJY29uc3QgY2hh cgkJCSpjbGs7Ci0Jc3RydWN0IGNsawkJCSpfY2xrOworCXN0cnVjdCBjbGtfY29yZQkJCSpfY2xr OwogCXVuaW9uIHsKIAkJc3RydWN0IG9tYXBfaHdtb2Rfb21hcDJfZmlyZXdhbGwgb21hcDI7CiAJ fQkJCQlmdzsKQEAgLTYxMSw3ICs2MTEsNyBAQCBzdHJ1Y3Qgb21hcF9od21vZF9saW5rIHsKICAq IEBzZG1hX3JlcXM6IHB0ciB0byBhbiBhcnJheSBvZiBTeXN0ZW0gRE1BIHJlcXVlc3QgSURzCiAg KiBAcHJjbTogUFJDTSBkYXRhIHBlcnRhaW5pbmcgdG8gdGhpcyBod21vZAogICogQG1haW5fY2xr OiBtYWluIGNsb2NrOiBPTUFQIGNsb2NrIG5hbWUKLSAqIEBfY2xrOiBwb2ludGVyIHRvIHRoZSBt YWluIHN0cnVjdCBjbGsgKGZpbGxlZCBpbiBhdCBydW50aW1lKQorICogQF9jbGs6IHBvaW50ZXIg dG8gdGhlIG1haW4gc3RydWN0IGNsa19jb3JlIChmaWxsZWQgaW4gYXQgcnVudGltZSkKICAqIEBv cHRfY2xrczogb3RoZXIgZGV2aWNlIGNsb2NrcyB0aGF0IGRyaXZlcnMgY2FuIHJlcXVlc3QgKDAu LiopCiAgKiBAdm9sdGRtOiBwb2ludGVyIHRvIHZvbHRhZ2UgZG9tYWluIChmaWxsZWQgaW4gYXQg cnVudGltZSkKICAqIEBkZXZfYXR0cjogYXJiaXRyYXJ5IGRldmljZSBhdHRyaWJ1dGVzIHRoYXQg Y2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyCkBAIC02NTMsNyArNjUzLDcgQEAgc3RydWN0IG9t YXBfaHdtb2QgewogCQlzdHJ1Y3Qgb21hcF9od21vZF9vbWFwNF9wcmNtIG9tYXA0OwogCX0JCQkJ cHJjbTsKIAljb25zdCBjaGFyCQkJKm1haW5fY2xrOwotCXN0cnVjdCBjbGsJCQkqX2NsazsKKwlz dHJ1Y3QgY2xrX2NvcmUJCQkqX2NsazsKIAlzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrCSpvcHRf Y2xrczsKIAljaGFyCQkJCSpjbGtkbV9uYW1lOwogCXN0cnVjdCBjbG9ja2RvbWFpbgkJKmNsa2Rt OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYyBiL2FyY2gvYXJtL21h Y2gtb21hcDIvcG0yNHh4LmMKaW5kZXggZmUwMWM1YS4uNTZlNWU3NyAxMDA2NDQKLS0tIGEvYXJj aC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4 eC5jCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyB2b2lkICgqb21hcDJfc3JhbV9zdXNwZW5kKSh1 MzIgZGxsY3RybCwgdm9pZCBfX2lvbWVtICpzZHJjX2RsbGFfY3RybCwKIHN0YXRpYyBzdHJ1Y3Qg cG93ZXJkb21haW4gKm1wdV9wd3JkbSwgKmNvcmVfcHdyZG07CiBzdGF0aWMgc3RydWN0IGNsb2Nr ZG9tYWluICpkc3BfY2xrZG0sICptcHVfY2xrZG0sICp3a3VwX2Nsa2RtLCAqZ2Z4X2Nsa2RtOwog Ci1zdGF0aWMgc3RydWN0IGNsayAqb3NjX2NrLCAqZW11bF9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgKm9zY19jaywgKmVtdWxfY2s7CiAKIHN0YXRpYyBpbnQgb21hcDJfZW50ZXJfZnVsbF9y ZXRlbnRpb24odm9pZCkKIHsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGludCBvbWFwMl9lbnRl cl9mdWxsX3JldGVudGlvbih2b2lkKQogCSAqIG9zY2lsbGF0b3IgaXRzZWxmIGl0IHdpbGwgYmUg ZGlzYWJsZWQgaWYvd2hlbiB3ZSBlbnRlciByZXRlbnRpb24KIAkgKiBtb2RlLgogCSAqLwotCWNs a19kaXNhYmxlKG9zY19jayk7CisJY2xrX3Byb3ZpZGVyX2Rpc2FibGUob3NjX2NrKTsKIAogCS8q IENsZWFyIG9sZCB3YWtlLXVwIGV2ZW50cyAqLwogCS8qIFJFVklTSVQ6IFRoZXNlIHdyaXRlIHRv IHJlc2VydmVkIGJpdHM/ICovCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGludCBvbWFwMl9l bnRlcl9mdWxsX3JldGVudGlvbih2b2lkKQogbm9fc2xlZXA6CiAJb21hcDJfZ3Bpb19yZXN1bWVf YWZ0ZXJfaWRsZSgpOwogCi0JY2xrX2VuYWJsZShvc2NfY2spOworCWNsa19wcm92aWRlcl9lbmFi bGUob3NjX2NrKTsKIAogCS8qIGNsZWFyIENPUkUgd2FrZS11cCBldmVudHMgKi8KIAlvbWFwMnh4 eF9wcm1fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIFBNX1dLU1QxLCB+MCk7CkBAIC0yODcsMTcg KzI4NywxNyBAQCBpbnQgX19pbml0IG9tYXAyX3BtX2luaXQodm9pZCkKIAkJcHJfZXJyKCJQTTog Z2Z4X2Nsa2RtIG5vdCBmb3VuZFxuIik7CiAKIAotCW9zY19jayA9IGNsa19nZXQoTlVMTCwgIm9z Y19jayIpOworCW9zY19jayA9IGNsa19wcm92aWRlcl9nZXQoTlVMTCwgIm9zY19jayIpOwogCWlm IChJU19FUlIob3NjX2NrKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBnZXQgb3Nj X2NrXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGNwdV9pc19vbWFwMjQyeCgp KSB7Ci0JCWVtdWxfY2sgPSBjbGtfZ2V0KE5VTEwsICJlbXVsX2NrIik7CisJCWVtdWxfY2sgPSBj bGtfcHJvdmlkZXJfZ2V0KE5VTEwsICJlbXVsX2NrIik7CiAJCWlmIChJU19FUlIoZW11bF9jaykp IHsKIAkJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IGdldCBlbXVsX2NrXG4iKTsKLQkJCWNs a19wdXQob3NjX2NrKTsKKwkJCV9fY2xrX3B1dChvc2NfY2spOwogCQkJcmV0dXJuIC1FTk9ERVY7 CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMgYi9h cmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKaW5kZXggNmJiYjdiNS4uNmJlMmQyZCAxMDA2 NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21h Y2gtb3Jpb241eC9jb21tb24uYwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIF9faW5pdCBvcmlvbjV4 X21hcF9pbyh2b2lkKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDTEsgdHJlZQogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGNsayAqdGNsazsKK3N0YXRpYyBzdHJ1Y3Qg Y2xrX2NvcmUgKnRjbGs7CiAKIHZvaWQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7CmRpZmYgLS1n aXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNobW9i aWxlL2Nsb2NrLmMKaW5kZXggZWQ0MTVkYy4uODI3Zjc0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0v bWFjaC1zaG1vYmlsZS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2su YwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2lmZGVmIENP TkZJR19DT01NT05fQ0xLCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSAiY2xv Y2suaCIKQEAgLTMyLDE3ICszMSwxNyBAQCB2b2lkIF9faW5pdCBzaG1vYmlsZV9jbGtfd29ya2Fy b3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsCiAJCQkJICAgIGludCBucl9jbGtzLCBi b29sIGVuYWJsZSkKIHsKIAljb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa247Ci0Jc3RydWN0IGNs ayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXVuc2lnbmVkIGludCBpOwogCiAJZm9y IChpID0gMDsgaSA8IG5yX2Nsa3M7ICsraSkgewogCQljbGtuID0gY2xrcyArIGk7Ci0JCWNsayA9 IGNsa19nZXQoTlVMTCwgY2xrbi0+Y2xrKTsKKwkJY2xrID0gY2xrX3Byb3ZpZGVyX2dldChOVUxM LCBjbGtuLT5jbGspOwogCQlpZiAoIUlTX0VSUihjbGspKSB7CiAJCQljbGtfcmVnaXN0ZXJfY2xr ZGV2KGNsaywgY2xrbi0+Y29uX2lkLCBjbGtuLT5kZXZfaWQpOwogCQkJaWYgKGVuYWJsZSkKLQkJ CQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKLQkJCWNsa19wdXQoY2xrKTsKKwkJCQljbGtfcHJv dmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJCV9fY2xrX3B1dChjbGspOwogCQl9CiAJfQog fQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9zcGMuYyBiL2FyY2gvYXJtL21h Y2gtdmV4cHJlc3Mvc3BjLmMKaW5kZXggZjYxMTU4Yy4uZTQ5N2RmNiAxMDA2NDQKLS0tIGEvYXJj aC9hcm0vbWFjaC12ZXhwcmVzcy9zcGMuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3Nw Yy5jCkBAIC01MjksNyArNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19zcGNfb3Bz ID0gewogCS5zZXRfcmF0ZSA9IHNwY19zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xr ICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpCitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYp CiB7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlzdHJ1Y3QgY2xrX3NwYyAqc3BjOwpA QCAtNTU2LDcgKzU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVy KHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpCiBzdGF0aWMgaW50IF9faW5pdCB2ZV9zcGNfY2xrX2lu aXQodm9pZCkKIHsKIAlpbnQgY3B1OwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAogCWlmICghaW5mbykKIAkJcmV0dXJuIDA7IC8qIENvbnRpbnVlIG9ubHkgaWYg U1BDIGlzIGluaXRpYWxpc2VkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2Nv bW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9jb21tb24uYwppbmRleCA5NjFiNTkzLi5hYmY2 M2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2NvbW1vbi5jCisrKyBiL2FyY2gv YXJtL3BsYXQtb3Jpb24vY29tbW9uLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51 eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVk ZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVk ZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5j bHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KQEAgLTI3LDcgKzI2LDcgQEAKIAogLyogQ3JlYXRl IGEgY2xrZGV2IGVudHJ5IGZvciBhIGdpdmVuIGRldmljZS9jbGsgKi8KIHZvaWQgX19pbml0IG9y aW9uX2Nsa2Rldl9hZGQoY29uc3QgY2hhciAqY29uX2lkLCBjb25zdCBjaGFyICpkZXZfaWQsCi0J CQkgICAgIHN0cnVjdCBjbGsgKmNsaykKKwkJCSAgICAgc3RydWN0IGNsa19jb3JlICpjbGspCiB7 CiAJc3RydWN0IGNsa19sb29rdXAgKmNsOwogCkBAIC00MCw3ICszOSw3IEBAIHZvaWQgX19pbml0 IG9yaW9uX2Nsa2Rldl9hZGQoY29uc3QgY2hhciAqY29uX2lkLCBjb25zdCBjaGFyICpkZXZfaWQs CiAgICBLaXJrd29vZCBoYXMgZ2F0ZWQgY2xvY2tzIGZvciBzb21lIG9mIGl0cyBwZXJpcGhlcmFs cywgc28gY3JlYXRlcwogICAgaXRzIG93biBjbGtkZXYgZW50cmllcy4gRm9yIGFsbCB0aGUgb3Ro ZXIgb3Jpb24gZGV2aWNlcywgY3JlYXRlCiAgICBjbGtkZXYgZW50cmllcyB0byB0aGUgdGNsay4g Ki8KLXZvaWQgX19pbml0IG9yaW9uX2Nsa2Rldl9pbml0KHN0cnVjdCBjbGsgKnRjbGspCit2b2lk IF9faW5pdCBvcmlvbl9jbGtkZXZfaW5pdChzdHJ1Y3QgY2xrX2NvcmUgKnRjbGspCiB7CiAJb3Jp b25fY2xrZGV2X2FkZChOVUxMLCAib3Jpb25fc3BpLjAiLCB0Y2xrKTsKIAlvcmlvbl9jbGtkZXZf YWRkKE5VTEwsICJvcmlvbl9zcGkuMSIsIHRjbGspOwpAQCAtNzgsMTAgKzc3LDEwIEBAIHN0YXRp YyB2b2lkIGZpbGxfcmVzb3VyY2VzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSwKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogICogVUFSVAogICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0 aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdWFydF9nZXRfY2xrX3JhdGUoc3RydWN0IGNsayAqY2xr KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHVhcnRfZ2V0X2Nsa19yYXRlKHN0cnVjdCBj bGtfY29yZSAqY2xrKQogewotCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwotCXJldHVybiBjbGtf Z2V0X3JhdGUoY2xrKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwlyZXR1 cm4gY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB1 YXJ0X2NvbXBsZXRlKApAQCAtOTEsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdWFydF9j b21wbGV0ZSgKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2UsCiAJcmVzb3VyY2Vfc2l6ZV90IG1hcGJh c2UsCiAJdW5zaWduZWQgaW50IGlycSwKLQlzdHJ1Y3QgY2xrICpjbGspCisJc3RydWN0IGNsa19j b3JlICpjbGspCiB7CiAJZGF0YS0+bWFwYmFzZSA9IG1hcGJhc2U7CiAJZGF0YS0+bWVtYmFzZSA9 IG1lbWJhc2U7CkBAIC0xMjUsNyArMTI0LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2Ugb3Jpb25fdWFydDAgPSB7CiB2b2lkIF9faW5pdCBvcmlvbl91YXJ0MF9pbml0KHZvaWQgX19p b21lbSAqbWVtYmFzZSwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IG1hcGJhc2UsCiAJCQkgICAg IHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgIHN0cnVjdCBjbGsgKmNsaykKKwkJCSAgICAgc3Ry dWN0IGNsa19jb3JlICpjbGspCiB7CiAJdWFydF9jb21wbGV0ZSgmb3Jpb25fdWFydDAsIG9yaW9u X3VhcnQwX2RhdGEsIG9yaW9uX3VhcnQwX3Jlc291cmNlcywKIAkJICAgICAgbWVtYmFzZSwgbWFw YmFzZSwgaXJxLCBjbGspOwpAQCAtMTUzLDcgKzE1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlIG9yaW9uX3VhcnQxID0gewogdm9pZCBfX2luaXQgb3Jpb25fdWFydDFfaW5pdCh2 b2lkIF9faW9tZW0gKm1lbWJhc2UsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBtYXBiYXNlLAog CQkJICAgICB1bnNpZ25lZCBpbnQgaXJxLAotCQkJICAgICBzdHJ1Y3QgY2xrICpjbGspCisJCQkg ICAgIHN0cnVjdCBjbGtfY29yZSAqY2xrKQogewogCXVhcnRfY29tcGxldGUoJm9yaW9uX3VhcnQx LCBvcmlvbl91YXJ0MV9kYXRhLCBvcmlvbl91YXJ0MV9yZXNvdXJjZXMsCiAJCSAgICAgIG1lbWJh c2UsIG1hcGJhc2UsIGlycSwgY2xrKTsKQEAgLTE4MSw3ICsxODAsNyBAQCBzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RldmljZSBvcmlvbl91YXJ0MiA9IHsKIHZvaWQgX19pbml0IG9yaW9uX3VhcnQy X2luaXQodm9pZCBfX2lvbWVtICptZW1iYXNlLAogCQkJICAgICByZXNvdXJjZV9zaXplX3QgbWFw YmFzZSwKIAkJCSAgICAgdW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgc3RydWN0IGNsayAqY2xr KQorCQkJICAgICBzdHJ1Y3QgY2xrX2NvcmUgKmNsaykKIHsKIAl1YXJ0X2NvbXBsZXRlKCZvcmlv bl91YXJ0Miwgb3Jpb25fdWFydDJfZGF0YSwgb3Jpb25fdWFydDJfcmVzb3VyY2VzLAogCQkgICAg ICBtZW1iYXNlLCBtYXBiYXNlLCBpcnEsIGNsayk7CkBAIC0yMDksNyArMjA4LDcgQEAgc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb25fdWFydDMgPSB7CiB2b2lkIF9faW5pdCBvcmlv bl91YXJ0M19pbml0KHZvaWQgX19pb21lbSAqbWVtYmFzZSwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6 ZV90IG1hcGJhc2UsCiAJCQkgICAgIHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgIHN0cnVjdCBj bGsgKmNsaykKKwkJCSAgICAgc3RydWN0IGNsa19jb3JlICpjbGspCiB7CiAJdWFydF9jb21wbGV0 ZSgmb3Jpb25fdWFydDMsIG9yaW9uX3VhcnQzX2RhdGEsIG9yaW9uX3VhcnQzX3Jlc291cmNlcywK IAkJICAgICAgbWVtYmFzZSwgbWFwYmFzZSwgaXJxLCBjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9h cm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9yaW9u L2luY2x1ZGUvcGxhdC9jb21tb24uaAppbmRleCBkOWEyNGY2Li40NGYxYmJlIDEwMDY0NAotLS0g YS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9jb21tb24uaAorKysgYi9hcmNoL2Fy bS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9jb21tb24uaApAQCAtMTgsMjIgKzE4LDIyIEBAIHN0 cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGE7CiB2b2lkIF9faW5pdCBvcmlvbl91YXJ0MF9pbml0 KHZvaWQgX19pb21lbSAqbWVtYmFzZSwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IG1hcGJhc2Us CiAJCQkgICAgIHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgIHN0cnVjdCBjbGsgKmNsayk7CisJ CQkgICAgIHN0cnVjdCBjbGtfY29yZSAqY2xrKTsKIAogdm9pZCBfX2luaXQgb3Jpb25fdWFydDFf aW5pdCh2b2lkIF9faW9tZW0gKm1lbWJhc2UsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBtYXBi YXNlLAogCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxLAotCQkJICAgICBzdHJ1Y3QgY2xrICpjbGsp OworCQkJICAgICBzdHJ1Y3QgY2xrX2NvcmUgKmNsayk7CiAKIHZvaWQgX19pbml0IG9yaW9uX3Vh cnQyX2luaXQodm9pZCBfX2lvbWVtICptZW1iYXNlLAogCQkJICAgICByZXNvdXJjZV9zaXplX3Qg bWFwYmFzZSwKIAkJCSAgICAgdW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgc3RydWN0IGNsayAq Y2xrKTsKKwkJCSAgICAgc3RydWN0IGNsa19jb3JlICpjbGspOwogCiB2b2lkIF9faW5pdCBvcmlv bl91YXJ0M19pbml0KHZvaWQgX19pb21lbSAqbWVtYmFzZSwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6 ZV90IG1hcGJhc2UsCiAJCQkgICAgIHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgIHN0cnVjdCBj bGsgKmNsayk7CisJCQkgICAgIHN0cnVjdCBjbGtfY29yZSAqY2xrKTsKIAogdm9pZCBfX2luaXQg b3Jpb25fcnRjX2luaXQodW5zaWduZWQgbG9uZyBtYXBiYXNlLAogCQkJICAgdW5zaWduZWQgbG9u ZyBpcnEpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgX19pbml0IG9yaW9uX2NyeXB0b19pbml0 KHVuc2lnbmVkIGxvbmcgbWFwYmFzZSwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaXJxKTsKIAog dm9pZCBfX2luaXQgb3Jpb25fY2xrZGV2X2FkZChjb25zdCBjaGFyICpjb25faWQsIGNvbnN0IGNo YXIgKmRldl9pZCwKLQkJCSAgICAgc3RydWN0IGNsayAqY2xrKTsKKwkJCSAgICAgc3RydWN0IGNs a19jb3JlICpjbGspOwogCi12b2lkIF9faW5pdCBvcmlvbl9jbGtkZXZfaW5pdChzdHJ1Y3QgY2xr ICp0Y2xrKTsKK3ZvaWQgX19pbml0IG9yaW9uX2Nsa2Rldl9pbml0KHN0cnVjdCBjbGtfY29yZSAq dGNsayk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9j ay5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2NrLmMKaW5kZXggZDc1NTdjZC4uNDZl MWMzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2NrLmMKKysrIGIv YXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2NrLmMKQEAgLTEzOCw3ICsxMzgsNyBAQCBzdGF0 aWMgc3RydWN0IGNsa19vcHMgYWxjaGVteV9jbGtvcHNfY3B1ID0gewogCS5yZWNhbGNfcmF0ZQk9 IGFsY2hlbXlfY2xrX2NwdV9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBfX2luaXQg KmFsY2hlbXlfY2xrX3NldHVwX2NwdShjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKK3N0YXRpYyBz dHJ1Y3QgY2xrX2NvcmUgX19pbml0ICphbGNoZW15X2Nsa19zZXR1cF9jcHUoY29uc3QgY2hhciAq cGFyZW50X25hbWUsCiAJCQkJCQlpbnQgY3R5cGUpCiB7CiAJc3RydWN0IGNsa19pbml0X2RhdGEg aWQ7CkBAIC0yMjEsMTIgKzIyMSwxMiBAQCBzdGF0aWMgc3RydWN0IGNsa19vcHMgYWxjaGVteV9j bGtvcHNfYXV4ID0gewogCS5yb3VuZF9yYXRlCT0gYWxjaGVteV9jbGtfYXV4X3JvdW5kciwKIH07 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYWxjaGVteV9jbGtfc2V0dXBfYXV4KGNvbnN0 IGNoYXIgKnBhcmVudF9uYW1lLAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSBfX2luaXQgKmFsY2hl bXlfY2xrX3NldHVwX2F1eChjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCQkJCWNoYXIgKm5h bWUsIGludCBtYXhtdWx0LAogCQkJCQkJdW5zaWduZWQgbG9uZyByZWcpCiB7CiAJc3RydWN0IGNs a19pbml0X2RhdGEgaWQ7Ci0Jc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmM7CiAJ c3RydWN0IGFsY2hlbXlfYXV4cGxsX2NsayAqYTsKIAogCWEgPSBremFsbG9jKHNpemVvZigqYSks IEdGUF9LRVJORUwpOwpAQCAtMjU0LDEwICsyNTQsMTAgQEAgc3RhdGljIHN0cnVjdCBjbGsgX19p bml0ICphbGNoZW15X2Nsa19zZXR1cF9hdXgoY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAKIC8q IHN5c2J1c19jbGsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwogCi1zdGF0aWMgc3RydWN0IGNsayBfX2luaXQgICphbGNoZW15X2Nsa19z ZXR1cF9zeXNidXMoY29uc3QgY2hhciAqcG4pCitzdGF0aWMgc3RydWN0IGNsa19jb3JlIF9faW5p dCAgKmFsY2hlbXlfY2xrX3NldHVwX3N5c2J1cyhjb25zdCBjaGFyICpwbikKIHsKIAl1bnNpZ25l ZCBsb25nIHYgPSAoYWxjaGVteV9yZHN5cyhBVTEwMDBfU1lTX1BPV0VSQ1RSTCkgJiAzKSArIDI7 Ci0Jc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmM7CiAKIAljID0gY2xrX3JlZ2lz dGVyX2ZpeGVkX2ZhY3RvcihOVUxMLCBBTENIRU1ZX1NZU0JVU19DTEssCiAJCQkJICAgICAgcG4s IDAsIDEsIHYpOwpAQCAtMjY4LDEwICsyNjgsMTAgQEAgc3RhdGljIHN0cnVjdCBjbGsgX19pbml0 ICAqYWxjaGVteV9jbGtfc2V0dXBfc3lzYnVzKGNvbnN0IGNoYXIgKnBuKQogCiAvKiBQZXJpcGhl cmFsIENsb2NrICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KIAotc3RhdGljIHN0cnVjdCBjbGsgX19pbml0ICphbGNoZW15X2Nsa19zZXR1cF9wZXJp cGgoY29uc3QgY2hhciAqcG4pCitzdGF0aWMgc3RydWN0IGNsa19jb3JlIF9faW5pdCAqYWxjaGVt eV9jbGtfc2V0dXBfcGVyaXBoKGNvbnN0IGNoYXIgKnBuKQogewogCS8qIFBlcmlwaGVyYWwgY2xv Y2sgcnVucyBhdCBoYWxmIHRoZSByYXRlIG9mIHN5c2J1cyBjbGsgKi8KLQlzdHJ1Y3QgY2xrICpj OworCXN0cnVjdCBjbGtfY29yZSAqYzsKIAogCWMgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9y KE5VTEwsIEFMQ0hFTVlfUEVSSVBIX0NMSywKIAkJCQkgICAgICBwbiwgMCwgMSwgMik7CkBAIC0y ODIsMTEgKzI4MiwxMSBAQCBzdGF0aWMgc3RydWN0IGNsayBfX2luaXQgKmFsY2hlbXlfY2xrX3Nl dHVwX3BlcmlwaChjb25zdCBjaGFyICpwbikKIAogLyogbWVtIGNsb2NrICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBz dHJ1Y3QgY2xrIF9faW5pdCAqYWxjaGVteV9jbGtfc2V0dXBfbWVtKGNvbnN0IGNoYXIgKnBuLCBp bnQgY3QpCitzdGF0aWMgc3RydWN0IGNsa19jb3JlIF9faW5pdCAqYWxjaGVteV9jbGtfc2V0dXBf bWVtKGNvbnN0IGNoYXIgKnBuLCBpbnQgY3QpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gSU9N RU0oQVUxMDAwX01FTV9QSFlTX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgdjsKLQlzdHJ1Y3QgY2xr ICpjOworCXN0cnVjdCBjbGtfY29yZSAqYzsKIAlpbnQgZGl2OwogCiAJc3dpdGNoIChjdCkgewpA QCAtMzE2LDE0ICszMTYsMTQgQEAgc3RhdGljIHN0cnVjdCBjbGsgX19pbml0ICphbGNoZW15X2Ns a19zZXR1cF9tZW0oY29uc3QgY2hhciAqcG4sIGludCBjdCkKIAogLyogbHJjbGs6IGV4dGVybmFs IHN5bmNocm9ub3VzIHN0YXRpYyBidXMgY2xvY2sgKioqKioqKioqKioqKioqKioqKioqKiovCiAK LXN0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYWxjaGVteV9jbGtfc2V0dXBfbHJjbGsoY29uc3Qg Y2hhciAqcG4pCitzdGF0aWMgc3RydWN0IGNsa19jb3JlIF9faW5pdCAqYWxjaGVteV9jbGtfc2V0 dXBfbHJjbGsoY29uc3QgY2hhciAqcG4pCiB7CiAJLyogTUVNX1NUQ0ZHMFsxNToxM10gPSBkaXZp c29yLgogCSAqIEwvUkNMSyA9IHBlcmlwaF9jbGsgLyAoZGl2aXNvciArIDEpCiAJICogT24gQXUx MDAwLCBBdTE1MDAsIEF1MTEwMCBpdCdzIGNhbGxlZCBMQ0xLLAogCSAqIG9uIGxhdGVyIG1vZGVs cyBpdCdzIGNhbGxlZCBSQ0xLLCBidXQgaXQncyB0aGUgc2FtZSB0aGluZy4KIAkgKi8KLQlzdHJ1 Y3QgY2xrICpjOworCXN0cnVjdCBjbGtfY29yZSAqYzsKIAl1bnNpZ25lZCBsb25nIHYgPSBhbGNo ZW15X3Jkc21lbShBVTEwMDBfTUVNX1NUQ0ZHMCkgPj4gMTM7CiAKIAl2ID0gKHYgJiA3KSArIDE7 CkBAIC0zNzUsMTAgKzM3NSwxMCBAQCBzdGF0aWMgbG9uZyBhbGNoZW15X2NhbGNfZGl2KHVuc2ln bmVkIGxvbmcgcmF0ZSwgdW5zaWduZWQgbG9uZyBwcmF0ZSwKIAogc3RhdGljIGxvbmcgYWxjaGVt eV9jbGtfZmdjc19kZXRyKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJ CQkJCXVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCi0JCQkJCXN0cnVjdCBjbGsgKipi ZXN0X3BhcmVudF9jbGssCisJCQkJCXN0cnVjdCBjbGtfY29yZSAqKmJlc3RfcGFyZW50X2NsaywK IAkJCQkJaW50IHNjYWxlLCBpbnQgbWF4ZGl2KQogewotCXN0cnVjdCBjbGsgKnBjLCAqYnBjLCAq ZnJlZTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBjLCAqYnBjLCAqZnJlZTsKIAlsb25nIHRkdiwgdHBy LCBwciwgbnIsIGJyLCBicHIsIGRpZmYsIGxhc3RkaWZmOwogCWludCBqOwogCkBAIC00MDUsNyAr NDA1LDcgQEAgc3RhdGljIGxvbmcgYWxjaGVteV9jbGtfZmdjc19kZXRyKHN0cnVjdCBjbGtfaHcg Kmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJZnJlZSA9IHBjOwogCQl9CiAKLQkJcHIgPSBj bGtfZ2V0X3JhdGUocGMpOworCQlwciA9IGNsa19wcm92aWRlcl9nZXRfcmF0ZShwYyk7CiAJCWlm IChwciA8IHJhdGUpCiAJCQljb250aW51ZTsKIApAQCAtNDM1LDcgKzQzNSw3IEBAIHN0YXRpYyBs b25nIGFsY2hlbXlfY2xrX2ZnY3NfZGV0cihzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9u ZyByYXRlLAogCQkJdHByID0gcmF0ZSAqIGo7CiAJCQlpZiAodHByIDwgMCkKIAkJCQlicmVhazsK LQkJCXByID0gY2xrX3JvdW5kX3JhdGUoZnJlZSwgdHByKTsKKwkJCXByID0gY2xrX3Byb3ZpZGVy X3JvdW5kX3JhdGUoZnJlZSwgdHByKTsKIAogCQkJdGR2ID0gYWxjaGVteV9jYWxjX2RpdihyYXRl LCBwciwgc2NhbGUsIG1heGRpdiwgTlVMTCk7CiAJCQluciA9IHByIC8gdGR2OwpAQCAtNTQ4LDcg KzU0OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsY2hlbXlfY2xrX2ZndjFfcmVjYWxjKHN0 cnVjdCBjbGtfaHcgKmh3LAogCiBzdGF0aWMgbG9uZyBhbGNoZW15X2Nsa19mZ3YxX2RldHIoc3Ry dWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCQkJdW5zaWduZWQgbG9uZyAq YmVzdF9wYXJlbnRfcmF0ZSwKLQkJCQkJc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2NsaykKKwkJ CQkJc3RydWN0IGNsa19jb3JlICoqYmVzdF9wYXJlbnRfY2xrKQogewogCXJldHVybiBhbGNoZW15 X2Nsa19mZ2NzX2RldHIoaHcsIHJhdGUsIGJlc3RfcGFyZW50X3JhdGUsCiAJCQkJICAgICBiZXN0 X3BhcmVudF9jbGssIDIsIDUxMik7CkBAIC02ODAsNyArNjgwLDcgQEAgc3RhdGljIHVuc2lnbmVk IGxvbmcgYWxjaGVteV9jbGtfZmd2Ml9yZWNhbGMoc3RydWN0IGNsa19odyAqaHcsCiAKIHN0YXRp YyBsb25nIGFsY2hlbXlfY2xrX2ZndjJfZGV0cihzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQg bG9uZyByYXRlLAogCQkJCQl1bnNpZ25lZCBsb25nICpiZXN0X3BhcmVudF9yYXRlLAotCQkJCQlz dHJ1Y3QgY2xrICoqYmVzdF9wYXJlbnRfY2xrKQorCQkJCQlzdHJ1Y3QgY2xrX2NvcmUgKipiZXN0 X3BhcmVudF9jbGspCiB7CiAJc3RydWN0IGFsY2hlbXlfZmdjc19jbGsgKmMgPSB0b19mZ2NzX2Ns ayhodyk7CiAJaW50IHNjYWxlLCBtYXhkaXY7CkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIGNv bnN0IGNoYXIgKiBjb25zdCBhbGNoZW15X2Nsa19mZ2VuX25hbWVzW10gPSB7CiAKIHN0YXRpYyBp bnQgX19pbml0IGFsY2hlbXlfY2xrX2luaXRfZmdlbnMoaW50IGN0eXBlKQogewotCXN0cnVjdCBj bGsgKmM7CisJc3RydWN0IGNsa19jb3JlICpjOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGlkOwog CXN0cnVjdCBhbGNoZW15X2ZnY3NfY2xrICphOwogCXVuc2lnbmVkIGxvbmcgdjsKQEAgLTg5OSw3 ICs4OTksNyBAQCBzdGF0aWMgaW50IGFsY2hlbXlfY2xrX2NzcmNfc2V0cihzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCiBzdGF0aWMgbG9uZyBhbGNoZW15X2Nsa19jc3Jj X2RldHIoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCQkJdW5zaWdu ZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKLQkJCQkJc3RydWN0IGNsayAqKmJlc3RfcGFyZW50 X2NsaykKKwkJCQkJc3RydWN0IGNsa19jb3JlICoqYmVzdF9wYXJlbnRfY2xrKQogewogCXN0cnVj dCBhbGNoZW15X2ZnY3NfY2xrICpjID0gdG9fZmdjc19jbGsoaHcpOwogCWludCBzY2FsZSA9IGMt PmR0WzJdID09IDMgPyAxIDogMjsgLyogYXUxMzAwIGNoZWNrICovCkBAIC05MzYsNyArOTM2LDcg QEAgc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9jbGtfc2V0dXBfaW11eChpbnQgY3R5cGUpCiAJ c3RydWN0IGNsa19pbml0X2RhdGEgaWQ7CiAJdW5zaWduZWQgbG9uZyB2OwogCWludCBpLCByZXQs ICpkdDsKLQlzdHJ1Y3QgY2xrICpjOworCXN0cnVjdCBjbGtfY29yZSAqYzsKIAogCWlkLm9wcyA9 ICZhbGNoZW15X2Nsa29wc19jc3JjOwogCWlkLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICoq KWFsY2hlbXlfY2xrX2NzcmNfcGFyZW50czsKQEAgLTEwMjMsNyArMTAyMyw3IEBAIHN0YXRpYyBp bnQgX19pbml0IGFsY2hlbXlfY2xrX2luaXQodm9pZCkKIHsKIAlpbnQgY3R5cGUgPSBhbGNoZW15 X2dldF9jcHV0eXBlKCksIHJldCwgaTsKIAlzdHJ1Y3QgY2xrX2FsaWFzdGFibGUgKnQgPSBhbGNo ZW15X2Nsa19hbGlhc2VzOwotCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGNsa19jb3JlICpjOwog CiAJLyogUm9vdCBvZiB0aGUgQWxjaGVteSBjbG9jayB0cmVlOiBleHRlcm5hbCAxMk1IeiBjcnlz dGFsIG9zYyAqLwogCWMgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCBBTENIRU1ZX1JP T1RfQ0xLLCBOVUxMLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Ns b2NrLWNvbW1vbmNsay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLWNvbW1v bmNsay5jCmluZGV4IDZlYjYxNGEuLjgxYWZlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9w bGF0Zm9ybXMvNTEyeC9jbG9jay1jb21tb25jbGsuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZv cm1zLzUxMngvY2xvY2stY29tbW9uY2xrLmMKQEAgLTcwLDcgKzcwLDcgQEAgZW51bSB7CiB9Owog CiAvKiBkYXRhIHJlcXVpcmVkIGZvciB0aGUgT0YgY2xvY2sgcHJvdmlkZXIgcmVnaXN0cmF0aW9u ICovCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc1tNUEM1MTJ4X0NMS19MQVNUX1BSSVZBVEVdOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSAqY2xrc1tNUEM1MTJ4X0NMS19MQVNUX1BSSVZBVEVdOwog c3RhdGljIHN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwogCiAvKiBDQ00gcmVnaXN0 ZXIgYWNjZXNzICovCkBAIC0yMTgsMTIgKzIxOCwxMiBAQCBzdGF0aWMgYm9vbCBzb2NfaGFzX21j bGtfbXV4MF9jYW5pbih2b2lkKQogLyogY29tbW9uIGNsayBBUEkgd3JhcHBlcnMge3t7ICovCiAK IC8qIGNvbnZlbmllbmNlIHdyYXBwZXJzIGFyb3VuZCB0aGUgY29tbW9uIGNsayBBUEkgKi8KLXN0 YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqbXBjNTEyeF9jbGtfZml4ZWQoY29uc3QgY2hhciAqbmFt ZSwgaW50IHJhdGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtfY29yZSAqbXBjNTEyeF9jbGtf Zml4ZWQoY29uc3QgY2hhciAqbmFtZSwgaW50IHJhdGUpCiB7CiAJcmV0dXJuIGNsa19yZWdpc3Rl cl9maXhlZF9yYXRlKE5VTEwsIG5hbWUsIE5VTEwsIENMS19JU19ST09ULCByYXRlKTsKIH0KIAot c3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICptcGM1MTJ4X2Nsa19mYWN0b3IoCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBjbGtfY29yZSAqbXBjNTEyeF9jbGtfZmFjdG9yKAogCWNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCWludCBtdWwsIGludCBkaXYpCiB7CkBAIC0y MzQsNyArMjM0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICptcGM1MTJ4X2Nsa19mYWN0 b3IoCiAJCQkJCSBtdWwsIGRpdik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqbXBj NTEyeF9jbGtfZGl2aWRlcigKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICptcGM1MTJ4 X2Nsa19kaXZpZGVyKAogCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1l LCB1OCBjbGtmbGFncywKIAl1MzIgX19pb21lbSAqcmVnLCB1OCBwb3MsIHU4IGxlbiwgaW50IGRp dmZsYWdzKQogewpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAq bXBjNTEyeF9jbGtfZGl2aWRlcigKIAkJCQkgICAgcmVnLCBwb3MsIGxlbiwgZGl2ZmxhZ3MsICZj bGtsb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICptcGM1MTJ4X2Nsa19kaXZ0 YWJsZSgKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICptcGM1MTJ4X2Nsa19kaXZ0YWJs ZSgKIAljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAl1MzIgX19p b21lbSAqcmVnLCB1OCBwb3MsIHU4IGxlbiwKIAljb25zdCBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSAq ZGl2dGFiKQpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqbXBj NTEyeF9jbGtfZGl2dGFibGUoCiAJCQkJCSAgZGl2dGFiLCAmY2xrbG9jayk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgc3RydWN0IGNsayAqbXBjNTEyeF9jbGtfZ2F0ZWQoCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBjbGtfY29yZSAqbXBjNTEyeF9jbGtfZ2F0ZWQoCiAJY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqcGFyZW50X25hbWUsCiAJdTMyIF9faW9tZW0gKnJlZywgdTggcG9zKQogewpAQCAt MjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNsayAqbXBjNTEyeF9jbGtfZ2F0 ZWQoCiAJCQkJIHJlZywgcG9zLCAwLCAmY2xrbG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IGNsayAqbXBjNTEyeF9jbGtfbXV4ZWQoY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGNsa19jb3JlICptcGM1MTJ4X2Nsa19tdXhlZChjb25zdCBjaGFyICpuYW1lLAog CWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMsIGludCBwYXJlbnRfY291bnQsCiAJdTMyIF9faW9t ZW0gKnJlZywgdTggcG9zLCB1OCBsZW4pCiB7CkBAIC00MjIsNyArNDIyLDcgQEAgc3RhdGljIHZv aWQgbXBjNTEyeF9jbGtfc2V0dXBfcmVmX2Nsb2NrKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGlu dCBidXNfZnJlcSwKIAkJCQkJaW50ICpzeXNfbXVsLCBpbnQgKnN5c19kaXYsCiAJCQkJCWludCAq aXBzX2RpdikKIHsKLQlzdHJ1Y3QgY2xrICpvc2NfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqb3Nj X2NsazsKIAlpbnQgY2FsY19mcmVxOwogCiAJLyogZmV0Y2ggbXVsL2RpdiBmYWN0b3JzIGZyb20g dGhlIGhhcmR3YXJlICovCkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgbXBjNTEyeF9j bGtfc2V0dXBfcmVmX2Nsb2NrKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBidXNfZnJlcSwK IAkqaXBzX2RpdiA9IGdldF9iaXRfZmllbGQoJmNsa3JlZ3MtPnNjZnIxLCAyMywgMyk7CiAKIAkv KiBsb29rdXAgdGhlIG9zY2lsbGF0b3IgY2xvY2sgZm9yIGl0cyByYXRlICovCi0Jb3NjX2NsayA9 IG9mX2Nsa19nZXRfYnlfbmFtZShucCwgIm9zYyIpOworCW9zY19jbGsgPSBvZl9jbGtfcHJvdmlk ZXJfZ2V0X2J5X25hbWUobnAsICJvc2MiKTsKIAogCS8qCiAJICogZWl0aGVyIGRlc2NlbmQgZnJv bSBPU0MgdG8gUkVGIChhbmQgaW4gYnlwYXNzaW5nIHZlcmlmeSB0aGUKQEAgLTQ0NCw3ICs0NDQs NyBAQCBzdGF0aWMgdm9pZCBtcGM1MTJ4X2Nsa19zZXR1cF9yZWZfY2xvY2soc3RydWN0IGRldmlj ZV9ub2RlICpucCwgaW50IGJ1c19mcmVxLAogCSAqLwogCWlmICghSVNfRVJSKG9zY19jbGspKSB7 CiAJCWNsa3NbTVBDNTEyeF9DTEtfUkVGXSA9IG1wYzUxMnhfY2xrX2ZhY3RvcigicmVmIiwgIm9z YyIsIDEsIDEpOwotCQljYWxjX2ZyZXEgPSBjbGtfZ2V0X3JhdGUoY2xrc1tNUEM1MTJ4X0NMS19S RUZdKTsKKwkJY2FsY19mcmVxID0gY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsa3NbTVBDNTEyeF9D TEtfUkVGXSk7CiAJCWNhbGNfZnJlcSAqPSAqc3lzX211bDsKIAkJY2FsY19mcmVxIC89ICpzeXNf ZGl2OwogCQljYWxjX2ZyZXEgLz0gMjsKQEAgLTY0Nyw4ICs2NDcsOCBAQCBzdGF0aWMgdm9pZCBt cGM1MTJ4X2Nsa19zZXR1cF9tY2xrKHN0cnVjdCBtY2xrX3NldHVwX2RhdGEgKmVudHJ5LCBzaXpl X3QgaWR4KQogCSAqIC0gTUNMSyAwIGVuYWJsZWQKIAkgKiAtIE1DTEsgMSBmcm9tIE1DTEsgRElW CiAJICovCi0JZGl2ID0gY2xrX2dldF9yYXRlKGNsa3NbTVBDNTEyeF9DTEtfU1lTXSk7Ci0JZGl2 IC89IGNsa19nZXRfcmF0ZShjbGtzW01QQzUxMnhfQ0xLX0lQU10pOworCWRpdiA9IGNsa19wcm92 aWRlcl9nZXRfcmF0ZShjbGtzW01QQzUxMnhfQ0xLX1NZU10pOworCWRpdiAvPSBjbGtfcHJvdmlk ZXJfZ2V0X3JhdGUoY2xrc1tNUEM1MTJ4X0NMS19JUFNdKTsKIAlvdXRfYmUzMihtY2NyX3JlZywg KDAgPDwgMTYpKTsKIAlvdXRfYmUzMihtY2NyX3JlZywgKDAgPDwgMTYpIHwgKChkaXYgLSAxKSA8 PCAxNykpOwogCW91dF9iZTMyKG1jY3JfcmVnLCAoMSA8PCAxNikgfCAoKGRpdiAtIDEpIDw8IDE3 KSk7CkBAIC05MjUsMTIgKzkyNSwxMiBAQCBzdGF0aWMgdm9pZCBtcGM1MTJ4X2Nsa19zZXR1cF9j bG9ja190cmVlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBidXNmcmVxKQogCSAqIGNsYWlt ZWQgYnkgYW55IHBlcmlwaGVyYWwgZHJpdmVyLCB0byBub3QgaGF2ZSB0aGUgY2xvY2sKIAkgKiBz dWJzeXN0ZW0gZGlzYWJsZSB0aGVtIGxhdGUgYXQgc3RhcnR1cAogCSAqLwotCWNsa19wcmVwYXJl X2VuYWJsZShjbGtzW01QQzUxMnhfQ0xLX0RVTU1ZXSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNs a3NbTVBDNTEyeF9DTEtfRTMwMF0pOwkvKiBQb3dlclBDIENQVSAqLwotCWNsa19wcmVwYXJlX2Vu YWJsZShjbGtzW01QQzUxMnhfQ0xLX0REUl0pOwkvKiBEUkFNICovCi0JY2xrX3ByZXBhcmVfZW5h YmxlKGNsa3NbTVBDNTEyeF9DTEtfTUVNXSk7CS8qIFNSQU0gKi8KLQljbGtfcHJlcGFyZV9lbmFi bGUoY2xrc1tNUEM1MTJ4X0NMS19JUFNdKTsJLyogU29DIHBlcmlwaCAqLwotCWNsa19wcmVwYXJl X2VuYWJsZShjbGtzW01QQzUxMnhfQ0xLX0xQQ10pOwkvKiBib290IG1lZGlhICovCisJY2xrX3By b3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa3NbTVBDNTEyeF9DTEtfRFVNTVldKTsKKwljbGtfcHJv dmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tNUEM1MTJ4X0NMS19FMzAwXSk7CS8qIFBvd2VyUEMg Q1BVICovCisJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa3NbTVBDNTEyeF9DTEtfRERS XSk7CS8qIERSQU0gKi8KKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tNUEM1MTJ4 X0NMS19NRU1dKTsJLyogU1JBTSAqLworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtz W01QQzUxMnhfQ0xLX0lQU10pOwkvKiBTb0MgcGVyaXBoICovCisJY2xrX3Byb3ZpZGVyX3ByZXBh cmVfZW5hYmxlKGNsa3NbTVBDNTEyeF9DTEtfTFBDXSk7CS8qIGJvb3QgbWVkaWEgKi8KIH0KIAog LyoKQEAgLTk2OSw5ICs5NjksOSBAQCBzdGF0aWMgdm9pZCBtcGM1MTIxX2Nsa19wcm92aWRlX21p Z3JhdGlvbl9zdXBwb3J0KHZvaWQpCiAJICogaGFzIGF0dGFjaGVkIHRvIGJyaWRnZXMsIG90aGVy d2lzZSB0aGUgUENJIGNsb2NrIHJlbWFpbnMKIAkgKiB1bnVzZWQgYW5kIHNvIGl0IGdldHMgZGlz YWJsZWQKIAkgKi8KLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrc1tNUEM1MTJ4X0NMS19QU0MzX01D TEtdKTsvKiBzZXJpYWwgY29uc29sZSAqLworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShj bGtzW01QQzUxMnhfQ0xLX1BTQzNfTUNMS10pOy8qIHNlcmlhbCBjb25zb2xlICovCiAJaWYgKG9m X2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJwY2kiLCAiZnNsLG1wYzUxMjEtcGNpIikpCi0J CWNsa19wcmVwYXJlX2VuYWJsZShjbGtzW01QQzUxMnhfQ0xLX1BDSV0pOworCQljbGtfcHJvdmlk ZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tNUEM1MTJ4X0NMS19QQ0ldKTsKIH0KIAogLyoKQEAgLTk4 OCw4ICs5ODgsOCBAQCBzdGF0aWMgdm9pZCBtcGM1MTIxX2Nsa19wcm92aWRlX21pZ3JhdGlvbl9z dXBwb3J0KHZvaWQpCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIE5PREVfQ0hLKGNsa25hbWUsIGNs a2l0ZW0sIHJlZ25vZGUsIHJlZ2ZsYWcpIGRvIHsgXAotCXN0cnVjdCBjbGsgKmNsazsgXAotCWNs ayA9IG9mX2Nsa19nZXRfYnlfbmFtZShucCwgY2xrbmFtZSk7IFwKKwlzdHJ1Y3QgY2xrX2NvcmUg KmNsazsgXAorCWNsayA9IG9mX2Nsa19wcm92aWRlcl9nZXRfYnlfbmFtZShucCwgY2xrbmFtZSk7 IFwKIAlpZiAoSVNfRVJSKGNsaykpIHsgXAogCQljbGsgPSBjbGtpdGVtOyBcCiAJCWNsa19yZWdp c3Rlcl9jbGtkZXYoY2xrLCBjbGtuYW1lLCBkZXZuYW1lKTsgXApAQCAtOTk5LDcgKzk5OSw3IEBA IHN0YXRpYyB2b2lkIG1wYzUxMjFfY2xrX3Byb3ZpZGVfbWlncmF0aW9uX3N1cHBvcnQodm9pZCkK IAkJcHJfZGVidWcoImNsb2NrIGFsaWFzIG5hbWUgJyVzJyBmb3IgZGV2ICclcycgcG9pbnRlciAl cFxuIiwgXAogCQkJIGNsa25hbWUsIGRldm5hbWUsIGNsayk7IFwKIAl9IGVsc2UgeyBcCi0JCWNs a19wdXQoY2xrKTsgXAorCQlfX2Nsa19wdXQoY2xrKTsgXAogCX0gXAogfSB3aGlsZSAoMCkKIApA QCAtMTA5MCw3ICsxMDkwLDcgQEAgc3RhdGljIHZvaWQgbXBjNTEyMV9jbGtfcHJvdmlkZV9iYWNr d2FyZHNfY29tcGF0KHZvaWQpCiAJICogd29ya2Fyb3VuZCBvYnNvbGV0ZQogCSAqLwogCWlmIChk aWRfcmVnaXN0ZXIgJiBESURfUkVHX0kyQykKLQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsa3NbTVBD NTEyeF9DTEtfSTJDXSk7CisJCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtzW01QQzUx MnhfQ0xLX0kyQ10pOwogCiAJRk9SX05PREVTKCJmc2wsbXBjNTEyMS1kaXUiKSB7CiAJCU5PREVf UFJFUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX2xwc3MuYyBiL2RyaXZlcnMvYWNw aS9hY3BpX2xwc3MuYwppbmRleCBiY2JkYmQyLi5mNGM2Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2FjcGkvYWNwaV9scHNzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbHBzcy5jCkBAIC0xMSw3 ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGst cHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTc4LDcgKzc3LDcgQEAgc3Ry dWN0IGxwc3NfcHJpdmF0ZV9kYXRhIHsKIAl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKIAlyZXNv dXJjZV9zaXplX3QgbW1pb19zaXplOwogCXVuc2lnbmVkIGludCBmaXhlZF9jbGtfcmF0ZTsKLQlz dHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29uc3Qgc3RydWN0IGxw c3NfZGV2aWNlX2Rlc2MgKmRldl9kZXNjOwogCXUzMiBwcnZfcmVnX2N0eFtMUFNTX1BSVl9SRUdf Q09VTlRdOwogfTsKQEAgLTIyOSw3ICsyMjgsNyBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX2Rldmlj ZV9jbG9jayhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCiB7CiAJY29uc3Qgc3RydWN0IGxwc3Nf ZGV2aWNlX2Rlc2MgKmRldl9kZXNjID0gcGRhdGEtPmRldl9kZXNjOwogCWNvbnN0IGNoYXIgKmRl dm5hbWUgPSBkZXZfbmFtZSgmYWRldi0+ZGV2KTsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRS KC1FTk9ERVYpOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gRVJSX1BUUigtRU5PREVWKTsKIAlz dHJ1Y3QgbHBzc19jbGtfZGF0YSAqY2xrX2RhdGE7CiAJY29uc3QgY2hhciAqcGFyZW50LCAqY2xr X25hbWU7CiAJdm9pZCBfX2lvbWVtICpwcnZfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L2F0OTEvY2xrLW1haW4uYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLW1haW4uYwppbmRleCA1OWZh M2NjLi4xMWJjZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1tYWluLmMKKysr IGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstbWFpbi5jCkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBjbGtfb3BzIG1haW5fb3NjX29wcyA9IHsKIAkuaXNfcHJlcGFyZWQgPSBj bGtfbWFpbl9vc2NfaXNfcHJlcGFyZWQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5p dAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtfcmVnaXN0ZXJfbWFp bl9vc2Moc3RydWN0IGF0OTFfcG1jICpwbWMsCiAJCQkgICB1bnNpZ25lZCBpbnQgaXJxLAogCQkJ ICAgY29uc3QgY2hhciAqbmFtZSwKQEAgLTE0Nyw3ICsxNDcsNyBAQCBhdDkxX2Nsa19yZWdpc3Rl cl9tYWluX29zYyhzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBj bGtfbWFpbl9vc2MgKm9zYzsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtf Y29yZSAqY2xrID0gTlVMTDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJaWYgKCFw bWMgfHwgIWlycSB8fCAhbmFtZSB8fCAhcGFyZW50X25hbWUpCkBAIC0xOTIsNyArMTkyLDcgQEAg YXQ5MV9jbGtfcmVnaXN0ZXJfbWFpbl9vc2Moc3RydWN0IGF0OTFfcG1jICpwbWMsCiB2b2lkIF9f aW5pdCBvZl9hdDkxcm05MjAwX2Nsa19tYWluX29zY19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLAogCQkJCQkgICAgIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQogewotCXN0cnVjdCBjbGsgKmNs azsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWNvbnN0IGNo YXIgKm5hbWUgPSBucC0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKQEAgLTI5MSw3 ICsyOTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbWFpbl9yY19vc2Nfb3BzID0g ewogCS5yZWNhbGNfYWNjdXJhY3kgPSBjbGtfbWFpbl9yY19vc2NfcmVjYWxjX2FjY3VyYWN5LAog fTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg KiBfX2luaXQKIGF0OTFfY2xrX3JlZ2lzdGVyX21haW5fcmNfb3NjKHN0cnVjdCBhdDkxX3BtYyAq cG1jLAogCQkJICAgICAgdW5zaWduZWQgaW50IGlycSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5h bWUsCkBAIC0yOTksNyArMjk5LDcgQEAgYXQ5MV9jbGtfcmVnaXN0ZXJfbWFpbl9yY19vc2Moc3Ry dWN0IGF0OTFfcG1jICpwbWMsCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY2xrX21haW5fcmNfb3Nj ICpvc2M7Ci0Jc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9 IE5VTEw7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWlmICghcG1jIHx8ICFpcnEg fHwgIW5hbWUgfHwgIWZyZXF1ZW5jeSkKQEAgLTM0MCw3ICszNDAsNyBAQCBhdDkxX2Nsa19yZWdp c3Rlcl9tYWluX3JjX29zYyhzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKIHZvaWQgX19pbml0IG9mX2F0 OTFzYW05eDVfY2xrX21haW5fcmNfb3NjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJ CQkJCQlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0 IGNsa19jb3JlICpjbGs7CiAJdW5zaWduZWQgaW50IGlycTsKIAl1MzIgZnJlcXVlbmN5ID0gMDsK IAl1MzIgYWNjdXJhY3kgPSAwOwpAQCAtNDI0LDEzICs0MjQsMTMgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBjbGtfb3BzIHJtOTIwMF9tYWluX29wcyA9IHsKIAkucmVjYWxjX3JhdGUgPSBjbGtfcm05 MjAwX21haW5fcmVjYWxjX3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAor c3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtfcmVnaXN0ZXJfcm05MjAw X21haW4oc3RydWN0IGF0OTFfcG1jICpwbWMsCiAJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAog CQkJICAgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUpCiB7CiAJc3RydWN0IGNsa19ybTkyMDBf bWFpbiAqY2xrbWFpbjsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfY29y ZSAqY2xrID0gTlVMTDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJaWYgKCFwbWMg fHwgIW5hbWUpCkBAIC00NjIsNyArNDYyLDcgQEAgYXQ5MV9jbGtfcmVnaXN0ZXJfcm05MjAwX21h aW4oc3RydWN0IGF0OTFfcG1jICpwbWMsCiB2b2lkIF9faW5pdCBvZl9hdDkxcm05MjAwX2Nsa19t YWluX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCSBzdHJ1Y3QgYXQ5MV9wbWMg KnBtYykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29u c3QgY2hhciAqcGFyZW50X25hbWU7CiAJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOwogCkBA IC01NTUsNyArNTU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbTl4NV9tYWlu X29wcyA9IHsKIAkuZ2V0X3BhcmVudCA9IGNsa19zYW05eDVfbWFpbl9nZXRfcGFyZW50LAogfTsK IAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBf X2luaXQKIGF0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9tYWluKHN0cnVjdCBhdDkxX3BtYyAqcG1j LAogCQkJICAgICAgdW5zaWduZWQgaW50IGlycSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUs CkBAIC01NjQsNyArNTY0LDcgQEAgYXQ5MV9jbGtfcmVnaXN0ZXJfc2FtOXg1X21haW4oc3RydWN0 IGF0OTFfcG1jICpwbWMsCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluICpj bGttYWluOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsg PSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXBtYyB8fCAhaXJx IHx8ICFuYW1lKQpAQCAtNjA3LDcgKzYwNyw3IEBAIGF0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9t YWluKHN0cnVjdCBhdDkxX3BtYyAqcG1jLAogdm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtf bWFpbl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkgc3RydWN0IGF0OTFfcG1j ICpwbWMpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNv bnN0IGNoYXIgKnBhcmVudF9uYW1lc1syXTsKIAlpbnQgbnVtX3BhcmVudHM7CiAJdW5zaWduZWQg aW50IGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLW1hc3Rlci5jIGIvZHJp dmVycy9jbGsvYXQ5MS9jbGstbWFzdGVyLmMKaW5kZXggYzFhZjgwYi4uOTVhZTFiNiAxMDA2NDQK LS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstbWFzdGVyLmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5 MS9jbGstbWFzdGVyLmMKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgbWFzdGVyX29wcyA9IHsKIAkuZ2V0X3BhcmVudCA9IGNsa19tYXN0ZXJfZ2V0X3BhcmVu dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3RydWN0IGNsa19j b3JlICogX19pbml0CiBhdDkxX2Nsa19yZWdpc3Rlcl9tYXN0ZXIoc3RydWN0IGF0OTFfcG1jICpw bWMsIHVuc2lnbmVkIGludCBpcnEsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBudW1fcGFyZW50 cywKIAkJY29uc3QgY2hhciAqKnBhcmVudF9uYW1lcywKQEAgLTE0MCw3ICsxNDAsNyBAQCBhdDkx X2Nsa19yZWdpc3Rlcl9tYXN0ZXIoc3RydWN0IGF0OTFfcG1jICpwbWMsIHVuc2lnbmVkIGludCBp cnEsCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY2xrX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBj bGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsgPSBOVUxMOwogCXN0cnVjdCBj bGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXBtYyB8fCAhaXJxIHx8ICFuYW1lIHx8ICFudW1f cGFyZW50cyB8fCAhcGFyZW50X25hbWVzKQpAQCAtMjE2LDcgKzIxNiw3IEBAIHN0YXRpYyB2b2lk IF9faW5pdAogb2ZfYXQ5MV9jbGtfbWFzdGVyX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAs IHN0cnVjdCBhdDkxX3BtYyAqcG1jLAogCQkJIGNvbnN0IHN0cnVjdCBjbGtfbWFzdGVyX2xheW91 dCAqbGF5b3V0KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsK IAlpbnQgbnVtX3BhcmVudHM7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IGlycTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBlcmlwaGVyYWwuYyBiL2RyaXZlcnMvY2xrL2F0OTEv Y2xrLXBlcmlwaGVyYWwuYwppbmRleCA1OTdmZWQ0Li5jZGY4ZThhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9hdDkxL2Nsay1wZXJpcGhlcmFsLmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGst cGVyaXBoZXJhbC5jCkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgcGVyaXBoZXJhbF9vcHMgPSB7CiAJLmlzX2VuYWJsZWQgPSBjbGtfcGVyaXBoZXJhbF9p c19lbmFibGVkLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGF0OTFfY2xrX3JlZ2lzdGVyX3BlcmlwaGVyYWwoc3RydWN0 IGF0OTFfcG1jICpwbWMsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLCB1MzIgaWQpCiB7CiAJc3RydWN0IGNsa19wZXJpcGhlcmFsICpwZXJpcGg7Ci0J c3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IE5VTEw7CiAJ c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWlmICghcG1jIHx8ICFuYW1lIHx8ICFwYXJl bnRfbmFtZSB8fCBpZCA+IFBFUklQSEVSQUxfSURfTUFYKQpAQCAtMTM0LDcgKzEzNCw3IEBAIGF0 OTFfY2xrX3JlZ2lzdGVyX3BlcmlwaGVyYWwoc3RydWN0IGF0OTFfcG1jICpwbWMsIGNvbnN0IGNo YXIgKm5hbWUsCiAKIHN0YXRpYyB2b2lkIGNsa19zYW05eDVfcGVyaXBoZXJhbF9hdXRvZGl2KHN0 cnVjdCBjbGtfc2FtOXg1X3BlcmlwaGVyYWwgKnBlcmlwaCkKIHsKLQlzdHJ1Y3QgY2xrICpwYXJl bnQ7CisJc3RydWN0IGNsa19jb3JlICpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0 ZTsKIAlpbnQgc2hpZnQgPSAwOwogCkBAIC0zMDksMTMgKzMwOSwxMyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGNsa19vcHMgc2FtOXg1X3BlcmlwaGVyYWxfb3BzID0gewogCS5zZXRfcmF0ZSA9IGNs a19zYW05eDVfcGVyaXBoZXJhbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICog X19pbml0CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICogX19pbml0CiBhdDkxX2Nsa19yZWdpc3Rl cl9zYW05eDVfcGVyaXBoZXJhbChzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywgY29uc3QgY2hhciAqbmFt ZSwKIAkJCQkgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHUzMiBpZCwKIAkJCQkgICAgY29u c3Qgc3RydWN0IGNsa19yYW5nZSAqcmFuZ2UpCiB7CiAJc3RydWN0IGNsa19zYW05eDVfcGVyaXBo ZXJhbCAqcGVyaXBoOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3Jl ICpjbGsgPSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXBtYyB8 fCAhbmFtZSB8fCAhcGFyZW50X25hbWUpCkBAIC0zNTIsNyArMzUyLDcgQEAgb2ZfYXQ5MV9jbGtf cGVyaXBoX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBhdDkxX3BtYyAqcG1j LCB1OCB0eXBlKQogewogCWludCBudW07CiAJdTMyIGlkOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKIAljb25zdCBj aGFyICpuYW1lOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGVyaXBoY2xrbnA7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1wbGwuYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbC5j CmluZGV4IDZlYzc5ZGIuLjZhMWI5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2F0OTEvY2xr LXBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbC5jCkBAIC0yOTksMTQgKzI5OSwx NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgcGxsX29wcyA9IHsKIAkuc2V0X3JhdGUg PSBjbGtfcGxsX3NldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0 YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGF0OTFfY2xrX3JlZ2lzdGVyX3BsbChzdHJ1 Y3QgYXQ5MV9wbWMgKnBtYywgdW5zaWduZWQgaW50IGlycSwgY29uc3QgY2hhciAqbmFtZSwKIAkJ ICAgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHU4IGlkLAogCQkgICAgICBjb25zdCBzdHJ1 Y3QgY2xrX3BsbF9sYXlvdXQgKmxheW91dCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGNsa19wbGxf Y2hhcmFjdGVyaXN0aWNzICpjaGFyYWN0ZXJpc3RpY3MpCiB7CiAJc3RydWN0IGNsa19wbGwgKnBs bDsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gTlVM TDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCWludCByZXQ7CiAJaW50IG9mZnNldCA9 IFBMTF9SRUcoaWQpOwpAQCAtNDc2LDcgKzQ3Niw3IEBAIG9mX2F0OTFfY2xrX3BsbF9zZXR1cChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKIHsKIAl1MzIgaWQ7 CiAJdW5zaWduZWQgaW50IGlycTsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3Jl ICpjbGs7CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJY29uc3QgY2hhciAqbmFtZSA9IG5w LT5uYW1lOwogCXN0cnVjdCBjbGtfcGxsX2NoYXJhY3RlcmlzdGljcyAqY2hhcmFjdGVyaXN0aWNz OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstcGxsZGl2LmMgYi9kcml2ZXJzL2Ns ay9hdDkxL2Nsay1wbGxkaXYuYwppbmRleCBlYTIyNjU2Li5mODIwNGQ4IDEwMDY0NAotLS0gYS9k cml2ZXJzL2Nsay9hdDkxL2Nsay1wbGxkaXYuYworKysgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1w bGxkaXYuYwpAQCAtNzksMTIgKzc5LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBw bGxkaXZfb3BzID0gewogCS5zZXRfcmF0ZSA9IGNsa19wbGxkaXZfc2V0X3JhdGUsCiB9OwogCi1z dGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5p dAogYXQ5MV9jbGtfcmVnaXN0ZXJfcGxsZGl2KHN0cnVjdCBhdDkxX3BtYyAqcG1jLCBjb25zdCBj aGFyICpuYW1lLAogCQkJIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lKQogewogCXN0cnVjdCBjbGtf cGxsZGl2ICpwbGxkaXY7Ci0Jc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsayA9IE5VTEw7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXBsbGRpdiA9 IGt6YWxsb2Moc2l6ZW9mKCpwbGxkaXYpLCBHRlBfS0VSTkVMKTsKQEAgLTExMSw3ICsxMTEsNyBA QCBhdDkxX2Nsa19yZWdpc3Rlcl9wbGxkaXYoc3RydWN0IGF0OTFfcG1jICpwbWMsIGNvbnN0IGNo YXIgKm5hbWUsCiBzdGF0aWMgdm9pZCBfX2luaXQKIG9mX2F0OTFfY2xrX3BsbGRpdl9zZXR1cChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKIHsKLQlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29uc3QgY2hhciAqcGFyZW50X25h bWU7CiAJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay9hdDkxL2Nsay1wcm9ncmFtbWFibGUuYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXByb2dy YW1tYWJsZS5jCmluZGV4IDYyZTI1MDkuLmI3MmU5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xr L2F0OTEvY2xrLXByb2dyYW1tYWJsZS5jCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXByb2dy YW1tYWJsZS5jCkBAIC01Nyw5ICs1Nyw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wcm9n cmFtbWFibGVfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCiBzdGF0aWMgbG9uZyBjbGtf cHJvZ3JhbW1hYmxlX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCQkJCQkgICAg dW5zaWduZWQgbG9uZyByYXRlLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRf cmF0ZSwKLQkJCQkJICAgIHN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9jbGspCisJCQkJCSAgICBz dHJ1Y3QgY2xrX2NvcmUgKipiZXN0X3BhcmVudF9jbGspCiB7Ci0Jc3RydWN0IGNsayAqcGFyZW50 ID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVudCA9IE5VTEw7CiAJbG9uZyBiZXN0X3Jh dGUgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAJdW5zaWduZWQgbG9u ZyB0bXBfcmF0ZTsKQEAgLTE2OSwxNCArMTY5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X29wcyBwcm9ncmFtbWFibGVfb3BzID0gewogCS5zZXRfcmF0ZSA9IGNsa19wcm9ncmFtbWFibGVf c2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAorc3RhdGljIHN0cnVj dCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtfcmVnaXN0ZXJfcHJvZ3JhbW1hYmxlKHN0cnVj dCBhdDkxX3BtYyAqcG1jLAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg KipwYXJlbnRfbmFtZXMsCiAJCQkgICAgICAgdTggbnVtX3BhcmVudHMsIHU4IGlkLAogCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBjbGtfcHJvZ3JhbW1hYmxlX2xheW91dCAqbGF5b3V0KQogewogCXN0 cnVjdCBjbGtfcHJvZ3JhbW1hYmxlICpwcm9nOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJ c3RydWN0IGNsa19jb3JlICpjbGsgPSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 CiAKIAlpZiAoaWQgPiBQUk9HX0lEX01BWCkKQEAgLTIyOSw3ICsyMjksNyBAQCBvZl9hdDkxX2Ns a19wcm9nX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBhdDkxX3BtYyAqcG1j LAogCWludCBudW07CiAJdTMyIGlkOwogCWludCBpOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAlpbnQgbnVtX3BhcmVudHM7CiAJY29uc3QgY2hhciAqcGFyZW50 X25hbWVzW1BST0dfU09VUkNFX01BWF07CiAJY29uc3QgY2hhciAqbmFtZTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cuYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cu YwppbmRleCAwMzAwYzQ2Li5kNTBmZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL2Ns ay1zbG93LmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstc2xvdy5jCkBAIC0xMTcsNyArMTE3 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNsb3dfb3NjX29wcyA9IHsKIAkuaXNf cHJlcGFyZWQgPSBjbGtfc2xvd19vc2NfaXNfcHJlcGFyZWQsCiB9OwogCi1zdGF0aWMgc3RydWN0 IGNsayAqIF9faW5pdAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtf cmVnaXN0ZXJfc2xvd19vc2Modm9pZCBfX2lvbWVtICpzY2tjciwKIAkJCSAgIGNvbnN0IGNoYXIg Km5hbWUsCiAJCQkgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKQEAgLTEyNSw3ICsxMjUsNyBA QCBhdDkxX2Nsa19yZWdpc3Rlcl9zbG93X29zYyh2b2lkIF9faW9tZW0gKnNja2NyLAogCQkJICAg Ym9vbCBieXBhc3MpCiB7CiAJc3RydWN0IGNsa19zbG93X29zYyAqb3NjOwotCXN0cnVjdCBjbGsg KmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsgPSBOVUxMOwogCXN0cnVjdCBjbGtf aW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXNja2NyIHx8ICFuYW1lIHx8ICFwYXJlbnRfbmFtZSkK QEAgLTE1OSw3ICsxNTksNyBAQCBhdDkxX2Nsa19yZWdpc3Rlcl9zbG93X29zYyh2b2lkIF9faW9t ZW0gKnNja2NyLAogdm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtfc2xvd19vc2Nfc2V0dXAo c3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkJICAgICB2b2lkIF9faW9tZW0gKnNja2NyKQog ewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFy ICpwYXJlbnRfbmFtZTsKIAljb25zdCBjaGFyICpuYW1lID0gbnAtPm5hbWU7CiAJdTMyIHN0YXJ0 dXA7CkBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNsb3df cmNfb3NjX29wcyA9IHsKIAkucmVjYWxjX2FjY3VyYWN5ID0gY2xrX3Nsb3dfcmNfb3NjX3JlY2Fs Y19hY2N1cmFjeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlICogX19pbml0CiBhdDkxX2Nsa19yZWdpc3Rlcl9zbG93X3JjX29zYyh2b2lk IF9faW9tZW0gKnNja2NyLAogCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgIHVu c2lnbmVkIGxvbmcgZnJlcXVlbmN5LApAQCAtMjM3LDcgKzIzNyw3IEBAIGF0OTFfY2xrX3JlZ2lz dGVyX3Nsb3dfcmNfb3NjKHZvaWQgX19pb21lbSAqc2NrY3IsCiAJCQkgICAgICB1bnNpZ25lZCBs b25nIHN0YXJ0dXApCiB7CiAJc3RydWN0IGNsa19zbG93X3JjX29zYyAqb3NjOwotCXN0cnVjdCBj bGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsgPSBOVUxMOwogCXN0cnVjdCBj bGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXNja2NyIHx8ICFuYW1lKQpAQCAtMjY5LDcgKzI2 OSw3IEBAIGF0OTFfY2xrX3JlZ2lzdGVyX3Nsb3dfcmNfb3NjKHZvaWQgX19pb21lbSAqc2NrY3Is CiB2b2lkIF9faW5pdCBvZl9hdDkxc2FtOXg1X2Nsa19zbG93X3JjX29zY19zZXR1cChzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wLAogCQkJCQkJdm9pZCBfX2lvbWVtICpzY2tjcikKIHsKLQlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJdTMyIGZyZXF1ZW5jeSA9IDA7CiAJ dTMyIGFjY3VyYWN5ID0gMDsKIAl1MzIgc3RhcnR1cCA9IDA7CkBAIC0zMjcsMTQgKzMyNywxNCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2FtOXg1X3Nsb3dfb3BzID0gewogCS5nZXRf cGFyZW50ID0gY2xrX3NhbTl4NV9zbG93X2dldF9wYXJlbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0 IGNsayAqIF9faW5pdAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtf cmVnaXN0ZXJfc2FtOXg1X3Nsb3codm9pZCBfX2lvbWVtICpzY2tjciwKIAkJCSAgICAgIGNvbnN0 IGNoYXIgKm5hbWUsCiAJCQkgICAgICBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAogCQkJICAg ICAgaW50IG51bV9wYXJlbnRzKQogewogCXN0cnVjdCBjbGtfc2FtOXg1X3Nsb3cgKnNsb3djazsK LQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gTlVMTDsK IAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJaWYgKCFzY2tjciB8fCAhbmFtZSB8fCAh cGFyZW50X25hbWVzIHx8ICFudW1fcGFyZW50cykKQEAgLTM2NCw3ICszNjQsNyBAQCBhdDkxX2Ns a19yZWdpc3Rlcl9zYW05eDVfc2xvdyh2b2lkIF9faW9tZW0gKnNja2NyLAogdm9pZCBfX2luaXQg b2ZfYXQ5MXNhbTl4NV9jbGtfc2xvd19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJ CQkgdm9pZCBfX2lvbWVtICpzY2tjcikKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGs7CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWVzWzJdOwogCWludCBudW1fcGFy ZW50czsKIAljb25zdCBjaGFyICpuYW1lID0gbnAtPm5hbWU7CkBAIC00MDEsMTQgKzQwMSwxNCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2FtOTI2MF9zbG93X29wcyA9IHsKIAkuZ2V0 X3BhcmVudCA9IGNsa19zYW05MjYwX3Nsb3dfZ2V0X3BhcmVudCwKIH07CiAKLXN0YXRpYyBzdHJ1 Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICogX19pbml0CiBhdDkxX2Ns a19yZWdpc3Rlcl9zYW05MjYwX3Nsb3coc3RydWN0IGF0OTFfcG1jICpwbWMsCiAJCQkgICAgICAg Y29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgICBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAog CQkJICAgICAgIGludCBudW1fcGFyZW50cykKIHsKIAlzdHJ1Y3QgY2xrX3NhbTkyNjBfc2xvdyAq c2xvd2NrOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsg PSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoIXBtYyB8fCAhbmFt ZSkKQEAgLTQ0MCw3ICs0NDAsNyBAQCBhdDkxX2Nsa19yZWdpc3Rlcl9zYW05MjYwX3Nsb3coc3Ry dWN0IGF0OTFfcG1jICpwbWMsCiB2b2lkIF9faW5pdCBvZl9hdDkxc2FtOTI2MF9jbGtfc2xvd19z ZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkgIHN0cnVjdCBhdDkxX3BtYyAqcG1j KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBj aGFyICpwYXJlbnRfbmFtZXNbMl07CiAJaW50IG51bV9wYXJlbnRzOwogCWNvbnN0IGNoYXIgKm5h bWUgPSBucC0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNtZC5jIGIv ZHJpdmVycy9jbGsvYXQ5MS9jbGstc21kLmMKaW5kZXggMTQ0ZDQ3ZS4uODgyMGI4NCAxMDA2NDQK LS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstc21kLmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5MS9j bGstc21kLmMKQEAgLTExMywxMiArMTEzLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29w cyBhdDkxc2FtOXg1X3NtZF9vcHMgPSB7CiAJLnNldF9yYXRlID0gYXQ5MXNhbTl4NV9jbGtfc21k X3NldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGF0OTFzYW05eDVfY2xrX3JlZ2lzdGVyX3NtZChzdHJ1Y3Qg YXQ5MV9wbWMgKnBtYywgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICBjb25zdCBjaGFyICoqcGFy ZW50X25hbWVzLCB1OCBudW1fcGFyZW50cykKIHsKIAlzdHJ1Y3QgYXQ5MXNhbTl4NV9jbGtfc21k ICpzbWQ7Ci0Jc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9 IE5VTEw7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXNtZCA9IGt6YWxsb2Moc2l6 ZW9mKCpzbWQpLCBHRlBfS0VSTkVMKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBhdDkxc2FtOXg1X2Ns a19yZWdpc3Rlcl9zbWQoc3RydWN0IGF0OTFfcG1jICpwbWMsIGNvbnN0IGNoYXIgKm5hbWUsCiB2 b2lkIF9faW5pdCBvZl9hdDkxc2FtOXg1X2Nsa19zbWRfc2V0dXAoc3RydWN0IGRldmljZV9ub2Rl ICpucCwKIAkJCQkJc3RydWN0IGF0OTFfcG1jICpwbWMpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCBpOwogCWludCBudW1fcGFyZW50czsKIAljb25z dCBjaGFyICpwYXJlbnRfbmFtZXNbU01EX1NPVVJDRV9NQVhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9jbGsvYXQ5MS9jbGstc3lzdGVtLmMgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zeXN0ZW0uYwpp bmRleCBhNzZkMDNmLi43ZjQ4Y2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1z eXN0ZW0uYworKysgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zeXN0ZW0uYwpAQCAtOTksMTIgKzk5 LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzeXN0ZW1fb3BzID0gewogCS5pc19w cmVwYXJlZCA9IGNsa19zeXN0ZW1faXNfcHJlcGFyZWQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNs ayAqIF9faW5pdAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MV9jbGtfcmVn aXN0ZXJfc3lzdGVtKHN0cnVjdCBhdDkxX3BtYyAqcG1jLCBjb25zdCBjaGFyICpuYW1lLAogCQkJ IGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1OCBpZCwgaW50IGlycSkKIHsKIAlzdHJ1Y3QgY2xr X3N5c3RlbSAqc3lzOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3Jl ICpjbGsgPSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJaW50IHJldDsKIApA QCAtMTQ3LDcgKzE0Nyw3IEBAIG9mX2F0OTFfY2xrX3N5c19zZXR1cChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLCBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKIAlpbnQgbnVtOwogCWludCBpcnEgPSAwOwog CXUzMiBpZDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29u c3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN5c2Nsa25wOwogCWNvbnN0IGNo YXIgKnBhcmVudF9uYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstdXNiLmMg Yi9kcml2ZXJzL2Nsay9hdDkxL2Nsay11c2IuYwppbmRleCAyNGI1YjAyLi45NGI1ODcxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay11c2IuYworKysgYi9kcml2ZXJzL2Nsay9hdDkx L2Nsay11c2IuYwpAQCAtMTYyLDEyICsxNjIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtf b3BzIGF0OTFzYW05bjEyX3VzYl9vcHMgPSB7CiAJLnNldF9yYXRlID0gYXQ5MXNhbTl4NV9jbGtf dXNiX3NldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBz dHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGF0OTFzYW05eDVfY2xrX3JlZ2lzdGVyX3VzYihzdHJ1 Y3QgYXQ5MV9wbWMgKnBtYywgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICBjb25zdCBjaGFyICoq cGFyZW50X25hbWVzLCB1OCBudW1fcGFyZW50cykKIHsKIAlzdHJ1Y3QgYXQ5MXNhbTl4NV9jbGtf dXNiICp1c2I7Ci0Jc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNs ayA9IE5VTEw7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXVzYiA9IGt6YWxsb2Mo c2l6ZW9mKCp1c2IpLCBHRlBfS0VSTkVMKTsKQEAgLTE5MCwxMiArMTkwLDEyIEBAIGF0OTFzYW05 eDVfY2xrX3JlZ2lzdGVyX3VzYihzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywgY29uc3QgY2hhciAqbmFt ZSwKIAlyZXR1cm4gY2xrOwogfQogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAorc3RhdGlj IHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYXQ5MXNhbTluMTJfY2xrX3JlZ2lzdGVyX3VzYihz dHJ1Y3QgYXQ5MV9wbWMgKnBtYywgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgY29uc3QgY2hh ciAqcGFyZW50X25hbWUpCiB7CiAJc3RydWN0IGF0OTFzYW05eDVfY2xrX3VzYiAqdXNiOwotCXN0 cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19jb3JlICpjbGsgPSBOVUxMOwogCXN0 cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAl1c2IgPSBremFsbG9jKHNpemVvZigqdXNiKSwg R0ZQX0tFUk5FTCk7CkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGxvbmcgYXQ5MXJtOTIwMF9j bGtfdXNiX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK IAkJCQkJICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKIHsKIAlzdHJ1Y3QgYXQ5MXJtOTIw MF9jbGtfdXNiICp1c2IgPSB0b19hdDkxcm05MjAwX2Nsa191c2IoaHcpOwotCXN0cnVjdCBjbGsg KnBhcmVudCA9IF9fY2xrX2dldF9wYXJlbnQoaHctPmNsayk7CisJc3RydWN0IGNsa19jb3JlICpw YXJlbnQgPSBfX2Nsa19nZXRfcGFyZW50KGh3LT5jbGspOwogCXVuc2lnbmVkIGxvbmcgYmVzdHJh dGUgPSAwOwogCWludCBiZXN0ZGlmZiA9IC0xOwogCXVuc2lnbmVkIGxvbmcgdG1wcmF0ZTsKQEAg LTMwNSwxMiArMzA1LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBhdDkxcm05MjAw X3VzYl9vcHMgPSB7CiAJLnNldF9yYXRlID0gYXQ5MXJtOTIwMF9jbGtfdXNiX3NldF9yYXRlLAog fTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg KiBfX2luaXQKIGF0OTFybTkyMDBfY2xrX3JlZ2lzdGVyX3VzYihzdHJ1Y3QgYXQ5MV9wbWMgKnBt YywgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgY29u c3QgdTMyICpkaXZpc29ycykKIHsKIAlzdHJ1Y3QgYXQ5MXJtOTIwMF9jbGtfdXNiICp1c2I7Ci0J c3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IE5VTEw7CiAJ c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXVzYiA9IGt6YWxsb2Moc2l6ZW9mKCp1c2Ip LCBHRlBfS0VSTkVMKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBhdDkxcm05MjAwX2Nsa19yZWdpc3Rl cl91c2Ioc3RydWN0IGF0OTFfcG1jICpwbWMsIGNvbnN0IGNoYXIgKm5hbWUsCiB2b2lkIF9faW5p dCBvZl9hdDkxc2FtOXg1X2Nsa191c2Jfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJ CQkJc3RydWN0IGF0OTFfcG1jICpwbWMpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCWludCBpOwogCWludCBudW1fcGFyZW50czsKIAljb25zdCBjaGFyICpw YXJlbnRfbmFtZXNbVVNCX1NPVVJDRV9NQVhdOwpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgX19p bml0IG9mX2F0OTFzYW05eDVfY2xrX3VzYl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAog dm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTluMTJfY2xrX3VzYl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLAogCQkJCQkgc3RydWN0IGF0OTFfcG1jICpwbWMpCiB7Ci0Jc3RydWN0IGNsayAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCWNv bnN0IGNoYXIgKm5hbWUgPSBucC0+bmFtZTsKIApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgX19p bml0IG9mX2F0OTFzYW05bjEyX2Nsa191c2Jfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwK IHZvaWQgX19pbml0IG9mX2F0OTFybTkyMDBfY2xrX3VzYl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLAogCQkJCQlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJY29u c3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOwogCXUzMiBkaXZpc29yc1s0XSA9IHswLCAwLCAwLCAw fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXV0bWkuYyBiL2RyaXZlcnMvY2xr L2F0OTEvY2xrLXV0bWkuYwppbmRleCBhZTMyNjNiLi4wNTAyMDUwIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9hdDkxL2Nsay11dG1pLmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstdXRtaS5j CkBAIC05MiwxMyArOTIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHV0bWlfb3Bz ID0gewogCS5yZWNhbGNfcmF0ZSA9IGNsa191dG1pX3JlY2FsY19yYXRlLAogfTsKIAotc3RhdGlj IHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGF0 OTFfY2xrX3JlZ2lzdGVyX3V0bWkoc3RydWN0IGF0OTFfcG1jICpwbWMsIHVuc2lnbmVkIGludCBp cnEsCiAJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSkK IHsKIAlpbnQgcmV0OwogCXN0cnVjdCBjbGtfdXRtaSAqdXRtaTsKLQlzdHJ1Y3QgY2xrICpjbGsg PSBOVUxMOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gTlVMTDsKIAlzdHJ1Y3QgY2xrX2luaXRf ZGF0YSBpbml0OwogCiAJdXRtaSA9IGt6YWxsb2Moc2l6ZW9mKCp1dG1pKSwgR0ZQX0tFUk5FTCk7 CkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0CiBvZl9hdDkxX2Nsa191dG1p X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQogewog CXVuc2lnbmVkIGludCBpcnE7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAq Y2xrOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBucC0+ bmFtZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYmNtL2Nsay1rb25hLXNldHVwLmMgYi9k cml2ZXJzL2Nsay9iY20vY2xrLWtvbmEtc2V0dXAuYwppbmRleCBlNWFlZGVkLi4xMjJlN2IwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay9iY20vY2xrLWtvbmEtc2V0dXAuYworKysgYi9kcml2ZXJz L2Nsay9iY20vY2xrLWtvbmEtc2V0dXAuYwpAQCAtNjk3LDcgKzY5Nyw3IEBAIHN0YXRpYyB2b2lk IGJjbV9jbGtfdGVhcmRvd24oc3RydWN0IGtvbmFfY2xrICpiY21fY2xrKQogCWJjbV9jbGstPnR5 cGUgPSBiY21fY2xrX25vbmU7CiB9CiAKLXN0YXRpYyB2b2lkIGtvbmFfY2xrX3RlYXJkb3duKHN0 cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIGtvbmFfY2xrX3RlYXJkb3duKHN0cnVjdCBjbGtf Y29yZSAqY2xrKQogewogCXN0cnVjdCBjbGtfaHcgKmh3OwogCXN0cnVjdCBrb25hX2NsayAqYmNt X2NsazsKQEAgLTcxNiwxMCArNzE2LDEwIEBAIHN0YXRpYyB2b2lkIGtvbmFfY2xrX3RlYXJkb3du KHN0cnVjdCBjbGsgKmNsaykKIAliY21fY2xrX3RlYXJkb3duKGJjbV9jbGspOwogfQogCi1zdHJ1 Y3QgY2xrICprb25hX2Nsa19zZXR1cChzdHJ1Y3Qga29uYV9jbGsgKmJjbV9jbGspCitzdHJ1Y3Qg Y2xrX2NvcmUgKmtvbmFfY2xrX3NldHVwKHN0cnVjdCBrb25hX2NsayAqYmNtX2NsaykKIHsKIAlz dHJ1Y3QgY2xrX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gJmJjbV9jbGstPmluaXRfZGF0YTsKLQlz dHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gTlVMTDsKIAog CXN3aXRjaCAoYmNtX2Nsay0+dHlwZSkgewogCWNhc2UgYmNtX2Nsa19wZXJpOgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9jbGsvYmNtL2Nsay1rb25hLmMgYi9kcml2ZXJzL2Nsay9iY20vY2xrLWtvbmEu YwppbmRleCA5NWFmMmU2Li5hMzAxYWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9iY20vY2xr LWtvbmEuYworKysgYi9kcml2ZXJzL2Nsay9iY20vY2xrLWtvbmEuYwpAQCAtMTAzMiwxMSArMTAz MiwxMSBAQCBzdGF0aWMgbG9uZyBrb25hX3BlcmlfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsa19o dyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIH0KIAogc3RhdGljIGxvbmcga29uYV9wZXJpX2Ns a19kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAot CQl1bnNpZ25lZCBsb25nICpiZXN0X3BhcmVudF9yYXRlLCBzdHJ1Y3QgY2xrICoqYmVzdF9wYXJl bnQpCisJCXVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsIHN0cnVjdCBjbGtfY29yZSAq KmJlc3RfcGFyZW50KQogewogCXN0cnVjdCBrb25hX2NsayAqYmNtX2NsayA9IHRvX2tvbmFfY2xr KGh3KTsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBody0+Y2xrOwotCXN0cnVjdCBjbGsgKmN1cnJlbnRf cGFyZW50OworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gaHctPmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmN1cnJlbnRfcGFyZW50OwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAJdW5zaWdu ZWQgbG9uZyBiZXN0X2RlbHRhOwogCXVuc2lnbmVkIGxvbmcgYmVzdF9yYXRlOwpAQCAtMTA1Mywx NCArMTA1MywxNCBAQCBzdGF0aWMgbG9uZyBrb25hX3BlcmlfY2xrX2RldGVybWluZV9yYXRlKHN0 cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCXJldHVybiBrb25hX3Blcmlf Y2xrX3JvdW5kX3JhdGUoaHcsIHJhdGUsIGJlc3RfcGFyZW50X3JhdGUpOwogCiAJLyogVW5sZXNz IHdlIGNhbiBkbyBiZXR0ZXIsIHN0aWNrIHdpdGggY3VycmVudCBwYXJlbnQgKi8KLQljdXJyZW50 X3BhcmVudCA9IGNsa19nZXRfcGFyZW50KGNsayk7CisJY3VycmVudF9wYXJlbnQgPSBjbGtfcHJv dmlkZXJfZ2V0X3BhcmVudChjbGspOwogCXBhcmVudF9yYXRlID0gX19jbGtfZ2V0X3JhdGUoY3Vy cmVudF9wYXJlbnQpOwogCWJlc3RfcmF0ZSA9IGtvbmFfcGVyaV9jbGtfcm91bmRfcmF0ZShodywg cmF0ZSwgJnBhcmVudF9yYXRlKTsKIAliZXN0X2RlbHRhID0gYWJzKGJlc3RfcmF0ZSAtIHJhdGUp OwogCiAJLyogQ2hlY2sgd2hldGhlciBhbnkgb3RoZXIgcGFyZW50IGNsb2NrIGNhbiBwcm9kdWNl IGEgYmV0dGVyIHJlc3VsdCAqLwogCWZvciAod2hpY2ggPSAwOyB3aGljaCA8IHBhcmVudF9jb3Vu dDsgd2hpY2grKykgewotCQlzdHJ1Y3QgY2xrICpwYXJlbnQgPSBjbGtfZ2V0X3BhcmVudF9ieV9p bmRleChjbGssIHdoaWNoKTsKKwkJc3RydWN0IGNsa19jb3JlICpwYXJlbnQgPSBjbGtfZ2V0X3Bh cmVudF9ieV9pbmRleChjbGssIHdoaWNoKTsKIAkJdW5zaWduZWQgbG9uZyBkZWx0YTsKIAkJdW5z aWduZWQgbG9uZyBvdGhlcl9yYXRlOwogCkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBib29sIF9faW5p dCBrb25hX2NjdV9pbml0KHN0cnVjdCBjY3VfZGF0YSAqY2N1KQogewogCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CiAJdW5zaWduZWQgaW50IHdoaWNoOwotCXN0cnVjdCBjbGsgKipjbGtzID0gY2N1LT5j bGtfZGF0YS5jbGtzOworCXN0cnVjdCBjbGtfY29yZSAqKmNsa3MgPSBjY3UtPmNsa19kYXRhLmNs a3M7CiAJYm9vbCBzdWNjZXNzID0gdHJ1ZTsKIAogCWZsYWdzID0gY2N1X2xvY2soY2N1KTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2JjbS9jbGsta29uYS5oIGIvZHJpdmVycy9jbGsvYmNtL2Ns ay1rb25hLmgKaW5kZXggMjUzN2IzMC4uYzJkMDE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv YmNtL2Nsay1rb25hLmgKKysrIGIvZHJpdmVycy9jbGsvYmNtL2Nsay1rb25hLmgKQEAgLTUwOCw3 ICs1MDgsNyBAQCBleHRlcm4gdTY0IHNjYWxlZF9kaXZfbWF4KHN0cnVjdCBiY21fY2xrX2RpdiAq ZGl2KTsKIGV4dGVybiB1NjQgc2NhbGVkX2Rpdl9idWlsZChzdHJ1Y3QgYmNtX2Nsa19kaXYgKmRp diwgdTMyIGRpdl92YWx1ZSwKIAkJCQl1MzIgYmlsbGlvbnRocyk7CiAKLWV4dGVybiBzdHJ1Y3Qg Y2xrICprb25hX2Nsa19zZXR1cChzdHJ1Y3Qga29uYV9jbGsgKmJjbV9jbGspOworZXh0ZXJuIHN0 cnVjdCBjbGtfY29yZSAqa29uYV9jbGtfc2V0dXAoc3RydWN0IGtvbmFfY2xrICpiY21fY2xrKTsK IGV4dGVybiB2b2lkIF9faW5pdCBrb25hX2R0X2NjdV9zZXR1cChzdHJ1Y3QgY2N1X2RhdGEgKmNj dSwKIAkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwogZXh0ZXJuIGJvb2wgX19pbml0IGtv bmFfY2N1X2luaXQoc3RydWN0IGNjdV9kYXRhICpjY3UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9j bGsvYmVybGluL2JlcmxpbjItYXZwbGwuYyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLWF2 cGxsLmMKaW5kZXggZmQwZjI2Yy4uNDg4ZDk4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYmVy bGluL2JlcmxpbjItYXZwbGwuYworKysgYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1hdnBs bC5jCkBAIC0xODgsNyArMTg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGJlcmxp bjJfYXZwbGxfdmNvX29wcyA9IHsKIAkucmVjYWxjX3JhdGUJPSBiZXJsaW4yX2F2cGxsX3Zjb19y ZWNhbGNfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKiBfX2luaXQgYmVybGluMl9hdnBsbF92Y29f cmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLAorc3RydWN0IGNsa19jb3JlICogX19pbml0IGJl cmxpbjJfYXZwbGxfdmNvX3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqYmFzZSwKIAkJCSAgICAgICBj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSAgICAgICB1OCB2 Y29fZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0zNjQsNyArMzY0LDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGJlcmxpbjJfYXZwbGxfY2hhbm5lbF9vcHMgPSB7CiAg Ki8KIHN0YXRpYyBjb25zdCB1OCBxdWlya19pbmRleFtdIF9faW5pdGNvbnN0ID0geyAwLCA2LCA1 LCA0LCAzLCAyLCAxLCA3IH07CiAKLXN0cnVjdCBjbGsgKiBfX2luaXQgYmVybGluMl9hdnBsbF9j aGFubmVsX3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqYmFzZSwKK3N0cnVjdCBjbGtfY29yZSAqIF9f aW5pdCBiZXJsaW4yX2F2cGxsX2NoYW5uZWxfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLAog CQkJICAgY29uc3QgY2hhciAqbmFtZSwgdTggaW5kZXgsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1l LAogCQkJICAgdTggY2hfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1hdnBsbC5oIGIvZHJpdmVycy9jbGsvYmVybGlu L2JlcmxpbjItYXZwbGwuaAppbmRleCBhMzdmNTA2Li4yMTZlZWU3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1hdnBsbC5oCisrKyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9i ZXJsaW4yLWF2cGxsLmgKQEAgLTI0LDExICsyNCwxMSBAQCBzdHJ1Y3QgY2xrOwogI2RlZmluZSBC RVJMSU4yX0FWUExMX0JJVF9RVUlSSwkJQklUKDApCiAjZGVmaW5lIEJFUkxJTjJfQVZQTExfU0NS QU1CTEVfUVVJUksJQklUKDEpCiAKLXN0cnVjdCBjbGsgKiBfX2luaXQKK3N0cnVjdCBjbGtfY29y ZSAqIF9faW5pdAogYmVybGluMl9hdnBsbF92Y29fcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNl LCBjb25zdCBjaGFyICpuYW1lLAogCSAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1OCB2Y29f ZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1zdHJ1Y3QgY2xrICogX19pbml0CitzdHJ1 Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGJlcmxpbjJfYXZwbGxfY2hhbm5lbF9yZWdpc3Rlcih2b2lk IF9faW9tZW0gKmJhc2UsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgICB1OCBpbmRleCwgY29u c3QgY2hhciAqcGFyZW50X25hbWUsIHU4IGNoX2ZsYWdzLAogCQkgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1kaXYuYyBi L2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLWRpdi5jCmluZGV4IDgxZmY5N2YuLmM2NzMwODIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLWRpdi5jCisrKyBiL2RyaXZl cnMvY2xrL2Jlcmxpbi9iZXJsaW4yLWRpdi5jCkBAIC0yMzQsNyArMjM0LDcgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfb3BzIGJlcmxpbjJfZGl2X211eF9vcHMgPSB7CiAJLmdldF9wYXJlbnQJ PSBiZXJsaW4yX2Rpdl9nZXRfcGFyZW50LAogfTsKIAotc3RydWN0IGNsayAqIF9faW5pdAorc3Ry dWN0IGNsa19jb3JlICogX19pbml0CiBiZXJsaW4yX2Rpdl9yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qg YmVybGluMl9kaXZfbWFwICptYXAsCiAJCSAgICAgdm9pZCBfX2lvbWVtICpiYXNlLCBjb25zdCBj aGFyICpuYW1lLCB1OCBkaXZfZmxhZ3MsCiAJCSAgICAgY29uc3QgY2hhciAqKnBhcmVudF9uYW1l cywgaW50IG51bV9wYXJlbnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYmVybGluL2Jlcmxp bjItZGl2LmggYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1kaXYuaAppbmRleCAxNWUzMzg0 Li4zZGRiODdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1kaXYuaAor KysgYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmVybGluMi1kaXYuaApAQCAtODAsNyArODAsNyBAQCBz dHJ1Y3QgYmVybGluMl9kaXZfZGF0YSB7CiAJdTggZGl2X2ZsYWdzOwogfTsKIAotc3RydWN0IGNs ayAqIF9faW5pdAorc3RydWN0IGNsa19jb3JlICogX19pbml0CiBiZXJsaW4yX2Rpdl9yZWdpc3Rl cihjb25zdCBzdHJ1Y3QgYmVybGluMl9kaXZfbWFwICptYXAsCiAJICAgICB2b2lkIF9faW9tZW0g KmJhc2UsICBjb25zdCBjaGFyICpuYW1lLCB1OCBkaXZfZmxhZ3MsCiAJICAgICBjb25zdCBjaGFy ICoqcGFyZW50X25hbWVzLCBpbnQgbnVtX3BhcmVudHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay9iZXJsaW4vYmVybGluMi1wbGwuYyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLXBsbC5j CmluZGV4IGJkYzUwNmIuLmI3YTMwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9i ZXJsaW4yLXBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLXBsbC5jCkBAIC05 MSw3ICs5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBiZXJsaW4yX3BsbF9vcHMg PSB7CiAJLnJlY2FsY19yYXRlCT0gYmVybGluMl9wbGxfcmVjYWxjX3JhdGUsCiB9OwogCi1zdHJ1 Y3QgY2xrICogX19pbml0CitzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQKIGJlcmxpbjJfcGxsX3Jl Z2lzdGVyKGNvbnN0IHN0cnVjdCBiZXJsaW4yX3BsbF9tYXAgKm1hcCwKIAkJICAgICB2b2lkIF9f aW9tZW0gKmJhc2UsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgY29uc3QgY2hhciAqcGFyZW50 X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9iZXJs aW4vYmVybGluMi1wbGwuaCBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLXBsbC5oCmluZGV4 IDg4MzFjZTIuLjZiNmE2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4y LXBsbC5oCisrKyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZXJsaW4yLXBsbC5oCkBAIC0yOSw3ICsy OSw3IEBAIHN0cnVjdCBiZXJsaW4yX3BsbF9tYXAgewogCXU4IGRpdnNlbF9zaGlmdDsKIH07CiAK LXN0cnVjdCBjbGsgKiBfX2luaXQKK3N0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogYmVybGluMl9w bGxfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGJlcmxpbjJfcGxsX21hcCAqbWFwLAogCQkgICAgIHZv aWQgX19pb21lbSAqYmFzZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICBjb25zdCBjaGFyICpw YXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay9iZXJsaW4vYmcyLmMgYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmcyLmMKaW5kZXggNGM4MWUwOS4u NDllY2IzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYmVybGluL2JnMi5jCisrKyBiL2RyaXZl cnMvY2xrL2Jlcmxpbi9iZzIuYwpAQCAtMTcsNyArMTcsNiBAQAogICogdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNs dWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTkzLDcg KzkyLDcgQEAKICAqLwogCiAjZGVmaW5lCU1BWF9DTEtTIDQxCi1zdGF0aWMgc3RydWN0IGNsayAq Y2xrc1tNQVhfQ0xLU107CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtzW01BWF9DTEtTXTsK IHN0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIHN0YXRpYyBERUZJTkVf U1BJTkxPQ0sobG9jayk7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpnYmFzZTsKQEAgLTUwNCw3ICs1 MDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbjJfZ2F0ZV9kYXRhIGJnMl9nYXRlc1td IF9faW5pdGNvbnN0ID0gewogc3RhdGljIHZvaWQgX19pbml0IGJlcmxpbjJfY2xvY2tfc2V0dXAo c3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbOV07 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXU4IGF2cGxsX2Zs YWdzID0gMDsKIAlpbnQgbjsKIApAQCAtNTEzLDE2ICs1MTIsMTYgQEAgc3RhdGljIHZvaWQgX19p bml0IGJlcmxpbjJfY2xvY2tfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIAkJcmV0dXJu OwogCiAJLyogb3ZlcndyaXRlIGRlZmF1bHQgY2xvY2sgbmFtZXMgd2l0aCBEVCBwcm92aWRlZCBv bmVzICovCi0JY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLCBjbGtfbmFtZXNbUkVGQ0xLXSk7 CisJY2xrID0gb2ZfY2xrX3Byb3ZpZGVyX2dldF9ieV9uYW1lKG5wLCBjbGtfbmFtZXNbUkVGQ0xL XSk7CiAJaWYgKCFJU19FUlIoY2xrKSkgewogCQljbGtfbmFtZXNbUkVGQ0xLXSA9IF9fY2xrX2dl dF9uYW1lKGNsayk7Ci0JCWNsa19wdXQoY2xrKTsKKwkJX19jbGtfcHV0KGNsayk7CiAJfQogCi0J Y2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLCBjbGtfbmFtZXNbVklERU9fRVhUMF0pOworCWNs ayA9IG9mX2Nsa19wcm92aWRlcl9nZXRfYnlfbmFtZShucCwgY2xrX25hbWVzW1ZJREVPX0VYVDBd KTsKIAlpZiAoIUlTX0VSUihjbGspKSB7CiAJCWNsa19uYW1lc1tWSURFT19FWFQwXSA9IF9fY2xr X2dldF9uYW1lKGNsayk7Ci0JCWNsa19wdXQoY2xrKTsKKwkJX19jbGtfcHV0KGNsayk7CiAJfQog CiAJLyogc2ltcGxlIHJlZ2lzdGVyIFBMTHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Jl cmxpbi9iZzJxLmMgYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmcycS5jCmluZGV4IDc0OGRhOWIuLjMz Y2MwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZzJxLmMKKysrIGIvZHJpdmVy cy9jbGsvYmVybGluL2JnMnEuYwpAQCAtMTcsNyArMTcsNiBAQAogICogdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNs dWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQ3LDcg KzQ2LDcgQEAKICNkZWZpbmUgUkVHX1NESU8xWElOX0NMS0NUTAkweDAxNWMKIAogI2RlZmluZQlN QVhfQ0xLUyAyNwotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbTUFYX0NMS1NdOworc3RhdGljIHN0 cnVjdCBjbGtfY29yZSAqY2xrc1tNQVhfQ0xLU107CiBzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxs X2RhdGEgY2xrX2RhdGE7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwogc3RhdGljIHZv aWQgX19pb21lbSAqZ2Jhc2U7CkBAIC0yOTMsNyArMjkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBiZXJsaW4yX2dhdGVfZGF0YSBiZzJxX2dhdGVzW10gX19pbml0Y29uc3QgPSB7CiBzdGF0aWMg dm9pZCBfX2luaXQgYmVybGluMnFfY2xvY2tfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkK IHsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbOV07Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0 cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCBuOwogCiAJZ2Jhc2UgPSBvZl9pb21hcChucCwgMCk7 CkBAIC0zMTEsMTAgKzMxMCwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYmVybGluMnFfY2xvY2tf c2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIAl9CiAKIAkvKiBvdmVyd3JpdGUgZGVmYXVs dCBjbG9jayBuYW1lcyB3aXRoIERUIHByb3ZpZGVkIG9uZXMgKi8KLQljbGsgPSBvZl9jbGtfZ2V0 X2J5X25hbWUobnAsIGNsa19uYW1lc1tSRUZDTEtdKTsKKwljbGsgPSBvZl9jbGtfcHJvdmlkZXJf Z2V0X2J5X25hbWUobnAsIGNsa19uYW1lc1tSRUZDTEtdKTsKIAlpZiAoIUlTX0VSUihjbGspKSB7 CiAJCWNsa19uYW1lc1tSRUZDTEtdID0gX19jbGtfZ2V0X25hbWUoY2xrKTsKLQkJY2xrX3B1dChj bGspOworCQlfX2Nsa19wdXQoY2xrKTsKIAl9CiAKIAkvKiBzaW1wbGUgcmVnaXN0ZXIgUExMcyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWF4aS1jbGtnZW4uYyBiL2RyaXZlcnMvY2xr L2Nsay1heGktY2xrZ2VuLmMKaW5kZXggMTEyN2VlNC4uZDkxNTUwYyAxMDA2NDQKLS0tIGEvZHJp dmVycy9jbGsvY2xrLWF4aS1jbGtnZW4uYworKysgYi9kcml2ZXJzL2Nsay9jbGstYXhpLWNsa2dl bi5jCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsu aD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNs dWRlIDxsaW51eC9vZi5oPgpAQCAtNDg5LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgYXhpX2Nsa2dl bl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWNvbnN0IGNoYXIgKnBhcmVu dF9uYW1lOwogCWNvbnN0IGNoYXIgKmNsa19uYW1lOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWlmICghcGRldi0+ ZGV2Lm9mX25vZGUpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv Y2xrLWF4bTU1MTYuYyBiL2RyaXZlcnMvY2xrL2Nsay1heG01NTE2LmMKaW5kZXggZDJmMWUxMS4u M2RjNmU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWF4bTU1MTYuYworKysgYi9kcml2 ZXJzL2Nsay9jbGstYXhtNTUxNi5jCkBAIC01MzIsNyArNTMyLDcgQEAgTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgYXhtY2xrX21hdGNoX3RhYmxlKTsKIAogc3RydWN0IGF4bWNsa19wcml2IHsKIAlz dHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBvbmVjZWxsOwotCXN0cnVjdCBjbGsgKmNsa3NbXTsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsa3NbXTsKIH07CiAKIHN0YXRpYyBpbnQgYXhtY2xrX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC01NDEsNyArNTQxLDcgQEAgc3RhdGljIGlu dCBheG1jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKIAlpbnQgaSwgcmV0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcDsKIAlzaXplX3QgbnVtX2Nsa3M7CiAJc3RydWN0IGF4bWNsa19wcml2ICpw cml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWJjbTI4MzUuYyBiL2RyaXZlcnMvY2xr L2Nsay1iY20yODM1LmMKaW5kZXggNmI5NTBjYS4uZjI1ZTg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jbGsvY2xrLWJjbTI4MzUuYworKysgYi9kcml2ZXJzL2Nsay9jbGstYmNtMjgzNS5jCkBAIC0y OSw3ICsyOSw3IEBACiAgKi8KIHZvaWQgX19pbml0IGJjbTI4MzVfaW5pdF9jbG9ja3Modm9pZCkK IHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJaW50IHJldDsK IAogCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJzeXNfcGNsayIsIE5VTEws IENMS19JU19ST09ULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWNscHM3MTF4LmMgYi9k cml2ZXJzL2Nsay9jbGstY2xwczcxMXguYwppbmRleCA3MTVlZWMxLi42YWE2NGJiIDEwMDY0NAot LS0gYS9kcml2ZXJzL2Nsay9jbGstY2xwczcxMXguYworKysgYi9kcml2ZXJzL2Nsay9jbGstY2xw czcxMXguYwpAQCAtOSw3ICs5LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CkBAIC00Myw3ICs0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2Rpdl90YWJs ZSB0aW1lcl9kaXZfdGFibGVbXSA9IHsKIHN0cnVjdCBjbHBzNzExeF9jbGsgewogCXN0cnVjdCBj bGtfb25lY2VsbF9kYXRhCWNsa19kYXRhOwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGNs awkJKmNsa3NbQ0xQUzcxMVhfQ0xLX01BWF07CisJc3RydWN0IGNsa19jb3JlCQkqY2xrc1tDTFBT NzExWF9DTEtfTUFYXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xwczcxMXhfY2xrICogX19pbml0 IF9jbHBzNzExeF9jbGtfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2Nsay9jbGstY29tcG9zaXRlLmMgYi9kcml2ZXJzL2Nsay9jbGstY29tcG9zaXRlLmMKaW5k ZXggYjkzNTVkYS4uZDczMjJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWNvbXBvc2l0 ZS5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay1jb21wb3NpdGUuYwpAQCAtMTQsNyArMTQsNiBAQAog ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KQEAgLTU3LDE0ICs1NiwxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBj bGtfY29tcG9zaXRlX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCiBzdGF0aWMgbG9u ZyBjbGtfY29tcG9zaXRlX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCi0JCQkJ CXN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9wKQorCQkJCQlzdHJ1Y3QgY2xrX2NvcmUgKipiZXN0 X3BhcmVudF9wKQogewogCXN0cnVjdCBjbGtfY29tcG9zaXRlICpjb21wb3NpdGUgPSB0b19jbGtf Y29tcG9zaXRlKGh3KTsKIAljb25zdCBzdHJ1Y3QgY2xrX29wcyAqcmF0ZV9vcHMgPSBjb21wb3Np dGUtPnJhdGVfb3BzOwogCWNvbnN0IHN0cnVjdCBjbGtfb3BzICptdXhfb3BzID0gY29tcG9zaXRl LT5tdXhfb3BzOwogCXN0cnVjdCBjbGtfaHcgKnJhdGVfaHcgPSBjb21wb3NpdGUtPnJhdGVfaHc7 CiAJc3RydWN0IGNsa19odyAqbXV4X2h3ID0gY29tcG9zaXRlLT5tdXhfaHc7Ci0Jc3RydWN0IGNs ayAqcGFyZW50OworCXN0cnVjdCBjbGtfY29yZSAqcGFyZW50OwogCXVuc2lnbmVkIGxvbmcgcGFy ZW50X3JhdGU7CiAJbG9uZyB0bXBfcmF0ZSwgYmVzdF9yYXRlID0gMDsKIAl1bnNpZ25lZCBsb25n IHJhdGVfZGlmZjsKQEAgLTgwLDcgKzc5LDcgQEAgc3RhdGljIGxvbmcgY2xrX2NvbXBvc2l0ZV9k ZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkq YmVzdF9wYXJlbnRfcCA9IE5VTEw7CiAKIAkJaWYgKF9fY2xrX2dldF9mbGFncyhody0+Y2xrKSAm IENMS19TRVRfUkFURV9OT19SRVBBUkVOVCkgewotCQkJKmJlc3RfcGFyZW50X3AgPSBjbGtfZ2V0 X3BhcmVudChtdXhfaHctPmNsayk7CisJCQkqYmVzdF9wYXJlbnRfcCA9IGNsa19wcm92aWRlcl9n ZXRfcGFyZW50KG11eF9ody0+Y2xrKTsKIAkJCSpiZXN0X3BhcmVudF9yYXRlID0gX19jbGtfZ2V0 X3JhdGUoKmJlc3RfcGFyZW50X3ApOwogCiAJCQlyZXR1cm4gcmF0ZV9vcHMtPnJvdW5kX3JhdGUo cmF0ZV9odywgcmF0ZSwKQEAgLTE4MSwxNCArMTgwLDE0IEBAIHN0YXRpYyB2b2lkIGNsa19jb21w b3NpdGVfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKIAlnYXRlX29wcy0+ZGlzYWJsZShnYXRl X2h3KTsKIH0KIAotc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2NvbXBvc2l0ZShzdHJ1Y3QgZGV2 aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rl cl9jb21wb3NpdGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQkJY29u c3QgY2hhciAqKnBhcmVudF9uYW1lcywgaW50IG51bV9wYXJlbnRzLAogCQkJc3RydWN0IGNsa19o dyAqbXV4X2h3LCBjb25zdCBzdHJ1Y3QgY2xrX29wcyAqbXV4X29wcywKIAkJCXN0cnVjdCBjbGtf aHcgKnJhdGVfaHcsIGNvbnN0IHN0cnVjdCBjbGtfb3BzICpyYXRlX29wcywKIAkJCXN0cnVjdCBj bGtfaHcgKmdhdGVfaHcsIGNvbnN0IHN0cnVjdCBjbGtfb3BzICpnYXRlX29wcywKIAkJCXVuc2ln bmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAq Y2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3RydWN0IGNsa19jb21wb3NpdGUg KmNvbXBvc2l0ZTsKIAlzdHJ1Y3QgY2xrX29wcyAqY2xrX2NvbXBvc2l0ZV9vcHM7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay9jbGstY29uZi5jIGIvZHJpdmVycy9jbGsvY2xrLWNvbmYuYwppbmRl eCBkMzZhN2IzLi5jOTIzMWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstY29uZi5jCisr KyBiL2RyaXZlcnMvY2xrL2Nsay1jb25mLmMKQEAgLTcsNyArNyw2IEBACiAgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXBy b3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrL2Nsay1jb25mLmg+CkBAIC0yMCw3ICsxOSw3 IEBAIHN0YXRpYyBpbnQgX19zZXRfY2xrX3BhcmVudHMoc3RydWN0IGRldmljZV9ub2RlICpub2Rl LCBib29sIGNsa19zdXBwbGllcikKIHsKIAlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGNsa3NwZWM7 CiAJaW50IGluZGV4LCByYywgbnVtX3BhcmVudHM7Ci0Jc3RydWN0IGNsayAqY2xrLCAqcGNsazsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgKnBjbGs7CiAKIAludW1fcGFyZW50cyA9IG9mX2NvdW50 X3BoYW5kbGVfd2l0aF9hcmdzKG5vZGUsICJhc3NpZ25lZC1jbG9jay1wYXJlbnRzIiwKIAkJCQkJ CSAiI2Nsb2NrLWNlbGxzIik7CkBAIC02MywxNiArNjIsMTYgQEAgc3RhdGljIGludCBfX3NldF9j bGtfcGFyZW50cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGJvb2wgY2xrX3N1cHBsaWVyKQog CQkJZ290byBlcnI7CiAJCX0KIAotCQlyYyA9IGNsa19zZXRfcGFyZW50KGNsaywgcGNsayk7CisJ CXJjID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrLCBwY2xrKTsKIAkJaWYgKHJjIDwgMCkK IAkJCXByX2VycigiY2xrOiBmYWlsZWQgdG8gcmVwYXJlbnQgJXMgdG8gJXM6ICVkXG4iLAogCQkJ ICAgICAgIF9fY2xrX2dldF9uYW1lKGNsayksIF9fY2xrX2dldF9uYW1lKHBjbGspLCByYyk7Ci0J CWNsa19wdXQoY2xrKTsKLQkJY2xrX3B1dChwY2xrKTsKKwkJX19jbGtfcHV0KGNsayk7CisJCV9f Y2xrX3B1dChwY2xrKTsKIAl9CiAJcmV0dXJuIDA7CiBlcnI6Ci0JY2xrX3B1dChwY2xrKTsKKwlf X2Nsa19wdXQocGNsayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04Miw3ICs4MSw3IEBAIHN0YXRp YyBpbnQgX19zZXRfY2xrX3JhdGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgYm9vbCBjbGtf c3VwcGxpZXIpCiAJc3RydWN0IHByb3BlcnR5CSpwcm9wOwogCWNvbnN0IF9fYmUzMiAqY3VyOwog CWludCByYywgaW5kZXggPSAwOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUg KmNsazsKIAl1MzIgcmF0ZTsKIAogCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3UzMihub2RlLCAiYXNz aWduZWQtY2xvY2stcmF0ZXMiLCBwcm9wLCBjdXIsIHJhdGUpIHsKQEAgLTEwNiwxMSArMTA1LDEx IEBAIHN0YXRpYyBpbnQgX19zZXRfY2xrX3JhdGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwg Ym9vbCBjbGtfc3VwcGxpZXIpCiAJCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKIAkJCX0KIAotCQkJ cmMgPSBjbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwkJCXJjID0gY2xrX3Byb3ZpZGVyX3NldF9y YXRlKGNsaywgcmF0ZSk7CiAJCQlpZiAocmMgPCAwKQogCQkJCXByX2VycigiY2xrOiBjb3VsZG4n dCBzZXQgJXMgY2xvY2sgcmF0ZTogJWRcbiIsCiAJCQkJICAgICAgIF9fY2xrX2dldF9uYW1lKGNs ayksIHJjKTsKLQkJCWNsa19wdXQoY2xrKTsKKwkJCV9fY2xrX3B1dChjbGspOwogCQl9CiAJCWlu ZGV4Kys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWRpdmlkZXIuYyBiL2RyaXZl cnMvY2xrL2Nsay1kaXZpZGVyLmMKaW5kZXggMThhOWRlMi4uM2M3ODEzOSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9jbGsvY2xrLWRpdmlkZXIuYworKysgYi9kcml2ZXJzL2Nsay9jbGstZGl2aWRlci5j CkBAIC0zNjYsMTQgKzM2NiwxNCBAQCBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfZGl2aWRlcl9y b19vcHMgPSB7CiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2RpdmlkZXJfcm9fb3BzKTsKIAot c3RhdGljIHN0cnVjdCBjbGsgKl9yZWdpc3Rlcl9kaXZpZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwg Y29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKl9yZWdpc3Rlcl9kaXZp ZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAq cGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21lbSAqcmVnLCB1 OCBzaGlmdCwgdTggd2lkdGgsCiAJCXU4IGNsa19kaXZpZGVyX2ZsYWdzLCBjb25zdCBzdHJ1Y3Qg Y2xrX2Rpdl90YWJsZSAqdGFibGUsCiAJCXNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IGNs a19kaXZpZGVyICpkaXY7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoY2xrX2RpdmlkZXJfZmxhZ3Mg JiBDTEtfRElWSURFUl9ISVdPUkRfTUFTSykgewpAQCAtNDI5LDcgKzQyOSw3IEBAIHN0YXRpYyBz dHJ1Y3QgY2xrICpfcmVnaXN0ZXJfZGl2aWRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNo YXIgKm5hbWUsCiAgKiBAY2xrX2RpdmlkZXJfZmxhZ3M6IGRpdmlkZXItc3BlY2lmaWMgZmxhZ3Mg Zm9yIHRoaXMgY2xvY2sKICAqIEBsb2NrOiBzaGFyZWQgcmVnaXN0ZXIgbG9jayBmb3IgdGhpcyBj bG9jawogICovCi1zdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfZGl2aWRlcihzdHJ1Y3QgZGV2aWNl ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl9k aXZpZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hh ciAqcGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21lbSAqcmVn LCB1OCBzaGlmdCwgdTggd2lkdGgsCiAJCXU4IGNsa19kaXZpZGVyX2ZsYWdzLCBzcGlubG9ja190 ICpsb2NrKQpAQCAtNDUzLDcgKzQ1Myw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWdpc3Rl cl9kaXZpZGVyKTsKICAqIEB0YWJsZTogYXJyYXkgb2YgZGl2aWRlci92YWx1ZSBwYWlycyBlbmRp bmcgd2l0aCBhIGRpdiBzZXQgdG8gMAogICogQGxvY2s6IHNoYXJlZCByZWdpc3RlciBsb2NrIGZv ciB0aGlzIGNsb2NrCiAgKi8KLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9kaXZpZGVyX3RhYmxl KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAq Y2xrX3JlZ2lzdGVyX2RpdmlkZXJfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFy ICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywK IAkJdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0LCB1OCB3aWR0aCwKIAkJdTggY2xrX2Rpdmlk ZXJfZmxhZ3MsIGNvbnN0IHN0cnVjdCBjbGtfZGl2X3RhYmxlICp0YWJsZSwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL2Nsay1lZm0zMmdnLmMgYi9kcml2ZXJzL2Nsay9jbGstZWZtMzJnZy5jCmlu ZGV4IGJhYzJkZGYuLjMyNDA4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1lZm0zMmdn LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLWVmbTMyZ2cuYwpAQCAtNiw3ICs2LDYgQEAKICAqIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KQEAgLTE2LDcgKzE1LDcgQEAK IAogI2RlZmluZSBDTVVfSEZQRVJDTEtFTjAJCTB4NDQKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNs a1szN107CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtbMzddOwogc3RhdGljIHN0cnVjdCBj bGtfb25lY2VsbF9kYXRhIGNsa19kYXRhID0gewogCS5jbGtzID0gY2xrLAogCS5jbGtfbnVtID0g QVJSQVlfU0laRShjbGspLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWZpeGVkLWZhY3Rv ci5jIGIvZHJpdmVycy9jbGsvY2xrLWZpeGVkLWZhY3Rvci5jCmluZGV4IGQ5ZTNmNjcuLmFlMWZl ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1maXhlZC1mYWN0b3IuYworKysgYi9kcml2 ZXJzL2Nsay9jbGstZml4ZWQtZmFjdG9yLmMKQEAgLTY1LDEzICs2NSwxMyBAQCBzdHJ1Y3QgY2xr X29wcyBjbGtfZml4ZWRfZmFjdG9yX29wcyA9IHsKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChjbGtf Zml4ZWRfZmFjdG9yX29wcyk7CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9maXhlZF9mYWN0 b3Ioc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3Jl ICpjbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hh ciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3Ms CiAJCXVuc2lnbmVkIGludCBtdWx0LCB1bnNpZ25lZCBpbnQgZGl2KQogewogCXN0cnVjdCBjbGtf Zml4ZWRfZmFjdG9yICpmaXg7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKLQlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAlmaXggPSBrbWFsbG9jKHNpemVv ZigqZml4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXgpIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCBF WFBPUlRfU1lNQk9MX0dQTChjbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKTsKICAqLwogdm9pZCBf X2luaXQgb2ZfZml4ZWRfZmFjdG9yX2Nsa19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUp CiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNo YXIgKmNsa19uYW1lID0gbm9kZS0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKIAl1 MzIgZGl2LCBtdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWZpeGVkLXJhdGUuYyBi L2RyaXZlcnMvY2xrL2Nsay1maXhlZC1yYXRlLmMKaW5kZXggMGZjNTZhYi4uNTZjMGNlZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWZpeGVkLXJhdGUuYworKysgYi9kcml2ZXJzL2Nsay9j bGstZml4ZWQtcmF0ZS5jCkBAIC01NiwxMiArNTYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoY2xr X2ZpeGVkX3JhdGVfb3BzKTsKICAqIEBmaXhlZF9yYXRlOiBub24tYWRqdXN0YWJsZSBjbG9jayBy YXRlCiAgKiBAZml4ZWRfYWNjdXJhY3k6IG5vbi1hZGp1c3RhYmxlIGNsb2NrIHJhdGUKICAqLwot c3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGVfd2l0aF9hY2N1cmFjeShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl9maXhlZF9yYXRlX3dp dGhfYWNjdXJhY3koc3RydWN0IGRldmljZSAqZGV2LAogCQljb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdW5zaWduZWQgbG9u ZyBmaXhlZF9yYXRlLCB1bnNpZ25lZCBsb25nIGZpeGVkX2FjY3VyYWN5KQogewogCXN0cnVjdCBj bGtfZml4ZWRfcmF0ZSAqZml4ZWQ7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29y ZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAkvKiBhbGxvY2F0ZSBmaXhl ZC1yYXRlIGNsb2NrICovCkBAIC05OSw3ICs5OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19y ZWdpc3Rlcl9maXhlZF9yYXRlX3dpdGhfYWNjdXJhY3kpOwogICogQGZsYWdzOiBmcmFtZXdvcmst c3BlY2lmaWMgZmxhZ3MKICAqIEBmaXhlZF9yYXRlOiBub24tYWRqdXN0YWJsZSBjbG9jayByYXRl CiAgKi8KLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKHN0cnVjdCBkZXZpY2Ug KmRldiwgY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX2Zp eGVkX3JhdGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBj aGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdW5zaWduZWQgbG9uZyBm aXhlZF9yYXRlKQogewpAQCAtMTE0LDcgKzExNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19y ZWdpc3Rlcl9maXhlZF9yYXRlKTsKICAqLwogdm9pZCBvZl9maXhlZF9jbGtfc2V0dXAoc3RydWN0 IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJdTMyIHJhdGU7 CiAJdTMyIGFjY3VyYWN5ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1mcmFjdGlv bmFsLWRpdmlkZXIuYyBiL2RyaXZlcnMvY2xrL2Nsay1mcmFjdGlvbmFsLWRpdmlkZXIuYwppbmRl eCBlZGU2ODVjLi44MTA0NjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstZnJhY3Rpb25h bC1kaXZpZGVyLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLWZyYWN0aW9uYWwtZGl2aWRlci5jCkBA IC05NiwxNCArOTYsMTQgQEAgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX2ZyYWN0aW9uYWxfZGl2 aWRlcl9vcHMgPSB7CiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2ZyYWN0aW9uYWxfZGl2aWRl cl9vcHMpOwogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfZnJhY3Rpb25hbF9kaXZpZGVyKHN0 cnVjdCBkZXZpY2UgKmRldiwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX2ZyYWN0aW9u YWxfZGl2aWRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnBhcmVudF9uYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQl2b2lkIF9faW9tZW0g KnJlZywgdTggbXNoaWZ0LCB1OCBtd2lkdGgsIHU4IG5zaGlmdCwgdTggbndpZHRoLAogCQl1OCBj bGtfZGl2aWRlcl9mbGFncywgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3QgY2xrX2ZyYWN0 aW9uYWxfZGl2aWRlciAqZmQ7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKLQlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAlmZCA9IGt6YWxsb2Moc2l6ZW9m KCpmZCksIEdGUF9LRVJORUwpOwogCWlmICghZmQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L2Nsay1nYXRlLmMgYi9kcml2ZXJzL2Nsay9jbGstZ2F0ZS5jCmluZGV4IDRhNThjNTUuLjQyOWQz MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1nYXRlLmMKKysrIGIvZHJpdmVycy9jbGsv Y2xrLWdhdGUuYwpAQCAtMTE4LDEzICsxMTgsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2dh dGVfb3BzKTsKICAqIEBjbGtfZ2F0ZV9mbGFnczogZ2F0ZS1zcGVjaWZpYyBmbGFncyBmb3IgdGhp cyBjbG9jawogICogQGxvY2s6IHNoYXJlZCByZWdpc3RlciBsb2NrIGZvciB0aGlzIGNsb2NrCiAg Ki8KLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9nYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29u c3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX2dhdGUoc3RydWN0 IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFt ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdm9pZCBfX2lvbWVtICpyZWcsIHU4IGJpdF9pZHgs CiAJCXU4IGNsa19nYXRlX2ZsYWdzLCBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCBjbGtf Z2F0ZSAqZ2F0ZTsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJ c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWlmIChjbGtfZ2F0ZV9mbGFncyAmIENMS19H QVRFX0hJV09SRF9NQVNLKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstaGlnaGJhbmsu YyBiL2RyaXZlcnMvY2xrL2Nsay1oaWdoYmFuay5jCmluZGV4IDJlN2U5ZDkuLmNhZDJmYmEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1oaWdoYmFuay5jCisrKyBiL2RyaXZlcnMvY2xrL2Ns ay1oaWdoYmFuay5jCkBAIC0yNzEsMTAgKzI3MSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgcGVyaWNsa19vcHMgPSB7CiAJLnNldF9yYXRlID0gY2xrX3BlcmljbGtfc2V0X3JhdGUs CiB9OwogCi1zdGF0aWMgX19pbml0IHN0cnVjdCBjbGsgKmhiX2Nsa19pbml0KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSwgY29uc3Qgc3RydWN0IGNsa19vcHMgKm9wcykKK3N0YXRpYyBfX2luaXQg c3RydWN0IGNsa19jb3JlICpoYl9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNv bnN0IHN0cnVjdCBjbGtfb3BzICpvcHMpCiB7CiAJdTMyIHJlZzsKLQlzdHJ1Y3QgY2xrICpjbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGhiX2NsayAqaGJfY2xrOwogCWNvbnN0 IGNoYXIgKmNsa19uYW1lID0gbm9kZS0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsK QEAgLTMzMCw4ICszMzAsOCBAQCBDTEtfT0ZfREVDTEFSRShoYl9hOXBlcmlwaCwgImNhbHhlZGEs aGItYTlwZXJpcGgtY2xvY2siLCBoYl9hOXBlcmlwaF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19p bml0IGhiX2E5YnVzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVjdCBj bGsgKmNsayA9IGhiX2Nsa19pbml0KG5vZGUsICZhOWJjbGtfb3BzKTsKLQljbGtfcHJlcGFyZV9l bmFibGUoY2xrKTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IGhiX2Nsa19pbml0KG5vZGUsICZh OWJjbGtfb3BzKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKIH0KIENMS19P Rl9ERUNMQVJFKGhiX2E5YnVzLCAiY2FseGVkYSxoYi1hOWJ1cy1jbG9jayIsIGhiX2E5YnVzX2lu aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstbHMxeC5jIGIvZHJpdmVycy9jbGsv Y2xrLWxzMXguYwppbmRleCBmMjBiNzUwLi43OTYwNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Ns ay9jbGstbHMxeC5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay1sczF4LmMKQEAgLTQ4LDExICs0OCwx MSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbHMxeF9wbGxfY2xrX29wcyA9IHsKIAku cmVjYWxjX3JhdGUgPSBsczF4X3BsbF9yZWNhbGNfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrICogX19pbml0IGNsa19yZWdpc3Rlcl9wbGwoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGlj IHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdCBjbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBkZXZpY2Ug KmRldiwKIAkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2ln bmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IGNsa19odyAqaHc7Ci0Jc3RydWN0IGNsayAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAK IAkvKiBhbGxvY2F0ZSB0aGUgZGl2aWRlciAqLwpAQCAtODAsMzIgKzgwLDMyIEBAIHN0YXRpYyBz dHJ1Y3QgY2xrICogX19pbml0IGNsa19yZWdpc3Rlcl9wbGwoc3RydWN0IGRldmljZSAqZGV2LAog CiB2b2lkIF9faW5pdCBsczF4X2Nsa19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJY2xrID0gY2xrX3JlZ2lzdGVyX3BsbChOVUxMLCAi cGxsX2NsayIsIE5VTEwsIENMS19JU19ST09UKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsK KwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKIAogCWNsayA9IGNsa19yZWdpc3Rl cl9kaXZpZGVyKE5VTEwsICJjcHVfY2xrIiwgInBsbF9jbGsiLAogCQkJQ0xLX1NFVF9SQVRFX1BB UkVOVCwgTFMxWF9DTEtfUExMX0RJViwgRElWX0NQVV9TSElGVCwKIAkJCURJVl9DUFVfV0lEVEgs IENMS19ESVZJREVSX09ORV9CQVNFRCwgJl9sb2NrKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xr KTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKIAljbGtfcmVnaXN0ZXJfY2xr ZGV2KGNsaywgImNwdSIsIE5VTEwpOwogCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXIoTlVM TCwgImRjX2NsayIsICJwbGxfY2xrIiwKIAkJCUNMS19TRVRfUkFURV9QQVJFTlQsIExTMVhfQ0xL X1BMTF9ESVYsIERJVl9EQ19TSElGVCwKIAkJCURJVl9EQ19XSURUSCwgQ0xLX0RJVklERVJfT05F X0JBU0VELCAmX2xvY2spOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCWNsa19wcm92aWRl cl9wcmVwYXJlX2VuYWJsZShjbGspOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCAiZGMiLCBO VUxMKTsKIAogCWNsayA9IGNsa19yZWdpc3Rlcl9kaXZpZGVyKE5VTEwsICJhaGJfY2xrIiwgInBs bF9jbGsiLAogCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgTFMxWF9DTEtfUExMX0RJViwgRElWX0RE Ul9TSElGVCwKIAkJCURJVl9ERFJfV0lEVEgsIENMS19ESVZJREVSX09ORV9CQVNFRCwgJl9sb2Nr KTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFi bGUoY2xrKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgImFoYiIsIE5VTEwpOwogCWNsa19y ZWdpc3Rlcl9jbGtkZXYoY2xrLCAic3RtbWFjZXRoIiwgTlVMTCk7CiAKIAljbGsgPSBjbGtfcmVn aXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJhcGJfY2xrIiwgImFoYl9jbGsiLCAwLCAxLCAyKTsK LQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUo Y2xrKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgImFwYiIsIE5VTEwpOwogCWNsa19yZWdp c3Rlcl9jbGtkZXYoY2xrLCAic2VyaWFsODI1MCIsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvY2xrLW1heDc3Njg2LmMgYi9kcml2ZXJzL2Nsay9jbGstbWF4Nzc2ODYuYwppbmRl eCAzZDdlOGRkLi40MmZhNDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstbWF4Nzc2ODYu YworKysgYi9kcml2ZXJzL2Nsay9jbGstbWF4Nzc2ODYuYwpAQCAtMTEyLDEwICsxMTIsMTAgQEAg c3RhdGljIHN0cnVjdCBjbGtfaW5pdF9kYXRhIG1heDc3Njg2X2Nsa3NfaW5pdFtNQVg3NzY4Nl9D TEtTX05VTV0gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICptYXg3NzY4Nl9jbGtf cmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqbWF4 Nzc2ODZfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgbWF4Nzc2 ODZfY2xrICptYXg3NzY4NikKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3Jl ICpjbGs7CiAJc3RydWN0IGNsa19odyAqaHcgPSAmbWF4Nzc2ODYtPmh3OwogCiAJY2xrID0gY2xr X3JlZ2lzdGVyKGRldiwgaHcpOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAgc3RhdGljIGludCBtYXg3 NzY4Nl9jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qg bWF4Nzc2ODZfZGV2ICppb2RldiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsK IAlzdHJ1Y3QgbWF4Nzc2ODZfY2xrICptYXg3NzY4Nl9jbGtzW01BWDc3Njg2X0NMS1NfTlVNXTsK LQlzdHJ1Y3QgY2xrICoqY2xvY2tzOworCXN0cnVjdCBjbGtfY29yZSAqKmNsb2NrczsKIAlpbnQg aSwgcmV0OwogCi0JY2xvY2tzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1 Y3QgY2xrICopCisJY2xvY2tzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1 Y3QgY2xrX2NvcmUgKikKIAkJCQkJKiBNQVg3NzY4Nl9DTEtTX05VTSwgR0ZQX0tFUk5FTCk7CiAJ aWYgKCFjbG9ja3MpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjAzLDcgKzIwMyw3IEBAIGVycl9j bG9ja3M6CiBzdGF0aWMgaW50IG1heDc3Njg2X2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbWF4Nzc2ODZfZGV2ICppb2RldiA9IGRldl9nZXRfZHJ2 ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgY2xrICoqY2xvY2tzID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGNsa19jb3JlICoqY2xvY2tzID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEocGRldik7CiAJaW50IGk7CiAKIAlpZiAoaW9kZXYtPmRldi0+b2Zfbm9kZSkK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1tb3hhcnQuYyBiL2RyaXZlcnMvY2xrL2Nsay1t b3hhcnQuYwppbmRleCAzMGEzYjY5Li5jNTAzYzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9j bGstbW94YXJ0LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLW1veGFydC5jCkBAIC0xOCw3ICsxOCw3 IEBACiB2b2lkIF9faW5pdCBtb3hhcnRfb2ZfcGxsX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSkKIHsKIAlzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlOwotCXN0cnVjdCBjbGsgKmNs aywgKnJlZl9jbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGssICpyZWZfY2xrOwogCXVuc2lnbmVk IGludCBtdWw7CiAJY29uc3QgY2hhciAqbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29uc3QgY2hhciAq cGFyZW50X25hbWU7CkBAIC0zNSw3ICszNSw3IEBAIHZvaWQgX19pbml0IG1veGFydF9vZl9wbGxf Y2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogCW11bCA9IHJlYWRsKGJhc2UgKyAw eDMwKSA+PiAzICYgMHgzZjsKIAlpb3VubWFwKGJhc2UpOwogCi0JcmVmX2NsayA9IG9mX2Nsa19n ZXQobm9kZSwgMCk7CisJcmVmX2NsayA9IG9mX2Nsa19wcm92aWRlcl9nZXQobm9kZSwgMCk7CiAJ aWYgKElTX0VSUihyZWZfY2xrKSkgewogCQlwcl9lcnIoIiVzOiBvZl9jbGtfZ2V0IGZhaWxlZFxu Iiwgbm9kZS0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtNTYsNyArNTYsNyBAQCBDTEtfT0Zf REVDTEFSRShtb3hhcnRfcGxsX2Nsb2NrLCAibW94YSxtb3hhcnQtcGxsLWNsb2NrIiwKIHZvaWQg X19pbml0IG1veGFydF9vZl9hcGJfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQog ewogCXN0YXRpYyB2b2lkIF9faW9tZW0gKmJhc2U7Ci0Jc3RydWN0IGNsayAqY2xrLCAqcGxsX2Ns azsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgKnBsbF9jbGs7CiAJdW5zaWduZWQgaW50IGRpdiwg dmFsOwogCXVuc2lnbmVkIGludCBkaXZfaWR4W10gPSB7IDIsIDMsIDQsIDYsIDh9OwogCWNvbnN0 IGNoYXIgKm5hbWUgPSBub2RlLT5uYW1lOwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIF9faW5pdCBt b3hhcnRfb2ZfYXBiX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIAkJdmFsID0g MDsKIAlkaXYgPSBkaXZfaWR4W3ZhbF0gKiAyOwogCi0JcGxsX2NsayA9IG9mX2Nsa19nZXQobm9k ZSwgMCk7CisJcGxsX2NsayA9IG9mX2Nsa19wcm92aWRlcl9nZXQobm9kZSwgMCk7CiAJaWYgKElT X0VSUihwbGxfY2xrKSkgewogCQlwcl9lcnIoIiVzOiBvZl9jbGtfZ2V0IGZhaWxlZFxuIiwgbm9k ZS0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLW11 eC5jIGIvZHJpdmVycy9jbGsvY2xrLW11eC5jCmluZGV4IDRmOTZmZjMuLjUzOGM0NTUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1tdXguYworKysgYi9kcml2ZXJzL2Nsay9jbGstbXV4LmMK QEAgLTEwLDcgKzEwLDYgQEAKICAqIFNpbXBsZSBtdWx0aXBsZXhlciBjbG9jayBpbXBsZW1lbnRh dGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGst cHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CkBAIC0xMTMsMTMgKzExMiwxMyBAQCBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfbXV4 X3JvX29wcyA9IHsKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChjbGtfbXV4X3JvX29wcyk7CiAKLXN0 cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9tdXhfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25z dCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfbXV4X3RhYmxlKHN0 cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqKnBhcmVu dF9uYW1lcywgdTggbnVtX3BhcmVudHMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19p b21lbSAqcmVnLCB1OCBzaGlmdCwgdTMyIG1hc2ssCiAJCXU4IGNsa19tdXhfZmxhZ3MsIHUzMiAq dGFibGUsIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IGNsa19tdXggKm11eDsKLQlzdHJ1 Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2Rh dGEgaW5pdDsKIAl1OCB3aWR0aCA9IDA7CiAKQEAgLTE2NSw3ICsxNjQsNyBAQCBzdHJ1Y3QgY2xr ICpjbGtfcmVnaXN0ZXJfbXV4X3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAq bmFtZSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWdpc3Rlcl9tdXhfdGFibGUpOwogCi1z dHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfbXV4KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hh ciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNl ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMsIHU4 IG51bV9wYXJlbnRzLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQl2b2lkIF9faW9tZW0gKnJlZywg dTggc2hpZnQsIHU4IHdpZHRoLAogCQl1OCBjbGtfbXV4X2ZsYWdzLCBzcGlubG9ja190ICpsb2Nr KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLW5vbWFkaWsuYyBiL2RyaXZlcnMvY2xrL2Ns ay1ub21hZGlrLmMKaW5kZXggMDVlMDRjZS4uOTE4NTVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9j bGsvY2xrLW5vbWFkaWsuYworKysgYi9kcml2ZXJzL2Nsay9jbGstbm9tYWRpay5jCkBAIC04LDcg KzgsNiBAQAogI2RlZmluZSBwcl9mbXQoZm10KSAiTm9tYWRpayBTUkMgY2xvY2tzOiAiIGZtdAog CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5j bHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8 bGludXgvaW8uaD4KQEAgLTI1NCwxMSArMjUzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X29wcyBwbGxfY2xrX29wcyA9IHsKIAkucmVjYWxjX3JhdGUgPSBwbGxfY2xrX3JlY2FsY19yYXRl LAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Nv cmUgKiBfX2luaXQKIHBsbF9jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBj aGFyICpuYW1lLAogCQkgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHUzMiBpZCkKIHsKLQlzdHJ1 Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19wbGwgKnBs bDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCkBAIC0zNDYsMTEgKzM0NSwxMSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc3JjX2Nsa19vcHMgPSB7CiAJLnJlY2FsY19yYXRl ID0gc3JjX2Nsa19yZWNhbGNfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0 CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICogX19pbml0CiBzcmNfY2xrX3JlZ2lzdGVyKHN0cnVj dCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJIGNvbnN0IGNoYXIgKnBhcmVudF9u YW1lLCB1OCBpZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7 CiAJc3RydWN0IGNsa19zcmMgKnNjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIApA QCAtNTEwLDcgKzUwOSw3IEBAIG1vZHVsZV9pbml0KG5vbWFkaWtfc3JjX2Nsa19pbml0X2RlYnVn ZnMpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgb2Zfbm9tYWRpa19wbGxfc2V0dXAoc3RydWN0IGRl dmljZV9ub2RlICpucCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FSU5WQUwpOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrID0gRVJSX1BUUigtRUlOVkFMKTsKIAljb25zdCBjaGFyICpj bGtfbmFtZSA9IG5wLT5uYW1lOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCXUzMiBwbGxf aWQ7CkBAIC01MzMsNyArNTMyLDcgQEAgQ0xLX09GX0RFQ0xBUkUobm9tYWRpa19wbGxfY2xrLAog CiBzdGF0aWMgdm9pZCBfX2luaXQgb2Zfbm9tYWRpa19oY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnApCiB7Ci0Jc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRUlOVkFMKTsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJY29uc3QgY2hhciAqY2xrX25h bWUgPSBucC0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKIApAQCAtNTU3LDcgKzU1 Niw3IEBAIENMS19PRl9ERUNMQVJFKG5vbWFkaWtfaGNsa19jbGssCiAKIHN0YXRpYyB2b2lkIF9f aW5pdCBvZl9ub21hZGlrX3NyY19jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsK LQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FSU5WQUwpOworCXN0cnVjdCBjbGtfY29yZSAq Y2xrID0gRVJSX1BUUigtRUlOVkFMKTsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1l OwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCXUzMiBjbGtfaWQ7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2Nsay9jbGstbnNwaXJlLmMgYi9kcml2ZXJzL2Nsay9jbGstbnNwaXJlLmMKaW5kZXgg YTM3OGRiNy4uZTljNDNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLW5zcGlyZS5jCisr KyBiL2RyaXZlcnMvY2xrL2Nsay1uc3BpcmUuYwpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgbnNwaXJlX2FoYmRpdl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiB7 CiAJdTMyIHZhbDsKIAl2b2lkIF9faW9tZW0gKmlvOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJ Y29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJc3RydWN0IG5zcGlyZV9jbGtfaW5mbyBpbmZvOwpA QCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBuc3BpcmVfY2xrX3NldHVwKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIHsKIAl1MzIgdmFsOwogCXZvaWQgX19pb21lbSAqaW87 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIg KmNsa19uYW1lID0gbm9kZS0+bmFtZTsKIAlzdHJ1Y3QgbnNwaXJlX2Nsa19pbmZvIGluZm87CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1wYWxtYXMuYyBiL2RyaXZlcnMvY2xrL2Nsay1w YWxtYXMuYwppbmRleCA3ODE2MzBlLi44ZmViZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9j bGstcGFsbWFzLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXBhbG1hcy5jCkBAIC0xNyw3ICsxNyw2 IEBACiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAot I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1 ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9wYWxtYXMuaD4K QEAgLTQyLDcgKzQxLDcgQEAgc3RydWN0IHBhbG1hc19jbGszMmtfZGVzYyB7CiAKIHN0cnVjdCBw YWxtYXNfY2xvY2tfaW5mbyB7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBjbGsgKmNs azsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2h3IGh3OwogCXN0cnVjdCBw YWxtYXMgKnBhbG1hczsKIAlzdHJ1Y3QgcGFsbWFzX2NsazMya19kZXNjICpjbGtfZGVzYzsKQEAg LTIxOSw3ICsyMTgsNyBAQCBzdGF0aWMgaW50IHBhbG1hc19jbGtzX2luaXRfY29uZmlndXJlKHN0 cnVjdCBwYWxtYXNfY2xvY2tfaW5mbyAqY2luZm8pCiAJfQogCiAJaWYgKGNpbmZvLT5leHRfY29u dHJvbF9waW4pIHsKLQkJcmV0ID0gY2xrX3ByZXBhcmUoY2luZm8tPmNsayk7CisJCXJldCA9IGNs a19wcm92aWRlcl9wcmVwYXJlKGNpbmZvLT5jbGspOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2 X2VycihjaW5mby0+ZGV2LCAiQ2xvY2sgcHJlcCBmYWlsZWQsICVkXG4iLCByZXQpOwogCQkJcmV0 dXJuIHJldDsKQEAgLTI0NCw3ICsyNDMsNyBAQCBzdGF0aWMgaW50IHBhbG1hc19jbGtzX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IHBhbG1hc19jbGtzX29mX21h dGNoX2RhdGEgKm1hdGNoX2RhdGE7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7 CiAJc3RydWN0IHBhbG1hc19jbG9ja19pbmZvICpjaW5mbzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJ c3RydWN0IGNsa19jb3JlICpjbGs7CiAJaW50IHJldDsKIAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2 aWNlKHBhbG1hc19jbGtzX29mX21hdGNoLCAmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jIGIvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMK aW5kZXggOGU1OGVkZi4uNTYxOWVlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLXBwYy1j b3JlbmV0LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMKQEAgLTY0LDcgKzY0 LDcgQEAgY29uc3Qgc3RydWN0IGNsa19vcHMgY211eF9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIF9f aW5pdCBjb3JlX211eF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0Jc3RydWN0IGNs ayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGlu aXQ7CiAJc3RydWN0IGNtdXhfY2xrICpjbXV4X2NsazsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGU7CkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGNvcmVfcGxsX2luaXQo c3RydWN0IGRldmljZV9ub2RlICpucCkKIAlpbnQgaSwgcmMsIGNvdW50OwogCWNvbnN0IGNoYXIg KmNsa19uYW1lLCAqcGFyZW50X25hbWU7CiAJc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKm9uZWNl bGxfZGF0YTsKLQlzdHJ1Y3QgY2xrICAgICAgKipzdWJjbGtzOworCXN0cnVjdCBjbGtfY29yZSAg ICAgICoqc3ViY2xrczsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAliYXNlID0gb2ZfaW9tYXAo bnAsIDApOwpAQCAtMTg0LDcgKzE4NCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjb3JlX3BsbF9p bml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJLyogb3V0cHV0IGNsb2NrIG51bWJlciBwZXIg UExMICovCiAJY2xvY2tzX3Blcl9wbGwgPSBjb3VudDsKIAotCXN1YmNsa3MgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgY2xrICopICogY291bnQsIEdGUF9LRVJORUwpOworCXN1YmNsa3MgPSBremFs bG9jKHNpemVvZihzdHJ1Y3QgY2xrX2NvcmUgKikgKiBjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYg KCFzdWJjbGtzKSB7CiAJCXByX2VycigiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBzdWJjbGtzXG4i LCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyX21hcDsKQEAgLTI0Niw3ICsyNDYsNyBAQCBlcnJfbWFw OgogCiBzdGF0aWMgdm9pZCBfX2luaXQgc3lzY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpu b2RlKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25z dCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IG9mX2dldF9wYXJlbnQobm9kZSk7CiAJdTMyIHJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay9jbGstczJtcHMxMS5jIGIvZHJpdmVycy9jbGsvY2xrLXMybXBzMTEuYwppbmRleCBiNzc5N2Zi Li4xN2ZjN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstczJtcHMxMS5jCisrKyBiL2Ry aXZlcnMvY2xrL2Nsay1zMm1wczExLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2RlZmluZSBzMm1w czExX25hbWUoYSkgKGEtPmh3LmluaXQtPm5hbWUpCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICoqY2xr X3RhYmxlOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqKmNsa190YWJsZTsKIHN0YXRpYyBzdHJ1 Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogZW51bSB7CkBAIC00Myw3ICs0Myw3IEBA IHN0cnVjdCBzMm1wczExX2NsayB7CiAJc3RydWN0IHNlY19wbWljX2RldiAqaW9kZXY7CiAJc3Ry dWN0IGRldmljZV9ub2RlICpjbGtfbnA7CiAJc3RydWN0IGNsa19odyBodzsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19sb29rdXAgKmxvb2t1 cDsKIAl1MzIgbWFzazsKIAl1bnNpZ25lZCBpbnQgcmVnOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHN0 YXRpYyBpbnQgczJtcHMxMV9jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK IAogCXMybXBzMTFfY2xrID0gczJtcHMxMV9jbGtzOwogCi0JY2xrX3RhYmxlID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgY2xrICopICoKKwljbGtfdGFibGUgPSBkZXZt X2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSAqCiAJCQkJIFMy TVBTMTFfQ0xLU19OVU0sIEdGUF9LRVJORUwpOwogCWlmICghY2xrX3RhYmxlKQogCQlyZXR1cm4g LUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYyBiL2RyaXZlcnMv Y2xrL2Nsay1zaTUzNTEuYwppbmRleCAzYjJhNjZmLi41N2M5ZWI1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9jbGstc2k1MzUxLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXNpNTM1MS5jCkBAIC01 NiwxMCArNTYsMTAgQEAgc3RydWN0IHNpNTM1MV9kcml2ZXJfZGF0YSB7CiAJc3RydWN0IHJlZ21h cAkJKnJlZ21hcDsKIAlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBvbmVjZWxsOwogCi0Jc3RydWN0 IGNsawkJKnB4dGFsOworCXN0cnVjdCBjbGtfY29yZQkJKnB4dGFsOwogCWNvbnN0IGNoYXIJCSpw eHRhbF9uYW1lOwogCXN0cnVjdCBjbGtfaHcJCXh0YWw7Ci0Jc3RydWN0IGNsawkJKnBjbGtpbjsK KwlzdHJ1Y3QgY2xrX2NvcmUJCSpwY2xraW47CiAJY29uc3QgY2hhcgkJKnBjbGtpbl9uYW1lOwog CXN0cnVjdCBjbGtfaHcJCWNsa2luOwogCkBAIC0xMTI4LDEyICsxMTI4LDEyIEBAIHN0YXRpYyBp bnQgc2k1MzUxX2R0X3BhcnNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJaWYgKCFwZGF0 YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwZGF0YS0+Y2xrX3h0YWwgPSBvZl9jbGtfZ2V0KG5w LCAwKTsKKwlwZGF0YS0+Y2xrX3h0YWwgPSBvZl9jbGtfcHJvdmlkZXJfZ2V0KG5wLCAwKTsKIAlp ZiAoIUlTX0VSUihwZGF0YS0+Y2xrX3h0YWwpKQotCQljbGtfcHV0KHBkYXRhLT5jbGtfeHRhbCk7 Ci0JcGRhdGEtPmNsa19jbGtpbiA9IG9mX2Nsa19nZXQobnAsIDEpOworCQlfX2Nsa19wdXQocGRh dGEtPmNsa194dGFsKTsKKwlwZGF0YS0+Y2xrX2Nsa2luID0gb2ZfY2xrX3Byb3ZpZGVyX2dldChu cCwgMSk7CiAJaWYgKCFJU19FUlIocGRhdGEtPmNsa19jbGtpbikpCi0JCWNsa19wdXQocGRhdGEt PmNsa19jbGtpbik7CisJCV9fY2xrX3B1dChwZGF0YS0+Y2xrX2Nsa2luKTsKIAogCS8qCiAJICog cHJvcGVydHkgc2lsYWJzLHBsbC1zb3VyY2UgOiA8bnVtIHNyYz4sIFs8Li4+XQpAQCAtMTMwNiw3 ICsxMzA2LDcgQEAgc3RhdGljIGludCBzaTUzNTFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQsCiAJc3RydWN0IHNpNTM1MV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3Qg c2k1MzUxX2RyaXZlcl9kYXRhICpkcnZkYXRhOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIg KnBhcmVudF9uYW1lc1s0XTsKIAl1OCBudW1fcGFyZW50cywgbnVtX2Nsb2NrczsKIAlpbnQgcmV0 LCBuOwpAQCAtMTU0NSw3ICsxNTQ1LDggQEAgc3RhdGljIGludCBzaTUzNTFfaTJjX3Byb2JlKHN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCS8qIHNldCBpbml0aWFsIGNsa291dCByYXRlICov CiAJCWlmIChwZGF0YS0+Y2xrb3V0W25dLnJhdGUgIT0gMCkgewogCQkJaW50IHJldDsKLQkJCXJl dCA9IGNsa19zZXRfcmF0ZShjbGssIHBkYXRhLT5jbGtvdXRbbl0ucmF0ZSk7CisJCQlyZXQgPSBj bGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrLAorCQkJCQkJICAgIHBkYXRhLT5jbGtvdXRbbl0ucmF0 ZSk7CiAJCQlpZiAocmV0ICE9IDApIHsKIAkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbm5v dCBzZXQgcmF0ZSA6ICVkXG4iLAogCQkJCQlyZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv Y2xrLXNpNTcwLmMgYi9kcml2ZXJzL2Nsay9jbGstc2k1NzAuYwppbmRleCBmYzE2N2IzLi5mMGVl YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstc2k1NzAuYworKysgYi9kcml2ZXJzL2Ns ay9jbGstc2k1NzAuYwpAQCAtNDA3LDcgKzQwNyw3IEBAIHN0YXRpYyBpbnQgc2k1NzBfcHJvYmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIHsKIAlzdHJ1Y3QgY2xrX3NpNTcwICpkYXRhOwog CXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCXUzMiBpbml0aWFsX2ZvdXQsIGZhY3RvcnlfZm91dCwgc3RhYmlsaXR5 OwogCWludCBlcnI7CiAJZW51bSBjbGtfc2k1NzBfdmFyaWFudCB2YXJpYW50ID0gaWQtPmRyaXZl cl9kYXRhOwpAQCAtNDc2LDcgKzQ3Niw3IEBAIHN0YXRpYyBpbnQgc2k1NzBfcHJvYmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCwKIAkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgaW5pdGlhbCBvdXRw dXQgZnJlcXVlbmN5IGZyb20gZGV2aWNlIHRyZWUgKi8KIAlpZiAoIW9mX3Byb3BlcnR5X3JlYWRf dTMyKGNsaWVudC0+ZGV2Lm9mX25vZGUsICJjbG9jay1mcmVxdWVuY3kiLAogCQkJCSZpbml0aWFs X2ZvdXQpKSB7Ci0JCWVyciA9IGNsa19zZXRfcmF0ZShjbGssIGluaXRpYWxfZm91dCk7CisJCWVy ciA9IGNsa19wcm92aWRlcl9zZXRfcmF0ZShjbGssIGluaXRpYWxfZm91dCk7CiAJCWlmIChlcnIp IHsKIAkJCW9mX2Nsa19kZWxfcHJvdmlkZXIoY2xpZW50LT5kZXYub2Zfbm9kZSk7CiAJCQlyZXR1 cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLXR3bDYwNDAuYyBiL2RyaXZlcnMv Y2xrL2Nsay10d2w2MDQwLmMKaW5kZXggMWFkYTc5YS4uZDI0YThhMiAxMDA2NDQKLS0tIGEvZHJp dmVycy9jbGsvY2xrLXR3bDYwNDAuYworKysgYi9kcml2ZXJzL2Nsay9jbGstdHdsNjA0MC5jCkBA IC0yMCw3ICsyMCw2IEBACiAqCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMzEsNyArMzAsNyBAQCBzdHJ1Y3QgdHdsNjA0MF9j bGsgewogCXN0cnVjdCB0d2w2MDQwICp0d2w2MDQwOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlz dHJ1Y3QgY2xrX2h3IG1jcGRtX2ZjbGs7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtf Y29yZSAqY2xrOwogCWludCBlbmFibGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv Y2xrLXUzMDAuYyBiL2RyaXZlcnMvY2xrL2Nsay11MzAwLmMKaW5kZXggNDA2YmZjMS4uMzkyYmNi ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLXUzMDAuYworKysgYi9kcml2ZXJzL2Nsay9j bGstdTMwMC5jCkBAIC01LDcgKzUsNiBAQAogICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51 cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgogICogQXV0aG9yOiBKb25hcyBBYWJlcmcgPGpvbmFz LmFiZXJnQHN0ZXJpY3Nzb24uY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5j bHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8 bGludXgvaW8uaD4KQEAgLTY4OCw3ICs2ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19v cHMgc3lzY29uX2Nsa19vcHMgPSB7CiAJLnNldF9yYXRlID0gc3lzY29uX2Nsa19zZXRfcmF0ZSwK IH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3RydWN0IGNsa19jb3Jl ICogX19pbml0CiBzeXNjb25fY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qg Y2hhciAqbmFtZSwKIAkJICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1bnNpZ25lZCBsb25n IGZsYWdzLAogCQkgICAgYm9vbCBod19jdHJsZCwKQEAgLTY5Niw3ICs2OTUsNyBAQCBzeXNjb25f Y2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAg IHZvaWQgX19pb21lbSAqZW5fcmVnLCB1OCBlbl9iaXQsCiAJCSAgICB1MTYgY2xrX3ZhbCkKIHsK LQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19z eXNjb24gKnNjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIApAQCAtODY3LDcgKzg2 Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgdTMwMF9jbG9jayBjb25zdCB1MzAwX2Nsa19sb29rdXBbXSBf X2luaXRjb25zdCA9IHsKIAogc3RhdGljIHZvaWQgX19pbml0IG9mX3UzMDBfc3lzY29uX2Nsa19p bml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0Jc3RydWN0IGNsayAqY2xrID0gRVJSX1BU UigtRUlOVkFMKTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJ Y29uc3QgY2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFt ZTsKIAl2b2lkIF9faW9tZW0gKnJlc19yZWc7CkBAIC0xMTEwLDExICsxMTA5LDExIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtY2xrX29wcyA9IHsKIAkuc2V0X3JhdGUgPSBtY2xrX2Ns a19zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlICogX19pbml0CiBtY2xrX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsIGJvb2wg aXNfbXNwcm8pCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwog CXN0cnVjdCBjbGtfbWNsayAqbWNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCkBA IC0xMTQxLDcgKzExNDAsNyBAQCBtY2xrX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYs IGNvbnN0IGNoYXIgKm5hbWUsCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvZl91MzAwX3N5c2Nvbl9t Y2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBF UlJfUFRSKC1FSU5WQUwpOworCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gRVJSX1BUUigtRUlOVkFM KTsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOwogCWNvbnN0IGNoYXIgKnBhcmVu dF9uYW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstdnQ4NTAwLmMgYi9kcml2ZXJz L2Nsay9jbGstdnQ4NTAwLmMKaW5kZXggMzdlOTI4OC4uZTVmYjkzMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9jbGsvY2xrLXZ0ODUwMC5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay12dDg1MDAuYwpAQCAt MjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyB2dDg1MDBfZ2F0ZWRf ZGl2aXNvcl9jbGtfb3BzID0gewogc3RhdGljIF9faW5pdCB2b2lkIHZ0d21fZGV2aWNlX2Nsa19p bml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKIAl1MzIgZW5fcmVnLCBkaXZfcmVnOwot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2Rl dmljZSAqZGV2X2NsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29u c3QgY2hhciAqcGFyZW50X25hbWU7CkBAIC02NTAsNyArNjUwLDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBjbGtfb3BzIHZ0d21fcGxsX29wcyA9IHsKIHN0YXRpYyBfX2luaXQgdm9pZCB2dHdtX3Bs bF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGludCBwbGxfdHlwZSkKIHsKIAl1 MzIgcmVnOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1 Y3QgY2xrX3BsbCAqcGxsX2NsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7 CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGst d204MzF4LmMgYi9kcml2ZXJzL2Nsay9jbGstd204MzF4LmMKaW5kZXggYjEzMTA0MS4uODRjZTg3 MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLXdtODMxeC5jCisrKyBiL2RyaXZlcnMvY2xr L2Nsay13bTgzMXguYwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI1LDkgKzI0LDkgQEAg c3RydWN0IHdtODMxeF9jbGsgewogCXN0cnVjdCBjbGtfaHcgeHRhbF9odzsKIAlzdHJ1Y3QgY2xr X2h3IGZsbF9odzsKIAlzdHJ1Y3QgY2xrX2h3IGNsa291dF9odzsKLQlzdHJ1Y3QgY2xrICp4dGFs OwotCXN0cnVjdCBjbGsgKmZsbDsKLQlzdHJ1Y3QgY2xrICpjbGtvdXQ7CisJc3RydWN0IGNsa19j b3JlICp4dGFsOworCXN0cnVjdCBjbGtfY29yZSAqZmxsOworCXN0cnVjdCBjbGtfY29yZSAqY2xr b3V0OwogCWJvb2wgeHRhbF9lbmE7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGst eGdlbmUuYyBiL2RyaXZlcnMvY2xrL2Nsay14Z2VuZS5jCmluZGV4IGRkOGE2MmQuLmNlM2VkMzQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay14Z2VuZS5jCisrKyBiL2RyaXZlcnMvY2xrL2Ns ay14Z2VuZS5jCkBAIC0xMjQsMTMgKzEyNCwxMyBAQCBjb25zdCBzdHJ1Y3QgY2xrX29wcyB4Z2Vu ZV9jbGtfcGxsX29wcyA9IHsKIAkucmVjYWxjX3JhdGUgPSB4Z2VuZV9jbGtfcGxsX3JlY2FsY19y YXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKnhnZW5lX3JlZ2lzdGVyX2Nsa19wbGwoc3Ry dWN0IGRldmljZSAqZGV2LAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqeGdlbmVfcmVnaXN0ZXJf Y2xrX3BsbChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh ciAqcGFyZW50X25hbWUsCiAJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCBfX2lvbWVtICpyZWcs IHUzMiBwbGxfb2Zmc2V0LAogCXUzMiB0eXBlLCBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVj dCB4Z2VuZV9jbGtfcGxsICphcG1jbGs7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtf Y29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAkvKiBhbGxvY2F0ZSB0 aGUgQVBNIGNsb2NrIHN0cnVjdHVyZSAqLwpAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBzdHJ1 Y3QgY2xrICp4Z2VuZV9yZWdpc3Rlcl9jbGtfcGxsKHN0cnVjdCBkZXZpY2UgKmRldiwKIHN0YXRp YyB2b2lkIHhnZW5lX3BsbGNsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGVudW0geGdl bmVfcGxsX3R5cGUgcGxsX3R5cGUpCiB7CiAgICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lID0g bnAtPmZ1bGxfbmFtZTsKLSAgICAgICAgc3RydWN0IGNsayAqY2xrOworICAgICAgICBzdHJ1Y3Qg Y2xrX2NvcmUgKmNsazsKICAgICAgICAgdm9pZCAqcmVnOwogCiAgICAgICAgIHJlZyA9IG9mX2lv bWFwKG5wLCAwKTsKQEAgLTM5NSwxMiArMzk1LDEyIEBAIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHhn ZW5lX2Nsa19vcHMgPSB7CiAJLnJvdW5kX3JhdGUgPSB4Z2VuZV9jbGtfcm91bmRfcmF0ZSwKIH07 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICp4Z2VuZV9yZWdpc3Rlcl9jbGsoc3RydWN0IGRldmljZSAq ZGV2LAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqeGdlbmVfcmVnaXN0ZXJfY2xrKHN0cnVjdCBk ZXZpY2UgKmRldiwKIAkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUs CiAJCXN0cnVjdCB4Z2VuZV9kZXZfcGFyYW1ldGVycyAqcGFyYW1ldGVycywgc3BpbmxvY2tfdCAq bG9jaykKIHsKIAlzdHJ1Y3QgeGdlbmVfY2xrICphcG1jbGs7Ci0Jc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJaW50 IHJjOwogCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIHN0cnVjdCBjbGsgKnhnZW5lX3JlZ2lz dGVyX2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsCiBzdGF0aWMgdm9pZCBfX2luaXQgeGdlbmVfZGV2 Y2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAljb25zdCBjaGFyICpjbGtfbmFt ZSA9IG5wLT5mdWxsX25hbWU7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAq Y2xrOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJaW50IHJjOwogCXN0cnVjdCB4Z2VuZV9kZXZf cGFyYW1ldGVycyBwYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLmggYi9k cml2ZXJzL2Nsay9jbGsuaAppbmRleCBjNzk4MTM4Li5kMjc4NTcyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9jbGsuaAorKysgYi9kcml2ZXJzL2Nsay9jbGsuaApAQCAtMTAsOCArMTAsOCBAQAog ICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19PRikgJiYgZGVmaW5lZChDT05GSUdfQ09NTU9OX0NM SykKLXN0cnVjdCBjbGsgKm9mX2Nsa19nZXRfYnlfY2xrc3BlYyhzdHJ1Y3Qgb2ZfcGhhbmRsZV9h cmdzICpjbGtzcGVjKTsKLXN0cnVjdCBjbGsgKl9fb2ZfY2xrX2dldF9mcm9tX3Byb3ZpZGVyKHN0 cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmNsa3NwZWMpOworc3RydWN0IGNsa19jb3JlICpvZl9jbGtf Z2V0X2J5X2Nsa3NwZWMoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqY2xrc3BlYyk7CitzdHJ1Y3Qg Y2xrX2NvcmUgKl9fb2ZfY2xrX2dldF9mcm9tX3Byb3ZpZGVyKHN0cnVjdCBvZl9waGFuZGxlX2Fy Z3MgKmNsa3NwZWMpOwogdm9pZCBvZl9jbGtfbG9jayh2b2lkKTsKIHZvaWQgb2ZfY2xrX3VubG9j ayh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvaGlzaWxpY29uL2Nsay1o aTM2MjAuYyBiL2RyaXZlcnMvY2xrL2hpc2lsaWNvbi9jbGstaGkzNjIwLmMKaW5kZXggMzM5OTQ1 ZC4uMjZmMTFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvaGlzaWxpY29uL2Nsay1oaTM2MjAu YworKysgYi9kcml2ZXJzL2Nsay9oaXNpbGljb24vY2xrLWhpMzYyMC5jCkBAIC0zMSw3ICszMSw2 IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4K IAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2hpMzYyMC1jbG9jay5oPgogCkBAIC0yOTYs NyArMjk1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1jX2Nsa19yZWNhbGNfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywKIAogc3RhdGljIGxvbmcgbW1jX2Nsa19kZXRlcm1pbmVfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJICAgICAgdW5zaWduZWQgbG9u ZyAqYmVzdF9wYXJlbnRfcmF0ZSwKLQkJCSAgICAgIHN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9w KQorCQkJICAgICAgc3RydWN0IGNsa19jb3JlICoqYmVzdF9wYXJlbnRfcCkKIHsKIAlzdHJ1Y3Qg Y2xrX21tYyAqbWNsayA9IHRvX21tYyhodyk7CiAJdW5zaWduZWQgbG9uZyBiZXN0ID0gMDsKQEAg LTQyNywxMSArNDI2LDExIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfbW1jX29wcyA9IHsK IAkucmVjYWxjX3JhdGUgPSBtbWNfY2xrX3JlY2FsY19yYXRlLAogfTsKIAotc3RhdGljIHN0cnVj dCBjbGsgKmhpc2lfcmVnaXN0ZXJfY2xrX21tYyhzdHJ1Y3QgaGlzaV9tbWNfY2xvY2sgKm1tY19j bGssCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpoaXNpX3JlZ2lzdGVyX2Nsa19tbWMoc3RydWN0 IGhpc2lfbW1jX2Nsb2NrICptbWNfY2xrLAogCQkJdm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wKQogewogCXN0cnVjdCBjbGtfbW1jICptY2xrOwotCXN0cnVjdCBjbGsg KmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0 OwogCiAJbWNsayA9IGt6YWxsb2Moc2l6ZW9mKCptY2xrKSwgR0ZQX0tFUk5FTCk7CkBAIC00ODcs NyArNDg2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGhpMzYyMF9tbWNfY2xrX2luaXQoc3RydWN0 IGRldmljZV9ub2RlICpub2RlKQogCWlmIChXQVJOX09OKCFjbGtfZGF0YSkpCiAJCXJldHVybjsK IAotCWNsa19kYXRhLT5jbGtzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNsayAqKSAqIG51bSwg R0ZQX0tFUk5FTCk7CisJY2xrX2RhdGEtPmNsa3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xr X2NvcmUgKikgKiBudW0sIEdGUF9LRVJORUwpOwogCWlmICghY2xrX2RhdGEtPmNsa3MpIHsKIAkJ cHJfZXJyKCIlczogZmFpbCB0byBhbGxvY2F0ZSBtbWMgY2xrXG4iLCBfX2Z1bmNfXyk7CiAJCXJl dHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2hpc2lsaWNvbi9jbGstaGlwMDQuYyBiL2Ry aXZlcnMvY2xrL2hpc2lsaWNvbi9jbGstaGlwMDQuYwppbmRleCAxMzJiNTdhLi5lODQwM2MwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay9oaXNpbGljb24vY2xrLWhpcDA0LmMKKysrIGIvZHJpdmVy cy9jbGsvaGlzaWxpY29uL2Nsay1oaXAwNC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8 bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGR0 LWJpbmRpbmdzL2Nsb2NrL2hpcDA0LWNsb2NrLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L2hpc2lsaWNvbi9jbGsuYyBiL2RyaXZlcnMvY2xrL2hpc2lsaWNvbi9jbGsuYwppbmRleCBhMDc4 ZTg0Li4wMGI3YzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9oaXNpbGljb24vY2xrLmMKKysr IGIvZHJpdmVycy9jbGsvaGlzaWxpY29uL2Nsay5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUg ImNsay5oIgogCkBAIC00Miw3ICs0MSw3IEBAIHN0cnVjdCBoaXNpX2Nsb2NrX2RhdGEgX19pbml0 ICpoaXNpX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCSAgICAgaW50IG5y X2Nsa3MpCiB7CiAJc3RydWN0IGhpc2lfY2xvY2tfZGF0YSAqY2xrX2RhdGE7Ci0Jc3RydWN0IGNs ayAqKmNsa190YWJsZTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipjbGtfdGFibGU7CiAJdm9pZCBfX2lv bWVtICpiYXNlOwogCiAJaWYgKG5wKSB7CkBAIC02Myw3ICs2Miw3IEBAIHN0cnVjdCBoaXNpX2Ns b2NrX2RhdGEgX19pbml0ICpoaXNpX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJ fQogCWNsa19kYXRhLT5iYXNlID0gYmFzZTsKIAotCWNsa190YWJsZSA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBjbGsgKikgKiBucl9jbGtzLCBHRlBfS0VSTkVMKTsKKwljbGtfdGFibGUgPSBremFs bG9jKHNpemVvZihzdHJ1Y3QgY2xrX2NvcmUgKikgKiBucl9jbGtzLCBHRlBfS0VSTkVMKTsKIAlp ZiAoIWNsa190YWJsZSkgewogCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgY2xvY2sg bG9va3VwIHRhYmxlXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyX2RhdGE7CkBAIC04MSw3ICs4 MCw3IEBAIGVycjoKIHZvaWQgX19pbml0IGhpc2lfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoc3Ry dWN0IGhpc2lfZml4ZWRfcmF0ZV9jbG9jayAqY2xrcywKIAkJCQkJIGludCBudW1zLCBzdHJ1Y3Qg aGlzaV9jbG9ja19kYXRhICpkYXRhKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xr X2NvcmUgKmNsazsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1zOyBpKyspIHsKQEAg LTEwMiw3ICsxMDEsNyBAQCB2b2lkIF9faW5pdCBoaXNpX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0 b3Ioc3RydWN0IGhpc2lfZml4ZWRfZmFjdG9yX2Nsb2NrICpjbGtzLAogCQkJCQkgICBpbnQgbnVt cywKIAkJCQkJICAgc3RydWN0IGhpc2lfY2xvY2tfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBp IDwgbnVtczsgaSsrKSB7CkBAIC0xMjIsNyArMTIxLDcgQEAgdm9pZCBfX2luaXQgaGlzaV9jbGtf cmVnaXN0ZXJfZml4ZWRfZmFjdG9yKHN0cnVjdCBoaXNpX2ZpeGVkX2ZhY3Rvcl9jbG9jayAqY2xr cywKIHZvaWQgX19pbml0IGhpc2lfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgaGlzaV9tdXhfY2xv Y2sgKmNsa3MsCiAJCQkJICBpbnQgbnVtcywgc3RydWN0IGhpc2lfY2xvY2tfZGF0YSAqZGF0YSkK IHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJdm9pZCBfX2lv bWVtICpiYXNlID0gZGF0YS0+YmFzZTsKIAlpbnQgaTsKIApAQCAtMTUxLDcgKzE1MCw3IEBAIHZv aWQgX19pbml0IGhpc2lfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgaGlzaV9tdXhfY2xvY2sgKmNs a3MsCiB2b2lkIF9faW5pdCBoaXNpX2Nsa19yZWdpc3Rlcl9kaXZpZGVyKHN0cnVjdCBoaXNpX2Rp dmlkZXJfY2xvY2sgKmNsa3MsCiAJCQkJICAgICAgaW50IG51bXMsIHN0cnVjdCBoaXNpX2Nsb2Nr X2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OwogCXZvaWQgX19pb21lbSAqYmFzZSA9IGRhdGEtPmJhc2U7CiAJaW50IGk7CiAKQEAgLTE4MCw3 ICsxNzksNyBAQCB2b2lkIF9faW5pdCBoaXNpX2Nsa19yZWdpc3Rlcl9kaXZpZGVyKHN0cnVjdCBo aXNpX2RpdmlkZXJfY2xvY2sgKmNsa3MsCiB2b2lkIF9faW5pdCBoaXNpX2Nsa19yZWdpc3Rlcl9n YXRlKHN0cnVjdCBoaXNpX2dhdGVfY2xvY2sgKmNsa3MsCiAJCQkJICAgICAgIGludCBudW1zLCBz dHJ1Y3QgaGlzaV9jbG9ja19kYXRhICpkYXRhKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBkYXRhLT5iYXNlOwogCWlu dCBpOwogCkBAIC0yMDgsNyArMjA3LDcgQEAgdm9pZCBfX2luaXQgaGlzaV9jbGtfcmVnaXN0ZXJf Z2F0ZShzdHJ1Y3QgaGlzaV9nYXRlX2Nsb2NrICpjbGtzLAogdm9pZCBfX2luaXQgaGlzaV9jbGtf cmVnaXN0ZXJfZ2F0ZV9zZXAoc3RydWN0IGhpc2lfZ2F0ZV9jbG9jayAqY2xrcywKIAkJCQkgICAg ICAgaW50IG51bXMsIHN0cnVjdCBoaXNpX2Nsb2NrX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IGNs ayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IGRh dGEtPmJhc2U7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2hpc2lsaWNvbi9j bGsuaCBiL2RyaXZlcnMvY2xrL2hpc2lsaWNvbi9jbGsuaAppbmRleCAzMTA4M2ZmLi5mN2ZjNGI5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9oaXNpbGljb24vY2xrLmgKKysrIGIvZHJpdmVycy9j bGsvaGlzaWxpY29uL2Nsay5oCkBAIC05MCw3ICs5MCw3IEBAIHN0cnVjdCBoaXNpX2dhdGVfY2xv Y2sgewogCWNvbnN0IGNoYXIJCSphbGlhczsKIH07CiAKLXN0cnVjdCBjbGsgKmhpc2lfcmVnaXN0 ZXJfY2xrZ2F0ZV9zZXAoc3RydWN0IGRldmljZSAqLCBjb25zdCBjaGFyICosCitzdHJ1Y3QgY2xr X2NvcmUgKmhpc2lfcmVnaXN0ZXJfY2xrZ2F0ZV9zZXAoc3RydWN0IGRldmljZSAqLCBjb25zdCBj aGFyICosCiAJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLAogCQkJCXZvaWQgX19pb21l bSAqLCB1OCwKIAkJCQl1OCwgc3BpbmxvY2tfdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L2hpc2lsaWNvbi9jbGtnYXRlLXNlcGFyYXRlZC5jIGIvZHJpdmVycy9jbGsvaGlzaWxpY29uL2Ns a2dhdGUtc2VwYXJhdGVkLmMKaW5kZXggYjAzZDVhNy4uNWRiNWJhNiAxMDA2NDQKLS0tIGEvZHJp dmVycy9jbGsvaGlzaWxpY29uL2Nsa2dhdGUtc2VwYXJhdGVkLmMKKysrIGIvZHJpdmVycy9jbGsv aGlzaWxpY29uL2Nsa2dhdGUtc2VwYXJhdGVkLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRl IDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgImNsay5oIgogCkBA IC05NiwxNCArOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa2dhdGVfc2VwYXJhdGVk X29wcyA9IHsKIAkuaXNfZW5hYmxlZAk9IGNsa2dhdGVfc2VwYXJhdGVkX2lzX2VuYWJsZWQsCiB9 OwogCi1zdHJ1Y3QgY2xrICpoaXNpX3JlZ2lzdGVyX2Nsa2dhdGVfc2VwKHN0cnVjdCBkZXZpY2Ug KmRldiwgY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqaGlzaV9yZWdpc3Rlcl9j bGtnYXRlX3NlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAg ICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFn cywKIAkJCQkgICAgICB2b2lkIF9faW9tZW0gKnJlZywgdTggYml0X2lkeCwKIAkJCQkgICAgICB1 OCBjbGtfZ2F0ZV9mbGFncywgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3QgY2xrZ2F0ZV9z ZXBhcmF0ZWQgKnNjbGs7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlzY2xrID0ga3phbGxvYyhzaXplb2Yo KnNjbGspLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2tleXN0b25lL2dh dGUuYyBiL2RyaXZlcnMvY2xrL2tleXN0b25lL2dhdGUuYwppbmRleCA4NmYxZTM2Li42YmIyMTFh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9rZXlzdG9uZS9nYXRlLmMKKysrIGIvZHJpdmVycy9j bGsva2V5c3RvbmUvZ2F0ZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vy ci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0xNjMsNyArMTYyLDcgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfb3BzIGNsa19wc2Nfb3BzID0gewogICogQHBzY19kYXRhOiBwbGF0Zm9y bSBkYXRhIHRvIGNvbmZpZ3VyZSB0aGlzIGNsb2NrCiAgKiBAbG9jazogc3BpbmxvY2sgdXNlZCBi eSB0aGlzIGNsb2NrCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfcHNjKHN0 cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl9w c2Moc3RydWN0IGRldmljZSAqZGV2LAogCQkJY29uc3QgY2hhciAqbmFtZSwKIAkJCWNvbnN0IGNo YXIgKnBhcmVudF9uYW1lLAogCQkJc3RydWN0IGNsa19wc2NfZGF0YSAqcHNjX2RhdGEsCkBAIC0x NzEsNyArMTcwLDcgQEAgc3RhdGljIHN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9wc2Moc3RydWN0 IGRldmljZSAqZGV2LAogewogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3RydWN0IGNs a19wc2MgKnBzYzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAK IAlwc2MgPSBremFsbG9jKHNpemVvZigqcHNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwc2MpCkBA IC0yMDQsNyArMjAzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG9mX3BzY19jbGtfaW5pdChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHNwaW5sb2NrX3QgKmxvY2spCiAJY29uc3QgY2hhciAqY2xr X25hbWUgPSBub2RlLT5uYW1lOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCXN0cnVjdCBj bGtfcHNjX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAq Y2xrOwogCWludCBpOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5F TCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9rZXlzdG9uZS9wbGwuYyBiL2RyaXZlcnMvY2xr L2tleXN0b25lL3BsbC5jCmluZGV4IDBkZDhhNGIuLjJlMzE4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvY2xrL2tleXN0b25lL3BsbC5jCisrKyBiL2RyaXZlcnMvY2xrL2tleXN0b25lL3BsbC5jCkBA IC0xMCw3ICsxMCw2IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4 L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CkBAIC0xMTYsMTQgKzExNSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMg Y2xrX3BsbF9vcHMgPSB7CiAJLnJlY2FsY19yYXRlID0gY2xrX3BsbGNsa19yZWNhbGMsCiB9Owog Ci1zdGF0aWMgc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX3BsbChzdHJ1Y3QgZGV2aWNlICpkZXYs CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBkZXZpY2Ug KmRldiwKIAkJCWNvbnN0IGNoYXIgKm5hbWUsCiAJCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwK IAkJCXN0cnVjdCBjbGtfcGxsX2RhdGEgKnBsbF9kYXRhKQogewogCXN0cnVjdCBjbGtfaW5pdF9k YXRhIGluaXQ7CiAJc3RydWN0IGNsa19wbGwgKnBsbDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAKIAlwbGwgPSBremFsbG9jKHNpemVvZigqcGxsKSwgR0ZQX0tF Uk5FTCk7CiAJaWYgKCFwbGwpCkBAIC0xNTgsNyArMTU3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0 IF9vZl9wbGxfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBib29sIHBsbGN0cmwp CiB7CiAJc3RydWN0IGNsa19wbGxfZGF0YSAqcGxsX2RhdGE7CiAJY29uc3QgY2hhciAqcGFyZW50 X25hbWU7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCBp OwogCiAJcGxsX2RhdGEgPSBremFsbG9jKHNpemVvZigqcGxsX2RhdGEpLCBHRlBfS0VSTkVMKTsK QEAgLTIzOSw3ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfcGxsX2Rpdl9jbGtfaW5p dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJ dm9pZCBfX2lvbWVtICpyZWc7CiAJdTMyIHNoaWZ0LCBtYXNrOwotCXN0cnVjdCBjbGsgKmNsazsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5h bWU7CiAKIAlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVz IiwgJmNsa19uYW1lKTsKQEAgLTI4Miw3ICsyODEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2Zf cGxsX211eF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7CiAJdm9pZCBfX2lv bWVtICpyZWc7CiAJdTMyIHNoaWZ0LCBtYXNrOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3Qg Y2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFyICpwYXJlbnRzWzJdOwogCWNvbnN0IGNoYXIgKmNs a19uYW1lID0gbm9kZS0+bmFtZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbW1wL2Nsay1h cGJjLmMgYi9kcml2ZXJzL2Nsay9tbXAvY2xrLWFwYmMuYwppbmRleCBkMTQxMjBlLi40YTFkZTQ5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tbXAvY2xrLWFwYmMuYworKysgYi9kcml2ZXJzL2Ns ay9tbXAvY2xrLWFwYmMuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5o PgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0x MjAsMTIgKzExOSwxMiBAQCBzdHJ1Y3QgY2xrX29wcyBjbGtfYXBiY19vcHMgPSB7CiAJLnVucHJl cGFyZSA9IGNsa19hcGJjX3VucHJlcGFyZSwKIH07CiAKLXN0cnVjdCBjbGsgKm1tcF9jbGtfcmVn aXN0ZXJfYXBiYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKK3N0 cnVjdCBjbGtfY29yZSAqbW1wX2Nsa19yZWdpc3Rlcl9hcGJjKGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQl2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGlu dCBkZWxheSwKIAkJdW5zaWduZWQgaW50IGFwYmNfZmxhZ3MsIHNwaW5sb2NrX3QgKmxvY2spCiB7 CiAJc3RydWN0IGNsa19hcGJjICphcGJjOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xr X2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJYXBiYyA9IGt6YWxs b2Moc2l6ZW9mKCphcGJjKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9t bXAvY2xrLWFwbXUuYyBiL2RyaXZlcnMvY2xrL21tcC9jbGstYXBtdS5jCmluZGV4IGFiZTE4MmIu LmNiYzA3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL21tcC9jbGstYXBtdS5jCisrKyBiL2Ry aXZlcnMvY2xrL21tcC9jbGstYXBtdS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxp bnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KQEAgLTY2LDExICs2NSwxMSBAQCBzdHJ1Y3QgY2xrX29wcyBjbGtfYXBtdV9vcHMgPSB7CiAJ LmRpc2FibGUgPSBjbGtfYXBtdV9kaXNhYmxlLAogfTsKIAotc3RydWN0IGNsayAqbW1wX2Nsa19y ZWdpc3Rlcl9hcG11KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAor c3RydWN0IGNsa19jb3JlICptbXBfY2xrX3JlZ2lzdGVyX2FwbXUoY29uc3QgY2hhciAqbmFtZSwg Y29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGVuYWJs ZV9tYXNrLCBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCBjbGtfYXBtdSAqYXBtdTsKLQlz dHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0 X2RhdGEgaW5pdDsKIAogCWFwbXUgPSBremFsbG9jKHNpemVvZigqYXBtdSksIEdGUF9LRVJORUwp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbW1wL2Nsay1mcmFjLmMgYi9kcml2ZXJzL2Nsay9t bXAvY2xrLWZyYWMuYwppbmRleCAyM2E1NmY1Li4wMzg2Y2RkIDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay9tbXAvY2xrLWZyYWMuYworKysgYi9kcml2ZXJzL2Nsay9tbXAvY2xrLWZyYWMuYwpAQCAt MTE2LDE0ICsxMTYsMTQgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19mYWN0b3Jfb3BzID0g ewogCS5zZXRfcmF0ZSA9IGNsa19mYWN0b3Jfc2V0X3JhdGUsCiB9OwogCi1zdHJ1Y3QgY2xrICpt bXBfY2xrX3JlZ2lzdGVyX2ZhY3Rvcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJl bnRfbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqbW1wX2Nsa19yZWdpc3Rlcl9mYWN0b3IoY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXVuc2lnbmVkIGxvbmcgZmxh Z3MsIHZvaWQgX19pb21lbSAqYmFzZSwKIAkJc3RydWN0IGNsa19mYWN0b3JfbWFza3MgKm1hc2tz LCBzdHJ1Y3QgY2xrX2ZhY3Rvcl90YmwgKmZ0YmwsCiAJCXVuc2lnbmVkIGludCBmdGJsX2NudCkK IHsKIAlzdHJ1Y3QgY2xrX2ZhY3RvciAqZmFjdG9yOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGlu aXQ7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJaWYgKCFt YXNrcykgewogCQlwcl9lcnIoIiVzOiBtdXN0IHBhc3MgYSBjbGtfZmFjdG9yX21hc2tcbiIsIF9f ZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21tcC9jbGstbW1wMi5jIGIvZHJpdmVy cy9jbGsvbW1wL2Nsay1tbXAyLmMKaW5kZXggYjI3MjFjYS4uOThiZDczZiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9jbGsvbW1wL2Nsay1tbXAyLmMKKysrIGIvZHJpdmVycy9jbGsvbW1wL2Nsay1tbXAy LmMKQEAgLTc3LDggKzc3LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNjaWNfcGFyZW50W10gPSB7 InBsbDFfMiIsICJwbGwxXzE2IiwgInZjdGN4byJ9OwogCiB2b2lkIF9faW5pdCBtbXAyX2Nsa19p bml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBjbGsgKnZjdGN4bzsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnZjdGN4bzsKIAl2b2lkIF9f aW9tZW0gKm1wbXVfYmFzZTsKIAl2b2lkIF9faW9tZW0gKmFwbXVfYmFzZTsKIAl2b2lkIF9faW9t ZW0gKmFwYmNfYmFzZTsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIF9faW5pdCBtbXAyX2Nsa19p bml0KHZvaWQpCiAJCQkJbXBtdV9iYXNlICsgTVBNVV9VQVJUX1BMTCwKIAkJCQkmdWFydF9mYWN0 b3JfbWFza3MsIHVhcnRfZmFjdG9yX3RibCwKIAkJCQlBUlJBWV9TSVpFKHVhcnRfZmFjdG9yX3Ri bCkpOwotCWNsa19zZXRfcmF0ZShjbGssIDE0NzQ1NjAwKTsKKwljbGtfcHJvdmlkZXJfc2V0X3Jh dGUoY2xrLCAxNDc0NTYwMCk7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssICJ1YXJ0X3BsbCIs IE5VTEwpOwogCiAJY2xrID0gbW1wX2Nsa19yZWdpc3Rlcl9hcGJjKCJ0d3NpMCIsICJ2Y3RjeG8i LApAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgX19pbml0IG1tcDJfY2xrX2luaXQodm9pZCkKIAkJ CQlBUlJBWV9TSVpFKHVhcnRfcGFyZW50KSwKIAkJCQlDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xL X1NFVF9SQVRFX05PX1JFUEFSRU5ULAogCQkJCWFwYmNfYmFzZSArIEFQQkNfVUFSVDAsIDQsIDMs IDAsICZjbGtfbG9jayk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrLCB2Y3RjeG8pOworCWNsa19wcm92 aWRlcl9zZXRfcGFyZW50KGNsaywgdmN0Y3hvKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywg InVhcnRfbXV4LjAiLCBOVUxMKTsKIAogCWNsayA9IG1tcF9jbGtfcmVnaXN0ZXJfYXBiYygidWFy dDAiLCAidWFydDBfbXV4IiwKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIF9faW5pdCBtbXAyX2Ns a19pbml0KHZvaWQpCiAJCQkJQVJSQVlfU0laRSh1YXJ0X3BhcmVudCksCiAJCQkJQ0xLX1NFVF9S QVRFX1BBUkVOVCB8IENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCQlhcGJjX2Jhc2UgKyBB UEJDX1VBUlQxLCA0LCAzLCAwLCAmY2xrX2xvY2spOwotCWNsa19zZXRfcGFyZW50KGNsaywgdmN0 Y3hvKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGssIHZjdGN4byk7CiAJY2xrX3JlZ2lz dGVyX2Nsa2RldihjbGssICJ1YXJ0X211eC4xIiwgTlVMTCk7CiAKIAljbGsgPSBtbXBfY2xrX3Jl Z2lzdGVyX2FwYmMoInVhcnQxIiwgInVhcnQxX211eCIsCkBAIC0yNzMsNyArMjczLDcgQEAgdm9p ZCBfX2luaXQgbW1wMl9jbGtfaW5pdCh2b2lkKQogCQkJCUFSUkFZX1NJWkUodWFydF9wYXJlbnQp LAogCQkJCUNMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJ CQkJYXBiY19iYXNlICsgQVBCQ19VQVJUMiwgNCwgMywgMCwgJmNsa19sb2NrKTsKLQljbGtfc2V0 X3BhcmVudChjbGssIHZjdGN4byk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrLCB2Y3Rj eG8pOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCAidWFydF9tdXguMiIsIE5VTEwpOwogCiAJ Y2xrID0gbW1wX2Nsa19yZWdpc3Rlcl9hcGJjKCJ1YXJ0MiIsICJ1YXJ0Ml9tdXgiLApAQCAtMjg0 LDcgKzI4NCw3IEBAIHZvaWQgX19pbml0IG1tcDJfY2xrX2luaXQodm9pZCkKIAkJCQlBUlJBWV9T SVpFKHVhcnRfcGFyZW50KSwKIAkJCQlDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRF X05PX1JFUEFSRU5ULAogCQkJCWFwYmNfYmFzZSArIEFQQkNfVUFSVDMsIDQsIDMsIDAsICZjbGtf bG9jayk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrLCB2Y3RjeG8pOworCWNsa19wcm92aWRlcl9zZXRf cGFyZW50KGNsaywgdmN0Y3hvKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgInVhcnRfbXV4 LjMiLCBOVUxMKTsKIAogCWNsayA9IG1tcF9jbGtfcmVnaXN0ZXJfYXBiYygidWFydDMiLCAidWFy dDNfbXV4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21tcC9jbGstcHhhMTY4LmMgYi9kcml2 ZXJzL2Nsay9tbXAvY2xrLXB4YTE2OC5jCmluZGV4IDAxNDM5NmIuLmU0ZjUwYWIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvY2xrL21tcC9jbGstcHhhMTY4LmMKKysrIGIvZHJpdmVycy9jbGsvbW1wL2Ns ay1weGExNjguYwpAQCAtNjgsOCArNjgsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY2NpY19waHlf cGFyZW50W10gPSB7InBsbDFfNiIsICJwbGwxXzEyIn07CiAKIHZvaWQgX19pbml0IHB4YTE2OF9j bGtfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgY2xrICp1YXJ0X3Bs bDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnVhcnRfcGxsOwog CXZvaWQgX19pb21lbSAqbXBtdV9iYXNlOwogCXZvaWQgX19pb21lbSAqYXBtdV9iYXNlOwogCXZv aWQgX19pb21lbSAqYXBiY19iYXNlOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgX19pbml0IHB4 YTE2OF9jbGtfaW5pdCh2b2lkKQogCQkJCW1wbXVfYmFzZSArIE1QTVVfVUFSVF9QTEwsCiAJCQkJ JnVhcnRfZmFjdG9yX21hc2tzLCB1YXJ0X2ZhY3Rvcl90YmwsCiAJCQkJQVJSQVlfU0laRSh1YXJ0 X2ZhY3Rvcl90YmwpKTsKLQljbGtfc2V0X3JhdGUodWFydF9wbGwsIDE0NzQ1NjAwKTsKKwljbGtf cHJvdmlkZXJfc2V0X3JhdGUodWFydF9wbGwsIDE0NzQ1NjAwKTsKIAljbGtfcmVnaXN0ZXJfY2xr ZGV2KHVhcnRfcGxsLCAidWFydF9wbGwiLCBOVUxMKTsKIAogCWNsayA9IG1tcF9jbGtfcmVnaXN0 ZXJfYXBiYygidHdzaTAiLCAicGxsMV8xM18xXzUiLApAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQg X19pbml0IHB4YTE2OF9jbGtfaW5pdCh2b2lkKQogCQkJCUFSUkFZX1NJWkUodWFydF9wYXJlbnQp LAogCQkJCUNMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJ CQkJYXBiY19iYXNlICsgQVBCQ19VQVJUMCwgNCwgMywgMCwgJmNsa19sb2NrKTsKLQljbGtfc2V0 X3BhcmVudChjbGssIHVhcnRfcGxsKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGssIHVh cnRfcGxsKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgInVhcnRfbXV4LjAiLCBOVUxMKTsK IAogCWNsayA9IG1tcF9jbGtfcmVnaXN0ZXJfYXBiYygidWFydDAiLCAidWFydDBfbXV4IiwKQEAg LTIxMyw3ICsyMTMsNyBAQCB2b2lkIF9faW5pdCBweGExNjhfY2xrX2luaXQodm9pZCkKIAkJCQlB UlJBWV9TSVpFKHVhcnRfcGFyZW50KSwKIAkJCQlDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NF VF9SQVRFX05PX1JFUEFSRU5ULAogCQkJCWFwYmNfYmFzZSArIEFQQkNfVUFSVDEsIDQsIDMsIDAs ICZjbGtfbG9jayk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrLCB1YXJ0X3BsbCk7CisJY2xrX3Byb3Zp ZGVyX3NldF9wYXJlbnQoY2xrLCB1YXJ0X3BsbCk7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGss ICJ1YXJ0X211eC4xIiwgTlVMTCk7CiAKIAljbGsgPSBtbXBfY2xrX3JlZ2lzdGVyX2FwYmMoInVh cnQxIiwgInVhcnQxX211eCIsCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBfX2luaXQgcHhhMTY4 X2Nsa19pbml0KHZvaWQpCiAJCQkJQVJSQVlfU0laRSh1YXJ0X3BhcmVudCksCiAJCQkJQ0xLX1NF VF9SQVRFX1BBUkVOVCB8IENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCQlhcGJjX2Jhc2Ug KyBBUEJDX1VBUlQyLCA0LCAzLCAwLCAmY2xrX2xvY2spOwotCWNsa19zZXRfcGFyZW50KGNsaywg dWFydF9wbGwpOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsaywgdWFydF9wbGwpOwogCWNs a19yZWdpc3Rlcl9jbGtkZXYoY2xrLCAidWFydF9tdXguMiIsIE5VTEwpOwogCiAJY2xrID0gbW1w X2Nsa19yZWdpc3Rlcl9hcGJjKCJ1YXJ0MiIsICJ1YXJ0Ml9tdXgiLApkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvbW1wL2Nsay1weGE5MTAuYyBiL2RyaXZlcnMvY2xrL21tcC9jbGstcHhhOTEwLmMK aW5kZXggOWVmYzZhNC4uYjVjMjE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbW1wL2Nsay1w eGE5MTAuYworKysgYi9kcml2ZXJzL2Nsay9tbXAvY2xrLXB4YTkxMC5jCkBAIC02Niw4ICs2Niw4 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjY2ljX3BoeV9wYXJlbnRbXSA9IHsicGxsMV82IiwgInBs bDFfMTIifTsKIAogdm9pZCBfX2luaXQgcHhhOTEwX2Nsa19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0 IGNsayAqY2xrOwotCXN0cnVjdCBjbGsgKnVhcnRfcGxsOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqdWFydF9wbGw7CiAJdm9pZCBfX2lvbWVtICptcG11X2Jhc2U7 CiAJdm9pZCBfX2lvbWVtICphcG11X2Jhc2U7CiAJdm9pZCBfX2lvbWVtICphcGJjcF9iYXNlOwpA QCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgX19pbml0IHB4YTkxMF9jbGtfaW5pdCh2b2lkKQogCQkJ CW1wbXVfYmFzZSArIE1QTVVfVUFSVF9QTEwsCiAJCQkJJnVhcnRfZmFjdG9yX21hc2tzLCB1YXJ0 X2ZhY3Rvcl90YmwsCiAJCQkJQVJSQVlfU0laRSh1YXJ0X2ZhY3Rvcl90YmwpKTsKLQljbGtfc2V0 X3JhdGUodWFydF9wbGwsIDE0NzQ1NjAwKTsKKwljbGtfcHJvdmlkZXJfc2V0X3JhdGUodWFydF9w bGwsIDE0NzQ1NjAwKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KHVhcnRfcGxsLCAidWFydF9wbGwi LCBOVUxMKTsKIAogCWNsayA9IG1tcF9jbGtfcmVnaXN0ZXJfYXBiYygidHdzaTAiLCAicGxsMV8x M18xXzUiLApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgX19pbml0IHB4YTkxMF9jbGtfaW5pdCh2 b2lkKQogCQkJCUFSUkFZX1NJWkUodWFydF9wYXJlbnQpLAogCQkJCUNMS19TRVRfUkFURV9QQVJF TlQgfCBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJCQkJYXBiY19iYXNlICsgQVBCQ19VQVJU MCwgNCwgMywgMCwgJmNsa19sb2NrKTsKLQljbGtfc2V0X3BhcmVudChjbGssIHVhcnRfcGxsKTsK KwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGssIHVhcnRfcGxsKTsKIAljbGtfcmVnaXN0ZXJf Y2xrZGV2KGNsaywgInVhcnRfbXV4LjAiLCBOVUxMKTsKIAogCWNsayA9IG1tcF9jbGtfcmVnaXN0 ZXJfYXBiYygidWFydDAiLCAidWFydDBfbXV4IiwKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIF9f aW5pdCBweGE5MTBfY2xrX2luaXQodm9pZCkKIAkJCQlBUlJBWV9TSVpFKHVhcnRfcGFyZW50KSwK IAkJCQlDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRFX05PX1JFUEFSRU5ULAogCQkJ CWFwYmNfYmFzZSArIEFQQkNfVUFSVDEsIDQsIDMsIDAsICZjbGtfbG9jayk7Ci0JY2xrX3NldF9w YXJlbnQoY2xrLCB1YXJ0X3BsbCk7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrLCB1YXJ0 X3BsbCk7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssICJ1YXJ0X211eC4xIiwgTlVMTCk7CiAK IAljbGsgPSBtbXBfY2xrX3JlZ2lzdGVyX2FwYmMoInVhcnQxIiwgInVhcnQxX211eCIsCkBAIC0y MjksNyArMjI5LDcgQEAgdm9pZCBfX2luaXQgcHhhOTEwX2Nsa19pbml0KHZvaWQpCiAJCQkJQVJS QVlfU0laRSh1YXJ0X3BhcmVudCksCiAJCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCB8IENMS19TRVRf UkFURV9OT19SRVBBUkVOVCwKIAkJCQlhcGJjcF9iYXNlICsgQVBCQ1BfVUFSVDIsIDQsIDMsIDAs ICZjbGtfbG9jayk7Ci0JY2xrX3NldF9wYXJlbnQoY2xrLCB1YXJ0X3BsbCk7CisJY2xrX3Byb3Zp ZGVyX3NldF9wYXJlbnQoY2xrLCB1YXJ0X3BsbCk7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGss ICJ1YXJ0X211eC4yIiwgTlVMTCk7CiAKIAljbGsgPSBtbXBfY2xrX3JlZ2lzdGVyX2FwYmMoInVh cnQyIiwgInVhcnQyX211eCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tbXAvY2xrLmggYi9k cml2ZXJzL2Nsay9tbXAvY2xrLmgKaW5kZXggYWI4NmRkNC4uMTQ3N2U2MSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9jbGsvbW1wL2Nsay5oCisrKyBiL2RyaXZlcnMvY2xrL21tcC9jbGsuaApAQCAtMjAs MTUgKzIwLDE1IEBAIHN0cnVjdCBjbGtfZmFjdG9yX3RibCB7CiAJdW5zaWduZWQgaW50IGRlbjsK IH07CiAKLWV4dGVybiBzdHJ1Y3QgY2xrICptbXBfY2xrX3JlZ2lzdGVyX3BsbDIoY29uc3QgY2hh ciAqbmFtZSwKK2V4dGVybiBzdHJ1Y3QgY2xrX2NvcmUgKm1tcF9jbGtfcmVnaXN0ZXJfcGxsMihj b25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9u ZyBmbGFncyk7Ci1leHRlcm4gc3RydWN0IGNsayAqbW1wX2Nsa19yZWdpc3Rlcl9hcGJjKGNvbnN0 IGNoYXIgKm5hbWUsCitleHRlcm4gc3RydWN0IGNsa19jb3JlICptbXBfY2xrX3JlZ2lzdGVyX2Fw YmMoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19p b21lbSAqYmFzZSwKIAkJdW5zaWduZWQgaW50IGRlbGF5LCB1bnNpZ25lZCBpbnQgYXBiY19mbGFn cywgc3BpbmxvY2tfdCAqbG9jayk7Ci1leHRlcm4gc3RydWN0IGNsayAqbW1wX2Nsa19yZWdpc3Rl cl9hcG11KGNvbnN0IGNoYXIgKm5hbWUsCitleHRlcm4gc3RydWN0IGNsa19jb3JlICptbXBfY2xr X3JlZ2lzdGVyX2FwbXUoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25h bWUsIHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGVuYWJsZV9tYXNrLAogCQlzcGlubG9ja190ICps b2NrKTsKLWV4dGVybiBzdHJ1Y3QgY2xrICptbXBfY2xrX3JlZ2lzdGVyX2ZhY3Rvcihjb25zdCBj aGFyICpuYW1lLAorZXh0ZXJuIHN0cnVjdCBjbGtfY29yZSAqbW1wX2Nsa19yZWdpc3Rlcl9mYWN0 b3IoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVk IGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21lbSAqYmFzZSwgc3RydWN0IGNsa19mYWN0b3JfbWFz a3MgKm1hc2tzLAogCQlzdHJ1Y3QgY2xrX2ZhY3Rvcl90YmwgKmZ0YmwsIHVuc2lnbmVkIGludCBm dGJsX2NudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tdmVidS9jbGstY29yZWRpdi5jIGIv ZHJpdmVycy9jbGsvbXZlYnUvY2xrLWNvcmVkaXYuYwppbmRleCBkMWU1ODYzLi4xYmUxNWM0IDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tdmVidS9jbGstY29yZWRpdi5jCisrKyBiL2RyaXZlcnMv Y2xrL212ZWJ1L2Nsay1jb3JlZGl2LmMKQEAgLTIzOCw3ICsyMzgsNyBAQCBtdmVidV9jb3JlZGl2 X2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIHsKIAlzdHJ1Y3QgY2xrX2luaXRf ZGF0YSBpbml0OwogCXN0cnVjdCBjbGtfY29yZWRpdiAqY29yZWRpdjsKLQlzdHJ1Y3QgY2xrICoq Y2xrczsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipjbGtzOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlj b25zdCBjaGFyICpwYXJlbnRfbmFtZTsKIAljb25zdCBjaGFyICpjbGtfbmFtZTsKQEAgLTI1Myw3 ICsyNTMsNyBAQCBtdmVidV9jb3JlZGl2X2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZSwKIAljbGtfZGF0YS5jbGtfbnVtID0gc29jX2Rlc2MtPm5kZXNjczsKIAogCS8qIGNsa3MgaG9s ZHMgdGhlIGNsb2NrIGFycmF5ICovCi0JY2xrcyA9IGtjYWxsb2MoY2xrX2RhdGEuY2xrX251bSwg c2l6ZW9mKHN0cnVjdCBjbGsgKiksCisJY2xrcyA9IGtjYWxsb2MoY2xrX2RhdGEuY2xrX251bSwg c2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoV0FSTl9P TighY2xrcykpCiAJCWdvdG8gZXJyX3VubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXZl YnUvY2xrLWNwdS5jIGIvZHJpdmVycy9jbGsvbXZlYnUvY2xrLWNwdS5jCmluZGV4IDM4MjFhODgu LjU5YTQwYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL212ZWJ1L2Nsay1jcHUuYworKysgYi9k cml2ZXJzL2Nsay9tdmVidS9jbGstY3B1LmMKQEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IGNwdV9j bGsgewogCXZvaWQgX19pb21lbSAqcG11X2RmczsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICoq Y2xrczsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKipjbGtzOwogCiBzdGF0aWMgc3RydWN0IGNs a19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7CiAKQEAgLTE5NSw4ICsxOTUsOCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgb2ZfY3B1X2Nsa19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAKIAlm b3JfZWFjaF9ub2RlX2J5X3R5cGUoZG4sICJjcHUiKSB7CiAJCXN0cnVjdCBjbGtfaW5pdF9kYXRh IGluaXQ7Ci0JCXN0cnVjdCBjbGsgKmNsazsKLQkJc3RydWN0IGNsayAqcGFyZW50X2NsazsKKwkJ c3RydWN0IGNsa19jb3JlICpjbGs7CisJCXN0cnVjdCBjbGtfY29yZSAqcGFyZW50X2NsazsKIAkJ Y2hhciAqY2xrX25hbWUgPSBremFsbG9jKDUsIEdGUF9LRVJORUwpOwogCQlpbnQgY3B1LCBlcnI7 CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfY3B1X2Nsa19zZXR1 cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJCQlnb3RvIGJhaWxfb3V0OwogCiAJCXNwcmlu dGYoY2xrX25hbWUsICJjcHUlZCIsIGNwdSk7Ci0JCXBhcmVudF9jbGsgPSBvZl9jbGtfZ2V0KG5v ZGUsIDApOworCQlwYXJlbnRfY2xrID0gb2ZfY2xrX3Byb3ZpZGVyX2dldChub2RlLCAwKTsKIAog CQljcHVjbGtbY3B1XS5wYXJlbnRfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHBhcmVudF9jbGspOwog CQljcHVjbGtbY3B1XS5jbGtfbmFtZSA9IGNsa19uYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9j bGsvbXZlYnUvY29tbW9uLmMgYi9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYwppbmRleCA4MTQ1 YzRlLi5mNmUxNGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYworKysg Yi9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAKICNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRl IDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNs dWRlIDxsaW51eC9pby5oPgpAQCAtNDMsNyArNDIsNyBAQCB2b2lkIF9faW5pdCBtdmVidV9jb3Jl Y2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAKIAkvKiBBbGxvY2F0ZSBzdHJ1Y3Qg Zm9yIFRDTEssIGNwdSBjbGssIGFuZCBjb3JlIHJhdGlvIGNsb2NrcyAqLwogCWNsa19kYXRhLmNs a19udW0gPSAyICsgZGVzYy0+bnVtX3JhdGlvczsKLQljbGtfZGF0YS5jbGtzID0ga3phbGxvYyhj bGtfZGF0YS5jbGtfbnVtICogc2l6ZW9mKHN0cnVjdCBjbGsgKiksCisJY2xrX2RhdGEuY2xrcyA9 IGt6YWxsb2MoY2xrX2RhdGEuY2xrX251bSAqIHNpemVvZihzdHJ1Y3QgY2xrX2NvcmUgKiksCiAJ CQkJR0ZQX0tFUk5FTCk7CiAJaWYgKFdBUk5fT04oIWNsa19kYXRhLmNsa3MpKSB7CiAJCWlvdW5t YXAoYmFzZSk7CkBAIC05MywxMyArOTIsMTMgQEAgREVGSU5FX1NQSU5MT0NLKGN0cmxfZ2F0aW5n X2xvY2spOwogCiBzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsIHsKIAlzcGlubG9ja190ICpsb2NrOwot CXN0cnVjdCBjbGsgKipnYXRlczsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipnYXRlczsKIAlpbnQgbnVt X2dhdGVzOwogfTsKIAogI2RlZmluZSB0b19jbGtfZ2F0ZShfaHcpIGNvbnRhaW5lcl9vZihfaHcs IHN0cnVjdCBjbGtfZ2F0ZSwgaHcpCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZ2F0aW5nX2dl dF9zcmMoCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpjbGtfZ2F0aW5nX2dldF9zcmMoCiAJc3Ry dWN0IG9mX3BoYW5kbGVfYXJncyAqY2xrc3BlYywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2xr X2dhdGluZ19jdHJsICpjdHJsID0gKHN0cnVjdCBjbGtfZ2F0aW5nX2N0cmwgKilkYXRhOwpAQCAt MTIxLDcgKzEyMCw3IEBAIHZvaWQgX19pbml0IG12ZWJ1X2Nsa19nYXRpbmdfc2V0dXAoc3RydWN0 IGRldmljZV9ub2RlICpucCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2xrX2dhdGluZ19zb2NfZGVz YyAqZGVzYykKIHsKIAlzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsICpjdHJsOwotCXN0cnVjdCBjbGsg KmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJY29u c3QgY2hhciAqZGVmYXVsdF9wYXJlbnQgPSBOVUxMOwogCWludCBuOwpAQCAtMTMwLDEwICsxMjks MTAgQEAgdm9pZCBfX2luaXQgbXZlYnVfY2xrX2dhdGluZ19zZXR1cChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLAogCWlmIChXQVJOX09OKCFiYXNlKSkKIAkJcmV0dXJuOwogCi0JY2xrID0gb2ZfY2xr X2dldChucCwgMCk7CisJY2xrID0gb2ZfY2xrX3Byb3ZpZGVyX2dldChucCwgMCk7CiAJaWYgKCFJ U19FUlIoY2xrKSkgewogCQlkZWZhdWx0X3BhcmVudCA9IF9fY2xrX2dldF9uYW1lKGNsayk7Ci0J CWNsa19wdXQoY2xrKTsKKwkJX19jbGtfcHV0KGNsayk7CiAJfQogCiAJY3RybCA9IGt6YWxsb2Mo c2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBfX2lu aXQgbXZlYnVfY2xrX2dhdGluZ19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQluKys7 CiAKIAljdHJsLT5udW1fZ2F0ZXMgPSBuOwotCWN0cmwtPmdhdGVzID0ga3phbGxvYyhjdHJsLT5u dW1fZ2F0ZXMgKiBzaXplb2Yoc3RydWN0IGNsayAqKSwKKwljdHJsLT5nYXRlcyA9IGt6YWxsb2Mo Y3RybC0+bnVtX2dhdGVzICogc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSwKIAkJCSAgICAgIEdG UF9LRVJORUwpOwogCWlmIChXQVJOX09OKCFjdHJsLT5nYXRlcykpCiAJCWdvdG8gZ2F0ZXNfb3V0 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXZlYnUva2lya3dvb2QuYyBiL2RyaXZlcnMvY2xr L212ZWJ1L2tpcmt3b29kLmMKaW5kZXggOTk1NTBmMi4uNWQwOTc4YiAxMDA2NDQKLS0tIGEvZHJp dmVycy9jbGsvbXZlYnUva2lya3dvb2QuYworKysgYi9kcml2ZXJzL2Nsay9tdmVidS9raXJrd29v ZC5jCkBAIC0yNDIsNyArMjQyLDcgQEAgc3RydWN0IGNsa19tdXhpbmdfc29jX2Rlc2MgewogCiBz dHJ1Y3QgY2xrX211eGluZ19jdHJsIHsKIAlzcGlubG9ja190ICpsb2NrOwotCXN0cnVjdCBjbGsg KiptdXhlczsKKwlzdHJ1Y3QgY2xrX2NvcmUgKiptdXhlczsKIAlpbnQgbnVtX211eGVzOwogfTsK IApAQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX211eGluZ19zb2Nf ZGVzYyBraXJrd29vZF9tdXhfZGVzY1tdIF9faW5pdGNvbnN0ID0gewogCiAjZGVmaW5lIHRvX2Ns a19tdXgoX2h3KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1Y3QgY2xrX211eCwgaHcpCiAKLXN0YXRp YyBzdHJ1Y3QgY2xrICpjbGtfbXV4aW5nX2dldF9zcmMoCitzdGF0aWMgc3RydWN0IGNsa19jb3Jl ICpjbGtfbXV4aW5nX2dldF9zcmMoCiAJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqY2xrc3BlYywg dm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2xrX211eGluZ19jdHJsICpjdHJsID0gKHN0cnVjdCBj bGtfbXV4aW5nX2N0cmwgKilkYXRhOwpAQCAtMjk5LDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCBraXJrd29vZF9jbGtfbXV4aW5nX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJ CW4rKzsKIAogCWN0cmwtPm51bV9tdXhlcyA9IG47Ci0JY3RybC0+bXV4ZXMgPSBrY2FsbG9jKGN0 cmwtPm51bV9tdXhlcywgc2l6ZW9mKHN0cnVjdCBjbGsgKiksCisJY3RybC0+bXV4ZXMgPSBrY2Fs bG9jKGN0cmwtPm51bV9tdXhlcywgc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSwKIAkJCUdGUF9L RVJORUwpOwogCWlmIChXQVJOX09OKCFjdHJsLT5tdXhlcykpCiAJCWdvdG8gbXV4ZXNfb3V0Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXhzL2Nsay1kaXYuYyBiL2RyaXZlcnMvY2xrL214cy9j bGstZGl2LmMKaW5kZXggOTBlMWRhOS4uNzNjYTFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv bXhzL2Nsay1kaXYuYworKysgYi9kcml2ZXJzL2Nsay9teHMvY2xrLWRpdi5jCkBAIC05LDcgKzks NiBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KIAotI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTc0LDExICs3 MywxMSBAQCBzdGF0aWMgc3RydWN0IGNsa19vcHMgY2xrX2Rpdl9vcHMgPSB7CiAJLnNldF9yYXRl ID0gY2xrX2Rpdl9zZXRfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKm14c19jbGtfZGl2KGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpt eHNfY2xrX2Rpdihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJ CXZvaWQgX19pb21lbSAqcmVnLCB1OCBzaGlmdCwgdTggd2lkdGgsIHU4IGJ1c3kpCiB7CiAJc3Ry dWN0IGNsa19kaXYgKmRpdjsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpj bGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCWRpdiA9IGt6YWxsb2Moc2l6ZW9m KCpkaXYpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL214cy9jbGstZnJh Yy5jIGIvZHJpdmVycy9jbGsvbXhzL2Nsay1mcmFjLmMKaW5kZXggZTZhYTZiNS4uNjVjZWRmOCAx MDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbXhzL2Nsay1mcmFjLmMKKysrIGIvZHJpdmVycy9jbGsv bXhzL2Nsay1mcmFjLmMKQEAgLTksNyArOSw2IEBACiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29w eWxlZnQvZ3BsLmh0bWwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8 bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8 bGludXgvaW8uaD4KQEAgLTEwOCwxMSArMTA3LDExIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBj bGtfZnJhY19vcHMgPSB7CiAJLnNldF9yYXRlID0gY2xrX2ZyYWNfc2V0X3JhdGUsCiB9OwogCi1z dHJ1Y3QgY2xrICpteHNfY2xrX2ZyYWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFy ZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKm14c19jbGtfZnJhYyhjb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSB2b2lkIF9faW9tZW0gKnJlZywgdTggc2hp ZnQsIHU4IHdpZHRoLCB1OCBidXN5KQogewogCXN0cnVjdCBjbGtfZnJhYyAqZnJhYzsKLQlzdHJ1 Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2Rh dGEgaW5pdDsKIAogCWZyYWMgPSBremFsbG9jKHNpemVvZigqZnJhYyksIEdGUF9LRVJORUwpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXhzL2Nsay1pbXgyMy5jIGIvZHJpdmVycy9jbGsvbXhz L2Nsay1pbXgyMy5jCmluZGV4IDlmYzkzNTkuLjQzZjJkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Y2xrL214cy9jbGstaW14MjMuYworKysgYi9kcml2ZXJzL2Nsay9teHMvY2xrLWlteDIzLmMKQEAg LTksNyArOSw2IEBACiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAq LwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrL214cy5oPgog I2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5o PgpAQCAtOTQsNyArOTMsNyBAQCBlbnVtIGlteDIzX2NsayB7CiAJY2xrX21heAogfTsKIAotc3Rh dGljIHN0cnVjdCBjbGsgKmNsa3NbY2xrX21heF07CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpj bGtzW2Nsa19tYXhdOwogc3RhdGljIHN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwog CiBzdGF0aWMgZW51bSBpbXgyM19jbGsgY2xrc19pbml0X29uW10gX19pbml0ZGF0YSA9IHsKQEAg LTE3MSw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbXgyM19jbG9ja3NfaW5pdChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wKQogCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNf b25lY2VsbF9nZXQsICZjbGtfZGF0YSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj bGtzX2luaXRfb24pOyBpKyspCi0JCWNsa19wcmVwYXJlX2VuYWJsZShjbGtzW2Nsa3NfaW5pdF9v bltpXV0pOworCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tjbGtzX2luaXRfb25b aV1dKTsKIAogfQogQ0xLX09GX0RFQ0xBUkUoaW14MjNfY2xrY3RybCwgImZzbCxpbXgyMy1jbGtj dHJsIiwgbXgyM19jbG9ja3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9teHMvY2xr LWlteDI4LmMgYi9kcml2ZXJzL2Nsay9teHMvY2xrLWlteDI4LmMKaW5kZXggYTZjMzUwMS4uZTZk NzBhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbXhzL2Nsay1pbXgyOC5jCisrKyBiL2RyaXZl cnMvY2xrL214cy9jbGstaW14MjguYwpAQCAtOSw3ICs5LDYgQEAKICAqIGh0dHA6Ly93d3cuZ251 Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNp bmNsdWRlIDxsaW51eC9jbGsvbXhzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5j bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CkBAIC0xNDgsNyArMTQ3LDcgQEAgZW51bSBpbXgy OF9jbGsgewogCWNsa19tYXgKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW2Nsa19tYXhd Oworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqY2xrc1tjbGtfbWF4XTsKIHN0YXRpYyBzdHJ1Y3Qg Y2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogc3RhdGljIGVudW0gaW14MjhfY2xrIGNsa3Nf aW5pdF9vbltdIF9faW5pdGRhdGEgPSB7CkBAIC0yNTAsNiArMjQ5LDYgQEAgc3RhdGljIHZvaWQg X19pbml0IG14MjhfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIAljbGtfcmVn aXN0ZXJfY2xrZGV2KGNsa3NbZW5ldF9vdXRdLCBOVUxMLCAiZW5ldF9vdXQiKTsKIAogCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsa3NfaW5pdF9vbik7IGkrKykKLQkJY2xrX3ByZXBhcmVf ZW5hYmxlKGNsa3NbY2xrc19pbml0X29uW2ldXSk7CisJCWNsa19wcm92aWRlcl9wcmVwYXJlX2Vu YWJsZShjbGtzW2Nsa3NfaW5pdF9vbltpXV0pOwogfQogQ0xLX09GX0RFQ0xBUkUoaW14MjhfY2xr Y3RybCwgImZzbCxpbXgyOC1jbGtjdHJsIiwgbXgyOF9jbG9ja3NfaW5pdCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9teHMvY2xrLXBsbC5jIGIvZHJpdmVycy9jbGsvbXhzL2Nsay1wbGwuYwpp bmRleCBmYWRhZTQxLi5lMGY5NGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9teHMvY2xrLXBs bC5jCisrKyBiL2RyaXZlcnMvY2xrL214cy9jbGstcGxsLmMKQEAgLTksNyArOSw2IEBACiAgKiBo dHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwogCi0jaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTg2LDExICs4NSwxMSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX3BsbF9vcHMgPSB7CiAJLnJlY2FsY19yYXRl ID0gY2xrX3BsbF9yZWNhbGNfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKm14c19jbGtfcGxsKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3Jl ICpteHNfY2xrX3BsbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwK IAkJCXZvaWQgX19pb21lbSAqYmFzZSwgdTggcG93ZXIsIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsK IAlzdHJ1Y3QgY2xrX3BsbCAqcGxsOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJcGxsID0ga3phbGxvYyhz aXplb2YoKnBsbCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXhzL2Ns ay1yZWYuYyBiL2RyaXZlcnMvY2xrL214cy9jbGstcmVmLmMKaW5kZXggNGFkZWVkNi4uYWY3NWMz ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbXhzL2Nsay1yZWYuYworKysgYi9kcml2ZXJzL2Ns ay9teHMvY2xrLXJlZi5jCkBAIC05LDcgKzksNiBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2Nv cHlsZWZ0L2dwbC5odG1sCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUg PGxpbnV4L2lvLmg+CkBAIC0xMjUsMTEgKzEyNCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgY2xrX3JlZl9vcHMgPSB7CiAJLnNldF9yYXRlCT0gY2xrX3JlZl9zZXRfcmF0ZSwKIH07 CiAKLXN0cnVjdCBjbGsgKm14c19jbGtfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg KnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpteHNfY2xrX3JlZihjb25zdCBjaGFyICpu YW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCXZvaWQgX19pb21lbSAqcmVnLCB1OCBp ZHgpCiB7CiAJc3RydWN0IGNsa19yZWYgKnJlZjsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0 IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXJlZiA9IGt6 YWxsb2Moc2l6ZW9mKCpyZWYpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L214cy9jbGstc3NwLmMgYi9kcml2ZXJzL2Nsay9teHMvY2xrLXNzcC5jCmluZGV4IGFmN2JkYmYu LjVmOWIwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL214cy9jbGstc3NwLmMKKysrIGIvZHJp dmVycy9jbGsvbXhzL2Nsay1zc3AuYwpAQCAtMTgsNyArMTgsNiBAQAogCiAjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0zMCw3ICsyOSw3IEBAIHZvaWQgbXhzX3NzcF9z ZXRfY2xrX3JhdGUoc3RydWN0IG14c19zc3AgKnNzcCwgdW5zaWduZWQgaW50IHJhdGUpCiAJdTMy IGNsb2NrX2RpdmlkZSwgY2xvY2tfcmF0ZTsKIAl1MzIgdmFsOwogCi0Jc3NwX2NsayA9IGNsa19n ZXRfcmF0ZShzc3AtPmNsayk7CisJc3NwX2NsayA9IGNsa19wcm92aWRlcl9nZXRfcmF0ZShzc3At PmNsayk7CiAKIAlmb3IgKGNsb2NrX2RpdmlkZSA9IDI7IGNsb2NrX2RpdmlkZSA8PSAyNTQ7IGNs b2NrX2RpdmlkZSArPSAyKSB7CiAJCWNsb2NrX3JhdGUgPSBESVZfUk9VTkRfVVAoc3NwX2Nsaywg cmF0ZSAqIGNsb2NrX2RpdmlkZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9teHMvY2xrLmgg Yi9kcml2ZXJzL2Nsay9teHMvY2xrLmgKaW5kZXggZWYxMGFkOS4uMTliOWRjMyAxMDA2NDQKLS0t IGEvZHJpdmVycy9jbGsvbXhzL2Nsay5oCisrKyBiL2RyaXZlcnMvY2xrL214cy9jbGsuaApAQCAt MTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX01YU19DTEtfSAogI2RlZmluZSBfX01YU19DTEtfSAog Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+ CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIApAQCAtMjMsMjQgKzIyLDI0IEBAIGV4dGVy biBzcGlubG9ja190IG14c19sb2NrOwogCiBpbnQgbXhzX2Nsa193YWl0KHZvaWQgX19pb21lbSAq cmVnLCB1OCBzaGlmdCk7CiAKLXN0cnVjdCBjbGsgKm14c19jbGtfcGxsKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpteHNfY2xrX3Bs bChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCXZvaWQgX19p b21lbSAqYmFzZSwgdTggcG93ZXIsIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKLXN0cnVjdCBjbGsg Km14c19jbGtfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAor c3RydWN0IGNsa19jb3JlICpteHNfY2xrX3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSwKIAkJCXZvaWQgX19pb21lbSAqcmVnLCB1OCBpZHgpOwogCi1zdHJ1Y3Qg Y2xrICpteHNfY2xrX2Rpdihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFt ZSwKK3N0cnVjdCBjbGtfY29yZSAqbXhzX2Nsa19kaXYoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsCiAJCQl2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQsIHU4IHdp ZHRoLCB1OCBidXN5KTsKIAotc3RydWN0IGNsayAqbXhzX2Nsa19mcmFjKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpteHNfY2xrX2Zy YWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkgdm9pZCBf X2lvbWVtICpyZWcsIHU4IHNoaWZ0LCB1OCB3aWR0aCwgdTggYnVzeSk7CiAKLXN0YXRpYyBpbmxp bmUgc3RydWN0IGNsayAqbXhzX2Nsa19maXhlZChjb25zdCBjaGFyICpuYW1lLCBpbnQgcmF0ZSkK K3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICpteHNfY2xrX2ZpeGVkKGNvbnN0IGNoYXIg Km5hbWUsIGludCByYXRlKQogewogCXJldHVybiBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxM LCBuYW1lLCBOVUxMLCBDTEtfSVNfUk9PVCwgcmF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IGNsayAqbXhzX2Nsa19nYXRlKGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBjbGtfY29yZSAqbXhzX2Nsa19nYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQljb25zdCBj aGFyICpwYXJlbnRfbmFtZSwgdm9pZCBfX2lvbWVtICpyZWcsIHU4IHNoaWZ0KQogewogCXJldHVy biBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBuYW1lLCBwYXJlbnRfbmFtZSwgQ0xLX1NFVF9SQVRF X1BBUkVOVCwKQEAgLTQ4LDcgKzQ3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpteHNf Y2xrX2dhdGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgJm14c19sb2NrKTsKIH0KIAotc3RhdGlj IGlubGluZSBzdHJ1Y3QgY2xrICpteHNfY2xrX211eChjb25zdCBjaGFyICpuYW1lLCB2b2lkIF9f aW9tZW0gKnJlZywKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jb3JlICpteHNfY2xrX211eChj b25zdCBjaGFyICpuYW1lLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJdTggc2hpZnQsIHU4IHdpZHRo LCBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCBpbnQgbnVtX3BhcmVudHMpCiB7CiAJcmV0dXJu IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwgbmFtZSwgcGFyZW50X25hbWVzLCBudW1fcGFyZW50cywK QEAgLTU2LDcgKzU1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpteHNfY2xrX211eChj b25zdCBjaGFyICpuYW1lLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJCQlyZWcsIHNoaWZ0LCB3aWR0 aCwgMCwgJm14c19sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpteHNfY2xr X2ZpeGVkX2ZhY3Rvcihjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xr X2NvcmUgKm14c19jbGtfZml4ZWRfZmFjdG9yKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNo YXIgKnBhcmVudF9uYW1lLCB1bnNpZ25lZCBpbnQgbXVsdCwgdW5zaWduZWQgaW50IGRpdikKIHsK IAlyZXR1cm4gY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihOVUxMLCBuYW1lLCBwYXJlbnRfbmFt ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Fjb20vY2xrLXJjZy5jIGIvZHJpdmVycy9jbGsv cWNvbS9jbGstcmNnLmMKaW5kZXggYjYzOGM1OC4uNTlmMTE4YyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jbGsvcWNvbS9jbGstcmNnLmMKKysrIGIvZHJpdmVycy9jbGsvcWNvbS9jbGstcmNnLmMKQEAg LTM3NSw3ICszNzUsNyBAQCBzdHJ1Y3QgZnJlcV90YmwgKmZpbmRfZnJlcShjb25zdCBzdHJ1Y3Qg ZnJlcV90YmwgKmYsIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIAogc3RhdGljIGxvbmcgX2ZyZXFfdGJs X2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCQljb25zdCBzdHJ1Y3QgZnJlcV90 YmwgKmYsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJdW5zaWduZWQgbG9uZyAqcF9yYXRlLCBzdHJ1 Y3QgY2xrICoqcCkKKwkJdW5zaWduZWQgbG9uZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrX2NvcmUgKipw KQogewogCXVuc2lnbmVkIGxvbmcgY2xrX2ZsYWdzOwogCkBAIC00MDIsNyArNDAyLDcgQEAgc3Rh dGljIGxvbmcgX2ZyZXFfdGJsX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogfQog CiBzdGF0aWMgbG9uZyBjbGtfcmNnX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1 bnNpZ25lZCBsb25nIHJhdGUsCi0JCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsayAq KnApCisJCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsa19jb3JlICoqcCkKIHsKIAlz dHJ1Y3QgY2xrX3JjZyAqcmNnID0gdG9fY2xrX3JjZyhodyk7CiAKQEAgLTQxMCw3ICs0MTAsNyBA QCBzdGF0aWMgbG9uZyBjbGtfcmNnX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1 bnNpZ25lZCBsb25nIHJhdGUsCiB9CiAKIHN0YXRpYyBsb25nIGNsa19keW5fcmNnX2RldGVybWlu ZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCi0JCXVuc2lnbmVk IGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsayAqKnApCisJCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwg c3RydWN0IGNsa19jb3JlICoqcCkKIHsKIAlzdHJ1Y3QgY2xrX2R5bl9yY2cgKnJjZyA9IHRvX2Ns a19keW5fcmNnKGh3KTsKIApAQCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBsb25nIGNsa19keW5f cmNnX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUs CiB9CiAKIHN0YXRpYyBsb25nIGNsa19yY2dfYnlwYXNzX2RldGVybWluZV9yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCi0JCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwg c3RydWN0IGNsayAqKnApCisJCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsa19jb3Jl ICoqcCkKIHsKIAlzdHJ1Y3QgY2xrX3JjZyAqcmNnID0gdG9fY2xrX3JjZyhodyk7CiAJY29uc3Qg c3RydWN0IGZyZXFfdGJsICpmID0gcmNnLT5mcmVxX3RibDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL3Fjb20vY2xrLXJjZzIuYyBiL2RyaXZlcnMvY2xrL3Fjb20vY2xrLXJjZzIuYwppbmRleCBj ZDE4NWQ1Li42YWFjMWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9xY29tL2Nsay1yY2cyLmMK KysrIGIvZHJpdmVycy9jbGsvcWNvbS9jbGstcmNnMi5jCkBAIC0xODgsNyArMTg4LDcgQEAgc3Ry dWN0IGZyZXFfdGJsICpmaW5kX2ZyZXEoY29uc3Qgc3RydWN0IGZyZXFfdGJsICpmLCB1bnNpZ25l ZCBsb25nIHJhdGUpCiAKIHN0YXRpYyBsb25nIF9mcmVxX3RibF9kZXRlcm1pbmVfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywKIAkJY29uc3Qgc3RydWN0IGZyZXFfdGJsICpmLCB1bnNpZ25lZCBsb25n IHJhdGUsCi0JCXVuc2lnbmVkIGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsayAqKnApCisJCXVuc2ln bmVkIGxvbmcgKnBfcmF0ZSwgc3RydWN0IGNsa19jb3JlICoqcCkKIHsKIAl1bnNpZ25lZCBsb25n IGNsa19mbGFnczsKIApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBsb25nIF9mcmVxX3RibF9k ZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKIH0KIAogc3RhdGljIGxvbmcgY2xrX3Jj ZzJfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK LQkJdW5zaWduZWQgbG9uZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrICoqcCkKKwkJdW5zaWduZWQgbG9u ZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrX2NvcmUgKipwKQogewogCXN0cnVjdCBjbGtfcmNnMiAqcmNn ID0gdG9fY2xrX3JjZzIoaHcpOwogCkBAIC0zNzIsNyArMzcyLDcgQEAgc3RhdGljIGludCBjbGtf ZWRwX3BpeGVsX3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsCiB9CiAKIHN0 YXRpYyBsb25nIGNsa19lZHBfcGl4ZWxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcs IHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqcF9yYXRlLCBzdHJ1Y3Qg Y2xrICoqcCkKKwkJCQkgdW5zaWduZWQgbG9uZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrX2NvcmUgKipw KQogewogCXN0cnVjdCBjbGtfcmNnMiAqcmNnID0gdG9fY2xrX3JjZzIoaHcpOwogCWNvbnN0IHN0 cnVjdCBmcmVxX3RibCAqZiA9IHJjZy0+ZnJlcV90Ymw7CkBAIC00MjMsNyArNDIzLDcgQEAgY29u c3Qgc3RydWN0IGNsa19vcHMgY2xrX2VkcF9waXhlbF9vcHMgPSB7CiBFWFBPUlRfU1lNQk9MX0dQ TChjbGtfZWRwX3BpeGVsX29wcyk7CiAKIHN0YXRpYyBsb25nIGNsa19ieXRlX2RldGVybWluZV9y YXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCi0JCQkgdW5zaWduZWQg bG9uZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrICoqcCkKKwkJCSB1bnNpZ25lZCBsb25nICpwX3JhdGUs IHN0cnVjdCBjbGtfY29yZSAqKnApCiB7CiAJc3RydWN0IGNsa19yY2cyICpyY2cgPSB0b19jbGtf cmNnMihodyk7CiAJY29uc3Qgc3RydWN0IGZyZXFfdGJsICpmID0gcmNnLT5mcmVxX3RibDsKQEAg LTQ4NSwxNCArNDg1LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhY19lbnRyeSBmcmFjX3Rh YmxlX3BpeGVsW10gPSB7CiB9OwogCiBzdGF0aWMgbG9uZyBjbGtfcGl4ZWxfZGV0ZXJtaW5lX3Jh dGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJCQkgdW5zaWduZWQg bG9uZyAqcF9yYXRlLCBzdHJ1Y3QgY2xrICoqcCkKKwkJCQkgdW5zaWduZWQgbG9uZyAqcF9yYXRl LCBzdHJ1Y3QgY2xrX2NvcmUgKipwKQogewogCXN0cnVjdCBjbGtfcmNnMiAqcmNnID0gdG9fY2xr X3JjZzIoaHcpOwogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgc3JjX3JhdGU7CiAJaW50IGRlbHRh ID0gMTAwMDAwOwogCWNvbnN0IHN0cnVjdCBmcmVxX3RibCAqZiA9IHJjZy0+ZnJlcV90Ymw7CiAJ Y29uc3Qgc3RydWN0IGZyYWNfZW50cnkgKmZyYWMgPSBmcmFjX3RhYmxlX3BpeGVsOwotCXN0cnVj dCBjbGsgKnBhcmVudCA9ICpwID0gY2xrX2dldF9wYXJlbnRfYnlfaW5kZXgoaHctPmNsaywgZi0+ c3JjKTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVudCA9ICpwID0gY2xrX2dldF9wYXJlbnRfYnlf aW5kZXgoaHctPmNsaywgZi0+c3JjKTsKIAogCWZvciAoOyBmcmFjLT5udW07IGZyYWMrKykgewog CQlyZXF1ZXN0ID0gKHJhdGUgKiBmcmFjLT5kZW4pIC8gZnJhYy0+bnVtOwpAQCAtNTE5LDcgKzUx OSw3IEBAIHN0YXRpYyBpbnQgY2xrX3BpeGVsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1 bnNpZ25lZCBsb25nIHJhdGUsCiAJaW50IGRlbHRhID0gMTAwMDAwOwogCXUzMiBtYXNrID0gQklU KHJjZy0+aGlkX3dpZHRoKSAtIDE7CiAJdTMyIGhpZF9kaXY7Ci0Jc3RydWN0IGNsayAqcGFyZW50 ID0gY2xrX2dldF9wYXJlbnRfYnlfaW5kZXgoaHctPmNsaywgZi5zcmMpOworCXN0cnVjdCBjbGtf Y29yZSAqcGFyZW50ID0gY2xrX2dldF9wYXJlbnRfYnlfaW5kZXgoaHctPmNsaywgZi5zcmMpOwog CiAJZm9yICg7IGZyYWMtPm51bTsgZnJhYysrKSB7CiAJCXJlcXVlc3QgPSAocmF0ZSAqIGZyYWMt PmRlbikgLyBmcmFjLT5udW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9xY29tL2Nsay1yZWdt YXAuYyBiL2RyaXZlcnMvY2xrL3Fjb20vY2xrLXJlZ21hcC5jCmluZGV4IGE1OGJhMzkuLjJhOTgw NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3Fjb20vY2xrLXJlZ21hcC5jCisrKyBiL2RyaXZl cnMvY2xrL3Fjb20vY2xrLXJlZ21hcC5jCkBAIC0xMDEsNyArMTAxLDcgQEAgRVhQT1JUX1NZTUJP TF9HUEwoY2xrX2Rpc2FibGVfcmVnbWFwKTsKICAqIGNsa19yZWdtYXAgc3RydWN0IHZpYSB0aGlz IGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHJlZ21hcCBpcyBpbml0aWFsaXplZAogICogYW5kIHNvIHRo YXQgdGhlIGNsb2NrIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY29tbW9uIGNsb2NrIGZyYW1ld29y ay4KICAqLwotc3RydWN0IGNsayAqZGV2bV9jbGtfcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZp Y2UgKmRldiwKK3N0cnVjdCBjbGtfY29yZSAqZGV2bV9jbGtfcmVnaXN0ZXJfcmVnbWFwKHN0cnVj dCBkZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBjbGtfcmVnbWFwICpyY2xrKQogewogCWlm IChkZXYgJiYgZGV2X2dldF9yZWdtYXAoZGV2LCBOVUxMKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL3Fjb20vY2xrLXJlZ21hcC5oIGIvZHJpdmVycy9jbGsvcWNvbS9jbGstcmVnbWFwLmgKaW5k ZXggNDkxYTYzZC4uODkyNThjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvcWNvbS9jbGstcmVn bWFwLmgKKysrIGIvZHJpdmVycy9jbGsvcWNvbS9jbGstcmVnbWFwLmgKQEAgLTM5LDcgKzM5LDcg QEAgc3RydWN0IGNsa19yZWdtYXAgewogaW50IGNsa19pc19lbmFibGVkX3JlZ21hcChzdHJ1Y3Qg Y2xrX2h3ICpodyk7CiBpbnQgY2xrX2VuYWJsZV9yZWdtYXAoc3RydWN0IGNsa19odyAqaHcpOwog dm9pZCBjbGtfZGlzYWJsZV9yZWdtYXAoc3RydWN0IGNsa19odyAqaHcpOwotc3RydWN0IGNsayAq CitzdHJ1Y3QgY2xrX2NvcmUgKgogZGV2bV9jbGtfcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGNsa19yZWdtYXAgKnJjbGspOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL3Fjb20vY29tbW9uLmMgYi9kcml2ZXJzL2Nsay9xY29tL2NvbW1vbi5jCmlu ZGV4IGVlYjNlZWEuLmFmZDQwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3Fjb20vY29tbW9u LmMKKysrIGIvZHJpdmVycy9jbGsvcWNvbS9jb21tb24uYwpAQCAtMjQsNyArMjQsNyBAQAogc3Ry dWN0IHFjb21fY2MgewogCXN0cnVjdCBxY29tX3Jlc2V0X2NvbnRyb2xsZXIgcmVzZXQ7CiAJc3Ry dWN0IGNsa19vbmVjZWxsX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY2xrICpjbGtzW107CisJc3RydWN0 IGNsa19jb3JlICpjbGtzW107CiB9OwogCiBzdHJ1Y3QgcmVnbWFwICoKQEAgLTQ4LDkgKzQ4LDkg QEAgaW50IHFjb21fY2NfcmVhbGx5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs CiB7CiAJaW50IGksIHJldDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0 cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX29uZWNl bGxfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgY2xrICoqY2xrczsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipj bGtzOwogCXN0cnVjdCBxY29tX3Jlc2V0X2NvbnRyb2xsZXIgKnJlc2V0OwogCXN0cnVjdCBxY29t X2NjICpjYzsKIAlzaXplX3QgbnVtX2Nsa3MgPSBkZXNjLT5udW1fY2xrczsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL3Fjb20vZ2NjLWFwcTgwODQuYyBiL2RyaXZlcnMvY2xrL3Fjb20vZ2NjLWFw cTgwODQuYwppbmRleCBlZTUyZWIxLi4yN2FmMGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9x Y29tL2djYy1hcHE4MDg0LmMKKysrIGIvZHJpdmVycy9jbGsvcWNvbS9nY2MtYXBxODA4NC5jCkBA IC0zNTYyLDcgKzM1NjIsNyBAQCBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnY2NfYXBxODA4NF9t YXRjaF90YWJsZSk7CiAKIHN0YXRpYyBpbnQgZ2NjX2FwcTgwODRfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3Jl ICpjbGs7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAogCS8qIFRlbXBvcmFy eSB1bnRpbCBSUE0gY2xvY2tzIHN1cHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv cWNvbS9nY2MtaXBxODA2eC5jIGIvZHJpdmVycy9jbGsvcWNvbS9nY2MtaXBxODA2eC5jCmluZGV4 IDQwMzJlNTEuLmYzMWYwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3Fjb20vZ2NjLWlwcTgw NnguYworKysgYi9kcml2ZXJzL2Nsay9xY29tL2djYy1pcHE4MDZ4LmMKQEAgLTIzNzYsNyArMjM3 Niw3IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdjY19pcHE4MDZ4X21hdGNoX3RhYmxlKTsK IAogc3RhdGljIGludCBnY2NfaXBxODA2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCiAJLyogVGVtcG9yYXJ5IHVudGlsIFJQTSBj bG9ja3Mgc3VwcG9ydGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9xY29tL2djYy1tc204 NjYwLmMgYi9kcml2ZXJzL2Nsay9xY29tL2djYy1tc204NjYwLmMKaW5kZXggMGM0YjcyNy4uMmQ0 MWZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvcWNvbS9nY2MtbXNtODY2MC5jCisrKyBiL2Ry aXZlcnMvY2xrL3Fjb20vZ2NjLW1zbTg2NjAuYwpAQCAtMjcxOCw3ICsyNzE4LDcgQEAgTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgZ2NjX21zbTg2NjBfbWF0Y2hfdGFibGUpOwogCiBzdGF0aWMgaW50 IGdjY19tc204NjYwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3Ry dWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7CiAKIAkvKiBUZW1wb3JhcnkgdW50aWwgUlBNIGNsb2NrcyBzdXBwb3J0 ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Fjb20vZ2NjLW1zbTg5NjAuYyBiL2RyaXZl cnMvY2xrL3Fjb20vZ2NjLW1zbTg5NjAuYwppbmRleCAwMDc1MzRmLi5lZDhmOGY1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2Nsay9xY29tL2djYy1tc204OTYwLmMKKysrIGIvZHJpdmVycy9jbGsvcWNv bS9nY2MtbXNtODk2MC5jCkBAIC0zNDg4LDcgKzM0ODgsNyBAQCBNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBnY2NfbXNtODk2MF9tYXRjaF90YWJsZSk7CiAKIHN0YXRpYyBpbnQgZ2NjX21zbTg5NjBf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvcWNvbS9nY2MtbXNtODk3NC5jIGIvZHJpdmVycy9jbGsvcWNvbS9nY2MtbXNtODk3 NC5jCmluZGV4IDdhZjdjMTguLjgzMjZiMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3Fjb20v Z2NjLW1zbTg5NzQuYworKysgYi9kcml2ZXJzL2Nsay9xY29tL2djYy1tc204OTc0LmMKQEAgLTI2 OTksNyArMjY5OSw3IEBAIHN0YXRpYyB2b2lkIG1zbTg5NzRfcHJvX2Nsb2NrX292ZXJyaWRlKHZv aWQpCiAKIHN0YXRpYyBpbnQgZ2NjX21zbTg5NzRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlib29sIHBybzsKIAljb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICppZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Fjb20vbW1jYy1t c204OTYwLmMgYi9kcml2ZXJzL2Nsay9xY29tL21tY2MtbXNtODk2MC5jCmluZGV4IDJlODBhMjEu LmJiNjBkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3Fjb20vbW1jYy1tc204OTYwLmMKKysr IGIvZHJpdmVycy9jbGsvcWNvbS9tbWNjLW1zbTg5NjAuYwpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0 YXRpYyBpbnQgcGl4X3JkaV9zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkK IAlpbnQgcmV0ID0gMDsKIAl1MzIgdmFsOwogCXN0cnVjdCBjbGtfcGl4X3JkaSAqcmRpID0gdG9f Y2xrX3BpeF9yZGkoaHcpOwotCXN0cnVjdCBjbGsgKmNsayA9IGh3LT5jbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGsgPSBody0+Y2xrOwogCWludCBudW1fcGFyZW50cyA9IF9fY2xrX2dldF9udW1f cGFyZW50cyhody0+Y2xrKTsKIAogCS8qCkBAIC01MTcsNyArNTE3LDcgQEAgc3RhdGljIGludCBw aXhfcmRpX3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQogCSAqIG5lZWRz IHRvIGJlIG9uIGF0IHdoYXQgdGltZS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVu dHM7IGkrKykgewotCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrX2dldF9wYXJlbnRfYnlf aW5kZXgoY2xrLCBpKSk7CisJCXJldCA9IGNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtf Z2V0X3BhcmVudF9ieV9pbmRleChjbGssIGkpKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwog CX0KQEAgLTU0Niw3ICs1NDYsNyBAQCBzdGF0aWMgaW50IHBpeF9yZGlfc2V0X3BhcmVudChzdHJ1 Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpCiAKIGVycjoKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0p Ci0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGtfZ2V0X3BhcmVudF9ieV9pbmRleChjbGssIGkp KTsKKwkJY2xrX3Byb3ZpZGVyX2Rpc2FibGVfdW5wcmVwYXJlKGNsa19nZXRfcGFyZW50X2J5X2lu ZGV4KGNsaywgaSkpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L3JvY2tjaGlwL2Nsay1wbGwuYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1wbGwuYwppbmRl eCBmMmExYzdhLi40MTRiZmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGst cGxsLmMKKysrIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXBsbC5jCkBAIC0xNyw3ICsxNyw2 IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxs aW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRl ICJjbGsuaCIKQEAgLTI5Nyw3ICsyOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMg cm9ja2NoaXBfcmszMDY2X3BsbF9jbGtfb3BzID0gewogICogQ29tbW9uIHJlZ2lzdGVyaW5nIG9m IHBsbCBjbG9ja3MKICAqLwogCi1zdHJ1Y3QgY2xrICpyb2NrY2hpcF9jbGtfcmVnaXN0ZXJfcGxs KGVudW0gcm9ja2NoaXBfcGxsX3R5cGUgcGxsX3R5cGUsCitzdHJ1Y3QgY2xrX2NvcmUgKnJvY2tj aGlwX2Nsa19yZWdpc3Rlcl9wbGwoZW51bSByb2NrY2hpcF9wbGxfdHlwZSBwbGxfdHlwZSwKIAkJ Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKnBhcmVudF9uYW1lcywgdTggbnVtX3BhcmVu dHMsCiAJCXZvaWQgX19pb21lbSAqYmFzZSwgaW50IGNvbl9vZmZzZXQsIGludCBncmZfbG9ja19v ZmZzZXQsCiAJCWludCBsb2NrX3NoaWZ0LCBpbnQgbW9kZV9vZmZzZXQsIGludCBtb2RlX3NoaWZ0 LApAQCAtMzA4LDcgKzMwNyw3IEBAIHN0cnVjdCBjbGsgKnJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9w bGwoZW51bSByb2NrY2hpcF9wbGxfdHlwZSBwbGxfdHlwZSwKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0 YSBpbml0OwogCXN0cnVjdCByb2NrY2hpcF9jbGtfcGxsICpwbGw7CiAJc3RydWN0IGNsa19tdXgg KnBsbF9tdXg7Ci0Jc3RydWN0IGNsayAqcGxsX2NsaywgKm11eF9jbGs7CisJc3RydWN0IGNsa19j b3JlICpwbGxfY2xrLCAqbXV4X2NsazsKIAljaGFyIHBsbF9uYW1lWzIwXTsKIAlpbnQgcmV0Owog CkBAIC0zNzcsNyArMzc2LDcgQEAgc3RydWN0IGNsayAqcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX3Bs bChlbnVtIHJvY2tjaGlwX3BsbF90eXBlIHBsbF90eXBlLAogCQlnb3RvIGVycl9wbGw7CiAJfQog Ci0JcmV0ID0gY2xrX25vdGlmaWVyX3JlZ2lzdGVyKHBsbF9jbGssICZwbGwtPmNsa19uYik7CisJ cmV0ID0gY2xrX3Byb3ZpZGVyX25vdGlmaWVyX3JlZ2lzdGVyKHBsbF9jbGssICZwbGwtPmNsa19u Yik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sg bm90aWZpZXIgZm9yICVzIDogJWRcbiIsCiAJCQkJX19mdW5jX18sIG5hbWUsIHJldCk7CkBAIC00 MTcsNyArNDE2LDcgQEAgc3RydWN0IGNsayAqcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX3BsbChlbnVt IHJvY2tjaGlwX3BsbF90eXBlIHBsbF90eXBlLAogCXJldHVybiBtdXhfY2xrOwogCiBlcnJfbXV4 OgotCXJldCA9IGNsa19ub3RpZmllcl91bnJlZ2lzdGVyKHBsbF9jbGssICZwbGwtPmNsa19uYik7 CisJcmV0ID0gY2xrX3Byb3ZpZGVyX25vdGlmaWVyX3VucmVnaXN0ZXIocGxsX2NsaywgJnBsbC0+ Y2xrX25iKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiJXM6IGNvdWxkIG5vdCB1bnJlZ2lzdGVy IGNsb2NrIG5vdGlmaWVyIGluIGVycm9yIHBhdGggOiAlZFxuIiwKIAkJICAgICAgIF9fZnVuY19f LCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzE4OC5jIGIv ZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzE4OC5jCmluZGV4IDE4OTJjNjYuLmFlNGNmODIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMxODguYworKysgYi9kcml2 ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMTg4LmMKQEAgLTYwNyw3ICs2MDcsNyBAQCBzdGF0aWMg Y29uc3QgY2hhciAqcmszMTg4X2NyaXRpY2FsX2Nsb2Nrc1tdIF9faW5pdGNvbnN0ID0gewogc3Rh dGljIHZvaWQgX19pbml0IHJrMzE4OF9jb21tb25fY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpucCkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCXJlZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlm ICghcmVnX2Jhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMy ODguYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwppbmRleCA0M2UwYWQwLi43 ZjI5Mjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMjg4LmMKKysr IGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCkBAIC02ODgsNyArNjg4LDcgQEAg c3RhdGljIGNvbnN0IGNoYXIgKnJrMzI4OF9jcml0aWNhbF9jbG9ja3NbXSBfX2luaXRjb25zdCA9 IHsKIHN0YXRpYyB2b2lkIF9faW5pdCByazMyODhfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpucCkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCXJlZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlm ICghcmVnX2Jhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yb2Nr Y2hpcC5jIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJvY2tjaGlwLmMKaW5kZXggNGNmODM4 ZDUuLmZhYThkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yb2NrY2hp cC5jCisrKyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yb2NrY2hpcC5jCkBAIC01NCw3ICs1 NCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByazI5MjhfZ2F0ZV9jbGtfaW5pdChzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5vZGUpCiAJaWYgKCFjbGtfZGF0YSkKIAkJcmV0dXJuOwogCi0JY2xrX2RhdGEt PmNsa3MgPSBremFsbG9jKHF0eSAqIHNpemVvZihzdHJ1Y3QgY2xrICopLCBHRlBfS0VSTkVMKTsK KwljbGtfZGF0YS0+Y2xrcyA9IGt6YWxsb2MocXR5ICogc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAq KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfZGF0YS0+Y2xrcykgewogCQlrZnJlZShjbGtfZGF0 YSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay5jIGIv ZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLmMKaW5kZXggY2FkNTJhYi4uYTQ1MThiYSAxMDA2NDQK LS0tIGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLmMKKysrIGIvZHJpdmVycy9jbGsvcm9ja2No aXAvY2xrLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5o PgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5o PgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4KQEAgLTM4LDcgKzM3LDcgQEAKICAqCiAgKiBzb21ldGltZXMgd2l0aG91dCBvbmUgb2YgdGhv c2UgY29tcG9uZW50cy4KICAqLwotc3RhdGljIHN0cnVjdCBjbGsgKnJvY2tjaGlwX2Nsa19yZWdp c3Rlcl9icmFuY2goY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKnJv Y2tjaGlwX2Nsa19yZWdpc3Rlcl9icmFuY2goY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hh ciAqKnBhcmVudF9uYW1lcywgdTggbnVtX3BhcmVudHMsIHZvaWQgX19pb21lbSAqYmFzZSwKIAkJ aW50IG11eGRpdl9vZmZzZXQsIHU4IG11eF9zaGlmdCwgdTggbXV4X3dpZHRoLCB1OCBtdXhfZmxh Z3MsCiAJCXU4IGRpdl9zaGlmdCwgdTggZGl2X3dpZHRoLCB1OCBkaXZfZmxhZ3MsCkBAIC00Niw3 ICs0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICpyb2NrY2hpcF9jbGtfcmVnaXN0ZXJfYnJhbmNo KGNvbnN0IGNoYXIgKm5hbWUsCiAJCXU4IGdhdGVfc2hpZnQsIHU4IGdhdGVfZmxhZ3MsIHVuc2ln bmVkIGxvbmcgZmxhZ3MsCiAJCXNwaW5sb2NrX3QgKmxvY2spCiB7Ci0Jc3RydWN0IGNsayAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfbXV4ICptdXggPSBOVUxMOwog CXN0cnVjdCBjbGtfZ2F0ZSAqZ2F0ZSA9IE5VTEw7CiAJc3RydWN0IGNsa19kaXZpZGVyICpkaXYg PSBOVUxMOwpAQCAtMTA0LDEzICsxMDMsMTMgQEAgc3RhdGljIHN0cnVjdCBjbGsgKnJvY2tjaGlw X2Nsa19yZWdpc3Rlcl9icmFuY2goY29uc3QgY2hhciAqbmFtZSwKIAlyZXR1cm4gY2xrOwogfQog Ci1zdGF0aWMgc3RydWN0IGNsayAqcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX2ZyYWNfYnJhbmNoKGNv bnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpyb2NrY2hpcF9jbGtfcmVn aXN0ZXJfZnJhY19icmFuY2goY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqKnBhcmVu dF9uYW1lcywgdTggbnVtX3BhcmVudHMsIHZvaWQgX19pb21lbSAqYmFzZSwKIAkJaW50IG11eGRp dl9vZmZzZXQsIHU4IGRpdl9mbGFncywKIAkJaW50IGdhdGVfb2Zmc2V0LCB1OCBnYXRlX3NoaWZ0 LCB1OCBnYXRlX2ZsYWdzLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBzcGlubG9ja190ICpsb2Nr KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3Qg Y2xrX2dhdGUgKmdhdGUgPSBOVUxMOwogCXN0cnVjdCBjbGtfZnJhY3Rpb25hbF9kaXZpZGVyICpk aXYgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBjbGtfb3BzICpkaXZfb3BzID0gTlVMTCwgKmdhdGVf b3BzID0gTlVMTDsKQEAgLTE1Myw3ICsxNTIsNyBAQCBzdGF0aWMgc3RydWN0IGNsayAqcm9ja2No aXBfY2xrX3JlZ2lzdGVyX2ZyYWNfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUsCiB9CiAKIHN0YXRp YyBERUZJTkVfU1BJTkxPQ0soY2xrX2xvY2spOwotc3RhdGljIHN0cnVjdCBjbGsgKipjbGtfdGFi bGU7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICoqY2xrX3RhYmxlOwogc3RhdGljIHZvaWQgX19p b21lbSAqcmVnX2Jhc2U7CiBzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7 CiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpjcnVfbm9kZTsKQEAgLTE2Niw3ICsxNjUsNyBA QCB2b2lkIF9faW5pdCByb2NrY2hpcF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB2 b2lkIF9faW9tZW0gKmJhc2UsCiAJY3J1X25vZGUgPSBucDsKIAlncmYgPSBFUlJfUFRSKC1FUFJP QkVfREVGRVIpOwogCi0JY2xrX3RhYmxlID0ga2NhbGxvYyhucl9jbGtzLCBzaXplb2Yoc3RydWN0 IGNsayAqKSwgR0ZQX0tFUk5FTCk7CisJY2xrX3RhYmxlID0ga2NhbGxvYyhucl9jbGtzLCBzaXpl b2Yoc3RydWN0IGNsa19jb3JlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsa190YWJsZSkKIAkJ cHJfZXJyKCIlczogY291bGQgbm90IGFsbG9jYXRlIGNsb2NrIGxvb2t1cCB0YWJsZVxuIiwgX19m dW5jX18pOwogCkBAIC0xODIsNyArMTgxLDcgQEAgc3RydWN0IHJlZ21hcCAqcm9ja2NoaXBfY2xr X2dldF9ncmYodm9pZCkKIAlyZXR1cm4gZ3JmOwogfQogCi12b2lkIHJvY2tjaGlwX2Nsa19hZGRf bG9va3VwKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IGlkKQordm9pZCByb2NrY2hpcF9j bGtfYWRkX2xvb2t1cChzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgdW5zaWduZWQgaW50IGlkKQogewog CWlmIChjbGtfdGFibGUgJiYgaWQpCiAJCWNsa190YWJsZVtpZF0gPSBjbGs7CkBAIC0xOTEsNyAr MTkwLDcgQEAgdm9pZCByb2NrY2hpcF9jbGtfYWRkX2xvb2t1cChzdHJ1Y3QgY2xrICpjbGssIHVu c2lnbmVkIGludCBpZCkKIHZvaWQgX19pbml0IHJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9wbGxzKHN0 cnVjdCByb2NrY2hpcF9wbGxfY2xvY2sgKmxpc3QsCiAJCQkJdW5zaWduZWQgaW50IG5yX3BsbCwg aW50IGdyZl9sb2NrX29mZnNldCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19j b3JlICpjbGs7CiAJaW50IGlkeDsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfcGxsOyBpZHgr KywgbGlzdCsrKSB7CkBAIC0yMTQsNyArMjEzLDcgQEAgdm9pZCBfX2luaXQgcm9ja2NoaXBfY2xr X3JlZ2lzdGVyX2JyYW5jaGVzKAogCQkJCSAgICAgIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNo ICpsaXN0LAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBucl9jbGspCiB7Ci0Jc3RydWN0IGNsayAq Y2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IE5VTEw7CiAJdW5zaWduZWQgaW50 IGlkeDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zMDQsMTAgKzMwMywxMCBAQCB2b2lk IF9faW5pdCByb2NrY2hpcF9jbGtfcHJvdGVjdF9jcml0aWNhbChjb25zdCBjaGFyICpjbG9ja3Nb XSwgaW50IG5jbG9ja3MpCiAKIAkvKiBQcm90ZWN0IHRoZSBjbG9ja3MgdGhhdCBuZWVkcyB0byBz dGF5IG9uICovCiAJZm9yIChpID0gMDsgaSA8IG5jbG9ja3M7IGkrKykgewotCQlzdHJ1Y3QgY2xr ICpjbGsgPSBfX2Nsa19sb29rdXAoY2xvY2tzW2ldKTsKKwkJc3RydWN0IGNsa19jb3JlICpjbGsg PSBfX2Nsa19sb29rdXAoY2xvY2tzW2ldKTsKIAogCQlpZiAoY2xrKQotCQkJY2xrX3ByZXBhcmVf ZW5hYmxlKGNsayk7CisJCQljbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrKTsKIAl9CiB9 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay5oIGIvZHJpdmVycy9jbGsv cm9ja2NoaXAvY2xrLmgKaW5kZXggMzk2NTIwMC4uYWM5MmJmOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jbGsvcm9ja2NoaXAvY2xrLmgKKysrIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLmgKQEAg LTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgQ0xLX1JPQ0tDSElQX0NMS19ICiAKICNpbmNsdWRlIDxs aW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1w cm92aWRlci5oPgogCiAjZGVmaW5lIEhJV09SRF9VUERBVEUodmFsLCBtYXNrLCBzaGlmdCkgXApA QCAtMTEzLDcgKzExMiw3IEBAIHN0cnVjdCByb2NrY2hpcF9wbGxfY2xvY2sgewogCQkucmF0ZV90 YWJsZQk9IF9ydGFibGUsCQkJCVwKIAl9CiAKLXN0cnVjdCBjbGsgKnJvY2tjaGlwX2Nsa19yZWdp c3Rlcl9wbGwoZW51bSByb2NrY2hpcF9wbGxfdHlwZSBwbGxfdHlwZSwKK3N0cnVjdCBjbGtfY29y ZSAqcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX3BsbChlbnVtIHJvY2tjaGlwX3BsbF90eXBlIHBsbF90 eXBlLAogCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCB1OCBu dW1fcGFyZW50cywKIAkJdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgY29uX29mZnNldCwgaW50IGdy Zl9sb2NrX29mZnNldCwKIAkJaW50IGxvY2tfc2hpZnQsIGludCByZWdfbW9kZSwgaW50IG1vZGVf c2hpZnQsCkBAIC0zMjQsNyArMzIzLDcgQEAgc3RydWN0IHJvY2tjaGlwX2Nsa19icmFuY2ggewog dm9pZCByb2NrY2hpcF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB2b2lkIF9faW9t ZW0gKmJhc2UsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX2Nsa3MpOwogc3RydWN0IHJlZ21h cCAqcm9ja2NoaXBfY2xrX2dldF9ncmYodm9pZCk7Ci12b2lkIHJvY2tjaGlwX2Nsa19hZGRfbG9v a3VwKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IGlkKTsKK3ZvaWQgcm9ja2NoaXBfY2xr X2FkZF9sb29rdXAoc3RydWN0IGNsa19jb3JlICpjbGssIHVuc2lnbmVkIGludCBpZCk7CiB2b2lk IHJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9icmFuY2hlcyhzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5j aCAqY2xrX2xpc3QsCiAJCQkJICAgIHVuc2lnbmVkIGludCBucl9jbGspOwogdm9pZCByb2NrY2hp cF9jbGtfcmVnaXN0ZXJfcGxscyhzdHJ1Y3Qgcm9ja2NoaXBfcGxsX2Nsb2NrICpwbGxfbGlzdCwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vcy1hdWRzcy5jIGIvZHJp dmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zLWF1ZHNzLmMKaW5kZXggMTNlYWUxNGMuLmY1NjM5 YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vcy1hdWRzcy5jCisr KyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vcy1hdWRzcy5jCkBAIC0yNiw3ICsyNiw3 IEBAIGVudW0gZXh5bm9zX2F1ZHNzX2Nsa190eXBlIHsKIH07CiAKIHN0YXRpYyBERUZJTkVfU1BJ TkxPQ0sobG9jayk7Ci1zdGF0aWMgc3RydWN0IGNsayAqKmNsa190YWJsZTsKK3N0YXRpYyBzdHJ1 Y3QgY2xrX2NvcmUgKipjbGtfdGFibGU7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsK IHN0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIApAQCAtODMsNyArODMs NyBAQCBzdGF0aWMgaW50IGV4eW5vc19hdWRzc19jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIAljb25zdCBjaGFyICptb3V0X2F1ZHNzX3BbXSA9IHsiZmluX3BsbCIsICJm b3V0X2VwbGwifTsKIAljb25zdCBjaGFyICptb3V0X2kyc19wW10gPSB7Im1vdXRfYXVkc3MiLCAi Y2RjbGswIiwgInNjbGtfYXVkaW8wIn07CiAJY29uc3QgY2hhciAqc2Nsa19wY21fcCA9ICJzY2xr X3BjbTAiOwotCXN0cnVjdCBjbGsgKnBsbF9yZWYsICpwbGxfaW4sICpjZGNsaywgKnNjbGtfYXVk aW8sICpzY2xrX3BjbV9pbjsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnBsbF9yZWYsICpwbGxfaW4sICpj ZGNsaywgKnNjbGtfYXVkaW8sICpzY2xrX3BjbV9pbjsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkICptYXRjaDsKIAllbnVtIGV4eW5vc19hdWRzc19jbGtfdHlwZSB2YXJpYW50OwogCkBAIC0x MDAsNyArMTAwLDcgQEAgc3RhdGljIGludCBleHlub3NfYXVkc3NfY2xrX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJfQogCiAJY2xrX3RhYmxlID0gZGV2bV9remFsbG9jKCZw ZGV2LT5kZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCBjbGsgKikgKiBFWFlOT1NfQVVEU1NfTUFYX0NM S1MsCisJCQkJc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSAqIEVYWU5PU19BVURTU19NQVhfQ0xL UywKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIWNsa190YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07 CkBAIC0xMTEsOCArMTExLDggQEAgc3RhdGljIGludCBleHlub3NfYXVkc3NfY2xrX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJZWxzZQogCQljbGtfZGF0YS5jbGtfbnVtID0g RVhZTk9TX0FVRFNTX01BWF9DTEtTIC0gMTsKIAotCXBsbF9yZWYgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgInBsbF9yZWYiKTsKLQlwbGxfaW4gPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwg InBsbF9pbiIpOworCXBsbF9yZWYgPSBkZXZtX2Nsa19wcm92aWRlcl9nZXQoJnBkZXYtPmRldiwg InBsbF9yZWYiKTsKKwlwbGxfaW4gPSBkZXZtX2Nsa19wcm92aWRlcl9nZXQoJnBkZXYtPmRldiwg InBsbF9pbiIpOwogCWlmICghSVNfRVJSKHBsbF9yZWYpKQogCQltb3V0X2F1ZHNzX3BbMF0gPSBf X2Nsa19nZXRfbmFtZShwbGxfcmVmKTsKIAlpZiAoIUlTX0VSUihwbGxfaW4pKQpAQCAtMTIyLDgg KzEyMiw4IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2F1ZHNzX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogCQkJCUNMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCQlyZWdf YmFzZSArIEFTU19DTEtfU1JDLCAwLCAxLCAwLCAmbG9jayk7CiAKLQljZGNsayA9IGRldm1fY2xr X2dldCgmcGRldi0+ZGV2LCAiY2RjbGsiKTsKLQlzY2xrX2F1ZGlvID0gZGV2bV9jbGtfZ2V0KCZw ZGV2LT5kZXYsICJzY2xrX2F1ZGlvIik7CisJY2RjbGsgPSBkZXZtX2Nsa19wcm92aWRlcl9nZXQo JnBkZXYtPmRldiwgImNkY2xrIik7CisJc2Nsa19hdWRpbyA9IGRldm1fY2xrX3Byb3ZpZGVyX2dl dCgmcGRldi0+ZGV2LCAic2Nsa19hdWRpbyIpOwogCWlmICghSVNfRVJSKGNkY2xrKSkKIAkJbW91 dF9pMnNfcFsxXSA9IF9fY2xrX2dldF9uYW1lKGNkY2xrKTsKIAlpZiAoIUlTX0VSUihzY2xrX2F1 ZGlvKSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IGV4eW5vc19hdWRzc19jbGtfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJCQkgInNjbGtfcGNtIiwgQ0xLX1NF VF9SQVRFX1BBUkVOVCwKIAkJCQlyZWdfYmFzZSArIEFTU19DTEtfR0FURSwgNCwgMCwgJmxvY2sp OwogCi0Jc2Nsa19wY21faW4gPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInNjbGtfcGNtX2lu Iik7CisJc2Nsa19wY21faW4gPSBkZXZtX2Nsa19wcm92aWRlcl9nZXQoJnBkZXYtPmRldiwgInNj bGtfcGNtX2luIik7CiAJaWYgKCFJU19FUlIoc2Nsa19wY21faW4pKQogCQlzY2xrX3BjbV9wID0g X19jbGtfZ2V0X25hbWUoc2Nsa19wY21faW4pOwogCWNsa190YWJsZVtFWFlOT1NfU0NMS19QQ01d ID0gY2xrX3JlZ2lzdGVyX2dhdGUoTlVMTCwgInNjbGtfcGNtIiwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vcy1jbGtvdXQuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcv Y2xrLWV4eW5vcy1jbGtvdXQuYwppbmRleCAzYTdjYjI1Li4wYWQ3ZGVlIDEwMDY0NAotLS0gYS9k cml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MtY2xrb3V0LmMKKysrIGIvZHJpdmVycy9jbGsv c2Ftc3VuZy9jbGstZXh5bm9zLWNsa291dC5jCkBAIC05LDcgKzksNiBAQAogICogQ2xvY2sgZHJp dmVyIGZvciBFeHlub3MgY2xvY2sgb3V0cHV0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRl ci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC0zMCw3ICsyOSw3IEBAIHN0cnVjdCBleHlu b3NfY2xrb3V0IHsKIAlzdHJ1Y3QgY2xrX211eCBtdXg7CiAJc3BpbmxvY2tfdCBzbG9jazsKIAlz dHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBkYXRhOwotCXN0cnVjdCBjbGsgKmNsa190YWJsZVtFWFlO T1NfQ0xLT1VUX05SX0NMS1NdOworCXN0cnVjdCBjbGtfY29yZSAqY2xrX3RhYmxlW0VYWU5PU19D TEtPVVRfTlJfQ0xLU107CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJdTMyIHBtdV9kZWJ1Z19zYXZl OwogfTsKQEAgLTU3LDcgKzU2LDcgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3Nf Y2xrb3V0X3N5c2NvcmVfb3BzID0gewogc3RhdGljIHZvaWQgX19pbml0IGV4eW5vc19jbGtvdXRf aW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBtdXhfbWFzaykKIHsKIAljb25zdCBj aGFyICpwYXJlbnRfbmFtZXNbRVhZTk9TX0NMS09VVF9QQVJFTlRTXTsKLQlzdHJ1Y3QgY2xrICpw YXJlbnRzW0VYWU5PU19DTEtPVVRfUEFSRU5UU107CisJc3RydWN0IGNsa19jb3JlICpwYXJlbnRz W0VYWU5PU19DTEtPVVRfUEFSRU5UU107CiAJaW50IHBhcmVudF9jb3VudDsKIAlpbnQgcmV0Owog CWludCBpOwpAQCAtNzMsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zX2Nsa291 dF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIG11eF9tYXNrKQogCQljaGFyIG5h bWVbXSA9ICJjbGtvdXRYWCI7CiAKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiY2xr b3V0JWQiLCBpKTsKLQkJcGFyZW50c1tpXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShub2RlLCBuYW1l KTsKKwkJcGFyZW50c1tpXSA9IG9mX2Nsa19wcm92aWRlcl9nZXRfYnlfbmFtZShub2RlLCBuYW1l KTsKIAkJaWYgKElTX0VSUihwYXJlbnRzW2ldKSkgewogCQkJcGFyZW50X25hbWVzW2ldID0gIm5v bmUiOwogCQkJY29udGludWU7CkBAIC0xMjUsNyArMTI0LDcgQEAgZXJyX3VubWFwOgogY2xrc19w dXQ6CiAJZm9yIChpID0gMDsgaSA8IEVYWU5PU19DTEtPVVRfUEFSRU5UUzsgKytpKQogCQlpZiAo IUlTX0VSUihwYXJlbnRzW2ldKSkKLQkJCWNsa19wdXQocGFyZW50c1tpXSk7CisJCQlfX2Nsa19w dXQocGFyZW50c1tpXSk7CiBmcmVlX2Nsa291dDoKIAlrZnJlZShjbGtvdXQpOwogCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MzMjUwLmMgYi9kcml2ZXJzL2Nsay9z YW1zdW5nL2Nsay1leHlub3MzMjUwLmMKaW5kZXggZGM4NWY4ZS4uNTc0MmU3NiAxMDA2NDQKLS0t IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMzI1MC5jCisrKyBiL2RyaXZlcnMvY2xr L3NhbXN1bmcvY2xrLWV4eW5vczMyNTAuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvbW1vbiBDbG9j ayBGcmFtZXdvcmsgc3VwcG9ydCBmb3IgRXh5bm9zMzI1MCBTb0MuCiAgKi8KIAotI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4 L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M0LmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1l eHlub3M0LmMKaW5kZXggYWMxNjNkNy4uNWQ3N2RhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv c2Ftc3VuZy9jbGstZXh5bm9zNC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5v czQuYwpAQCAtMTEsNyArMTEsNiBAQAogKi8KIAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2Nr L2V4eW5vczQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtk ZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9v Zi5oPgpAQCAtMTIzMCwxOSArMTIyOSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBleHlub3M0 X2dldF94b20odm9pZCkKIHN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M0X2Nsa19yZWdpc3Rlcl9m aW5wbGwoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgpCiB7CiAJc3RydWN0IHNhbXN1 bmdfZml4ZWRfcmF0ZV9jbG9jayBmY2xrOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xr X2NvcmUgKmNsazsKIAl1bnNpZ25lZCBsb25nIGZpbnBsbF9mID0gMjQwMDAwMDA7CiAJY2hhciAq cGFyZW50X25hbWU7CiAJdW5zaWduZWQgaW50IHhvbSA9IGV4eW5vczRfZ2V0X3hvbSgpOwogCiAJ cGFyZW50X25hbWUgPSB4b20gJiAxID8gInh1c2J4dGkiIDogInh4dGkiOwotCWNsayA9IGNsa19n ZXQoTlVMTCwgcGFyZW50X25hbWUpOworCWNsayA9IGNsa19wcm92aWRlcl9nZXQoTlVMTCwgcGFy ZW50X25hbWUpOwogCWlmIChJU19FUlIoY2xrKSkgewogCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8g bG9va3VwIHBhcmVudCBjbG9jayAlcywgYXNzdW1pbmcgIgogCQkJImZpbl9wbGwgY2xvY2sgZnJl cXVlbmN5IGlzIDI0TUh6XG4iLCBfX2Z1bmNfXywKIAkJCXBhcmVudF9uYW1lKTsKIAl9IGVsc2Ug ewotCQlmaW5wbGxfZiA9IGNsa19nZXRfcmF0ZShjbGspOworCQlmaW5wbGxfZiA9IGNsa19wcm92 aWRlcl9nZXRfcmF0ZShjbGspOwogCX0KIAogCWZjbGsuaWQgPSBDTEtfRklOX1BMTDsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczUyNTAuYyBiL2RyaXZlcnMvY2xr L3NhbXN1bmcvY2xrLWV4eW5vczUyNTAuYwppbmRleCA3MGVjM2QyLi42MjNlNjhmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1MjUwLmMKKysrIGIvZHJpdmVycy9j bGsvc2Ftc3VuZy9jbGstZXh5bm9zNTI1MC5jCkBAIC0xMSw3ICsxMSw2IEBACiAqLwogCiAjaW5j bHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTI1MC5oPgotI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9z YW1zdW5nL2Nsay1leHlub3M1MjYwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1 MjYwLmMKaW5kZXggY2UzZGU5Ny4uNWEzZDYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ft c3VuZy9jbGstZXh5bm9zNTI2MC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5v czUyNjAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIENvbW1vbiBDbG9jayBGcmFtZXdvcmsgc3VwcG9y dCBmb3IgRXh5bm9zNTI2MCBTb0MuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2lu Y2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgog I2luY2x1ZGUgPGxpbnV4L29mLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Ns ay1leHlub3M1NDEwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDEwLmMKaW5k ZXggMjMxNDc1Yi4uNTQ2YjMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGst ZXh5bm9zNTQxMC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0MTAuYwpA QCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQx MC5oPgogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+ CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0MjAuYyBiL2RyaXZl cnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0MjAuYwppbmRleCA4NDhkNjAyLi4wMjI5Y2M5IDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDIwLmMKKysrIGIvZHJp dmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQyMC5jCkBAIC0xMSw3ICsxMSw2IEBACiAqLwog CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQyMC5oPgotI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1l eHlub3M1NDQwLmMKaW5kZXggMDBkMWQwMC4uOGFkZWFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9j bGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xr LWV4eW5vczU0NDAuYwpAQCAtMTAsNyArMTAsNiBAQAogKi8KIAogI2luY2x1ZGUgPGR0LWJpbmRp bmdzL2Nsb2NrL2V4eW5vczU0NDAuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRl IDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNs dWRlIDxsaW51eC9vZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxs LmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1wbGwuYwppbmRleCBiMDdmYWQyLi5hYWYyMzRh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1wbGwuYworKysgYi9kcml2ZXJz L2Nsay9zYW1zdW5nL2Nsay1wbGwuYwpAQCAtOTEwLDEyICs5MTAsMTIgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfcGxsMjU1MHhfY2xrX29wcyA9IHsKIAkucmVjYWxjX3Jh dGUgPSBzYW1zdW5nX3BsbDI1NTB4X3JlY2FsY19yYXRlLAogfTsKIAotc3RydWN0IGNsayAqIF9f aW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwyNTUweChjb25zdCBjaGFyICpuYW1lLAorc3Ry dWN0IGNsa19jb3JlICogX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbDI1NTB4KGNvbnN0 IGNoYXIgKm5hbWUsCiAJCQljb25zdCBjaGFyICpwbmFtZSwgY29uc3Qgdm9pZCBfX2lvbWVtICpy ZWdfYmFzZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXN0cnVjdCBzYW1z dW5nX2Nsa19wbGwyNTUweCAqcGxsOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJcGxsID0ga3phbGxvYyhz aXplb2YoKnBsbCksIEdGUF9LRVJORUwpOwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgc3RhdGljIHZv aWQgX19pbml0IF9zYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoc3RydWN0IHNhbXN1bmdfY2xrX3By b3ZpZGVyICpjdHgsCiAJCQkJdm9pZCBfX2lvbWVtICpiYXNlKQogewogCXN0cnVjdCBzYW1zdW5n X2Nsa19wbGwgKnBsbDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7 CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlpbnQgcmV0LCBsZW47CiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXBsbC5oIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9j bGstcGxsLmgKaW5kZXggYzBlZDRkNC4uODFhZjM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv c2Ftc3VuZy9jbGstcGxsLmgKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxsLmgKQEAg LTk3LDcgKzk3LDcgQEAgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgewogCXVuc2lnbmVk IGludCB2c2VsOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBjbGsgKiBfX2luaXQgc2Ftc3VuZ19jbGtf cmVnaXN0ZXJfcGxsMjU1MHgoY29uc3QgY2hhciAqbmFtZSwKK2V4dGVybiBzdHJ1Y3QgY2xrX2Nv cmUgKiBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsMjU1MHgoY29uc3QgY2hhciAqbmFt ZSwKIAkJCWNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCB2b2lkIF9faW9tZW0gKnJlZ19iYXNlLAog CQkJY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay9zYW1zdW5nL2Nsay1zM2MyNDEwLWRjbGsuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMz YzI0MTAtZGNsay5jCmluZGV4IDA0NDljYzAuLjA1MzU0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Y2xrL3NhbXN1bmcvY2xrLXMzYzI0MTAtZGNsay5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcv Y2xrLXMzYzI0MTAtZGNsay5jCkBAIC04NywxMiArODcsMTIgQEAgY29uc3Qgc3RydWN0IGNsa19v cHMgczNjMjR4eF9jbGtvdXRfb3BzID0gewogCS5kZXRlcm1pbmVfcmF0ZSA9IF9fY2xrX211eF9k ZXRlcm1pbmVfcmF0ZSwKIH07CiAKLXN0cnVjdCBjbGsgKnMzYzI0eHhfcmVnaXN0ZXJfY2xrb3V0 KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAq czNjMjR4eF9yZWdpc3Rlcl9jbGtvdXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpu YW1lLAogCQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCB1OCBudW1fcGFyZW50cywKIAkJdTgg c2hpZnQsIHUzMiBtYXNrKQogewogCXN0cnVjdCBzM2MyNHh4X2Nsa291dCAqY2xrb3V0OwotCXN0 cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRf ZGF0YSBpbml0OwogCiAJLyogYWxsb2NhdGUgdGhlIGNsa291dCAqLwpAQCAtMjM3LDcgKzIzNyw3 IEBAIHN0YXRpYyBpbnQgczNjMjR4eF9kY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiB7CiAJc3RydWN0IHMzYzI0eHhfZGNsayAqczNjMjR4eF9kY2xrOwogCXN0cnVjdCBy ZXNvdXJjZSAqbWVtOwotCXN0cnVjdCBjbGsgKipjbGtfdGFibGU7CisJc3RydWN0IGNsa19jb3Jl ICoqY2xrX3RhYmxlOwogCXN0cnVjdCBzM2MyNHh4X2RjbGtfZHJ2X2RhdGEgKmRjbGtfdmFyaWFu dDsKIAlpbnQgcmV0LCBpOwogCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RhdGljIGludCBzM2MyNHh4 X2RjbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzcGluX2xvY2tfaW5p dCgmczNjMjR4eF9kY2xrLT5kY2xrX2xvY2spOwogCiAJY2xrX3RhYmxlID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsCi0JCQkJIHNpemVvZihzdHJ1Y3QgY2xrICopICogRENMS19NQVhfQ0xLUywK KwkJCQkgc2l6ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSAqIERDTEtfTUFYX0NMS1MsCiAJCQkJIEdG UF9LRVJORUwpOwogCWlmICghY2xrX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMyOSwy MSArMzI5LDIxIEBAIHN0YXRpYyBpbnQgczNjMjR4eF9kY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCiAJczNjMjR4eF9kY2xrLT5kY2xrMV9kaXZfY2hhbmdlX25iLm5vdGlm aWVyX2NhbGwgPQogCQkJCQkJczNjMjR4eF9kY2xrMV9kaXZfbm90aWZ5OwogCi0JcmV0ID0gY2xr X25vdGlmaWVyX3JlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzBdLAotCQkJCSAgICAmczNjMjR4 eF9kY2xrLT5kY2xrMF9kaXZfY2hhbmdlX25iKTsKKwlyZXQgPSBjbGtfcHJvdmlkZXJfbm90aWZp ZXJfcmVnaXN0ZXIoY2xrX3RhYmxlW0RJVl9EQ0xLMF0sCisJCQkJCSAgICAgJnMzYzI0eHhfZGNs ay0+ZGNsazBfZGl2X2NoYW5nZV9uYik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrX3JlZ2lz dGVyOwogCi0JcmV0ID0gY2xrX25vdGlmaWVyX3JlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzFd LAotCQkJCSAgICAmczNjMjR4eF9kY2xrLT5kY2xrMV9kaXZfY2hhbmdlX25iKTsKKwlyZXQgPSBj bGtfcHJvdmlkZXJfbm90aWZpZXJfcmVnaXN0ZXIoY2xrX3RhYmxlW0RJVl9EQ0xLMV0sCisJCQkJ CSAgICAgJnMzYzI0eHhfZGNsay0+ZGNsazFfZGl2X2NoYW5nZV9uYik7CiAJaWYgKHJldCkKIAkJ Z290byBlcnJfZGNsa19ub3RpZnk7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2RjbGtfbm90aWZ5Ogot CWNsa19ub3RpZmllcl91bnJlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzBdLAotCQkJCSZzM2My NHh4X2RjbGstPmRjbGswX2Rpdl9jaGFuZ2VfbmIpOworCWNsa19wcm92aWRlcl9ub3RpZmllcl91 bnJlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzBdLAorCQkJCQkgJnMzYzI0eHhfZGNsay0+ZGNs azBfZGl2X2NoYW5nZV9uYik7CiBlcnJfY2xrX3JlZ2lzdGVyOgogCWZvciAoaSA9IDA7IGkgPCBE Q0xLX01BWF9DTEtTOyBpKyspCiAJCWlmIChjbGtfdGFibGVbaV0gJiYgIUlTX0VSUihjbGtfdGFi bGVbaV0pKQpAQCAtMzU1LDEzICszNTUsMTMgQEAgZXJyX2Nsa19yZWdpc3RlcjoKIHN0YXRpYyBp bnQgczNjMjR4eF9kY2xrX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewog CXN0cnVjdCBzM2MyNHh4X2RjbGsgKnMzYzI0eHhfZGNsayA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOwotCXN0cnVjdCBjbGsgKipjbGtfdGFibGUgPSBzM2MyNHh4X2RjbGstPmNsa19kYXRh LmNsa3M7CisJc3RydWN0IGNsa19jb3JlICoqY2xrX3RhYmxlID0gczNjMjR4eF9kY2xrLT5jbGtf ZGF0YS5jbGtzOwogCWludCBpOwogCi0JY2xrX25vdGlmaWVyX3VucmVnaXN0ZXIoY2xrX3RhYmxl W0RJVl9EQ0xLMV0sCi0JCQkJJnMzYzI0eHhfZGNsay0+ZGNsazFfZGl2X2NoYW5nZV9uYik7Ci0J Y2xrX25vdGlmaWVyX3VucmVnaXN0ZXIoY2xrX3RhYmxlW0RJVl9EQ0xLMF0sCi0JCQkJJnMzYzI0 eHhfZGNsay0+ZGNsazBfZGl2X2NoYW5nZV9uYik7CisJY2xrX3Byb3ZpZGVyX25vdGlmaWVyX3Vu cmVnaXN0ZXIoY2xrX3RhYmxlW0RJVl9EQ0xLMV0sCisJCQkJCSAmczNjMjR4eF9kY2xrLT5kY2xr MV9kaXZfY2hhbmdlX25iKTsKKwljbGtfcHJvdmlkZXJfbm90aWZpZXJfdW5yZWdpc3RlcihjbGtf dGFibGVbRElWX0RDTEswXSwKKwkJCQkJICZzM2MyNHh4X2RjbGstPmRjbGswX2Rpdl9jaGFuZ2Vf bmIpOwogCiAJZm9yIChpID0gMDsgaSA8IERDTEtfTUFYX0NMS1M7IGkrKykKIAkJY2xrX3VucmVn aXN0ZXIoY2xrX3RhYmxlW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xr LXMzYzI0MTAuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTAuYwppbmRleCA1ZDJm MDM0Li5hZjE1MTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2MyNDEw LmMKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQxMC5jCkBAIC04LDcgKzgsNiBA QAogICogQ29tbW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBmb2xs b3dpbmcgU29Dcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGlu dXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8 bGludXgvb2YuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTIu YyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTIuYwppbmRleCAyY2VlZGFmLi5iYjM0 OWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2MyNDEyLmMKKysrIGIv ZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQxMi5jCkBAIC04LDcgKzgsNiBAQAogICogQ29t bW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBTM0MyNDEyIGFuZCBTM0MyNDEzLgogICov CiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNp bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQ0My5jIGIvZHJpdmVycy9jbGsv c2Ftc3VuZy9jbGstczNjMjQ0My5jCmluZGV4IDBjM2MxODIuLjU4MTk1NTMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0NDMuYworKysgYi9kcml2ZXJzL2Nsay9zYW1z dW5nL2Nsay1zM2MyNDQzLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb21tb24gQ2xvY2sgRnJhbWV3 b3JrIHN1cHBvcnQgZm9yIFMzQzI0NDMgYW5kIGZvbGxvd2luZyBTb0NzLgogICovCiAKLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxs aW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjNjR4eC5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9j bGstczNjNjR4eC5jCmluZGV4IDBmNTkwZTUuLjdkYWQ2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Y2xrL3NhbXN1bmcvY2xrLXMzYzY0eHguYworKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1z M2M2NHh4LmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN1cHBv cnQgZm9yIGFsbCBTM0M2NHh4IFNvQ3MuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAj aW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+ CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcv Y2xrLXM1cHYyMTAtYXVkc3MuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXM1cHYyMTAtYXVk c3MuYwppbmRleCBhODA1M2I0Li5mN2I3N2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1z dW5nL2Nsay1zNXB2MjEwLWF1ZHNzLmMKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczVw djIxMC1hdWRzcy5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xv Y2svczVwdjIxMC1hdWRzcy5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwotc3Rh dGljIHN0cnVjdCBjbGsgKipjbGtfdGFibGU7CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICoqY2xr X3RhYmxlOwogc3RhdGljIHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CiBzdGF0aWMgc3RydWN0IGNs a19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7CiAKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGludCBz NXB2MjEwX2F1ZHNzX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWNv bnN0IGNoYXIgKm1vdXRfYXVkc3NfcFsyXTsKIAljb25zdCBjaGFyICptb3V0X2kyc19wWzNdOwog CWNvbnN0IGNoYXIgKmhjbGtfcDsKLQlzdHJ1Y3QgY2xrICpoY2xrLCAqcGxsX3JlZiwgKnBsbF9p biwgKmNkY2xrLCAqc2Nsa19hdWRpbzsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmhjbGssICpwbGxfcmVm LCAqcGxsX2luLCAqY2RjbGssICpzY2xrX2F1ZGlvOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWdfYmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgaW50 IHM1cHYyMTBfYXVkc3NfY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ fQogCiAJY2xrX3RhYmxlID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCi0JCQkJc2l6ZW9mKHN0 cnVjdCBjbGsgKikgKiBBVURTU19NQVhfQ0xLUywKKwkJCQlzaXplb2Yoc3RydWN0IGNsa19jb3Jl ICopICogQVVEU1NfTUFYX0NMS1MsCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfdGFibGUp CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODksMjcgKzg5LDI3IEBAIHN0YXRpYyBpbnQgczVwdjIx MF9hdWRzc19jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAljbGtfZGF0 YS5jbGtzID0gY2xrX3RhYmxlOwogCWNsa19kYXRhLmNsa19udW0gPSBBVURTU19NQVhfQ0xLUzsK IAotCWhjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImhjbGsiKTsKKwloY2xrID0gZGV2 bV9jbGtfcHJvdmlkZXJfZ2V0KCZwZGV2LT5kZXYsICJoY2xrIik7CiAJaWYgKElTX0VSUihoY2xr KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGhjbGsgY2xvY2tcbiIp OwogCQlyZXR1cm4gUFRSX0VSUihoY2xrKTsKIAl9CiAKLQlwbGxfaW4gPSBkZXZtX2Nsa19nZXQo JnBkZXYtPmRldiwgImZvdXRfZXBsbCIpOworCXBsbF9pbiA9IGRldm1fY2xrX3Byb3ZpZGVyX2dl dCgmcGRldi0+ZGV2LCAiZm91dF9lcGxsIik7CiAJaWYgKElTX0VSUihwbGxfaW4pKSB7CiAJCWRl dl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZm91dF9lcGxsIGNsb2NrXG4iKTsKIAkJ cmV0dXJuIFBUUl9FUlIocGxsX2luKTsKIAl9CiAKLQlzY2xrX2F1ZGlvID0gZGV2bV9jbGtfZ2V0 KCZwZGV2LT5kZXYsICJzY2xrX2F1ZGlvMCIpOworCXNjbGtfYXVkaW8gPSBkZXZtX2Nsa19wcm92 aWRlcl9nZXQoJnBkZXYtPmRldiwgInNjbGtfYXVkaW8wIik7CiAJaWYgKElTX0VSUihzY2xrX2F1 ZGlvKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHNjbGtfYXVkaW8w IGNsb2NrXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2Nsa19hdWRpbyk7CiAJfQogCiAJLyogaWlz Y2RjbGswIGlzIGFuIG9wdGlvbmFsIGV4dGVybmFsIEkyUyBjb2RlYyBjbG9jayAqLwotCWNkY2xr ID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJpaXNjZGNsazAiKTsKLQlwbGxfcmVmID0gZGV2 bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJ4eHRpIik7CisJY2RjbGsgPSBkZXZtX2Nsa19wcm92aWRl cl9nZXQoJnBkZXYtPmRldiwgImlpc2NkY2xrMCIpOworCXBsbF9yZWYgPSBkZXZtX2Nsa19wcm92 aWRlcl9nZXQoJnBkZXYtPmRldiwgInh4dGkiKTsKIAogCWlmICghSVNfRVJSKHBsbF9yZWYpKQog CQltb3V0X2F1ZHNzX3BbMF0gPSBfX2Nsa19nZXRfbmFtZShwbGxfcmVmKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXM1cHYyMTAuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcv Y2xrLXM1cHYyMTAuYwppbmRleCBkMjcwYTIwLi41MTcwMzJmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay9zYW1zdW5nL2Nsay1zNXB2MjEwLmMKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGst czVwdjIxMC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN1 cHBvcnQgZm9yIGFsbCBTNVBDMTEwL1M1UFYyMTAgU29Dcy4KICAqLwogCi0jaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xr LXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL3NhbXN1bmcvY2xrLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay5jCmluZGV4IGRlYWI4 NGQuLjY4MTMzZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmMKKysrIGIv ZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGsuYwpAQCAtNTIsMTQgKzUyLDE0IEBAIHN0cnVjdCBzYW1z dW5nX2Nsa19wcm92aWRlciAqX19pbml0IHNhbXN1bmdfY2xrX2luaXQoc3RydWN0IGRldmljZV9u b2RlICpucCwKIAkJCXZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBucl9jbGtzKQog ewogCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4OwotCXN0cnVjdCBjbGsgKipjbGtf dGFibGU7CisJc3RydWN0IGNsa19jb3JlICoqY2xrX3RhYmxlOwogCWludCBpOwogCiAJY3R4ID0g a3phbGxvYyhzaXplb2Yoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyKSwgR0ZQX0tFUk5FTCk7 CiAJaWYgKCFjdHgpCiAJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgY2xvY2sgcHJvdmlkZXIg Y29udGV4dC5cbiIpOwogCi0JY2xrX3RhYmxlID0ga2NhbGxvYyhucl9jbGtzLCBzaXplb2Yoc3Ry dWN0IGNsayAqKSwgR0ZQX0tFUk5FTCk7CisJY2xrX3RhYmxlID0ga2NhbGxvYyhucl9jbGtzLCBz aXplb2Yoc3RydWN0IGNsa19jb3JlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsa190YWJsZSkK IAkJcGFuaWMoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbG9jayBsb29rdXAgdGFibGVcbiIpOwogCkBA IC04NSw3ICs4NSw3IEBAIHZvaWQgX19pbml0IHNhbXN1bmdfY2xrX29mX2FkZF9wcm92aWRlcihz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogfQogCiAvKiBhZGQgYSBjbG9jayBpbnN0YW5jZSB0byB0 aGUgY2xvY2sgbG9va3VwIHRhYmxlIHVzZWQgZm9yIGR0IGJhc2VkIGxvb2t1cCAqLwotdm9pZCBz YW1zdW5nX2Nsa19hZGRfbG9va3VwKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LCBz dHJ1Y3QgY2xrICpjbGssCit2b2lkIHNhbXN1bmdfY2xrX2FkZF9sb29rdXAoc3RydWN0IHNhbXN1 bmdfY2xrX3Byb3ZpZGVyICpjdHgsIHN0cnVjdCBjbGtfY29yZSAqY2xrLAogCQkJCXVuc2lnbmVk IGludCBpZCkKIHsKIAlpZiAoY3R4LT5jbGtfZGF0YS5jbGtzICYmIGlkKQpAQCAtOTcsNyArOTcs NyBAQCB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhzdHJ1Y3Qgc2Ftc3Vu Z19jbGtfcHJvdmlkZXIgKmN0eCwKIAkJCQlzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyAqbGlz dCwKIAkJCQl1bnNpZ25lZCBpbnQgbnJfY2xrKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAl1bnNpZ25lZCBpbnQgaWR4LCByZXQ7CiAKIAlpZiAoIWN0eC0+ Y2xrX2RhdGEuY2xrcykgewpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgX19pbml0IHNhbXN1bmdf Y2xrX3JlZ2lzdGVyX2FsaWFzKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAogdm9p ZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShzdHJ1Y3Qgc2Ftc3VuZ19j bGtfcHJvdmlkZXIgKmN0eCwKIAkJc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayAqbGlz dCwgdW5zaWduZWQgaW50IG5yX2NsaykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGs7CiAJdW5zaWduZWQgaW50IGlkeCwgcmV0OwogCiAJZm9yIChpZHggPSAwOyBp ZHggPCBucl9jbGs7IGlkeCsrLCBsaXN0KyspIHsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIF9f aW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9yYXRlKHN0cnVjdCBzYW1zdW5nX2Nsa19w cm92aWRlciAqY3R4LAogdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfZmFj dG9yKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAogCQlzdHJ1Y3Qgc2Ftc3VuZ19m aXhlZF9mYWN0b3JfY2xvY2sgKmxpc3QsIHVuc2lnbmVkIGludCBucl9jbGspCiB7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXVuc2lnbmVkIGludCBpZHg7CiAK IAlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX2NsazsgaWR4KyssIGxpc3QrKykgewpAQCAtMTgwLDcg KzE4MCw3IEBAIHZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3Qgc2Ft c3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKIAkJCQlzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgKmxp c3QsCiAJCQkJdW5zaWduZWQgaW50IG5yX2NsaykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAJdW5zaWduZWQgaW50IGlkeCwgcmV0OwogCiAJZm9yIChpZHgg PSAwOyBpZHggPCBucl9jbGs7IGlkeCsrLCBsaXN0KyspIHsKQEAgLTIxMiw3ICsyMTIsNyBAQCB2 b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9kaXYoc3RydWN0IHNhbXN1bmdfY2xrX3By b3ZpZGVyICpjdHgsCiAJCQkJc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrICpsaXN0LAogCQkJCXVu c2lnbmVkIGludCBucl9jbGspCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29y ZSAqY2xrOwogCXVuc2lnbmVkIGludCBpZHgsIHJldDsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwg bnJfY2xrOyBpZHgrKywgbGlzdCsrKSB7CkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBfX2luaXQg c2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0 eCwKIAkJCQlzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrICpsaXN0LAogCQkJCXVuc2lnbmVkIGlu dCBucl9jbGspCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwog CXVuc2lnbmVkIGludCBpZHgsIHJldDsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfY2xrOyBp ZHgrKywgbGlzdCsrKSB7CkBAIC0zMDMsNyArMzAzLDcgQEAgdm9pZCBfX2luaXQgc2Ftc3VuZ19j bGtfb2ZfcmVnaXN0ZXJfZml4ZWRfZXh0KHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4 LAogLyogdXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgdGhlIHJhdGUgb2YgYSBzcGVjaWZpZWQgY2xv Y2sgKi8KIHVuc2lnbmVkIGxvbmcgX2dldF9yYXRlKGNvbnN0IGNoYXIgKmNsa19uYW1lKQogewot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWNsayA9IF9fY2xr X2xvb2t1cChjbGtfbmFtZSk7CiAJaWYgKCFjbGspIHsKQEAgLTMxMSw1ICszMTEsNSBAQCB1bnNp Z25lZCBsb25nIF9nZXRfcmF0ZShjb25zdCBjaGFyICpjbGtfbmFtZSkKIAkJcmV0dXJuIDA7CiAJ fQogCi0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGspOworCXJldHVybiBjbGtfcHJvdmlkZXJfZ2V0 X3JhdGUoY2xrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmggYi9k cml2ZXJzL2Nsay9zYW1zdW5nL2Nsay5oCmluZGV4IDY2YWIzNmIuLjU4YjEyMTUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmgKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9j bGsuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX1NBTVNVTkdfQ0xLX0gKICNkZWZpbmUg X19TQU1TVU5HX0NMS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51 eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1w cm92aWRlci5oPgpAQCAtMzM2LDcgKzMzNSw3IEBAIGV4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5n X2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoCiAJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk ICpjbGtfbWF0Y2hlcyk7CiAKIGV4dGVybiB2b2lkIHNhbXN1bmdfY2xrX2FkZF9sb29rdXAoc3Ry dWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCi0JCQlzdHJ1Y3QgY2xrICpjbGssIHVuc2ln bmVkIGludCBpZCk7CisJCQlzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgdW5zaWduZWQgaW50IGlkKTsK IAogZXh0ZXJuIHZvaWQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoc3RydWN0IHNhbXN1bmdf Y2xrX3Byb3ZpZGVyICpjdHgsCiAJCQlzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyAqbGlzdCwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1kaXY2LmMgYi9kcml2ZXJzL2Ns ay9zaG1vYmlsZS9jbGstZGl2Ni5jCmluZGV4IGYwNjVmNjkuLmM2NzEyZmIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1kaXY2LmMKKysrIGIvZHJpdmVycy9jbGsvc2htb2Jp bGUvY2xrLWRpdjYuYwpAQCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcGdf ZGl2Nl9jbG9ja19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJc3RydWN0IGRpdjZfY2xv Y2sgKmNsb2NrOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOwogCWNvbnN0IGNoYXIgKm5hbWU7 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCByZXQ7CiAK IAljbG9jayA9IGt6YWxsb2Moc2l6ZW9mKCpjbG9jayksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9jbGsvc2htb2JpbGUvY2xrLWVtZXYyLmMgYi9kcml2ZXJzL2Nsay9zaG1vYmls ZS9jbGstZW1ldjIuYwppbmRleCA2YzdjOTI5Li4yZTNhNDViIDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay9zaG1vYmlsZS9jbGstZW1ldjIuYworKysgYi9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGst ZW1ldjIuYwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZW1ldjJfc211X2lu aXQodm9pZCkKIHN0YXRpYyB2b2lkIF9faW5pdCBlbWV2Ml9zbXVfY2xrZGl2X2luaXQoc3RydWN0 IGRldmljZV9ub2RlICpucCkKIHsKIAl1MzIgcmVnWzJdOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZSA9IG9mX2Nsa19n ZXRfcGFyZW50X25hbWUobnAsIDApOwogCWlmIChXQVJOX09OKG9mX3Byb3BlcnR5X3JlYWRfdTMy X2FycmF5KG5wLCAicmVnIiwgcmVnLCAyKSkpCiAJCXJldHVybjsKQEAgLTg5LDcgKzg5LDcgQEAg Q0xLX09GX0RFQ0xBUkUoZW1ldjJfc211X2Nsa2RpdiwgInJlbmVzYXMsZW1ldjItc211LWNsa2Rp diIsCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1ldjJfc211X2djbGtfaW5pdChzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wKQogewogCXUzMiByZWdbMl07Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lID0gb2ZfY2xrX2dldF9wYXJl bnRfbmFtZShucCwgMCk7CiAJaWYgKFdBUk5fT04ob2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXko bnAsICJyZWciLCByZWcsIDIpKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv c2htb2JpbGUvY2xrLW1zdHAuYyBiL2RyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1tc3RwLmMKaW5k ZXggMmQyZmU3Ny4uMjY1OTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2htb2JpbGUvY2xr LW1zdHAuYworKysgYi9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstbXN0cC5jCkBAIC0xMjEsMTMg KzEyMSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY3BnX21zdHBfY2xvY2tfb3Bz ID0gewogCS5pc19lbmFibGVkID0gY3BnX21zdHBfY2xvY2tfaXNfZW5hYmxlZCwKIH07CiAKLXN0 YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICogX19pbml0 CiBjcGdfbXN0cF9jbG9ja19yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpw YXJlbnRfbmFtZSwKIAkJCXVuc2lnbmVkIGludCBpbmRleCwgc3RydWN0IG1zdHBfY2xvY2tfZ3Jv dXAgKmdyb3VwKQogewogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3RydWN0IG1zdHBf Y2xvY2sgKmNsb2NrOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsK IAogCWNsb2NrID0ga3phbGxvYyhzaXplb2YoKmNsb2NrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFj bG9jaykgewpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcGdfbXN0cF9j bG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXN0cnVjdCBtc3RwX2Nsb2Nr X2dyb3VwICpncm91cDsKIAljb25zdCBjaGFyICppZHhuYW1lOwotCXN0cnVjdCBjbGsgKipjbGtz OworCXN0cnVjdCBjbGtfY29yZSAqKmNsa3M7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlncm91cCA9 IGt6YWxsb2Moc2l6ZW9mKCpncm91cCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9jbGsvc2htb2JpbGUvY2xrLXI4YTc3NDAuYyBiL2RyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1y OGE3NzQwLmMKaW5kZXggMWUyZWFhZS4uODg4OWU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv c2htb2JpbGUvY2xrLXI4YTc3NDAuYworKysgYi9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcjhh Nzc0MC5jCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2Rpdl90YWJs ZSBkaXY0X2Rpdl90YWJsZVtdID0gewogCiBzdGF0aWMgdTMyIGNwZ19tb2RlIF9faW5pdGRhdGE7 CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICog X19pbml0CiByOGE3NzQwX2NwZ19yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LCBzdHJ1Y3QgcjhhNzc0MF9jcGcgKmNwZywKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKIHsK QEAgLTE0Nyw3ICsxNDcsNyBAQCByOGE3NzQwX2NwZ19yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcjhhNzc0MF9jcGcgKmNwZywKIHN0YXRpYyB2b2lkIF9faW5p dCByOGE3NzQwX2NwZ19jbG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXN0 cnVjdCByOGE3NzQwX2NwZyAqY3BnOwotCXN0cnVjdCBjbGsgKipjbGtzOworCXN0cnVjdCBjbGtf Y29yZSAqKmNsa3M7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IG51bV9jbGtzOwogCkBAIC0xODAs NyArMTgwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHI4YTc3NDBfY3BnX2Nsb2Nrc19pbml0KHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nsa3M7ICsraSkg ewogCQljb25zdCBjaGFyICpuYW1lOwotCQlzdHJ1Y3QgY2xrICpjbGs7CisJCXN0cnVjdCBjbGtf Y29yZSAqY2xrOwogCiAJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAiY2xvY2st b3V0cHV0LW5hbWVzIiwgaSwKIAkJCQkJICAgICAgJm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9jbGsvc2htb2JpbGUvY2xrLXI4YTc3NzkuYyBiL2RyaXZlcnMvY2xrL3NobW9iaWxlL2Nsay1y OGE3Nzc5LmMKaW5kZXggNjUyZWNhYy4uOTZiNTFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv c2htb2JpbGUvY2xrLXI4YTc3NzkuYworKysgYi9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcjhh Nzc3OS5jCkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3BnX3Bs bGFfbXVsdFs0XSBfX2luaXRjb25zdCA9IHsgNDIsIDQ4LCA1NiwgNjQgfTsKIAogc3RhdGljIHUz MiBjcGdfbW9kZSBfX2luaXRkYXRhOwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAorc3Rh dGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdAogcjhhNzc3OV9jcGdfcmVnaXN0ZXJfY2xvY2so c3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHI4YTc3NzlfY3BnICpjcGcsCiAJCQkgICBj b25zdCBzdHJ1Y3QgY3BnX2Nsa19jb25maWcgKmNvbmZpZywKIAkJCSAgIHVuc2lnbmVkIGludCBw bGxhX211bHQsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZv aWQgX19pbml0IHI4YTc3NzlfY3BnX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAp CiB7CiAJY29uc3Qgc3RydWN0IGNwZ19jbGtfY29uZmlnICpjb25maWc7CiAJc3RydWN0IHI4YTc3 NzlfY3BnICpjcGc7Ci0Jc3RydWN0IGNsayAqKmNsa3M7CisJc3RydWN0IGNsa19jb3JlICoqY2xr czsKIAl1bnNpZ25lZCBpbnQgaSwgcGxsYV9tdWx0OwogCWludCBudW1fY2xrczsKIApAQCAtMTUz LDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByOGE3Nzc5X2NwZ19jbG9ja3NfaW5pdChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jbGtzOyArK2kp IHsKIAkJY29uc3QgY2hhciAqbmFtZTsKLQkJc3RydWN0IGNsayAqY2xrOworCQlzdHJ1Y3QgY2xr X2NvcmUgKmNsazsKIAogCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwgImNsb2Nr LW91dHB1dC1uYW1lcyIsIGksCiAJCQkJCSAgICAgICZuYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvY2xrL3NobW9iaWxlL2Nsay1yY2FyLWdlbjIuYyBiL2RyaXZlcnMvY2xrL3NobW9iaWxlL2Ns ay1yY2FyLWdlbjIuYwppbmRleCBlOTk2NDI1Li40NWEwNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay9zaG1vYmlsZS9jbGstcmNhci1nZW4yLmMKKysrIGIvZHJpdmVycy9jbGsvc2htb2JpbGUv Y2xrLXJjYXItZ2VuMi5jCkBAIC0xMzMsMTIgKzEzMywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgY3BnX3pfY2xrX29wcyA9IHsKIAkuc2V0X3JhdGUgPSBjcGdfel9jbGtfc2V0X3Jh dGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdCBjcGdfel9jbGtfcmVnaXN0ZXIo c3RydWN0IHJjYXJfZ2VuMl9jcGcgKmNwZykKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2lu aXQgY3BnX3pfY2xrX3JlZ2lzdGVyKHN0cnVjdCByY2FyX2dlbjJfY3BnICpjcGcpCiB7CiAJc3Rh dGljIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lID0gInBsbDAiOwogCXN0cnVjdCBjbGtfaW5pdF9k YXRhIGluaXQ7CiAJc3RydWN0IGNwZ196X2NsayAqemNsazsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJ c3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAl6Y2xrID0ga3phbGxvYyhzaXplb2YoKnpjbGspLCBH RlBfS0VSTkVMKTsKIAlpZiAoIXpjbGspCkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBjbGtfZGl2X3RhYmxlIGNwZ19zZDAxX2Rpdl90YWJsZVtdID0gewogCiBzdGF0aWMg dTMyIGNwZ19tb2RlIF9faW5pdGRhdGE7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0Citz dGF0aWMgc3RydWN0IGNsa19jb3JlICogX19pbml0CiByY2FyX2dlbjJfY3BnX3JlZ2lzdGVyX2Ns b2NrKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByY2FyX2dlbjJfY3BnICpjcGcsCiAJ CQkgICAgIGNvbnN0IHN0cnVjdCBjcGdfcGxsX2NvbmZpZyAqY29uZmlnLAogCQkJICAgICBjb25z dCBjaGFyICpuYW1lKQpAQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByY2Fy X2dlbjJfY3BnX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJY29uc3Qg c3RydWN0IGNwZ19wbGxfY29uZmlnICpjb25maWc7CiAJc3RydWN0IHJjYXJfZ2VuMl9jcGcgKmNw ZzsKLQlzdHJ1Y3QgY2xrICoqY2xrczsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipjbGtzOwogCXVuc2ln bmVkIGludCBpOwogCWludCBudW1fY2xrczsKIApAQCAtMzEzLDcgKzMxMyw3IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCByY2FyX2dlbjJfY3BnX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnApCiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nsa3M7ICsraSkgewogCQljb25zdCBjaGFyICpu YW1lOwotCQlzdHJ1Y3QgY2xrICpjbGs7CisJCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJCW9m X3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgaSwK IAkJCQkJICAgICAgJm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2htb2JpbGUvY2xr LXJ6LmMgYi9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcnouYwppbmRleCA3ZTY4ZTg2Li40MTRl MjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zaG1vYmlsZS9jbGstcnouYworKysgYi9kcml2 ZXJzL2Nsay9zaG1vYmlsZS9jbGstcnouYwpAQCAtMjgsNyArMjgsNyBAQCBzdHJ1Y3QgcnpfY3Bn IHsKICAqIEluaXRpYWxpemF0aW9uCiAgKi8KIAotc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQK K3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQKIHJ6X2NwZ19yZWdpc3Rlcl9jbG9jayhz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcnpfY3BnICpjcGcsIGNvbnN0IGNoYXIgKm5h bWUpCiB7CiAJdTMyIHZhbDsKQEAgLTY3LDcgKzY3LDcgQEAgcnpfY3BnX3JlZ2lzdGVyX2Nsb2Nr KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByel9jcGcgKmNwZywgY29uc3QgY2hhciAq bmEKIHN0YXRpYyB2b2lkIF9faW5pdCByel9jcGdfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9u b2RlICpucCkKIHsKIAlzdHJ1Y3QgcnpfY3BnICpjcGc7Ci0Jc3RydWN0IGNsayAqKmNsa3M7CisJ c3RydWN0IGNsa19jb3JlICoqY2xrczsKIAl1bnNpZ25lZCBpOwogCWludCBudW1fY2xrczsKIApA QCAtODYsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcnpfY3BnX2Nsb2Nrc19pbml0KHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nsa3M7ICsraSkg ewogCQljb25zdCBjaGFyICpuYW1lOwotCQlzdHJ1Y3QgY2xrICpjbGs7CisJCXN0cnVjdCBjbGtf Y29yZSAqY2xrOwogCiAJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAiY2xvY2st b3V0cHV0LW5hbWVzIiwgaSwgJm5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zaXJm L2Nsay1hdGxhczYuYyBiL2RyaXZlcnMvY2xrL3NpcmYvY2xrLWF0bGFzNi5jCmluZGV4IGQ2M2I3 NmMuLjNiMDdhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NpcmYvY2xrLWF0bGFzNi5jCisr KyBiL2RyaXZlcnMvY2xrL3NpcmYvY2xrLWF0bGFzNi5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVk ZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9j bGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51 eC9vZl9hZGRyZXNzLmg+CkBAIC0xMTMsNyArMTEyLDcgQEAgc3RhdGljIF9faW5pdGRhdGEgc3Ry dWN0IGNsa19odyAqYXRsYXM2X2Nsa19od19hcnJheVttYXhjbGtdID0gewogCSZjbGtfY3BoaWYu aHcsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqYXRsYXM2X2Nsa3NbbWF4Y2xrXTsKK3N0YXRp YyBzdHJ1Y3QgY2xrX2NvcmUgKmF0bGFzNl9jbGtzW21heGNsa107CiAKIHN0YXRpYyB2b2lkIF9f aW5pdCBhdGxhczZfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2xrL3NpcmYvY2xrLWNvbW1vbi5jIGIvZHJpdmVycy9jbGsvc2lyZi9jbGst Y29tbW9uLmMKaW5kZXggMzdhZjUxYy4uMDVmNTA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv c2lyZi9jbGstY29tbW9uLmMKKysrIGIvZHJpdmVycy9jbGsvc2lyZi9jbGstY29tbW9uLmMKQEAg LTE2NSw5ICsxNjUsOSBAQCBzdGF0aWMgbG9uZyBjcHVfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNs a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkgKiBTaVJGIFNvQyBoYXMgbm90IGNwdSBj bG9jayBjb250cm9sLAogCSAqIFNvIGJ5cGFzcyB0byBpdCdzIHBhcmVudCBwbGwuCiAJICovCi0J c3RydWN0IGNsayAqcGFyZW50X2NsayA9IGNsa19nZXRfcGFyZW50KGh3LT5jbGspOwotCXN0cnVj dCBjbGsgKnBsbF9wYXJlbnRfY2xrID0gY2xrX2dldF9wYXJlbnQocGFyZW50X2Nsayk7Ci0JdW5z aWduZWQgbG9uZyBwbGxfcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUocGxsX3BhcmVudF9jbGsp OworCXN0cnVjdCBjbGtfY29yZSAqcGFyZW50X2NsayA9IGNsa19wcm92aWRlcl9nZXRfcGFyZW50 KGh3LT5jbGspOworCXN0cnVjdCBjbGtfY29yZSAqcGxsX3BhcmVudF9jbGsgPSBjbGtfcHJvdmlk ZXJfZ2V0X3BhcmVudChwYXJlbnRfY2xrKTsKKwl1bnNpZ25lZCBsb25nIHBsbF9wYXJlbnRfcmF0 ZSA9IGNsa19wcm92aWRlcl9nZXRfcmF0ZShwbGxfcGFyZW50X2Nsayk7CiAJcmV0dXJuIHBsbF9j bGtfcm91bmRfcmF0ZShfX2Nsa19nZXRfaHcocGFyZW50X2NsayksIHJhdGUsICZwbGxfcGFyZW50 X3JhdGUpOwogfQogCkBAIC0xNzgsNyArMTc4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1 X2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKIAkgKiBTaVJGIFNvQyBoYXMgbm90 IGNwdSBjbG9jayBjb250cm9sLAogCSAqIFNvIHJldHVybiB0aGUgcGFyZW50IHBsbCByYXRlLgog CSAqLwotCXN0cnVjdCBjbGsgKnBhcmVudF9jbGsgPSBjbGtfZ2V0X3BhcmVudChody0+Y2xrKTsK KwlzdHJ1Y3QgY2xrX2NvcmUgKnBhcmVudF9jbGsgPSBjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudCho dy0+Y2xrKTsKIAlyZXR1cm4gX19jbGtfZ2V0X3JhdGUocGFyZW50X2Nsayk7CiB9CiAKQEAgLTQw MywzNCArNDAzLDM0IEBAIHN0YXRpYyBpbnQgY3B1X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQog ewogCWludCByZXQxLCByZXQyOwotCXN0cnVjdCBjbGsgKmN1cl9wYXJlbnQ7CisJc3RydWN0IGNs a19jb3JlICpjdXJfcGFyZW50OwogCi0JaWYgKHJhdGUgPT0gY2xrX2dldF9yYXRlKGNsa19wbGwx Lmh3LmNsaykpIHsKLQkJcmV0MSA9IGNsa19zZXRfcGFyZW50KGh3LT5jbGssIGNsa19wbGwxLmh3 LmNsayk7CisJaWYgKHJhdGUgPT0gY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsa19wbGwxLmh3LmNs aykpIHsKKwkJcmV0MSA9IGNsa19wcm92aWRlcl9zZXRfcGFyZW50KGh3LT5jbGssIGNsa19wbGwx Lmh3LmNsayk7CiAJCXJldHVybiByZXQxOwogCX0KIAotCWlmIChyYXRlID09IGNsa19nZXRfcmF0 ZShjbGtfcGxsMi5ody5jbGspKSB7Ci0JCXJldDEgPSBjbGtfc2V0X3BhcmVudChody0+Y2xrLCBj bGtfcGxsMi5ody5jbGspOworCWlmIChyYXRlID09IGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtf cGxsMi5ody5jbGspKSB7CisJCXJldDEgPSBjbGtfcHJvdmlkZXJfc2V0X3BhcmVudChody0+Y2xr LCBjbGtfcGxsMi5ody5jbGspOwogCQlyZXR1cm4gcmV0MTsKIAl9CiAKLQlpZiAocmF0ZSA9PSBj bGtfZ2V0X3JhdGUoY2xrX3BsbDMuaHcuY2xrKSkgewotCQlyZXQxID0gY2xrX3NldF9wYXJlbnQo aHctPmNsaywgY2xrX3BsbDMuaHcuY2xrKTsKKwlpZiAocmF0ZSA9PSBjbGtfcHJvdmlkZXJfZ2V0 X3JhdGUoY2xrX3BsbDMuaHcuY2xrKSkgeworCQlyZXQxID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJl bnQoaHctPmNsaywgY2xrX3BsbDMuaHcuY2xrKTsKIAkJcmV0dXJuIHJldDE7CiAJfQogCi0JY3Vy X3BhcmVudCA9IGNsa19nZXRfcGFyZW50KGh3LT5jbGspOworCWN1cl9wYXJlbnQgPSBjbGtfcHJv dmlkZXJfZ2V0X3BhcmVudChody0+Y2xrKTsKIAogCS8qIHN3aXRjaCB0byB0bXAgcGxsIGJlZm9y ZSBzZXR0aW5nIHBhcmVudCBjbG9jaydzIHJhdGUgKi8KIAlpZiAoY3VyX3BhcmVudCA9PSAgY2xr X3BsbDEuaHcuY2xrKSB7Ci0JCXJldDEgPSBjbGtfc2V0X3BhcmVudChody0+Y2xrLCBjbGtfcGxs Mi5ody5jbGspOworCQlyZXQxID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoaHctPmNsaywgY2xr X3BsbDIuaHcuY2xrKTsKIAkJQlVHX09OKHJldDEpOwogCX0KIAotCXJldDIgPSBjbGtfc2V0X3Jh dGUoY2xrX3BsbDEuaHcuY2xrLCByYXRlKTsKKwlyZXQyID0gY2xrX3Byb3ZpZGVyX3NldF9yYXRl KGNsa19wbGwxLmh3LmNsaywgcmF0ZSk7CiAKLQlyZXQxID0gY2xrX3NldF9wYXJlbnQoaHctPmNs aywgY2xrX3BsbDEuaHcuY2xrKTsKKwlyZXQxID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoaHct PmNsaywgY2xrX3BsbDEuaHcuY2xrKTsKIAogCXJldHVybiByZXQyID8gcmV0MiA6IHJldDE7CiB9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zaXJmL2Nsay1wcmltYTIuYyBiL2RyaXZlcnMvY2xr L3NpcmYvY2xrLXByaW1hMi5jCmluZGV4IDY5NjhlMmUuLjg2OWJjOGMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvY2xrL3NpcmYvY2xrLXByaW1hMi5jCisrKyBiL2RyaXZlcnMvY2xrL3NpcmYvY2xrLXBy aW1hMi5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5j bHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxs aW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9j bGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CkBAIC0xMTIsNyAr MTExLDcgQEAgc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNsa19odyAqcHJpbWEyX2Nsa19od19h cnJheVttYXhjbGtdID0gewogCSZjbGtfY3BoaWYuaHcsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNs ayAqcHJpbWEyX2Nsa3NbbWF4Y2xrXTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKnByaW1hMl9j bGtzW21heGNsa107CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmltYTJfY2xrX2luaXQoc3RydWN0 IGRldmljZV9ub2RlICpucCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NvY2ZwZ2EvY2xr LWdhdGUuYyBiL2RyaXZlcnMvY2xrL3NvY2ZwZ2EvY2xrLWdhdGUuYwppbmRleCBkZDNhNzhjLi41 ZDAwZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zb2NmcGdhL2Nsay1nYXRlLmMKKysrIGIv ZHJpdmVycy9jbGsvc29jZnBnYS9jbGstZ2F0ZS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBCYXNl ZCBmcm9tIGNsay1oaWdoYmFuay5jCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAj aW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+ CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTE4OCw3ICsxODcsNyBAQCBzdGF0aWMgdm9pZCBf X2luaXQgX19zb2NmcGdhX2dhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJdTMy IGRpdl9yZWdbM107CiAJdTMyIGNsa19waGFzZVsyXTsKIAl1MzIgZml4ZWRfZGl2OwotCXN0cnVj dCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3Qgc29jZnBnYV9nYXRl X2NsayAqc29jZnBnYV9jbGs7CiAJY29uc3QgY2hhciAqY2xrX25hbWUgPSBub2RlLT5uYW1lOwog CWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lW1NPQ0ZQR0FfTUFYX1BBUkVOVFNdOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9jbGsvc29jZnBnYS9jbGstcGVyaXBoLmMgYi9kcml2ZXJzL2Nsay9zb2NmcGdh L2Nsay1wZXJpcGguYwppbmRleCA0NjUzMWMzLi4xYmNiMjc1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay9zb2NmcGdhL2Nsay1wZXJpcGguYworKysgYi9kcml2ZXJzL2Nsay9zb2NmcGdhL2Nsay1w ZXJpcGguYwpAQCAtMTUsNyArMTUsNiBAQAogICogQmFzZWQgZnJvbSBjbGstaGlnaGJhbmsuYwog ICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5o PgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+ CkBAIC01Myw3ICs1Miw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBfX3NvY2ZwZ2FfcGVyaXBoX2lu aXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCWNvbnN0IHN0cnVjdCBjbGtfb3BzICpvcHMp CiB7CiAJdTMyIHJlZzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7 CiAJc3RydWN0IHNvY2ZwZ2FfcGVyaXBoX2NsayAqcGVyaXBoX2NsazsKIAljb25zdCBjaGFyICpj bGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay9zb2NmcGdhL2Nsay1wbGwuYyBiL2RyaXZlcnMvY2xrL3NvY2ZwZ2Ev Y2xrLXBsbC5jCmluZGV4IGRlNmRhOTUuLmJhNzA3M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xr L3NvY2ZwZ2EvY2xrLXBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL3NvY2ZwZ2EvY2xrLXBsbC5jCkBA IC0xNSw3ICsxNSw2IEBACiAgKiBCYXNlZCBmcm9tIGNsay1oaWdoYmFuay5jCiAgKgogICovCi0j aW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVk ZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTgxLDEx ICs4MCwxMSBAQCBzdGF0aWMgc3RydWN0IGNsa19vcHMgY2xrX3BsbF9vcHMgPSB7CiAJLmdldF9w YXJlbnQgPSBjbGtfcGxsX2dldF9wYXJlbnQsCiB9OwogCi1zdGF0aWMgX19pbml0IHN0cnVjdCBj bGsgKl9fc29jZnBnYV9wbGxfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCitzdGF0aWMg X19pbml0IHN0cnVjdCBjbGtfY29yZSAqX19zb2NmcGdhX3BsbF9pbml0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSwKIAljb25zdCBzdHJ1Y3QgY2xrX29wcyAqb3BzKQogewogCXUzMiByZWc7Ci0J c3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBzb2NmcGdh X3BsbCAqcGxsX2NsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29u c3QgY2hhciAqcGFyZW50X25hbWVbU09DRlBHQV9NQVhfUEFSRU5UU107CmRpZmYgLS1naXQgYS9k cml2ZXJzL2Nsay9zcGVhci9jbGstYXV4LXN5bnRoLmMgYi9kcml2ZXJzL2Nsay9zcGVhci9jbGst YXV4LXN5bnRoLmMKaW5kZXggYmRmYjQ0Mi4uMTgzMzRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9j bGsvc3BlYXIvY2xrLWF1eC1zeW50aC5jCisrKyBiL2RyaXZlcnMvY2xrL3NwZWFyL2Nsay1hdXgt c3ludGguYwpAQCAtMTM0LDE0ICsxMzQsMTQgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19h dXhfb3BzID0gewogCS5zZXRfcmF0ZSA9IGNsa19hdXhfc2V0X3JhdGUsCiB9OwogCi1zdHJ1Y3Qg Y2xrICpjbGtfcmVnaXN0ZXJfYXV4KGNvbnN0IGNoYXIgKmF1eF9uYW1lLCBjb25zdCBjaGFyICpn YXRlX25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl9hdXgoY29uc3QgY2hhciAq YXV4X25hbWUsIGNvbnN0IGNoYXIgKmdhdGVfbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25h bWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgX19pb21lbSAqcmVnLAogCQlzdHJ1Y3QgYXV4 X2Nsa19tYXNrcyAqbWFza3MsIHN0cnVjdCBhdXhfcmF0ZV90YmwgKnJ0YmwsCi0JCXU4IHJ0Ymxf Y250LCBzcGlubG9ja190ICpsb2NrLCBzdHJ1Y3QgY2xrICoqZ2F0ZV9jbGspCisJCXU4IHJ0Ymxf Y250LCBzcGlubG9ja190ICpsb2NrLCBzdHJ1Y3QgY2xrX2NvcmUgKipnYXRlX2NsaykKIHsKIAlz dHJ1Y3QgY2xrX2F1eCAqYXV4OwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJaWYgKCFhdXhfbmFtZSB8fCAh cGFyZW50X25hbWUgfHwgIXJlZyB8fCAhcnRibCB8fCAhcnRibF9jbnQpIHsKIAkJcHJfZXJyKCJJ bnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQiKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCBzdHJ1Y3QgY2xr ICpjbGtfcmVnaXN0ZXJfYXV4KGNvbnN0IGNoYXIgKmF1eF9uYW1lLCBjb25zdCBjaGFyICpnYXRl X25hbWUsCiAJCWdvdG8gZnJlZV9hdXg7CiAKIAlpZiAoZ2F0ZV9uYW1lKSB7Ci0JCXN0cnVjdCBj bGsgKnRnYXRlX2NsazsKKwkJc3RydWN0IGNsa19jb3JlICp0Z2F0ZV9jbGs7CiAKIAkJdGdhdGVf Y2xrID0gY2xrX3JlZ2lzdGVyX2dhdGUoTlVMTCwgZ2F0ZV9uYW1lLCBhdXhfbmFtZSwKIAkJCQlD TEtfU0VUX1JBVEVfUEFSRU5ULCByZWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zcGVhci9j bGstZnJhYy1zeW50aC5jIGIvZHJpdmVycy9jbGsvc3BlYXIvY2xrLWZyYWMtc3ludGguYwppbmRl eCBkZmZkNGNlLi5iY2UyYzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zcGVhci9jbGstZnJh Yy1zeW50aC5jCisrKyBiL2RyaXZlcnMvY2xrL3NwZWFyL2Nsay1mcmFjLXN5bnRoLmMKQEAgLTEy MiwxMyArMTIyLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfZnJhY19vcHMgPSB7CiAJ LnNldF9yYXRlID0gY2xrX2ZyYWNfc2V0X3JhdGUsCiB9OwogCi1zdHJ1Y3QgY2xrICpjbGtfcmVn aXN0ZXJfZnJhYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKK3N0 cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX2ZyYWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgX19pb21lbSAq cmVnLAogCQlzdHJ1Y3QgZnJhY19yYXRlX3RibCAqcnRibCwgdTggcnRibF9jbnQsIHNwaW5sb2Nr X3QgKmxvY2spCiB7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlzdHJ1Y3QgY2xrX2Zy YWMgKmZyYWM7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJ aWYgKCFuYW1lIHx8ICFwYXJlbnRfbmFtZSB8fCAhcmVnIHx8ICFydGJsIHx8ICFydGJsX2NudCkg ewogCQlwcl9lcnIoIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCIpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvc3BlYXIvY2xrLWdwdC1zeW50aC5jIGIvZHJpdmVycy9jbGsvc3BlYXIvY2xrLWdw dC1zeW50aC5jCmluZGV4IDFhZmMxOGMuLmY4ZTEzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xr L3NwZWFyL2Nsay1ncHQtc3ludGguYworKysgYi9kcml2ZXJzL2Nsay9zcGVhci9jbGstZ3B0LXN5 bnRoLmMKQEAgLTExMSwxMyArMTExLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfZ3B0 X29wcyA9IHsKIAkuc2V0X3JhdGUgPSBjbGtfZ3B0X3NldF9yYXRlLAogfTsKIAotc3RydWN0IGNs ayAqY2xrX3JlZ2lzdGVyX2dwdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRf bmFtZSwgdW5zaWduZWQKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ2lzdGVyX2dwdChjb25zdCBj aGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQKIAkJbG9uZyBmbGFn cywgdm9pZCBfX2lvbWVtICpyZWcsIHN0cnVjdCBncHRfcmF0ZV90YmwgKnJ0YmwsIHU4CiAJCXJ0 YmxfY250LCBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 CiAJc3RydWN0IGNsa19ncHQgKmdwdDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19j b3JlICpjbGs7CiAKIAlpZiAoIW5hbWUgfHwgIXBhcmVudF9uYW1lIHx8ICFyZWcgfHwgIXJ0Ymwg fHwgIXJ0YmxfY250KSB7CiAJCXByX2VycigiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zcGVhci9jbGstdmNvLXBsbC5jIGIvZHJpdmVycy9jbGsv c3BlYXIvY2xrLXZjby1wbGwuYwppbmRleCAxYjliNjViLi4yMjZmMmVjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2Nsay9zcGVhci9jbGstdmNvLXBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL3NwZWFyL2Ns ay12Y28tcGxsLmMKQEAgLTI3MiwxNiArMjcyLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBj bGtfdmNvX29wcyA9IHsKIAkuc2V0X3JhdGUgPSBjbGtfdmNvX3NldF9yYXRlLAogfTsKIAotc3Ry dWN0IGNsayAqY2xrX3JlZ2lzdGVyX3Zjb19wbGwoY29uc3QgY2hhciAqdmNvX25hbWUsIGNvbnN0 IGNoYXIgKnBsbF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfdmNvX3BsbChj b25zdCBjaGFyICp2Y29fbmFtZSwgY29uc3QgY2hhciAqcGxsX25hbWUsCiAJCWNvbnN0IGNoYXIg KnZjb19nYXRlX25hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQl1bnNpZ25lZCBsb25n IGZsYWdzLCB2b2lkIF9faW9tZW0gKm1vZGVfcmVnLCB2b2lkIF9faW9tZW0KIAkJKmNmZ19yZWcs IHN0cnVjdCBwbGxfcmF0ZV90YmwgKnJ0YmwsIHU4IHJ0YmxfY250LAotCQlzcGlubG9ja190ICps b2NrLCBzdHJ1Y3QgY2xrICoqcGxsX2NsaywKLQkJc3RydWN0IGNsayAqKnZjb19nYXRlX2NsaykK KwkJc3BpbmxvY2tfdCAqbG9jaywgc3RydWN0IGNsa19jb3JlICoqcGxsX2NsaywKKwkJc3RydWN0 IGNsa19jb3JlICoqdmNvX2dhdGVfY2xrKQogewogCXN0cnVjdCBjbGtfdmNvICp2Y287CiAJc3Ry dWN0IGNsa19wbGwgKnBsbDsKLQlzdHJ1Y3QgY2xrICp2Y29fY2xrLCAqdHBsbF9jbGssICp0dmNv X2dhdGVfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqdmNvX2NsaywgKnRwbGxfY2xrLCAqdHZjb19n YXRlX2NsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSB2Y29faW5pdCwgcGxsX2luaXQ7CiAJY29u c3QgY2hhciAqKnZjb19wYXJlbnRfbmFtZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc3Bl YXIvY2xrLmggYi9kcml2ZXJzL2Nsay9zcGVhci9jbGsuaAppbmRleCA5MzE3Mzc2Li43NzczMjJl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zcGVhci9jbGsuaAorKysgYi9kcml2ZXJzL2Nsay9z cGVhci9jbGsuaApAQCAtMTEwLDIyICsxMTAsMjIgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICgq Y2xrX2NhbGNfcmF0ZSkoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcHJhdGUsCiAJ CWludCBpbmRleCk7CiAKIC8qIGNsayByZWdpc3RlciByb3V0aW5lcyAqLwotc3RydWN0IGNsayAq Y2xrX3JlZ2lzdGVyX2F1eChjb25zdCBjaGFyICphdXhfbmFtZSwgY29uc3QgY2hhciAqZ2F0ZV9u YW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfYXV4KGNvbnN0IGNoYXIgKmF1eF9u YW1lLCBjb25zdCBjaGFyICpnYXRlX25hbWUsCiAJCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1 bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJc3RydWN0IGF1eF9jbGtf bWFza3MgKm1hc2tzLCBzdHJ1Y3QgYXV4X3JhdGVfdGJsICpydGJsLAotCQl1OCBydGJsX2NudCwg c3BpbmxvY2tfdCAqbG9jaywgc3RydWN0IGNsayAqKmdhdGVfY2xrKTsKLXN0cnVjdCBjbGsgKmNs a19yZWdpc3Rlcl9mcmFjKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1l LAorCQl1OCBydGJsX2NudCwgc3BpbmxvY2tfdCAqbG9jaywgc3RydWN0IGNsa19jb3JlICoqZ2F0 ZV9jbGspOworc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfZnJhYyhjb25zdCBjaGFyICpu YW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9p ZCBfX2lvbWVtICpyZWcsCiAJCXN0cnVjdCBmcmFjX3JhdGVfdGJsICpydGJsLCB1OCBydGJsX2Nu dCwgc3BpbmxvY2tfdCAqbG9jayk7Ci1zdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfZ3B0KGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1bnNpZ25lZAorc3RydWN0IGNs a19jb3JlICpjbGtfcmVnaXN0ZXJfZ3B0KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLCB1bnNpZ25lZAogCQlsb25nIGZsYWdzLCB2b2lkIF9faW9tZW0gKnJlZywgc3Ry dWN0IGdwdF9yYXRlX3RibCAqcnRibCwgdTgKIAkJcnRibF9jbnQsIHNwaW5sb2NrX3QgKmxvY2sp Owotc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX3Zjb19wbGwoY29uc3QgY2hhciAqdmNvX25hbWUs IGNvbnN0IGNoYXIgKnBsbF9uYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnaXN0ZXJfdmNv X3BsbChjb25zdCBjaGFyICp2Y29fbmFtZSwgY29uc3QgY2hhciAqcGxsX25hbWUsCiAJCWNvbnN0 IGNoYXIgKnZjb19nYXRlX25hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQl1bnNpZ25l ZCBsb25nIGZsYWdzLCB2b2lkIF9faW9tZW0gKm1vZGVfcmVnLCB2b2lkIF9faW9tZW0KIAkJKmNm Z19yZWcsIHN0cnVjdCBwbGxfcmF0ZV90YmwgKnJ0YmwsIHU4IHJ0YmxfY250LAotCQlzcGlubG9j a190ICpsb2NrLCBzdHJ1Y3QgY2xrICoqcGxsX2NsaywKLQkJc3RydWN0IGNsayAqKnZjb19nYXRl X2Nsayk7CisJCXNwaW5sb2NrX3QgKmxvY2ssIHN0cnVjdCBjbGtfY29yZSAqKnBsbF9jbGssCisJ CXN0cnVjdCBjbGtfY29yZSAqKnZjb19nYXRlX2Nsayk7CiAKIGxvbmcgY2xrX3JvdW5kX3JhdGVf aW5kZXgoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgZHJhdGUsCiAJCXVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUsIGNsa19jYWxjX3JhdGUgY2FsY19yYXRlLCB1OCBydGJsX2NudCwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NwZWFyL3NwZWFyMTMxMF9jbG9jay5jIGIvZHJpdmVy cy9jbGsvc3BlYXIvc3BlYXIxMzEwX2Nsb2NrLmMKaW5kZXggNGRhYTU5Ny4uNTgyMDZlMCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIxMzEwX2Nsb2NrLmMKKysrIGIvZHJpdmVy cy9jbGsvc3BlYXIvc3BlYXIxMzEwX2Nsb2NrLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIHdhcnJh bnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5j bHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8 bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTM4NSw3ICszODQsNyBAQCBz dGF0aWMgY29uc3QgY2hhciAqdGRtX3BhcmVudHNbXSA9IHsgInJhc19wbGwzX2NsayIsICJnZW5f c3luMV9jbGsiLCB9OwogCiB2b2lkIF9faW5pdCBzcGVhcjEzMTBfY2xrX2luaXQodm9pZCBfX2lv bWVtICptaXNjX2Jhc2UsIHZvaWQgX19pb21lbSAqcmFzX2Jhc2UpCiB7Ci0Jc3RydWN0IGNsayAq Y2xrLCAqY2xrMTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgKmNsazE7CiAKIAljbGsgPSBjbGtf cmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAib3NjXzMya19jbGsiLCBOVUxMLCBDTEtfSVNfUk9P VCwKIAkJCTMyMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NwZWFyL3NwZWFyMTM0MF9j bG9jay5jIGIvZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIxMzQwX2Nsb2NrLmMKaW5kZXggNWE1YzY2 NC4uNzA0MzAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIxMzQwX2Nsb2Nr LmMKKysrIGIvZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIxMzQwX2Nsb2NrLmMKQEAgLTExLDcgKzEx LDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGll ZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2 Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTQ0 Miw3ICs0NDEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2VuX3N5bnRoMl8zX3BhcmVudHNbXSA9 IHsgInZjbzFkaXY0X2NsayIsICJ2Y28yZGl2Ml9jbGsiLAogCiB2b2lkIF9faW5pdCBzcGVhcjEz NDBfY2xrX2luaXQodm9pZCBfX2lvbWVtICptaXNjX2Jhc2UpCiB7Ci0Jc3RydWN0IGNsayAqY2xr LCAqY2xrMTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsaywgKmNsazE7CiAKIAljbGsgPSBjbGtfcmVn aXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAib3NjXzMya19jbGsiLCBOVUxMLCBDTEtfSVNfUk9PVCwK IAkJCTMyMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NwZWFyL3NwZWFyM3h4X2Nsb2Nr LmMgYi9kcml2ZXJzL2Nsay9zcGVhci9zcGVhcjN4eF9jbG9jay5jCmluZGV4IGJiNWYzODcuLjQw ZDFiMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NwZWFyL3NwZWFyM3h4X2Nsb2NrLmMKKysr IGIvZHJpdmVycy9jbGsvc3BlYXIvc3BlYXIzeHhfY2xvY2suYwpAQCAtOSw3ICs5LDYgQEAKICAq IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwog Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5j bHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTE0MCw3ICsxMzks NyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGRyX3BhcmVudHNbXSA9IHsgImFoYl9jbGsiLCAiYWhi bXVsdDJfY2xrIiwgIm5vbmUiLAogI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzAwCiBzdGF0aWMg dm9pZCBfX2luaXQgc3BlYXIzMDBfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfZmFj dG9yKE5VTEwsICJjbGNkX2NsayIsICJyYXNfcGxsM19jbGsiLCAwLAogCQkJMSwgMSk7CkBAIC0x NzAsNyArMTY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwZWFyMzAwX2Nsa19pbml0KHZvaWQp IHsgfQogI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzEwCiBzdGF0aWMgdm9pZCBfX2luaXQgc3Bl YXIzMTBfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19j b3JlICpjbGs7CiAKIAljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJlbWlf Y2xrIiwgInJhc19haGJfY2xrIiwgMCwgMSwKIAkJCTEpOwpAQCAtMjQ2LDkgKzI0NSw5IEBAIHN0 YXRpYyBjb25zdCBjaGFyICpzbWlpMF9wYXJlbnRzW10gPSB7ICJzbWlpXzEyNW1fcGFkIiwgInJh c19wbGwyX2NsayIsCiBzdGF0aWMgY29uc3QgY2hhciAqdWFydHhfcGFyZW50c1tdID0geyAicmFz X3N5bjFfZ2NsayIsICJyYXNfYXBiX2NsayIsIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVh cjMyMF9jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnNvY19jb25maWdfYmFzZSwKLQkJCQkgICAgIHN0 cnVjdCBjbGsgKnJhc19hcGJfY2xrKQorCQkJCSAgICAgc3RydWN0IGNsa19jb3JlICpyYXNfYXBi X2NsaykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAlj bGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAic21paV8xMjVtX3BhZF9jbGsiLCBO VUxMLAogCQkJQ0xLX0lTX1JPT1QsIDEyNTAwMDAwMCk7CkBAIC0zNDQsNyArMzQzLDcgQEAgc3Rh dGljIHZvaWQgX19pbml0IHNwZWFyMzIwX2Nsa19pbml0KHZvaWQgX19pb21lbSAqc29jX2NvbmZp Z19iYXNlLAogCQkJMCwgJl9sb2NrKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgTlVMTCwg ImEzMDAwMDAwLnNlcmlhbCIpOwogCS8qIEVuZm9yY2UgcmFzX2FwYl9jbGsgKi8KLQljbGtfc2V0 X3BhcmVudChjbGssIHJhc19hcGJfY2xrKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGss IHJhc19hcGJfY2xrKTsKIAogCWNsayA9IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwgInVhcnQyX2Ns ayIsIHVhcnR4X3BhcmVudHMsCiAJCQlBUlJBWV9TSVpFKHVhcnR4X3BhcmVudHMpLApAQCAtMzUz LDcgKzM1Miw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVhcjMyMF9jbGtfaW5pdCh2b2lkIF9f aW9tZW0gKnNvY19jb25maWdfYmFzZSwKIAkJCVNQRUFSMzIwX1VBUlRYX1BDTEtfTUFTSywgMCwg Jl9sb2NrKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgTlVMTCwgImE0MDAwMDAwLnNlcmlh bCIpOwogCS8qIEVuZm9yY2UgcmFzX2FwYl9jbGsgKi8KLQljbGtfc2V0X3BhcmVudChjbGssIHJh c19hcGJfY2xrKTsKKwljbGtfcHJvdmlkZXJfc2V0X3BhcmVudChjbGssIHJhc19hcGJfY2xrKTsK IAogCWNsayA9IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwgInVhcnQzX2NsayIsIHVhcnR4X3BhcmVu dHMsCiAJCQlBUlJBWV9TSVpFKHVhcnR4X3BhcmVudHMpLApAQCAtMzg0LDEyICszODMsMTIgQEAg c3RhdGljIHZvaWQgX19pbml0IHNwZWFyMzIwX2Nsa19pbml0KHZvaWQgX19pb21lbSAqc29jX2Nv bmZpZ19iYXNlLAogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCBOVUxMLCAiNjAxMDAwMDAuc2Vy aWFsIik7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNwZWFyMzIwX2Nsa19pbml0KHZv aWQgX19pb21lbSAqc2IsIHN0cnVjdCBjbGsgKnJjKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBz cGVhcjMyMF9jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnNiLCBzdHJ1Y3QgY2xrX2NvcmUgKnJjKSB7 IH0KICNlbmRpZgogCiB2b2lkIF9faW5pdCBzcGVhcjN4eF9jbGtfaW5pdCh2b2lkIF9faW9tZW0g Km1pc2NfYmFzZSwgdm9pZCBfX2lvbWVtICpzb2NfY29uZmlnX2Jhc2UpCiB7Ci0Jc3RydWN0IGNs ayAqY2xrLCAqY2xrMSwgKnJhc19hcGJfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrLCAqY2xr MSwgKnJhc19hcGJfY2xrOwogCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwg Im9zY18zMmtfY2xrIiwgTlVMTCwgQ0xLX0lTX1JPT1QsCiAJCQkzMjAwMCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9zcGVhci9zcGVhcjZ4eF9jbG9jay5jIGIvZHJpdmVycy9jbGsvc3BlYXIv c3BlYXI2eHhfY2xvY2suYwppbmRleCA0ZjY0OWM5Li4zNjRhOGQzIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2Nsay9zcGVhci9zcGVhcjZ4eF9jbG9jay5jCisrKyBiL2RyaXZlcnMvY2xrL3NwZWFyL3Nw ZWFyNnh4X2Nsb2NrLmMKQEAgLTksNyArOSw2IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwg d2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5j bHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KQEAgLTExNiw3ICsxMTUsNyBAQCBzdGF0aWMg c3RydWN0IGdwdF9yYXRlX3RibCBncHRfcnRibFtdID0gewogCiB2b2lkIF9faW5pdCBzcGVhcjZ4 eF9jbGtfaW5pdCh2b2lkIF9faW9tZW0gKm1pc2NfYmFzZSkKIHsKLQlzdHJ1Y3QgY2xrICpjbGss ICpjbGsxOworCXN0cnVjdCBjbGtfY29yZSAqY2xrLCAqY2xrMTsKIAogCWNsayA9IGNsa19yZWdp c3Rlcl9maXhlZF9yYXRlKE5VTEwsICJvc2NfMzJrX2NsayIsIE5VTEwsIENMS19JU19ST09ULAog CQkJMzIwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc3QvY2xrLWZsZXhnZW4uYyBiL2Ry aXZlcnMvY2xrL3N0L2Nsay1mbGV4Z2VuLmMKaW5kZXggMjI4MmNlZi4uNjk5ZjdhMSAxMDA2NDQK LS0tIGEvZHJpdmVycy9jbGsvc3QvY2xrLWZsZXhnZW4uYworKysgYi9kcml2ZXJzL2Nsay9zdC9j bGstZmxleGdlbi5jCkBAIC0xNjMsMTIgKzE2MywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgZmxleGdlbl9vcHMgPSB7CiAJLnNldF9yYXRlID0gZmxleGdlbl9zZXRfcmF0ZSwKIH07 CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9mbGV4Z2VuKGNvbnN0IGNoYXIgKm5hbWUsCitz dHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl9mbGV4Z2VuKGNvbnN0IGNoYXIgKm5hbWUsCiAJ CQkJY29uc3QgY2hhciAqKnBhcmVudF9uYW1lcywgdTggbnVtX3BhcmVudHMsCiAJCQkJdm9pZCBf X2lvbWVtICpyZWcsIHNwaW5sb2NrX3QgKmxvY2ssIHUzMiBpZHgsCiAJCQkJdW5zaWduZWQgbG9u ZyBmbGV4Z2VuX2ZsYWdzKSB7CiAJc3RydWN0IGZsZXhnZW4gKmZneGJhcjsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5p dDsKIAl1MzIgIHhiYXJfc2hpZnQ7CiAJdm9pZCBfX2lvbWVtICp4YmFyX3JlZywgKmZkaXZfcmVn OwpAQCAtMjIzLDggKzIyMyw4IEBAIHN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl9mbGV4Z2VuKGNv bnN0IGNoYXIgKm5hbWUsCiAJZWxzZQogCQlwcl9kZWJ1ZygiJXM6IHBhcmVudCAlcyByYXRlICV1 XG4iLAogCQkJX19jbGtfZ2V0X25hbWUoY2xrKSwKLQkJCV9fY2xrX2dldF9uYW1lKGNsa19nZXRf cGFyZW50KGNsaykpLAotCQkJKHVuc2lnbmVkIGludCljbGtfZ2V0X3JhdGUoY2xrKSk7CisJCQlf X2Nsa19nZXRfbmFtZShjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudChjbGspKSwKKwkJCSh1bnNpZ25l ZCBpbnQpY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsaykpOwogCXJldHVybiBjbGs7CiB9CiAKQEAg LTI4Myw3ICsyODMsNyBAQCB2b2lkIF9faW5pdCBzdF9vZl9mbGV4Z2VuX3NldHVwKHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnApCiAJCWdvdG8gZXJyOwogCX0KIAotCWNsa19kYXRhLT5jbGtzID0ga2Nh bGxvYyhjbGtfZGF0YS0+Y2xrX251bSwgc2l6ZW9mKHN0cnVjdCBjbGsgKiksCisJY2xrX2RhdGEt PmNsa3MgPSBrY2FsbG9jKGNsa19kYXRhLT5jbGtfbnVtLCBzaXplb2Yoc3RydWN0IGNsa19jb3Jl ICopLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfZGF0YS0+Y2xrcykKIAkJZ290byBlcnI7 CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBfX2luaXQgc3Rfb2ZfZmxleGdlbl9zZXR1cChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wKQogCQlnb3RvIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBjbGtf ZGF0YS0+Y2xrX251bTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsazsKKwkJc3RydWN0IGNsa19j b3JlICpjbGs7CiAJCWNvbnN0IGNoYXIgKmNsa19uYW1lOwogCiAJCWlmIChvZl9wcm9wZXJ0eV9y ZWFkX3N0cmluZ19pbmRleChucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsCmRpZmYgLS1naXQgYS9k cml2ZXJzL2Nsay9zdC9jbGtnZW4tZnN5bi5jIGIvZHJpdmVycy9jbGsvc3QvY2xrZ2VuLWZzeW4u YwppbmRleCBhZjk0ZWQ4Li5jZWRhMWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zdC9jbGtn ZW4tZnN5bi5jCisrKyBiL2RyaXZlcnMvY2xrL3N0L2Nsa2dlbi1mc3luLmMKQEAgLTYxNCwxMyAr NjE0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzdF9xdWFkZnNfcGxsX2MzMl9v cHMgPSB7CiAJLnNldF9yYXRlCT0gcXVhZGZzX3BsbF9mczY2MGMzMl9zZXRfcmF0ZSwKIH07CiAK LXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0IHN0X2Nsa19yZWdpc3Rlcl9xdWFkZnNfcGxsKAor c3RhdGljIHN0cnVjdCBjbGtfY29yZSAqIF9faW5pdCBzdF9jbGtfcmVnaXN0ZXJfcXVhZGZzX3Bs bCgKIAkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXN0cnVj dCBjbGtnZW5fcXVhZGZzX2RhdGEgKnF1YWRmcywgdm9pZCBfX2lvbWVtICpyZWcsCiAJCXNwaW5s b2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IHN0X2Nsa19xdWFkZnNfcGxsICpwbGw7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRh IGluaXQ7CiAKIAkvKgpAQCAtMTAxOCwxMyArMTAxOCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgc3RfcXVhZGZzX29wcyA9IHsKIAkucmVjYWxjX3JhdGUJPSBxdWFkZnNfcmVjYWxj X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdCBzdF9jbGtfcmVnaXN0ZXJf cXVhZGZzX2ZzeW50aCgKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQgc3RfY2xrX3Jl Z2lzdGVyX3F1YWRmc19mc3ludGgoCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLAogCQlzdHJ1Y3QgY2xrZ2VuX3F1YWRmc19kYXRhICpxdWFkZnMsIHZvaWQgX19p b21lbSAqcmVnLCB1MzIgY2hhbiwKIAkJc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3Qgc3Rf Y2xrX3F1YWRmc19mc3ludGggKmZzOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJLyoKQEAgLTExMDIsNyAr MTEwMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzdF9vZl9jcmVhdGVfcXVhZGZzX2ZzeW50aHMo CiAJCXJldHVybjsKIAogCWNsa19kYXRhLT5jbGtfbnVtID0gUVVBREZTX01BWF9DSEFOOwotCWNs a19kYXRhLT5jbGtzID0ga3phbGxvYyhRVUFERlNfTUFYX0NIQU4gKiBzaXplb2Yoc3RydWN0IGNs ayAqKSwKKwljbGtfZGF0YS0+Y2xrcyA9IGt6YWxsb2MoUVVBREZTX01BWF9DSEFOICogc2l6ZW9m KHN0cnVjdCBjbGtfY29yZSAqKSwKIAkJCQkgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWNsa19kYXRh LT5jbGtzKSB7CkBAIC0xMTExLDcgKzExMTEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3Rfb2Zf Y3JlYXRlX3F1YWRmc19mc3ludGhzKAogCX0KIAogCWZvciAoZnNjaGFuID0gMDsgZnNjaGFuIDwg UVVBREZTX01BWF9DSEFOOyBmc2NoYW4rKykgewotCQlzdHJ1Y3QgY2xrICpjbGs7CisJCXN0cnVj dCBjbGtfY29yZSAqY2xrOwogCQljb25zdCBjaGFyICpjbGtfbmFtZTsKIAogCQlpZiAob2ZfcHJv cGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLApAQCAtMTEz Niw4ICsxMTM2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHN0X29mX2NyZWF0ZV9xdWFkZnNfZnN5 bnRocygKIAkJCWNsa19kYXRhLT5jbGtzW2ZzY2hhbl0gPSBjbGs7CiAJCQlwcl9kZWJ1ZygiJXM6 IHBhcmVudCAlcyByYXRlICV1XG4iLAogCQkJCV9fY2xrX2dldF9uYW1lKGNsayksCi0JCQkJX19j bGtfZ2V0X25hbWUoY2xrX2dldF9wYXJlbnQoY2xrKSksCi0JCQkJKHVuc2lnbmVkIGludCljbGtf Z2V0X3JhdGUoY2xrKSk7CisJCQkJX19jbGtfZ2V0X25hbWUoY2xrX3Byb3ZpZGVyX2dldF9wYXJl bnQoY2xrKSksCisJCQkJKHVuc2lnbmVkIGludCljbGtfcHJvdmlkZXJfZ2V0X3JhdGUoY2xrKSk7 CiAJCX0KIAl9CiAKQEAgLTExNDcsNyArMTE0Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzdF9v Zl9jcmVhdGVfcXVhZGZzX2ZzeW50aHMoCiBzdGF0aWMgdm9pZCBfX2luaXQgc3Rfb2ZfcXVhZGZz X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCAqbWF0Y2g7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwog CWNvbnN0IGNoYXIgKnBsbF9uYW1lLCAqY2xrX3BhcmVudF9uYW1lOwogCXZvaWQgX19pb21lbSAq cmVnOwogCXNwaW5sb2NrX3QgKmxvY2s7CkBAIC0xMTgxLDggKzExODEsOCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgc3Rfb2ZfcXVhZGZzX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJZWxz ZQogCQlwcl9kZWJ1ZygiJXM6IHBhcmVudCAlcyByYXRlICV1XG4iLAogCQkJX19jbGtfZ2V0X25h bWUoY2xrKSwKLQkJCV9fY2xrX2dldF9uYW1lKGNsa19nZXRfcGFyZW50KGNsaykpLAotCQkJKHVu c2lnbmVkIGludCljbGtfZ2V0X3JhdGUoY2xrKSk7CisJCQlfX2Nsa19nZXRfbmFtZShjbGtfcHJv dmlkZXJfZ2V0X3BhcmVudChjbGspKSwKKwkJCSh1bnNpZ25lZCBpbnQpY2xrX3Byb3ZpZGVyX2dl dF9yYXRlKGNsaykpOwogCiAJc3Rfb2ZfY3JlYXRlX3F1YWRmc19mc3ludGhzKG5wLCBwbGxfbmFt ZSwKIAkJCQkgICAgKHN0cnVjdCBjbGtnZW5fcXVhZGZzX2RhdGEgKiltYXRjaC0+ZGF0YSwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3N0L2Nsa2dlbi1tdXguYyBiL2RyaXZlcnMvY2xrL3N0L2Ns a2dlbi1tdXguYwppbmRleCA3OWRjNDBiLi5kMmE5NTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Ns ay9zdC9jbGtnZW4tbXV4LmMKKysrIGIvZHJpdmVycy9jbGsvc3QvY2xrZ2VuLW11eC5jCkBAIC0y MTUsNyArMjE1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa2dlbmFfZGl2bXV4 X29wcyA9IHsKIC8qKgogICogY2xrX3JlZ2lzdGVyX2dlbmFtdXggLSByZWdpc3RlciBhIGdlbmFt dXggY2xvY2sgd2l0aCB0aGUgY2xvY2sgZnJhbWV3b3JrCiAgKi8KLXN0cnVjdCBjbGsgKmNsa19y ZWdpc3Rlcl9nZW5hbXV4KGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19y ZWdpc3Rlcl9nZW5hbXV4KGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJY29uc3QgY2hhciAqKnBhcmVu dF9uYW1lcywgdTggbnVtX3BhcmVudHMsCiAJCQkJdm9pZCBfX2lvbWVtICpyZWcsCiAJCQkJY29u c3Qgc3RydWN0IGNsa2dlbmFfZGl2bXV4X2RhdGEgKm11eGRhdGEsCkBAIC0yMjcsNyArMjI3LDcg QEAgc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2dlbmFtdXgoY29uc3QgY2hhciAqbmFtZSwKIAlj b25zdCBpbnQgbXV4X3dpZHRoID0gMjsKIAljb25zdCBpbnQgZGl2aWRlcl93aWR0aCA9IDU7CiAJ c3RydWN0IGNsa2dlbmFfZGl2bXV4ICpnZW5hbXV4OwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCWludCBpOwog CkBAIC0yODAsOCArMjgwLDggQEAgc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2dlbmFtdXgoY29u c3QgY2hhciAqbmFtZSwKIAogCXByX2RlYnVnKCIlczogcGFyZW50ICVzIHJhdGUgJWx1XG4iLAog CQkJX19jbGtfZ2V0X25hbWUoY2xrKSwKLQkJCV9fY2xrX2dldF9uYW1lKGNsa19nZXRfcGFyZW50 KGNsaykpLAotCQkJY2xrX2dldF9yYXRlKGNsaykpOworCQkJX19jbGtfZ2V0X25hbWUoY2xrX3By b3ZpZGVyX2dldF9wYXJlbnQoY2xrKSksCisJCQljbGtfcHJvdmlkZXJfZ2V0X3JhdGUoY2xrKSk7 CiBlcnI6CiAJcmV0dXJuIGNsazsKIH0KQEAgLTQxMywxNCArNDEzLDE0IEBAIHZvaWQgX19pbml0 IHN0X29mX2Nsa2dlbmFfZGl2bXV4X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJCWdv dG8gZXJyOwogCiAJY2xrX2RhdGEtPmNsa19udW0gPSBkYXRhLT5udW1fb3V0cHV0czsKLQljbGtf ZGF0YS0+Y2xrcyA9IGt6YWxsb2MoY2xrX2RhdGEtPmNsa19udW0gKiBzaXplb2Yoc3RydWN0IGNs ayAqKSwKKwljbGtfZGF0YS0+Y2xrcyA9IGt6YWxsb2MoY2xrX2RhdGEtPmNsa19udW0gKiBzaXpl b2Yoc3RydWN0IGNsa19jb3JlICopLAogCQkJCSBHRlBfS0VSTkVMKTsKIAogCWlmICghY2xrX2Rh dGEtPmNsa3MpCiAJCWdvdG8gZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGNsa19kYXRhLT5jbGtf bnVtOyBpKyspIHsKLQkJc3RydWN0IGNsayAqY2xrOworCQlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsK IAkJY29uc3QgY2hhciAqY2xrX25hbWU7CiAKIAkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5n X2luZGV4KG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKQEAgLTQ5MCw3ICs0OTAsNyBAQCB2b2lk IF9faW5pdCBzdF9vZl9jbGtnZW5hX3ByZWRpdl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w KQogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXZvaWQgX19pb21lbSAqcmVn OwogCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCAqY2xrX25hbWU7Ci0Jc3RydWN0IGNsayAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtnZW5hX3ByZWRpdl9kYXRhICpk YXRhOwogCiAJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKGNsa2dlbmFfcHJlZGl2X29mX21hdGNoLCBu cCk7CkBAIC01MjIsOCArNTIyLDggQEAgdm9pZCBfX2luaXQgc3Rfb2ZfY2xrZ2VuYV9wcmVkaXZf c2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBv Zl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CiAJcHJfZGVidWcoIiVzOiBwYXJlbnQgJXMgcmF0 ZSAldVxuIiwKIAkJX19jbGtfZ2V0X25hbWUoY2xrKSwKLQkJX19jbGtfZ2V0X25hbWUoY2xrX2dl dF9wYXJlbnQoY2xrKSksCi0JCSh1bnNpZ25lZCBpbnQpY2xrX2dldF9yYXRlKGNsaykpOworCQlf X2Nsa19nZXRfbmFtZShjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudChjbGspKSwKKwkJKHVuc2lnbmVk IGludCljbGtfcHJvdmlkZXJfZ2V0X3JhdGUoY2xrKSk7CiAKIAlyZXR1cm47CiB9CkBAIC02MjUs NyArNjI1LDcgQEAgc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXV4X29mX21hdGNoW10gPSB7 CiB2b2lkIF9faW5pdCBzdF9vZl9jbGtnZW5fbXV4X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnApCiB7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7Ci0Jc3RydWN0IGNsayAq Y2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXZvaWQgX19pb21lbSAqcmVnOwogCWNvbnN0 IGNoYXIgKipwYXJlbnRzOwogCWludCBudW1fcGFyZW50czsKQEAgLTY2Miw4ICs2NjIsOCBAQCB2 b2lkIF9faW5pdCBzdF9vZl9jbGtnZW5fbXV4X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAp CiAKIAlwcl9kZWJ1ZygiJXM6IHBhcmVudCAlcyByYXRlICV1XG4iLAogCQkJX19jbGtfZ2V0X25h bWUoY2xrKSwKLQkJCV9fY2xrX2dldF9uYW1lKGNsa19nZXRfcGFyZW50KGNsaykpLAotCQkJKHVu c2lnbmVkIGludCljbGtfZ2V0X3JhdGUoY2xrKSk7CisJCQlfX2Nsa19nZXRfbmFtZShjbGtfcHJv dmlkZXJfZ2V0X3BhcmVudChjbGspKSwKKwkJCSh1bnNpZ25lZCBpbnQpY2xrX3Byb3ZpZGVyX2dl dF9yYXRlKGNsaykpOwogCiAJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1w bGVfZ2V0LCBjbGspOwogCkBAIC03MjYsMTQgKzcyNiwxNCBAQCB2b2lkIF9faW5pdCBzdF9vZl9j bGtnZW5fdmNjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJCWdvdG8gZXJyOwogCiAJ Y2xrX2RhdGEtPmNsa19udW0gPSBWQ0NfTUFYX0NIQU5ORUxTOwotCWNsa19kYXRhLT5jbGtzID0g a3phbGxvYyhjbGtfZGF0YS0+Y2xrX251bSAqIHNpemVvZihzdHJ1Y3QgY2xrICopLAorCWNsa19k YXRhLT5jbGtzID0ga3phbGxvYyhjbGtfZGF0YS0+Y2xrX251bSAqIHNpemVvZihzdHJ1Y3QgY2xr X2NvcmUgKiksCiAJCQkJIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjbGtfZGF0YS0+Y2xrcykKIAkJ Z290byBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2xrX2RhdGEtPmNsa19udW07IGkrKykgewot CQlzdHJ1Y3QgY2xrICpjbGs7CisJCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCQljb25zdCBjaGFy ICpjbGtfbmFtZTsKIAkJc3RydWN0IGNsa19nYXRlICpnYXRlOwogCQlzdHJ1Y3QgY2xrX2Rpdmlk ZXIgKmRpdjsKQEAgLTc5Niw4ICs3OTYsOCBAQCB2b2lkIF9faW5pdCBzdF9vZl9jbGtnZW5fdmNj X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAKIAkJcHJfZGVidWcoIiVzOiBwYXJlbnQg JXMgcmF0ZSAldVxuIiwKIAkJCV9fY2xrX2dldF9uYW1lKGNsayksCi0JCQlfX2Nsa19nZXRfbmFt ZShjbGtfZ2V0X3BhcmVudChjbGspKSwKLQkJCSh1bnNpZ25lZCBpbnQpY2xrX2dldF9yYXRlKGNs aykpOworCQkJX19jbGtfZ2V0X25hbWUoY2xrX3Byb3ZpZGVyX2dldF9wYXJlbnQoY2xrKSksCisJ CQkodW5zaWduZWQgaW50KWNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGspKTsKIAogCQljbGtfZGF0 YS0+Y2xrc1tpXSA9IGNsazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdC9jbGtnZW4t cGxsLmMgYi9kcml2ZXJzL2Nsay9zdC9jbGtnZW4tcGxsLmMKaW5kZXggMjk3NjlkNy4uMzJiYWMw MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc3QvY2xrZ2VuLXBsbC5jCisrKyBiL2RyaXZlcnMv Y2xrL3N0L2Nsa2dlbi1wbGwuYwpAQCAtMzkwLDEzICszOTAsMTMgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBjbGtfb3BzIHN0X3BsbDEyMDBjMzJfb3BzID0gewogCS5yZWNhbGNfcmF0ZQk9IHJlY2Fs Y19zdG1fcGxsMTIwMGMzMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0IGNsa2dl bl9wbGxfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdGF0aWMgc3RydWN0IGNs a19jb3JlICogX19pbml0IGNsa2dlbl9wbGxfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGFyZW50X25h bWUsCiAJCQkJc3RydWN0IGNsa2dlbl9wbGxfZGF0YQkqcGxsX2RhdGEsCiAJCQkJdm9pZCBfX2lv bWVtICpyZWcsCiAJCQkJY29uc3QgY2hhciAqY2xrX25hbWUpCiB7CiAJc3RydWN0IGNsa2dlbl9w bGwgKnBsbDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3Ry dWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAogCXBsbCA9IGt6YWxsb2Moc2l6ZW9mKCpwbGwpLCBH RlBfS0VSTkVMKTsKQEAgLTQyMiwxNiArNDIyLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICogX19p bml0IGNsa2dlbl9wbGxfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAKIAlwcl9k ZWJ1ZygiJXM6IHBhcmVudCAlcyByYXRlICVsdVxuIiwKIAkJCV9fY2xrX2dldF9uYW1lKGNsayks Ci0JCQlfX2Nsa19nZXRfbmFtZShjbGtfZ2V0X3BhcmVudChjbGspKSwKLQkJCWNsa19nZXRfcmF0 ZShjbGspKTsKKwkJCV9fY2xrX2dldF9uYW1lKGNsa19wcm92aWRlcl9nZXRfcGFyZW50KGNsaykp LAorCQkJY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsaykpOwogCiAJcmV0dXJuIGNsazsKIH0KIAot c3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQgY2xrZ2VuX2M2NV9sc2Rpdl9yZWdpc3Rlcihjb25z dCBjaGFyICpwYXJlbnRfbmFtZSwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKiBfX2luaXQgY2xr Z2VuX2M2NV9sc2Rpdl9yZWdpc3Rlcihjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCQkJCSAg ICAgY29uc3QgY2hhciAqY2xrX25hbWUpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihOVUxMLCBj bGtfbmFtZSwgcGFyZW50X25hbWUsIDAsIDEsIDIpOwogCWlmIChJU19FUlIoY2xrKSkKQEAgLTQz OSw4ICs0MzksOCBAQCBzdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdCBjbGtnZW5fYzY1X2xzZGl2 X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCiAJcHJfZGVidWcoIiVzOiBwYXJl bnQgJXMgcmF0ZSAlbHVcbiIsCiAJCQlfX2Nsa19nZXRfbmFtZShjbGspLAotCQkJX19jbGtfZ2V0 X25hbWUoY2xrX2dldF9wYXJlbnQoY2xrKSksCi0JCQljbGtfZ2V0X3JhdGUoY2xrKSk7CisJCQlf X2Nsa19nZXRfbmFtZShjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudChjbGspKSwKKwkJCWNsa19wcm92 aWRlcl9nZXRfcmF0ZShjbGspKTsKIAlyZXR1cm4gY2xrOwogfQogCkBAIC00ODQsNyArNDg0LDcg QEAgc3RhdGljIHZvaWQgX19pbml0IGNsa2dlbmFfYzY1X3BsbF9zZXR1cChzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wKQogCQlyZXR1cm47CiAKIAljbGtfZGF0YS0+Y2xrX251bSA9IG51bV9wbGxfb3V0 cHV0czsKLQljbGtfZGF0YS0+Y2xrcyA9IGt6YWxsb2MoY2xrX2RhdGEtPmNsa19udW0gKiBzaXpl b2Yoc3RydWN0IGNsayAqKSwKKwljbGtfZGF0YS0+Y2xrcyA9IGt6YWxsb2MoY2xrX2RhdGEtPmNs a19udW0gKiBzaXplb2Yoc3RydWN0IGNsa19jb3JlICopLAogCQkJCSBHRlBfS0VSTkVMKTsKIAog CWlmICghY2xrX2RhdGEtPmNsa3MpCkBAIC01NDMsMTQgKzU0MywxNCBAQCBlcnI6CiBDTEtfT0Zf REVDTEFSRShjbGtnZW5hX2M2NV9wbGxzLAogCSAgICAgICAic3QsY2xrZ2VuYS1wbGxzLWM2NSIs IGNsa2dlbmFfYzY1X3BsbF9zZXR1cCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0IGNs a2dlbl9vZGZfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdGF0aWMgc3RydWN0 IGNsa19jb3JlICogX19pbml0IGNsa2dlbl9vZGZfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGFyZW50 X25hbWUsCiAJCQkJCSAgICAgICB2b2lkICogX19pb21lbSByZWcsCiAJCQkJCSAgICAgICBzdHJ1 Y3QgY2xrZ2VuX3BsbF9kYXRhICpwbGxfZGF0YSwKIAkJCQkJICAgICAgIGludCBvZGYsCiAJCQkJ CSAgICAgICBzcGlubG9ja190ICpvZGZfbG9jaywKIAkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm9k Zl9uYW1lKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAl1 bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjbGtfZ2F0ZSAqZ2F0ZTsKIAlzdHJ1Y3QgY2xr X2RpdmlkZXIgKmRpdjsKQEAgLTU4OCw4ICs1ODgsOCBAQCBzdGF0aWMgc3RydWN0IGNsayAqIF9f aW5pdCBjbGtnZW5fb2RmX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCiAJcHJf ZGVidWcoIiVzOiBwYXJlbnQgJXMgcmF0ZSAlbHVcbiIsCiAJCQlfX2Nsa19nZXRfbmFtZShjbGsp LAotCQkJX19jbGtfZ2V0X25hbWUoY2xrX2dldF9wYXJlbnQoY2xrKSksCi0JCQljbGtfZ2V0X3Jh dGUoY2xrKSk7CisJCQlfX2Nsa19nZXRfbmFtZShjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudChjbGsp KSwKKwkJCWNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGspKTsKIAlyZXR1cm4gY2xrOwogfQogCkBA IC02NDAsNyArNjQwLDcgQEAgc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYzMyX3BsbF9vZl9t YXRjaFtdID0gewogc3RhdGljIHZvaWQgX19pbml0IGNsa2dlbl9jMzJfcGxsX3NldHVwKHN0cnVj dCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIg KnBhcmVudF9uYW1lLCAqcGxsX25hbWU7CiAJdm9pZCBfX2lvbWVtICpwbGxfYmFzZTsKIAlpbnQg bnVtX29kZnMsIG9kZjsKQEAgLTY3NiwxNCArNjc2LDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBj bGtnZW5fYzMyX3BsbF9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogCQlyZXR1cm47CiAK IAljbGtfZGF0YS0+Y2xrX251bSA9IG51bV9vZGZzOwotCWNsa19kYXRhLT5jbGtzID0ga3phbGxv YyhjbGtfZGF0YS0+Y2xrX251bSAqIHNpemVvZihzdHJ1Y3QgY2xrICopLAorCWNsa19kYXRhLT5j bGtzID0ga3phbGxvYyhjbGtfZGF0YS0+Y2xrX251bSAqIHNpemVvZihzdHJ1Y3QgY2xrX2NvcmUg KiksCiAJCQkJIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjbGtfZGF0YS0+Y2xrcykKIAkJZ290byBl cnI7CiAKIAlmb3IgKG9kZiA9IDA7IG9kZiA8IG51bV9vZGZzOyBvZGYrKykgewotCQlzdHJ1Y3Qg Y2xrICpjbGs7CisJCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCQljb25zdCBjaGFyICpjbGtfbmFt ZTsKIAogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsICJjbG9jay1vdXRw dXQtbmFtZXMiLApAQCAtNzIzLDcgKzcyMyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IGMzMl9ncHVfcGxsX29mX21hdGNoW10gPSB7CiBzdGF0aWMgdm9pZCBfX2luaXQgY2xrZ2VuZ3B1 X2MzMl9wbGxfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAljb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkICptYXRjaDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3Jl ICpjbGs7CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJ Y29uc3QgY2hhciAqY2xrX25hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdW54aS9jbGst YTEwLWhvc2MuYyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMTAtaG9zYy5jCmluZGV4IDA0ODFk NWQuLmM1ZTRjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMTAtaG9zYy5j CisrKyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMTAtaG9zYy5jCkBAIC0yNSw3ICsyNSw3IEBA IHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaG9zY19sb2NrKTsKIAogc3RhdGljIHZvaWQgX19pbml0 IHN1bjRpX29zY19jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVj dCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2ZpeGVkX3Jh dGUgKmZpeGVkOwogCXN0cnVjdCBjbGtfZ2F0ZSAqZ2F0ZTsKIAljb25zdCBjaGFyICpjbGtfbmFt ZSA9IG5vZGUtPm5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdW54aS9jbGstYTIwLWdt YWMuYyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMjAtZ21hYy5jCmluZGV4IDUyOTZmZDYuLjYz YzdkZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMjAtZ21hYy5jCisrKyBi L2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMjAtZ21hYy5jCkBAIC01NSw3ICs1NSw3IEBAIHN0YXRp YyBERUZJTkVfU1BJTkxPQ0soZ21hY19sb2NrKTsKIAogc3RhdGljIHZvaWQgX19pbml0IHN1bjdp X2EyMF9nbWFjX2Nsa19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfbXV4ICptdXg7 CiAJc3RydWN0IGNsa19nYXRlICpnYXRlOwogCWNvbnN0IGNoYXIgKmNsa19uYW1lID0gbm9kZS0+ bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1mYWN0b3JzLmMgYi9kcml2 ZXJzL2Nsay9zdW54aS9jbGstZmFjdG9ycy5jCmluZGV4IDIwNTdjOGEuLmJiMmQ0YjIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1mYWN0b3JzLmMKKysrIGIvZHJpdmVycy9jbGsv c3VueGkvY2xrLWZhY3RvcnMuYwpAQCAtNzksOSArNzksOSBAQCBzdGF0aWMgbG9uZyBjbGtfZmFj dG9yc19yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAK IHN0YXRpYyBsb25nIGNsa19mYWN0b3JzX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmJlc3RfcGFy ZW50X3JhdGUsCi0JCQkJICAgICAgIHN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9wKQorCQkJCSAg ICAgICBzdHJ1Y3QgY2xrX2NvcmUgKipiZXN0X3BhcmVudF9wKQogewotCXN0cnVjdCBjbGsgKmNs ayA9IGh3LT5jbGssICpwYXJlbnQsICpiZXN0X3BhcmVudCA9IE5VTEw7CisJc3RydWN0IGNsa19j b3JlICpjbGsgPSBody0+Y2xrLCAqcGFyZW50LCAqYmVzdF9wYXJlbnQgPSBOVUxMOwogCWludCBp LCBudW1fcGFyZW50czsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLCBiZXN0ID0gMCwgY2hp bGRfcmF0ZSwgYmVzdF9jaGlsZF9yYXRlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv c3VueGkvY2xrLXN1bjZpLWFwYjAtZ2F0ZXMuYyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1zdW42 aS1hcGIwLWdhdGVzLmMKaW5kZXggZTEwZDA1Mi4uZjI5YjA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jbGsvc3VueGkvY2xrLXN1bjZpLWFwYjAtZ2F0ZXMuYworKysgYi9kcml2ZXJzL2Nsay9zdW54 aS9jbGstc3VuNmktYXBiMC1nYXRlcy5jCkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBpbnQgc3Vu NmlfYTMxX2FwYjBfZ2F0ZXNfY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJLyogV29yc3QtY2FzZSBzaXplIGFwcHJveGltYXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9u ICovCiAJbmdhdGVzID0gZmluZF9sYXN0X2JpdChkYXRhLT5tYXNrLCBTVU42SV9BUEIwX0dBVEVT X01BWF9TSVpFKTsKIAljbGtfZGF0YS0+Y2xrcyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCAo bmdhdGVzICsgMSksCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjbGsgKiksIEdGUF9LRVJORUwp OworCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2xrX2NvcmUgKiksIEdGUF9LRVJORUwpOwogCWlm ICghY2xrX2RhdGEtPmNsa3MpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2Nsay9zdW54aS9jbGstc3VuNmktYXBiMC5jIGIvZHJpdmVycy9jbGsvc3VueGkvY2xrLXN1 bjZpLWFwYjAuYwppbmRleCAxZmEyMzM3Li41ZTQ2NDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Ns ay9zdW54aS9jbGstc3VuNmktYXBiMC5jCisrKyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1zdW42 aS1hcGIwLmMKQEAgLTM1LDcgKzM1LDcgQEAgc3RhdGljIGludCBzdW42aV9hMzFfYXBiMF9jbGtf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAljb25zdCBjaGFyICpjbGtfcGFy ZW50OwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAl2b2lkIF9faW9tZW0gKnJlZzsKLQlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWcgPSBkZXZtX2lvcmVtYXBfcmVz b3VyY2UoJnBkZXYtPmRldiwgcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdW54aS9jbGst c3VuNmktYXIxMDAuYyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1zdW42aS1hcjEwMC5jCmluZGV4 IGVjYThjYTAuLjk4NGQ1ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1zdW42 aS1hcjEwMC5jCisrKyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1zdW42aS1hcjEwMC5jCkBAIC00 Niw3ICs0Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFyMTAwX3JlY2FsY19yYXRlKHN0cnVj dCBjbGtfaHcgKmh3LAogCiBzdGF0aWMgbG9uZyBhcjEwMF9kZXRlcm1pbmVfcmF0ZShzdHJ1Y3Qg Y2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCSB1bnNpZ25lZCBsb25nICpiZXN0 X3BhcmVudF9yYXRlLAotCQkJCSBzdHJ1Y3QgY2xrICoqYmVzdF9wYXJlbnRfY2xrKQorCQkJCSBz dHJ1Y3QgY2xrX2NvcmUgKipiZXN0X3BhcmVudF9jbGspCiB7CiAJaW50IG5wYXJlbnRzID0gX19j bGtfZ2V0X251bV9wYXJlbnRzKGh3LT5jbGspOwogCWxvbmcgYmVzdF9yYXRlID0gLUVJTlZBTDsK QEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGxvbmcgYXIxMDBfZGV0ZXJtaW5lX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAlmb3IgKGkgPSAwOyBpIDwgbnBhcmVu dHM7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwogCQl1bnNpZ25lZCBsb25n IHRtcF9yYXRlOwotCQlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisJCXN0cnVjdCBjbGtfY29yZSAqcGFy ZW50OwogCQl1bnNpZ25lZCBsb25nIGRpdjsKIAkJaW50IHNoaWZ0OwogCkBAIC0xNzYsNyArMTc2 LDcgQEAgc3RhdGljIGludCBzdW42aV9hMzFfYXIxMDBfY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlzdHJ1Y3QgYXIx MDBfY2xrICphcjEwMDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0Jc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCBucGFyZW50czsKIAlpbnQgaTsKIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9jbGsvc3VueGkvY2xrLXN1bjhpLWFwYjAuYyBiL2RyaXZlcnMvY2xrL3N1 bnhpL2Nsay1zdW44aS1hcGIwLmMKaW5kZXggMWY1YmE5Yi4uZmEzMDhmZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9jbGsvc3VueGkvY2xrLXN1bjhpLWFwYjAuYworKysgYi9kcml2ZXJzL2Nsay9zdW54 aS9jbGstc3VuOGktYXBiMC5jCkBAIC0yNiw3ICsyNiw3IEBAIHN0YXRpYyBpbnQgc3VuOGlfYTIz X2FwYjBfY2xrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJY29uc3QgY2hh ciAqY2xrX3BhcmVudDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJdm9pZCBfX2lvbWVtICpyZWc7 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJciA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVnID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv c3VueGkvY2xrLXN1bnhpLmMgYi9kcml2ZXJzL2Nsay9zdW54aS9jbGstc3VueGkuYwppbmRleCBi NjU0YjdiLi40NGM0NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zdW54aS9jbGstc3VueGku YworKysgYi9kcml2ZXJzL2Nsay9zdW54aS9jbGstc3VueGkuYwpAQCAtNDAzLDcgKzQwMyw3IEBA IHN0YXRpYyB2b2lkIHN1bjdpX2EyMF9nZXRfb3V0X2ZhY3RvcnModTMyICpmcmVxLCB1MzIgcGFy ZW50X3JhdGUsCiAgKiBjbGtfc3VueGlfbW1jX3BoYXNlX2NvbnRyb2woKSAtIGNvbmZpZ3VyZXMg TU1DIGNsb2NrIHBoYXNlIGNvbnRyb2wKICAqLwogCi12b2lkIGNsa19zdW54aV9tbWNfcGhhc2Vf Y29udHJvbChzdHJ1Y3QgY2xrICpjbGssIHU4IHNhbXBsZSwgdTggb3V0cHV0KQordm9pZCBjbGtf c3VueGlfbW1jX3BoYXNlX2NvbnRyb2woc3RydWN0IGNsa19jb3JlICpjbGssIHU4IHNhbXBsZSwg dTggb3V0cHV0KQogewogCSNkZWZpbmUgdG9fY2xrX2NvbXBvc2l0ZShfaHcpIGNvbnRhaW5lcl9v ZihfaHcsIHN0cnVjdCBjbGtfY29tcG9zaXRlLCBodykKIAkjZGVmaW5lIHRvX2Nsa19mYWN0b3Jz KF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0IGNsa19mYWN0b3JzLCBodykKQEAgLTU4Miwx MCArNTgyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmFjdG9yc19kYXRhIHN1bjdpX2EyMF9v dXRfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZ2V0dGVyID0gc3VuN2lfYTIwX2dldF9vdXRfZmFj dG9ycywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0IHN1bnhpX2ZhY3RvcnNfY2xr X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUg KiBfX2luaXQgc3VueGlfZmFjdG9yc19jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2Rl LAogCQkJCQkJY29uc3Qgc3RydWN0IGZhY3RvcnNfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19mYWN0b3JzICpmYWN0 b3JzOwogCXN0cnVjdCBjbGtfZ2F0ZSAqZ2F0ZSA9IE5VTEw7CiAJc3RydWN0IGNsa19tdXggKm11 eCA9IE5VTEw7CkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdXhfZGF0 YSBzdW40aV9hcGIxX211eF9kYXRhIF9faW5pdGNvbnN0ID0gewogc3RhdGljIHZvaWQgX19pbml0 IHN1bnhpX211eF9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCQkJCSAgICAg ICBzdHJ1Y3QgbXV4X2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBj bGtfY29yZSAqY2xrOwogCWNvbnN0IGNoYXIgKmNsa19uYW1lID0gbm9kZS0+bmFtZTsKIAljb25z dCBjaGFyICpwYXJlbnRzW1NVTlhJX01BWF9QQVJFTlRTXTsKIAl2b2lkIF9faW9tZW0gKnJlZzsK QEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRpdl9kYXRhIHN1bjZpX2Ez MV9hcGIyX2Rpdl9kYXRhIF9faW5pdGNvbnN0ID0gewogc3RhdGljIHZvaWQgX19pbml0IHN1bnhp X2RpdmlkZXJfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkJICAgc3Ry dWN0IGRpdl9kYXRhICpkYXRhKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29uc3QgY2hh ciAqY2xrX3BhcmVudDsKIAl2b2lkIF9faW9tZW0gKnJlZzsKQEAgLTk3Niw3ICs5NzYsNyBAQCBz dGF0aWMgdm9pZCBfX2luaXQgc3VueGlfZ2F0ZXNfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSwKIAljbGtfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGtfb25lY2VsbF9k YXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfZGF0YSkKIAkJcmV0dXJuOwotCWNsa19kYXRh LT5jbGtzID0ga3phbGxvYygocXR5KzEpICogc2l6ZW9mKHN0cnVjdCBjbGsgKiksIEdGUF9LRVJO RUwpOworCWNsa19kYXRhLT5jbGtzID0ga3phbGxvYygocXR5KzEpICogc2l6ZW9mKHN0cnVjdCBj bGtfY29yZSAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfZGF0YS0+Y2xrcykgewogCQlrZnJl ZShjbGtfZGF0YSk7CiAJCXJldHVybjsKQEAgLTEwNzgsNyArMTA3OCw3IEBAIHN0YXRpYyB2b2lk IF9faW5pdCBzdW54aV9kaXZzX2Nsa19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJ c3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKmNsa19kYXRhOwogCWNvbnN0IGNoYXIgKnBhcmVudDsK IAljb25zdCBjaGFyICpjbGtfbmFtZTsKLQlzdHJ1Y3QgY2xrICoqY2xrcywgKnBjbGs7CisJc3Ry dWN0IGNsa19jb3JlICoqY2xrcywgKnBjbGs7CiAJc3RydWN0IGNsa19odyAqZ2F0ZV9odywgKnJh dGVfaHc7CiAJY29uc3Qgc3RydWN0IGNsa19vcHMgKnJhdGVfb3BzOwogCXN0cnVjdCBjbGtfZ2F0 ZSAqZ2F0ZSA9IE5VTEw7CkBAIC0xMjkxLDEwICsxMjkxLDEwIEBAIHN0YXRpYyB2b2lkIF9faW5p dCBzdW54aV9pbml0X2Nsb2Nrcyhjb25zdCBjaGFyICpjbG9ja3NbXSwgaW50IG5jbG9ja3MpCiAK IAkvKiBQcm90ZWN0IHRoZSBjbG9ja3MgdGhhdCBuZWVkcyB0byBzdGF5IG9uICovCiAJZm9yIChp ID0gMDsgaSA8IG5jbG9ja3M7IGkrKykgewotCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5V TEwsIGNsb2Nrc1tpXSk7CisJCXN0cnVjdCBjbGtfY29yZSAqY2xrID0gY2xrX3Byb3ZpZGVyX2dl dChOVUxMLCBjbG9ja3NbaV0pOwogCiAJCWlmICghSVNfRVJSKGNsaykpCi0JCQljbGtfcHJlcGFy ZV9lbmFibGUoY2xrKTsKKwkJCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGspOwogCX0K IH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLWF1ZGlvLXN5bmMuYyBiL2Ry aXZlcnMvY2xrL3RlZ3JhL2Nsay1hdWRpby1zeW5jLmMKaW5kZXggYzBmNzg0My4uNTNjMzQ4OCAx MDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLWF1ZGlvLXN5bmMuYworKysgYi9kcml2 ZXJzL2Nsay90ZWdyYS9jbGstYXVkaW8tc3luYy5jCkBAIC01NCwxMiArNTQsMTIgQEAgY29uc3Qg c3RydWN0IGNsa19vcHMgdGVncmFfY2xrX3N5bmNfc291cmNlX29wcyA9IHsKIAkucmVjYWxjX3Jh dGUgPSBjbGtfc3luY19zb3VyY2VfcmVjYWxjX3JhdGUsCiB9OwogCi1zdHJ1Y3QgY2xrICp0ZWdy YV9jbGtfcmVnaXN0ZXJfc3luY19zb3VyY2UoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtf Y29yZSAqdGVncmFfY2xrX3JlZ2lzdGVyX3N5bmNfc291cmNlKGNvbnN0IGNoYXIgKm5hbWUsCiAJ CXVuc2lnbmVkIGxvbmcgcmF0ZSwgdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSkKIHsKIAlzdHJ1Y3Qg dGVncmFfY2xrX3N5bmNfc291cmNlICpzeW5jOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJc3luYyA9IGt6 YWxsb2Moc2l6ZW9mKCpzeW5jKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzeW5jKSB7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstZGl2aWRlci5jIGIvZHJpdmVycy9jbGsvdGVncmEv Y2xrLWRpdmlkZXIuYwppbmRleCAyOTBmOWMxLi5jNjlhNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay90ZWdyYS9jbGstZGl2aWRlci5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1kaXZp ZGVyLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Ci0jaW5jbHVk ZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlICJjbGsuaCIKIApAQCAtMTQ3LDEzICsxNDYsMTMg QEAgY29uc3Qgc3RydWN0IGNsa19vcHMgdGVncmFfY2xrX2ZyYWNfZGl2X29wcyA9IHsKIAkucm91 bmRfcmF0ZSA9IGNsa19mcmFjX2Rpdl9yb3VuZF9yYXRlLAogfTsKIAotc3RydWN0IGNsayAqdGVn cmFfY2xrX3JlZ2lzdGVyX2RpdmlkZXIoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29y ZSAqdGVncmFfY2xrX3JlZ2lzdGVyX2RpdmlkZXIoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19pb21lbSAqcmVnLAogCQl1bnNpZ25lZCBsb25nIGZs YWdzLCB1OCBjbGtfZGl2aWRlcl9mbGFncywgdTggc2hpZnQsIHU4IHdpZHRoLAogCQl1OCBmcmFj X3dpZHRoLCBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCB0ZWdyYV9jbGtfZnJhY19kaXYg KmRpdmlkZXI7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0 cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlkaXZpZGVyID0ga3phbGxvYyhzaXplb2YoKmRp dmlkZXIpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1w ZXJpcGgtZ2F0ZS5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXBlcmlwaC1nYXRlLmMKaW5kZXgg MGFhODgzMC4uZDU5MjAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXBlcmlw aC1nYXRlLmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXBlcmlwaC1nYXRlLmMKQEAgLTE0 LDcgKzE0LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsu aD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTEyOCwxMiArMTI3LDEyIEBAIGNvbnN0IHN0 cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19wZXJpcGhfZ2F0ZV9vcHMgPSB7CiAJLmRpc2FibGUgPSBj bGtfcGVyaXBoX2Rpc2FibGUsCiB9OwogCi1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJf cGVyaXBoX2dhdGUoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xr X3JlZ2lzdGVyX3BlcmlwaF9nYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLCB1OCBnYXRlX2ZsYWdzLCB2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCQl1bnNp Z25lZCBsb25nIGZsYWdzLCBpbnQgY2xrX251bSwgaW50ICplbmFibGVfcmVmY250KQogewogCXN0 cnVjdCB0ZWdyYV9jbGtfcGVyaXBoX2dhdGUgKmdhdGU7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0 cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3RydWN0 IHRlZ3JhX2Nsa19wZXJpcGhfcmVncyAqcHJlZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L3RlZ3JhL2Nsay1wZXJpcGguYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1wZXJpcGguYwppbmRl eCA5ZTg5OWMxOC4uMzRhNjBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXBl cmlwaC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1wZXJpcGguYwpAQCAtMTQsNyArMTQs NiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2lu Y2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgog I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTEzOCwxMyArMTM3LDEzIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyB0ZWdyYV9jbGtfcGVyaXBoX25vX2dhdGVfb3BzID0gewogCS5zZXRf cmF0ZSA9IGNsa19wZXJpcGhfc2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqX3Rl Z3JhX2Nsa19yZWdpc3Rlcl9wZXJpcGgoY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBzdHJ1Y3Qg Y2xrX2NvcmUgKl90ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoKGNvbnN0IGNoYXIgKm5hbWUsCiAJ CQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCBpbnQgbnVtX3BhcmVudHMsCiAJCQlzdHJ1Y3Qg dGVncmFfY2xrX3BlcmlwaCAqcGVyaXBoLAogCQkJdm9pZCBfX2lvbWVtICpjbGtfYmFzZSwgdTMy IG9mZnNldCwKIAkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3Ry dWN0IHRlZ3JhX2Nsa19wZXJpcGhfcmVncyAqYmFuazsKIAlib29sIGRpdiA9ICEocGVyaXBoLT5n YXRlLmZsYWdzICYgVEVHUkFfUEVSSVBIX05PX0RJVik7CkBAIC0xODYsNyArMTg1LDcgQEAgc3Rh dGljIHN0cnVjdCBjbGsgKl90ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoKGNvbnN0IGNoYXIgKm5h bWUsCiAJcmV0dXJuIGNsazsKIH0KIAotc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX3Bl cmlwaChjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0 ZXJfcGVyaXBoKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMs IGludCBudW1fcGFyZW50cywKIAkJc3RydWN0IHRlZ3JhX2Nsa19wZXJpcGggKnBlcmlwaCwgdm9p ZCBfX2lvbWVtICpjbGtfYmFzZSwKIAkJdTMyIG9mZnNldCwgdW5zaWduZWQgbG9uZyBmbGFncykK QEAgLTE5NSw3ICsxOTQsNyBAQCBzdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBo KGNvbnN0IGNoYXIgKm5hbWUsCiAJCQlwZXJpcGgsIGNsa19iYXNlLCBvZmZzZXQsIGZsYWdzKTsK IH0KIAotc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX3BlcmlwaF9ub2Rpdihjb25zdCBj aGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoX25v ZGl2KGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMsIGludCBu dW1fcGFyZW50cywKIAkJc3RydWN0IHRlZ3JhX2Nsa19wZXJpcGggKnBlcmlwaCwgdm9pZCBfX2lv bWVtICpjbGtfYmFzZSwKIAkJdTMyIG9mZnNldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Rl Z3JhL2Nsay1wbGwtb3V0LmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstcGxsLW91dC5jCmluZGV4 IDM1OTg5ODcuLjNhZGJjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1wbGwt b3V0LmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXBsbC1vdXQuYwpAQCAtMjAsNyArMjAs NiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgog I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgog CiAjaW5jbHVkZSAiY2xrLmgiCiAKQEAgLTg3LDEzICs4NiwxMyBAQCBjb25zdCBzdHJ1Y3QgY2xr X29wcyB0ZWdyYV9jbGtfcGxsX291dF9vcHMgPSB7CiAJLmRpc2FibGUgPSBjbGtfcGxsX291dF9k aXNhYmxlLAogfTsKIAotc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX3BsbF9vdXQoY29u c3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lzdGVyX3BsbF9v dXQoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19p b21lbSAqcmVnLCB1OCBlbmJfYml0X2lkeCwKIAkJdTggcnN0X2JpdF9pZHgsIHVuc2lnbmVkIGxv bmcgZmxhZ3MsIHU4IHBsbF9vdXRfZmxhZ3MsCiAJCXNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3Ry dWN0IHRlZ3JhX2Nsa19wbGxfb3V0ICpwbGxfb3V0OwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1 Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCiAJcGxsX291 dCA9IGt6YWxsb2Moc2l6ZW9mKCpwbGxfb3V0KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2Nsay90ZWdyYS9jbGstcGxsLmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstcGxsLmMK aW5kZXggYzdjNmQ4Zi4uYWExOGVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xr LXBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1wbGwuYwpAQCAtMTksNyArMTksNiBA QAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5j bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNp bmNsdWRlICJjbGsuaCIKIApAQCAtNzI5LDcgKzcyOCw3IEBAIHN0YXRpYyBpbnQgY2xrX3BsbGVf dHJhaW5pbmcoc3RydWN0IHRlZ3JhX2Nsa19wbGwgKnBsbCkKIHN0YXRpYyBpbnQgY2xrX3BsbGVf ZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQogewogCXN0cnVjdCB0ZWdyYV9jbGtfcGxsICpwbGwg PSB0b19jbGtfcGxsKGh3KTsKLQl1bnNpZ25lZCBsb25nIGlucHV0X3JhdGUgPSBjbGtfZ2V0X3Jh dGUoY2xrX2dldF9wYXJlbnQoaHctPmNsaykpOworCXVuc2lnbmVkIGxvbmcgaW5wdXRfcmF0ZSA9 IGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtfcHJvdmlkZXJfZ2V0X3BhcmVudChody0+Y2xrKSk7 CiAJc3RydWN0IHRlZ3JhX2Nsa19wbGxfZnJlcV90YWJsZSBzZWw7CiAJdTMyIHZhbDsKIAlpbnQg ZXJyOwpAQCAtMTAzMyw3ICsxMDMyLDcgQEAgc3RhdGljIGludCBjbGtfcGxsbV9zZXRfcmF0ZShz dHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCiAJc3RhdGUgPSBjbGtfcGxs X2lzX2VuYWJsZWQoaHcpOwogCWlmIChzdGF0ZSkgewotCQlpZiAocmF0ZSAhPSBjbGtfZ2V0X3Jh dGUoaHctPmNsaykpIHsKKwkJaWYgKHJhdGUgIT0gY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGh3LT5j bGspKSB7CiAJCQlwcl9lcnIoIiVzOiBDYW5ub3QgY2hhbmdlIGFjdGl2ZSBQTExNXG4iLCBfX2Z1 bmNfXyk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0xMjg1LDcgKzEyODQs NyBAQCBzdGF0aWMgaW50IGNsa19wbGxlX3RlZ3JhMTE0X2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpo dykKIAl1MzIgdmFsOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0JdW5z aWduZWQgbG9uZyBpbnB1dF9yYXRlID0gY2xrX2dldF9yYXRlKGNsa19nZXRfcGFyZW50KGh3LT5j bGspKTsKKwl1bnNpZ25lZCBsb25nIGlucHV0X3JhdGUgPSBjbGtfcHJvdmlkZXJfZ2V0X3JhdGUo Y2xrX3Byb3ZpZGVyX2dldF9wYXJlbnQoaHctPmNsaykpOwogCiAJaWYgKF9nZXRfdGFibGVfcmF0 ZShodywgJnNlbCwgcGxsLT5wYXJhbXMtPmZpeGVkX3JhdGUsIGlucHV0X3JhdGUpKQogCQlyZXR1 cm4gLUVJTlZBTDsKQEAgLTE0MzAsNyArMTQyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGVncmFfY2xr X3BsbCAqX3RlZ3JhX2luaXRfcGxsKHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsCiAJcmV0dXJuIHBs bDsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgKl90ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsKHN0cnVj dCB0ZWdyYV9jbGtfcGxsICpwbGwsCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpfdGVncmFfY2xr X3JlZ2lzdGVyX3BsbChzdHJ1Y3QgdGVncmFfY2xrX3BsbCAqcGxsLAogCQljb25zdCBjaGFyICpu YW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJY29u c3Qgc3RydWN0IGNsa19vcHMgKm9wcykKIHsKQEAgLTE0NDgsMTMgKzE0NDcsMTMgQEAgc3RhdGlj IHN0cnVjdCBjbGsgKl90ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCB0ZWdyYV9jbGtfcGxs ICpwbGwsCiAJcmV0dXJuIGNsa19yZWdpc3RlcihOVUxMLCAmcGxsLT5odyk7CiB9CiAKLXN0cnVj dCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGwoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh ciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGwo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXZvaWQgX19pb21l bSAqY2xrX2Jhc2UsIHZvaWQgX19pb21lbSAqcG1jLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBz dHJ1Y3QgdGVncmFfY2xrX3BsbF9wYXJhbXMgKnBsbF9wYXJhbXMsCiAJCXNwaW5sb2NrX3QgKmxv Y2spCiB7CiAJc3RydWN0IHRlZ3JhX2Nsa19wbGwgKnBsbDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJ c3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAlwbGxfcGFyYW1zLT5mbGFncyB8PSBURUdSQV9QTExf QllQQVNTOwogCXBsbF9wYXJhbXMtPmZsYWdzIHw9IFRFR1JBX1BMTF9IQVNfTE9DS19FTkFCTEU7 CkBAIC0xNDc5LDEzICsxNDc4LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZGl2X25tcCBwbGxfZV9ubXAg PSB7CiAJLmRpdnBfd2lkdGggPSBQTExFX0JBU0VfRElWUF9XSURUSCwKIH07CiAKLXN0cnVjdCBj bGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg KnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsZShj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJdm9pZCBfX2lvbWVt ICpjbGtfYmFzZSwgdm9pZCBfX2lvbWVtICpwbWMsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0 cnVjdCB0ZWdyYV9jbGtfcGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKIAkJc3BpbmxvY2tfdCAqbG9j aykKIHsKIAlzdHJ1Y3QgdGVncmFfY2xrX3BsbCAqcGxsOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCXBsbF9wYXJhbXMtPmZsYWdzIHw9IFRFR1JBX1BMTF9M T0NLX01JU0MgfCBURUdSQV9QTExfQllQQVNTOwogCXBsbF9wYXJhbXMtPmZsYWdzIHw9IFRFR1JB X1BMTF9IQVNfTE9DS19FTkFCTEU7CkBAIC0xNTUwLDE0ICsxNTQ5LDE0IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyB0ZWdyYV9jbGtfcGxsZV90ZWdyYTExNF9vcHMgPSB7CiB9OwogCiAK LXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGx4Yyhjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICpwYXJlbnRfbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lz dGVyX3BsbHhjKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJ ICB2b2lkIF9faW9tZW0gKmNsa19iYXNlLCB2b2lkIF9faW9tZW0gKnBtYywKIAkJCSAgdW5zaWdu ZWQgbG9uZyBmbGFncywKIAkJCSAgc3RydWN0IHRlZ3JhX2Nsa19wbGxfcGFyYW1zICpwbGxfcGFy YW1zLAogCQkJICBzcGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCB0ZWdyYV9jbGtfcGxsICpw bGw7Ci0Jc3RydWN0IGNsayAqY2xrLCAqcGFyZW50OworCXN0cnVjdCBjbGtfY29yZSAqY2xrLCAq cGFyZW50OwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAJaW50IGVycjsKIAl1MzIgdmFs LCB2YWxfaWRkcTsKQEAgLTE2MDMsNyArMTYwMiw3IEBAIHN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19y ZWdpc3Rlcl9wbGx4Yyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwK IAlyZXR1cm4gY2xrOwogfQogCi1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxscmUo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2Nv cmUgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSwKIAkJCSAgdm9pZCBfX2lvbWVtICpjbGtfYmFzZSwgdm9pZCBfX2lvbWVt ICpwbWMsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkgIHN0cnVjdCB0ZWdyYV9jbGtf cGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKQEAgLTE2MTEsNyArMTYxMCw3IEBAIHN0cnVjdCBjbGsg KnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpw YXJlbnRfbmFtZSwKIHsKIAl1MzIgdmFsOwogCXN0cnVjdCB0ZWdyYV9jbGtfcGxsICpwbGw7Ci0J c3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJcGxsX3BhcmFtcy0+ ZmxhZ3MgfD0gVEVHUkFfUExMX0hBU19MT0NLX0VOQUJMRSB8IFRFR1JBX1BMTF9MT0NLX01JU0M7 CiAKQEAgLTE2NDksMTQgKzE2NDgsMTQgQEAgc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVy X3BsbHJlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCXJldHVy biBjbGs7CiB9CiAKLXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxtKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdy YV9jbGtfcmVnaXN0ZXJfcGxsbShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRf bmFtZSwKIAkJCSAgdm9pZCBfX2lvbWVtICpjbGtfYmFzZSwgdm9pZCBfX2lvbWVtICpwbWMsCiAJ CQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkgIHN0cnVjdCB0ZWdyYV9jbGtfcGxsX3BhcmFt cyAqcGxsX3BhcmFtcywKIAkJCSAgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3QgdGVncmFf Y2xrX3BsbCAqcGxsOwotCXN0cnVjdCBjbGsgKmNsaywgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsaywgKnBhcmVudDsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwogCiAJaWYgKCFw bGxfcGFyYW1zLT5wZGl2X3RvaHcpCkBAIC0xNjg4LDEzICsxNjg3LDEzIEBAIHN0cnVjdCBjbGsg KnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLAogCXJldHVybiBjbGs7CiB9CiAKLXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdp c3Rlcl9wbGxjKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3Ry dWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsYyhjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSAgdm9pZCBfX2lvbWVtICpjbGtfYmFzZSwgdm9p ZCBfX2lvbWVtICpwbWMsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkgIHN0cnVjdCB0 ZWdyYV9jbGtfcGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKIAkJCSAgc3BpbmxvY2tfdCAqbG9jaykK IHsKLQlzdHJ1Y3QgY2xrICpwYXJlbnQsICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpwYXJlbnQs ICpjbGs7CiAJc3RydWN0IHBkaXZfbWFwICpwX3RvaHcgPSBwbGxfcGFyYW1zLT5wZGl2X3RvaHc7 CiAJc3RydWN0IHRlZ3JhX2Nsa19wbGwgKnBsbDsKIAlzdHJ1Y3QgdGVncmFfY2xrX3BsbF9mcmVx X3RhYmxlIGNmZzsKQEAgLTE3NjIsMTQgKzE3NjEsMTQgQEAgc3RydWN0IGNsayAqdGVncmFfY2xr X3JlZ2lzdGVyX3BsbGMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUs CiAJcmV0dXJuIGNsazsKIH0KIAotc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX3BsbGVf dGVncmExMTQoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3Jl Z2lzdGVyX3BsbGVfdGVncmExMTQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQljb25zdCBjaGFyICpw YXJlbnRfbmFtZSwKIAkJCQl2b2lkIF9faW9tZW0gKmNsa19iYXNlLCB1bnNpZ25lZCBsb25nIGZs YWdzLAogCQkJCXN0cnVjdCB0ZWdyYV9jbGtfcGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKIAkJCQlz cGlubG9ja190ICpsb2NrKQogewogCXN0cnVjdCB0ZWdyYV9jbGtfcGxsICpwbGw7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXUzMiB2YWwsIHZhbF9hdXg7CiAK IAlwbGxfcGFyYW1zLT5mbGFncyB8PSBURUdSQV9QTExfSEFTX0xPQ0tfRU5BQkxFOwpAQCAtMTgx MiwxMyArMTgxMSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgdGVncmFfY2xrX3Bs bHNzX29wcyA9IHsKIAkuc2V0X3JhdGUgPSBjbGtfcGxseGNfc2V0X3JhdGUsCiB9OwogCi1zdHJ1 Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsc3MoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9w bGxzcyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCQl2b2lk IF9faW9tZW0gKmNsa19iYXNlLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCXN0cnVjdCB0ZWdy YV9jbGtfcGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKIAkJCQlzcGlubG9ja190ICpsb2NrKQogewog CXN0cnVjdCB0ZWdyYV9jbGtfcGxsICpwbGw7Ci0Jc3RydWN0IGNsayAqY2xrLCAqcGFyZW50Owor CXN0cnVjdCBjbGtfY29yZSAqY2xrLCAqcGFyZW50OwogCXN0cnVjdCB0ZWdyYV9jbGtfcGxsX2Zy ZXFfdGFibGUgY2ZnOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAJdTMyIHZhbDsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1zdXBlci5jIGIvZHJpdmVycy9jbGsvdGVn cmEvY2xrLXN1cGVyLmMKaW5kZXggMmZkOTI0ZC4uMGQxMTM0NiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9jbGsvdGVncmEvY2xrLXN1cGVyLmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXN1cGVy LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Ci0jaW5jbHVkZSA8 bGludXgvY2xrLmg+CiAKICNpbmNsdWRlICJjbGsuaCIKIApAQCAtMTI3LDEzICsxMjYsMTMgQEAg Y29uc3Qgc3RydWN0IGNsa19vcHMgdGVncmFfY2xrX3N1cGVyX29wcyA9IHsKIAkuc2V0X3BhcmVu dCA9IGNsa19zdXBlcl9zZXRfcGFyZW50LAogfTsKIAotc3RydWN0IGNsayAqdGVncmFfY2xrX3Jl Z2lzdGVyX3N1cGVyX211eChjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdy YV9jbGtfcmVnaXN0ZXJfc3VwZXJfbXV4KGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGNoYXIg KipwYXJlbnRfbmFtZXMsIHU4IG51bV9wYXJlbnRzLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2 b2lkIF9faW9tZW0gKnJlZywgdTggY2xrX3N1cGVyX2ZsYWdzLAogCQl1OCB3aWR0aCwgdTggcGxs eF9pbmRleCwgdTggZGl2Ml9pbmRleCwgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3QgdGVn cmFfY2xrX3N1cGVyX211eCAqc3VwZXI7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtf Y29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlzdXBlciA9IGt6YWxs b2Moc2l6ZW9mKCpzdXBlciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv dGVncmEvY2xrLXRlZ3JhLWF1ZGlvLmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtYXVk aW8uYwppbmRleCA1YzM4YWFiLi4wMzhhMjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdy YS9jbGstdGVncmEtYXVkaW8uYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtYXVk aW8uYwpAQCAtMTUsNyArMTUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2lu Y2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgpAQCAtMTI4 LDggKzEyNyw4IEBAIHZvaWQgX19pbml0IHRlZ3JhX2F1ZGlvX2Nsa19pbml0KHZvaWQgX19pb21l bSAqY2xrX2Jhc2UsCiAJCQl2b2lkIF9faW9tZW0gKnBtY19iYXNlLCBzdHJ1Y3QgdGVncmFfY2xr ICp0ZWdyYV9jbGtzLAogCQkJc3RydWN0IHRlZ3JhX2Nsa19wbGxfcGFyYW1zICpwbGxfYV9wYXJh bXMpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBjbGsgKipkdF9jbGs7CisJc3RydWN0 IGNsa19jb3JlICpjbGs7CisJc3RydWN0IGNsa19jb3JlICoqZHRfY2xrOwogCWludCBpOwogCiAJ LyogUExMQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhLWZpeGVk LmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtZml4ZWQuYwppbmRleCBmM2I3NzM4Li41 ZWU0ODZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtZml4ZWQuYwor KysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtZml4ZWQuYwpAQCAtMTUsNyArMTUsNiBA QAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgog I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAj aW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgpAQCAtMzYsOCArMzUsOCBAQCBpbnQgX19pbml0 IHRlZ3JhX29zY19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCQkJCXVuc2lnbmVk IGxvbmcgKm9zY19mcmVxLAogCQkJCXVuc2lnbmVkIGxvbmcgKnBsbF9yZWZfZnJlcSkKIHsKLQlz dHJ1Y3QgY2xrICpjbGs7Ci0Jc3RydWN0IGNsayAqKmR0X2NsazsKKwlzdHJ1Y3QgY2xrX2NvcmUg KmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKipkdF9jbGs7CiAJdTMyIHZhbCwgcGxsX3JlZl9kaXY7 CiAJdW5zaWduZWQgb3NjX2lkeDsKIApAQCAtODEsOCArODAsOCBAQCBpbnQgX19pbml0IHRlZ3Jh X29zY19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCiB2b2lkIF9faW5pdCB0ZWdy YV9maXhlZF9jbGtfaW5pdChzdHJ1Y3QgdGVncmFfY2xrICp0ZWdyYV9jbGtzKQogewotCXN0cnVj dCBjbGsgKmNsazsKLQlzdHJ1Y3QgY2xrICoqZHRfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqKmR0X2NsazsKIAogCS8qIGNsa18zMmsgKi8KIAlkdF9jbGsg PSB0ZWdyYV9sb29rdXBfZHRfaWQodGVncmFfY2xrX2Nsa18zMmssIHRlZ3JhX2Nsa3MpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhLXBlcmlwaC5jIGIvZHJpdmVycy9j bGsvdGVncmEvY2xrLXRlZ3JhLXBlcmlwaC5jCmluZGV4IDM3ZjMyYzQuLjVlMTdhZDQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYS1wZXJpcGguYworKysgYi9kcml2ZXJz L2Nsay90ZWdyYS9jbGstdGVncmEtcGVyaXBoLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogCiAj aW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxs aW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRl IDxsaW51eC9vZi5oPgpAQCAtNTg1LDggKzU4NCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwZXJp cGhfY2xrX2luaXQodm9pZCBfX2lvbWVtICpjbGtfYmFzZSwKIAkJCQlzdHJ1Y3QgdGVncmFfY2xr ICp0ZWdyYV9jbGtzKQogewogCWludCBpOwotCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgY2xr ICoqZHRfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqKmR0 X2NsazsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbGtzKTsgaSsrKSB7 CiAJCXN0cnVjdCB0ZWdyYV9jbGtfcGVyaXBoX3JlZ3MgKmJhbms7CkBAIC02MTUsOCArNjE0LDgg QEAgc3RhdGljIHZvaWQgX19pbml0IGdhdGVfY2xrX2luaXQodm9pZCBfX2lvbWVtICpjbGtfYmFz ZSwKIAkJCQlzdHJ1Y3QgdGVncmFfY2xrICp0ZWdyYV9jbGtzKQogewogCWludCBpOwotCXN0cnVj dCBjbGsgKmNsazsKLQlzdHJ1Y3QgY2xrICoqZHRfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqKmR0X2NsazsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGdhdGVfY2xrcyk7IGkrKykgewogCQlzdHJ1Y3QgdGVncmFfcGVyaXBoX2luaXRfZGF0YSAq ZGF0YTsKQEAgLTY0MCw4ICs2MzksOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wbGxwKHZv aWQgX19pb21lbSAqY2xrX2Jhc2UsIHZvaWQgX19pb21lbSAqcG1jX2Jhc2UsCiAJCQkJc3RydWN0 IHRlZ3JhX2NsayAqdGVncmFfY2xrcywKIAkJCQlzdHJ1Y3QgdGVncmFfY2xrX3BsbF9wYXJhbXMg KnBsbF9wYXJhbXMpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBjbGsgKipkdF9jbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CisJc3RydWN0IGNsa19jb3JlICoqZHRfY2xrOwogCWlu dCBpOwogCiAJZHRfY2xrID0gdGVncmFfbG9va3VwX2R0X2lkKHRlZ3JhX2Nsa19wbGxfcCwgdGVn cmFfY2xrcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtcG1jLmMg Yi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEtcG1jLmMKaW5kZXggMDhiMjFjMS4uZGRkMzlj YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhLXBtYy5jCisrKyBiL2Ry aXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYS1wbWMuYwpAQCAtMTUsNyArMTUsNiBAQAogICovCiAK ICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1 ZGUgPGxpbnV4L29mLmg+CkBAIC04Miw4ICs4MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcG1jX2Nsa19p bml0X2RhdGEgcG1jX2Nsa3NbXSA9IHsKIHZvaWQgX19pbml0IHRlZ3JhX3BtY19jbGtfaW5pdCh2 b2lkIF9faW9tZW0gKnBtY19iYXNlLAogCQkJCXN0cnVjdCB0ZWdyYV9jbGsgKnRlZ3JhX2Nsa3Mp CiB7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBjbGsgKipkdF9jbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGs7CisJc3RydWN0IGNsa19jb3JlICoqZHRfY2xrOwogCWludCBpOwogCiAJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1jX2Nsa3MpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYS1zdXBlci1nZW40LmMgYi9kcml2ZXJzL2Nsay90ZWdy YS9jbGstdGVncmEtc3VwZXItZ2VuNC5jCmluZGV4IGZlYjMyMDEuLjlkMWNkYWEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYS1zdXBlci1nZW40LmMKKysrIGIvZHJpdmVy cy9jbGsvdGVncmEvY2xrLXRlZ3JhLXN1cGVyLWdlbjQuYwpAQCAtMTUsNyArMTUsNiBAQAogICov CiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1 ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPgpAQCAtNTMsOCArNTIsOCBAQCBzdGF0aWMgY29uc3QgY2hh ciAqY2Nsa19scF9wYXJlbnRzW10gPSB7ICJjbGtfbSIsICJwbGxfYyIsICJjbGtfMzJrIiwgInBs bF9tIiwKIHN0YXRpYyB2b2lkIF9faW5pdCB0ZWdyYV9zY2xrX2luaXQodm9pZCBfX2lvbWVtICpj bGtfYmFzZSwKIAkJCQlzdHJ1Y3QgdGVncmFfY2xrICp0ZWdyYV9jbGtzKQogewotCXN0cnVjdCBj bGsgKmNsazsKLQlzdHJ1Y3QgY2xrICoqZHRfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwor CXN0cnVjdCBjbGtfY29yZSAqKmR0X2NsazsKIAogCS8qIFNDTEsgKi8KIAlkdF9jbGsgPSB0ZWdy YV9sb29rdXBfZHRfaWQodGVncmFfY2xrX3NjbGssIHRlZ3JhX2Nsa3MpOwpAQCAtOTksOCArOTgs OCBAQCB2b2lkIF9faW5pdCB0ZWdyYV9zdXBlcl9jbGtfZ2VuNF9pbml0KHZvaWQgX19pb21lbSAq Y2xrX2Jhc2UsCiAJCQkJc3RydWN0IHRlZ3JhX2NsayAqdGVncmFfY2xrcywKIAkJCQlzdHJ1Y3Qg dGVncmFfY2xrX3BsbF9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0Jc3Ry dWN0IGNsayAqKmR0X2NsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKipkdF9jbGs7CiAKIAkvKiBDQ0xLRyAqLwogCWR0X2NsayA9IHRlZ3JhX2xvb2t1cF9kdF9p ZCh0ZWdyYV9jbGtfY2Nsa19nLCB0ZWdyYV9jbGtzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L3RlZ3JhL2Nsay10ZWdyYTExNC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMK aW5kZXggZjc2MGYzMS4uMDBhMjg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xr LXRlZ3JhMTE0LmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMKQEAgLTE1 LDcgKzE1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51 eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtOTM2LDE0ICs5MzUsMTQgQEAg c3RhdGljIHUzMiBtdXhfcGxsbV9wbGxjMl9jX2MzX3BsbHBfcGxsYV9pZHhbXSA9IHsKIAlbMF0g PSAwLCBbMV0gPSAxLCBbMl0gPSAyLCBbM10gPSAzLCBbNF0gPSA0LCBbNV0gPSA2LAogfTsKIAot c3RhdGljIHN0cnVjdCBjbGsgKipjbGtzOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqKmNsa3M7 CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9zY19mcmVxOwogc3RhdGljIHVuc2lnbmVkIGxvbmcg cGxsX3JlZl9mcmVxOwogCiBzdGF0aWMgaW50IF9faW5pdCB0ZWdyYTExNF9vc2NfY2xrX2luaXQo dm9pZCBfX2lvbWVtICpjbGtfYmFzZSkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGs7CiAJdTMyIHZhbCwgcGxsX3JlZl9kaXY7CiAKIAl2YWwgPSByZWFkbF9yZWxh eGVkKGNsa19iYXNlICsgT1NDX0NUUkwpOwpAQCAtOTczLDcgKzk3Miw3IEBAIHN0YXRpYyBpbnQg X19pbml0IHRlZ3JhMTE0X29zY19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNlKQogCiBz dGF0aWMgdm9pZCBfX2luaXQgdGVncmExMTRfZml4ZWRfY2xrX2luaXQodm9pZCBfX2lvbWVtICpj bGtfYmFzZSkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAK IAkvKiBjbGtfMzJrICovCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgImNs a18zMmsiLCBOVUxMLCBDTEtfSVNfUk9PVCwKQEAgLTEwNzgsNyArMTA3Nyw3IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCB0ZWdyYTExNF9wbGxfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCQkJ CSAgICAgdm9pZCBfX2lvbWVtICpwbWMpCiB7CiAJdTMyIHZhbDsKLQlzdHJ1Y3QgY2xrICpjbGs7 CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAKIAkvKiBQTExDICovCiAJY2xrID0gdGVncmFfY2xr X3JlZ2lzdGVyX3BsbHhjKCJwbGxfYyIsICJwbGxfcmVmIiwgY2xrX2Jhc2UsCkBAIC0xMjAwLDcg KzExOTksNyBAQCBzdGF0aWMgc3RydWN0IHRlZ3JhX3BlcmlwaF9pbml0X2RhdGEgdGVncmFfcGVy aXBoX2Nsa19saXN0W10gPSB7CiBzdGF0aWMgX19pbml0IHZvaWQgdGVncmExMTRfcGVyaXBoX2Ns a19pbml0KHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsCiAJCQkJCSAgICB2b2lkIF9faW9tZW0gKnBt Y19iYXNlKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlz dHJ1Y3QgdGVncmFfcGVyaXBoX2luaXRfZGF0YSAqZGF0YTsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTI0LmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9j bGstdGVncmExMjQuYwppbmRleCA5NTI1YzY4Li5iZjQ4MWM4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2Nsay90ZWdyYS9jbGstdGVncmExMjQuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVn cmExMjQuYwpAQCAtMTUsNyArMTUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgot I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgog I2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC0xMDE3 LDcgKzEwMTYsNyBAQCBzdGF0aWMgc3RydWN0IHRlZ3JhX2RldmNsayBkZXZjbGtzW10gX19pbml0 ZGF0YSA9IHsKIAl7IC5kZXZfaWQgPSAidGltZXIiLCAuZHRfaWQgPSBURUdSQTEyNF9DTEtfVElN RVIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICoqY2xrczsKK3N0YXRpYyBzdHJ1Y3QgY2xr X2NvcmUgKipjbGtzOwogCiBzdGF0aWMgdm9pZCB0ZWdyYTEyNF91dG1pX3BhcmFtX2NvbmZpZ3Vy ZSh2b2lkIF9faW9tZW0gKmNsa19iYXNlKQogewpAQCAtMTEwNCw3ICsxMTAzLDcgQEAgc3RhdGlj IHZvaWQgdGVncmExMjRfdXRtaV9wYXJhbV9jb25maWd1cmUodm9pZCBfX2lvbWVtICpjbGtfYmFz ZSkKIHN0YXRpYyBfX2luaXQgdm9pZCB0ZWdyYTEyNF9wZXJpcGhfY2xrX2luaXQodm9pZCBfX2lv bWVtICpjbGtfYmFzZSwKIAkJCQkJICAgIHZvaWQgX19pb21lbSAqcG1jX2Jhc2UpCiB7Ci0Jc3Ry dWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJLyogeHVzYl9zc19kaXYy ICovCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihOVUxMLCAieHVzYl9zc19kaXYy IiwgInh1c2Jfc3Nfc3JjIiwgMCwKQEAgLTExNDgsNyArMTE0Nyw3IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCB0ZWdyYTEyNF9wbGxfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCQkJCSAgICAg dm9pZCBfX2lvbWVtICpwbWMpCiB7CiAJdTMyIHZhbDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAKIAkvKiBQTExDICovCiAJY2xrID0gdGVncmFfY2xrX3JlZ2lz dGVyX3BsbHhjKCJwbGxfYyIsICJwbGxfcmVmIiwgY2xrX2Jhc2UsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3Jh MjAuYwppbmRleCBkYWNlMmIxLi42ZTdkNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdy YS9jbGstdGVncmEyMC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIwLmMKQEAg LTE1LDcgKzE1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxs aW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxs aW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtMTYyLDcgKzE2MSw3IEBA IHN0YXRpYyB2b2lkIF9faW9tZW0gKnBtY19iYXNlOwogCQkJX2Nsa19udW0sIF9nYXRlX2ZsYWdz LAlcCiAJCQlfY2xrX2lkKQogCi1zdGF0aWMgc3RydWN0IGNsayAqKmNsa3M7CitzdGF0aWMgc3Ry dWN0IGNsa19jb3JlICoqY2xrczsKIAogc3RhdGljIHN0cnVjdCB0ZWdyYV9jbGtfcGxsX2ZyZXFf dGFibGUgcGxsX2NfZnJlcV90YWJsZVtdID0gewogCXsgMTIwMDAwMDAsIDYwMDAwMDAwMCwgNjAw LCAxMiwgMCwgOCB9LApAQCAtNjMzLDcgKzYzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGVn cmEyMF9nZXRfcGxsX3JlZl9kaXYodm9pZCkKIAogc3RhdGljIHZvaWQgdGVncmEyMF9wbGxfaW5p dCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAog CS8qIFBMTEMgKi8KIAljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsKCJwbGxfYyIsICJwbGxf cmVmIiwgY2xrX2Jhc2UsIE5VTEwsIDAsCkBAIC03MTMsNyArNzEyLDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKnNjbGtfcGFyZW50c1tdID0geyAiY2xrX20iLCAicGxsX2Nfb3V0MSIsICJwbGxfcF9v dXQ0IiwKIAogc3RhdGljIHZvaWQgdGVncmEyMF9zdXBlcl9jbGtfaW5pdCh2b2lkKQogewotCXN0 cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCS8qIENDTEsgKi8KIAlj bGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfc3VwZXJfbXV4KCJjY2xrIiwgY2Nsa19wYXJlbnRzLApA QCAtNzM4LDcgKzczNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICphdWRpb19wYXJlbnRzW10gPSB7 InNwZGlmX2luIiwgImkyczEiLCAiaTJzMiIsICJ1bnVzZWQiLAogCiBzdGF0aWMgdm9pZCBfX2lu aXQgdGVncmEyMF9hdWRpb19jbGtfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCS8qIGF1ZGlvICovCiAJY2xrID0gY2xrX3JlZ2lzdGVy X211eChOVUxMLCAiYXVkaW9fbXV4IiwgYXVkaW9fcGFyZW50cywKQEAgLTgwMCw3ICs3OTksNyBA QCBzdGF0aWMgc3RydWN0IHRlZ3JhX3BlcmlwaF9pbml0X2RhdGEgdGVncmFfcGVyaXBoX25vZGl2 X2Nsa19saXN0W10gPSB7CiBzdGF0aWMgdm9pZCBfX2luaXQgdGVncmEyMF9wZXJpcGhfY2xrX2lu aXQodm9pZCkKIHsKIAlzdHJ1Y3QgdGVncmFfcGVyaXBoX2luaXRfZGF0YSAqZGF0YTsKLQlzdHJ1 Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJaW50IGk7CiAKIAkvKiBhYzk3 ICovCkBAIC04NzEsNyArODcwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHRlZ3JhMjBfcGVyaXBo X2Nsa19pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0ZWdyYTIwX29zY19jbGtfaW5p dCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAl1 bnNpZ25lZCBsb25nIGlucHV0X2ZyZXE7CiAJdW5zaWduZWQgaW50IHBsbF9yZWZfZGl2OwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jIGIvZHJpdmVycy9jbGsv dGVncmEvY2xrLXRlZ3JhMzAuYwppbmRleCA1YmJhY2QwLi4xZTlmNzMzIDEwMDY0NAotLS0gYS9k cml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Ns ay10ZWdyYTMwLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRl IDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNs dWRlIDxsaW51eC9vZi5oPgpAQCAtMjA1LDcgKzIwNCw3IEBAIHN0YXRpYyBERUZJTkVfU1BJTkxP Q0socGxsX2RfbG9jayk7CiAJCQlfY2xrX251bSwgX2dhdGVfZmxhZ3MsCVwKIAkJCV9jbGtfaWQp CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICoqY2xrczsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKipj bGtzOwogCiAvKgogICogU3RydWN0dXJlIGRlZmluaW5nIHRoZSBmaWVsZHMgZm9yIFVTQiBVVE1J IGNsb2NrcyBQYXJhbWV0ZXJzLgpAQCAtOTIxLDcgKzkyMCw3IEBAIHN0YXRpYyBjb25zdCBjaGFy ICpwbGxfZV9wYXJlbnRzW10gPSB7InBsbF9yZWYiLCAicGxsX3AifTsKIAogc3RhdGljIHZvaWQg X19pbml0IHRlZ3JhMzBfcGxsX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAKIAkvKiBQTExDICovCiAJY2xrID0gdGVncmFfY2xrX3JlZ2lz dGVyX3BsbCgicGxsX2MiLCAicGxsX3JlZiIsIGNsa19iYXNlLCBwbWNfYmFzZSwgMCwKQEAgLTEw MTIsNyArMTAxMSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpzY2xrX3BhcmVudHNbXSA9IHsgImNs a19tIiwgInBsbF9jX291dDEiLCAicGxsX3Bfb3V0NCIsCiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0 ZWdyYTMwX3N1cGVyX2Nsa19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVj dCBjbGtfY29yZSAqY2xrOwogCiAJLyoKIAkgKiBDbG9jayBpbnB1dCB0byBjY2xrX2cgZGl2aWRl ZCBmcm9tIHBsbF9wIHVzaW5nCkBAIC0xMTM0LDcgKzExMzMsNyBAQCBzdGF0aWMgc3RydWN0IHRl Z3JhX3BlcmlwaF9pbml0X2RhdGEgdGVncmFfcGVyaXBoX25vZGl2X2Nsa19saXN0W10gPSB7CiBz dGF0aWMgdm9pZCBfX2luaXQgdGVncmEzMF9wZXJpcGhfY2xrX2luaXQodm9pZCkKIHsKIAlzdHJ1 Y3QgdGVncmFfcGVyaXBoX2luaXRfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAJaW50IGk7CiAKIAkvKiBkc2lhICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2Nsay90ZWdyYS9jbGsuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5jCmluZGV4IGY4 N2M2MDkuLmQ1OTYzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5jCisrKyBi L2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXBy b3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsvdGVn cmEuaD4KQEAgLTY5LDcgKzY4LDcgQEAgc3RydWN0IHRlZ3JhX2NwdV9jYXJfb3BzICp0ZWdyYV9j cHVfY2FyX29wcyA9ICZkdW1teV9jYXJfb3BzOwogCiBpbnQgKnBlcmlwaF9jbGtfZW5iX3JlZmNu dDsKIHN0YXRpYyBpbnQgcGVyaXBoX2JhbmtzOwotc3RhdGljIHN0cnVjdCBjbGsgKipjbGtzOwor c3RhdGljIHN0cnVjdCBjbGtfY29yZSAqKmNsa3M7CiBzdGF0aWMgaW50IGNsa19udW07CiBzdGF0 aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7CiAKQEAgLTE2NSw3ICsxNjQsNyBA QCBzdHJ1Y3QgdGVncmFfY2xrX3BlcmlwaF9yZWdzICpnZXRfcmVnX2JhbmsoaW50IGNsa2lkKQog CX0KIH0KIAotc3RydWN0IGNsayAqKiBfX2luaXQgdGVncmFfY2xrX2luaXQodm9pZCBfX2lvbWVt ICpyZWdzLCBpbnQgbnVtLCBpbnQgYmFua3MpCitzdHJ1Y3QgY2xrX2NvcmUgKiogX19pbml0IHRl Z3JhX2Nsa19pbml0KHZvaWQgX19pb21lbSAqcmVncywgaW50IG51bSwgaW50IGJhbmtzKQogewog CWNsa19iYXNlID0gcmVnczsKIApAQCAtMTc5LDcgKzE3OCw3IEBAIHN0cnVjdCBjbGsgKiogX19p bml0IHRlZ3JhX2Nsa19pbml0KHZvaWQgX19pb21lbSAqcmVncywgaW50IG51bSwgaW50IGJhbmtz KQogCiAJcGVyaXBoX2JhbmtzID0gYmFua3M7CiAKLQljbGtzID0ga3phbGxvYyhudW0gKiBzaXpl b2Yoc3RydWN0IGNsayAqKSwgR0ZQX0tFUk5FTCk7CisJY2xrcyA9IGt6YWxsb2MobnVtICogc2l6 ZW9mKHN0cnVjdCBjbGtfY29yZSAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtzKQogCQlrZnJl ZShwZXJpcGhfY2xrX2VuYl9yZWZjbnQpOwogCkBAIC0xODksOSArMTg4LDkgQEAgc3RydWN0IGNs ayAqKiBfX2luaXQgdGVncmFfY2xrX2luaXQodm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgbnVtLCBp bnQgYmFua3MpCiB9CiAKIHZvaWQgX19pbml0IHRlZ3JhX2luaXRfZHVwX2Nsa3Moc3RydWN0IHRl Z3JhX2Nsa19kdXBsaWNhdGUgKmR1cF9saXN0LAotCQkJCXN0cnVjdCBjbGsgKmNsa3NbXSwgaW50 IGNsa19tYXgpCisJCQkJc3RydWN0IGNsa19jb3JlICpjbGtzW10sIGludCBjbGtfbWF4KQogewot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWZvciAoOyBkdXBf bGlzdC0+Y2xrX2lkIDwgY2xrX21heDsgZHVwX2xpc3QrKykgewogCQljbGsgPSBjbGtzW2R1cF9s aXN0LT5jbGtfaWRdOwpAQCAtMjAxLDkgKzIwMCw5IEBAIHZvaWQgX19pbml0IHRlZ3JhX2luaXRf ZHVwX2Nsa3Moc3RydWN0IHRlZ3JhX2Nsa19kdXBsaWNhdGUgKmR1cF9saXN0LAogfQogCiB2b2lk IF9faW5pdCB0ZWdyYV9pbml0X2Zyb21fdGFibGUoc3RydWN0IHRlZ3JhX2Nsa19pbml0X3RhYmxl ICp0YmwsCi0JCQkJICBzdHJ1Y3QgY2xrICpjbGtzW10sIGludCBjbGtfbWF4KQorCQkJCSAgc3Ry dWN0IGNsa19jb3JlICpjbGtzW10sIGludCBjbGtfbWF4KQogewotCXN0cnVjdCBjbGsgKmNsazsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWZvciAoOyB0YmwtPmNsa19pZCA8IGNsa19tYXg7 IHRibCsrKSB7CiAJCWNsayA9IGNsa3NbdGJsLT5jbGtfaWRdOwpAQCAtMjExLDggKzIxMCw4IEBA IHZvaWQgX19pbml0IHRlZ3JhX2luaXRfZnJvbV90YWJsZShzdHJ1Y3QgdGVncmFfY2xrX2luaXRf dGFibGUgKnRibCwKIAkJCXJldHVybjsKIAogCQlpZiAodGJsLT5wYXJlbnRfaWQgPCBjbGtfbWF4 KSB7Ci0JCQlzdHJ1Y3QgY2xrICpwYXJlbnQgPSBjbGtzW3RibC0+cGFyZW50X2lkXTsKLQkJCWlm IChjbGtfc2V0X3BhcmVudChjbGssIHBhcmVudCkpIHsKKwkJCXN0cnVjdCBjbGtfY29yZSAqcGFy ZW50ID0gY2xrc1t0YmwtPnBhcmVudF9pZF07CisJCQlpZiAoY2xrX3Byb3ZpZGVyX3NldF9wYXJl bnQoY2xrLCBwYXJlbnQpKSB7CiAJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCBwYXJlbnQg JXMgb2YgJXNcbiIsCiAJCQkJICAgICAgIF9fZnVuY19fLCBfX2Nsa19nZXRfbmFtZShwYXJlbnQp LAogCQkJCSAgICAgICBfX2Nsa19nZXRfbmFtZShjbGspKTsKQEAgLTIyMSw3ICsyMjAsNyBAQCB2 b2lkIF9faW5pdCB0ZWdyYV9pbml0X2Zyb21fdGFibGUoc3RydWN0IHRlZ3JhX2Nsa19pbml0X3Rh YmxlICp0YmwsCiAJCX0KIAogCQlpZiAodGJsLT5yYXRlKQotCQkJaWYgKGNsa19zZXRfcmF0ZShj bGssIHRibC0+cmF0ZSkpIHsKKwkJCWlmIChjbGtfcHJvdmlkZXJfc2V0X3JhdGUoY2xrLCB0Ymwt PnJhdGUpKSB7CiAJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCByYXRlICVsdSBvZiAlc1xu IiwKIAkJCQkgICAgICAgX19mdW5jX18sIHRibC0+cmF0ZSwKIAkJCQkgICAgICAgX19jbGtfZ2V0 X25hbWUoY2xrKSk7CkBAIC0yMjksNyArMjI4LDcgQEAgdm9pZCBfX2luaXQgdGVncmFfaW5pdF9m cm9tX3RhYmxlKHN0cnVjdCB0ZWdyYV9jbGtfaW5pdF90YWJsZSAqdGJsLAogCQkJfQogCiAJCWlm ICh0YmwtPnN0YXRlKQotCQkJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShjbGspKSB7CisJCQlpZiAo Y2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsaykpIHsKIAkJCQlwcl9lcnIoIiVzOiBGYWls ZWQgdG8gZW5hYmxlICVzXG4iLCBfX2Z1bmNfXywKIAkJCQkgICAgICAgX19jbGtfZ2V0X25hbWUo Y2xrKSk7CiAJCQkJV0FSTl9PTigxKTsKQEAgLTI4Niw3ICsyODUsNyBAQCB2b2lkIF9faW5pdCB0 ZWdyYV9yZWdpc3Rlcl9kZXZjbGtzKHN0cnVjdCB0ZWdyYV9kZXZjbGsgKmRldl9jbGtzLCBpbnQg bnVtKQogCX0KIH0KIAotc3RydWN0IGNsayAqKiBfX2luaXQgdGVncmFfbG9va3VwX2R0X2lkKGlu dCBjbGtfaWQsCitzdHJ1Y3QgY2xrX2NvcmUgKiogX19pbml0IHRlZ3JhX2xvb2t1cF9kdF9pZChp bnQgY2xrX2lkLAogCQkJCQlzdHJ1Y3QgdGVncmFfY2xrICp0ZWdyYV9jbGspCiB7CiAJaWYgKHRl Z3JhX2Nsa1tjbGtfaWRdLnByZXNlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9j bGsuaCBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oCmluZGV4IDE2ZWM4ZDYuLjMwOTNhYTQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3Jh L2Nsay5oCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCB0ZWdyYV9jbGtfc3luY19zb3VyY2Ugewog ZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19zeW5jX3NvdXJjZV9vcHM7CiBl eHRlcm4gaW50ICpwZXJpcGhfY2xrX2VuYl9yZWZjbnQ7CiAKLXN0cnVjdCBjbGsgKnRlZ3JhX2Ns a19yZWdpc3Rlcl9zeW5jX3NvdXJjZShjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3Jl ICp0ZWdyYV9jbGtfcmVnaXN0ZXJfc3luY19zb3VyY2UoY29uc3QgY2hhciAqbmFtZSwKIAkJdW5z aWduZWQgbG9uZyBmaXhlZF9yYXRlLCB1bnNpZ25lZCBsb25nIG1heF9yYXRlKTsKIAogLyoqCkBA IC04Miw3ICs4Miw3IEBAIHN0cnVjdCB0ZWdyYV9jbGtfZnJhY19kaXYgewogI2RlZmluZSBURUdS QV9ESVZJREVSX1VBUlQgQklUKDMpCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrX29wcyB0ZWdy YV9jbGtfZnJhY19kaXZfb3BzOwotc3RydWN0IGNsayAqdGVncmFfY2xrX3JlZ2lzdGVyX2Rpdmlk ZXIoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lzdGVy X2RpdmlkZXIoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZv aWQgX19pb21lbSAqcmVnLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1OCBjbGtfZGl2aWRlcl9m bGFncywgdTggc2hpZnQsIHU4IHdpZHRoLAogCQl1OCBmcmFjX3dpZHRoLCBzcGlubG9ja190ICps b2NrKTsKQEAgLTI1OCw0NyArMjU4LDQ3IEBAIHN0cnVjdCB0ZWdyYV9jbGtfcGxsIHsKIAogZXh0 ZXJuIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19wbGxfb3BzOwogZXh0ZXJuIGNvbnN0 IHN0cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19wbGxlX29wczsKLXN0cnVjdCBjbGsgKnRlZ3JhX2Ns a19yZWdpc3Rlcl9wbGwoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUs CitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGwoY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIHZv aWQgX19pb21lbSAqcG1jLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgdGVncmFfY2xr X3BsbF9wYXJhbXMgKnBsbF9wYXJhbXMsCiAJCXNwaW5sb2NrX3QgKmxvY2spOwogCi1zdHJ1Y3Qg Y2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lzdGVyX3BsbGUo Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCXZvaWQgX19pb21l bSAqY2xrX2Jhc2UsIHZvaWQgX19pb21lbSAqcG1jLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBz dHJ1Y3QgdGVncmFfY2xrX3BsbF9wYXJhbXMgKnBsbF9wYXJhbXMsCiAJCXNwaW5sb2NrX3QgKmxv Y2spOwogCi1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxseGMoY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Ns a19yZWdpc3Rlcl9wbGx4Yyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFt ZSwKIAkJCSAgICB2b2lkIF9faW9tZW0gKmNsa19iYXNlLCB2b2lkIF9faW9tZW0gKnBtYywKIAkJ CSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJICAgIHN0cnVjdCB0ZWdyYV9jbGtfcGxsX3Bh cmFtcyAqcGxsX3BhcmFtcywKIAkJCSAgICBzcGlubG9ja190ICpsb2NrKTsKIAotc3RydWN0IGNs ayAqdGVncmFfY2xrX3JlZ2lzdGVyX3BsbG0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq cGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wbGxtKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJICAgdm9pZCBfX2lv bWVtICpjbGtfYmFzZSwgdm9pZCBfX2lvbWVtICpwbWMsCiAJCQkgICB1bnNpZ25lZCBsb25nIGZs YWdzLAogCQkJICAgc3RydWN0IHRlZ3JhX2Nsa19wbGxfcGFyYW1zICpwbGxfcGFyYW1zLAogCQkJ ICAgc3BpbmxvY2tfdCAqbG9jayk7CiAKLXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9w bGxjKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorc3RydWN0IGNs a19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj aGFyICpwYXJlbnRfbmFtZSwKIAkJCSAgIHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIHZvaWQgX19p b21lbSAqcG1jLAogCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCSAgIHN0cnVjdCB0ZWdy YV9jbGtfcGxsX3BhcmFtcyAqcGxsX3BhcmFtcywKIAkJCSAgIHNwaW5sb2NrX3QgKmxvY2spOwog Ci1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxscmUoY29uc3QgY2hhciAqbmFtZSwg Y29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Nsa19yZWdp c3Rlcl9wbGxyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJ CSAgIHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIHZvaWQgX19pb21lbSAqcG1jLAogCQkJICAgdW5z aWduZWQgbG9uZyBmbGFncywKIAkJCSAgIHN0cnVjdCB0ZWdyYV9jbGtfcGxsX3BhcmFtcyAqcGxs X3BhcmFtcywKIAkJCSAgIHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgcGFyZW50X3Jh dGUpOwogCi1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsZV90ZWdyYTExNChjb25z dCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsZV90 ZWdyYTExNChjb25zdCBjaGFyICpuYW1lLAogCQkJCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAog CQkJCXZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJc3Ry dWN0IHRlZ3JhX2Nsa19wbGxfcGFyYW1zICpwbGxfcGFyYW1zLAogCQkJCXNwaW5sb2NrX3QgKmxv Y2spOwogCi1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxsc3MoY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3JhX2Ns a19yZWdpc3Rlcl9wbGxzcyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFt ZSwKIAkJCSAgIHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJ CQkgICBzdHJ1Y3QgdGVncmFfY2xrX3BsbF9wYXJhbXMgKnBsbF9wYXJhbXMsCiAJCQkgICBzcGlu bG9ja190ICpsb2NrKTsKQEAgLTMyNSw3ICszMjUsNyBAQCBzdHJ1Y3QgdGVncmFfY2xrX3BsbF9v dXQgewogI2RlZmluZSB0b19jbGtfcGxsX291dChfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVj dCB0ZWdyYV9jbGtfcGxsX291dCwgaHcpCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrX29wcyB0 ZWdyYV9jbGtfcGxsX291dF9vcHM7Ci1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfcGxs X291dChjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0ZWdyYV9jbGtfcmVnaXN0 ZXJfcGxsX291dChjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwg dm9pZCBfX2lvbWVtICpyZWcsIHU4IGVuYl9iaXRfaWR4LAogCQl1OCByc3RfYml0X2lkeCwgdW5z aWduZWQgbG9uZyBmbGFncywgdTggcGxsX2Rpdl9mbGFncywKIAkJc3BpbmxvY2tfdCAqbG9jayk7 CkBAIC0zOTQsNyArMzk0LDcgQEAgc3RydWN0IHRlZ3JhX2Nsa19wZXJpcGhfZ2F0ZSB7CiAjZGVm aW5lIFRFR1JBX1BFUklQSF9OT19HQVRFIEJJVCg1KQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNs a19vcHMgdGVncmFfY2xrX3BlcmlwaF9nYXRlX29wczsKLXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19y ZWdpc3Rlcl9wZXJpcGhfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICp0 ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoX2dhdGUoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsIHU4IGdhdGVfZmxhZ3MsIHZvaWQgX19pb21lbSAqY2xrX2Jhc2Us CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBjbGtfbnVtLCBpbnQgKmVuYWJsZV9yZWZjbnQp OwogCkBAIC00MjcsMTEgKzQyNywxMSBAQCBzdHJ1Y3QgdGVncmFfY2xrX3BlcmlwaCB7CiAjZGVm aW5lIFRFR1JBX0NMS19QRVJJUEhfTUFHSUMgMHgxODIyMTIyMwogCiBleHRlcm4gY29uc3Qgc3Ry dWN0IGNsa19vcHMgdGVncmFfY2xrX3BlcmlwaF9vcHM7Ci1zdHJ1Y3QgY2xrICp0ZWdyYV9jbGtf cmVnaXN0ZXJfcGVyaXBoKGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKnRlZ3Jh X2Nsa19yZWdpc3Rlcl9wZXJpcGgoY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqKnBh cmVudF9uYW1lcywgaW50IG51bV9wYXJlbnRzLAogCQlzdHJ1Y3QgdGVncmFfY2xrX3BlcmlwaCAq cGVyaXBoLCB2b2lkIF9faW9tZW0gKmNsa19iYXNlLAogCQl1MzIgb2Zmc2V0LCB1bnNpZ25lZCBs b25nIGZsYWdzKTsKLXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9wZXJpcGhfbm9kaXYo Y29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lzdGVyX3Bl cmlwaF9ub2Rpdihjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICoqcGFyZW50X25hbWVz LCBpbnQgbnVtX3BhcmVudHMsCiAJCXN0cnVjdCB0ZWdyYV9jbGtfcGVyaXBoICpwZXJpcGgsIHZv aWQgX19pb21lbSAqY2xrX2Jhc2UsCiAJCXUzMiBvZmZzZXQpOwpAQCAtNTQwLDcgKzU0MCw3IEBA IHN0cnVjdCB0ZWdyYV9jbGtfc3VwZXJfbXV4IHsKICNkZWZpbmUgVEVHUkFfRElWSURFUl8yIEJJ VCgwKQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa19vcHMgdGVncmFfY2xrX3N1cGVyX29wczsK LXN0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9zdXBlcl9tdXgoY29uc3QgY2hhciAqbmFt ZSwKK3N0cnVjdCBjbGtfY29yZSAqdGVncmFfY2xrX3JlZ2lzdGVyX3N1cGVyX211eChjb25zdCBj aGFyICpuYW1lLAogCQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCB1OCBudW1fcGFyZW50cywK IAkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCBfX2lvbWVtICpyZWcsIHU4IGNsa19zdXBlcl9m bGFncywKIAkJdTggd2lkdGgsIHU4IHBsbHhfaW5kZXgsIHU4IGRpdjJfaW5kZXgsIHNwaW5sb2Nr X3QgKmxvY2spOwpAQCAtNTkwLDE1ICs1OTAsMTUgQEAgc3RydWN0IHRlZ3JhX2RldmNsayB7CiB9 OwogCiB2b2lkIHRlZ3JhX2luaXRfZnJvbV90YWJsZShzdHJ1Y3QgdGVncmFfY2xrX2luaXRfdGFi bGUgKnRibCwKLQkJc3RydWN0IGNsayAqY2xrc1tdLCBpbnQgY2xrX21heCk7CisJCXN0cnVjdCBj bGtfY29yZSAqY2xrc1tdLCBpbnQgY2xrX21heCk7CiAKIHZvaWQgdGVncmFfaW5pdF9kdXBfY2xr cyhzdHJ1Y3QgdGVncmFfY2xrX2R1cGxpY2F0ZSAqZHVwX2xpc3QsCi0JCXN0cnVjdCBjbGsgKmNs a3NbXSwgaW50IGNsa19tYXgpOworCQlzdHJ1Y3QgY2xrX2NvcmUgKmNsa3NbXSwgaW50IGNsa19t YXgpOwogCiBzdHJ1Y3QgdGVncmFfY2xrX3BlcmlwaF9yZWdzICpnZXRfcmVnX2JhbmsoaW50IGNs a2lkKTsKLXN0cnVjdCBjbGsgKip0ZWdyYV9jbGtfaW5pdCh2b2lkIF9faW9tZW0gKmNsa19iYXNl LCBpbnQgbnVtLCBpbnQgcGVyaXBoX2JhbmtzKTsKK3N0cnVjdCBjbGtfY29yZSAqKnRlZ3JhX2Ns a19pbml0KHZvaWQgX19pb21lbSAqY2xrX2Jhc2UsIGludCBudW0sIGludCBwZXJpcGhfYmFua3Mp OwogCi1zdHJ1Y3QgY2xrICoqdGVncmFfbG9va3VwX2R0X2lkKGludCBjbGtfaWQsIHN0cnVjdCB0 ZWdyYV9jbGsgKnRlZ3JhX2Nsayk7CitzdHJ1Y3QgY2xrX2NvcmUgKip0ZWdyYV9sb29rdXBfZHRf aWQoaW50IGNsa19pZCwgc3RydWN0IHRlZ3JhX2NsayAqdGVncmFfY2xrKTsKIAogdm9pZCB0ZWdy YV9hZGRfb2ZfcHJvdmlkZXIoc3RydWN0IGRldmljZV9ub2RlICpucCk7CiB2b2lkIHRlZ3JhX3Jl Z2lzdGVyX2RldmNsa3Moc3RydWN0IHRlZ3JhX2RldmNsayAqZGV2X2Nsa3MsIGludCBudW0pOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvYXBsbC5jIGIvZHJpdmVycy9jbGsvdGkvYXBsbC5j CmluZGV4IDcyZDk3MjcuLmExNjJjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RpL2FwbGwu YworKysgYi9kcml2ZXJzL2Nsay90aS9hcGxsLmMKQEAgLTEzNSwxMCArMTM1LDEwIEBAIHN0YXRp YyB2b2lkIF9faW5pdCBvbWFwX2Nsa19yZWdpc3Rlcl9hcGxsKHN0cnVjdCBjbGtfaHcgKmh3LAog ewogCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrX2h3ID0gdG9fY2xrX2h3X29tYXAoaHcpOwogCXN0 cnVjdCBkcGxsX2RhdGEgKmFkID0gY2xrX2h3LT5kcGxsX2RhdGE7Ci0Jc3RydWN0IGNsayAqY2xr OworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCi0JYWQtPmNsa19yZWYgPSBvZl9jbGtfZ2V0KG5v ZGUsIDApOwotCWFkLT5jbGtfYnlwYXNzID0gb2ZfY2xrX2dldChub2RlLCAxKTsKKwlhZC0+Y2xr X3JlZiA9IG9mX2Nsa19wcm92aWRlcl9nZXQobm9kZSwgMCk7CisJYWQtPmNsa19ieXBhc3MgPSBv Zl9jbGtfcHJvdmlkZXJfZ2V0KG5vZGUsIDEpOwogCiAJaWYgKElTX0VSUihhZC0+Y2xrX3JlZikg fHwgSVNfRVJSKGFkLT5jbGtfYnlwYXNzKSkgewogCQlwcl9kZWJ1ZygiY2xrLXJlZiBvciBjbGst YnlwYXNzIGZvciAlcyBub3QgcmVhZHksIHJldHJ5XG4iLApAQCAtMzMyLDcgKzMzMiw3IEBAIHN0 YXRpYyB2b2lkIF9faW5pdCBvZl9vbWFwMl9hcGxsX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSkKIAlzdHJ1Y3QgZHBsbF9kYXRhICphZCA9IE5VTEw7CiAJc3RydWN0IGNsa19od19vbWFw ICpjbGtfaHcgPSBOVUxMOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhICppbml0ID0gTlVMTDsKLQlz dHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJY29uc3QgY2hhciAqcGFy ZW50X25hbWU7CiAJdTMyIHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvY2xrLTJ4 eHguYyBiL2RyaXZlcnMvY2xrL3RpL2Nsay0yeHh4LmMKaW5kZXggYzgwOGFiMy4uYTQ4ZmU2ZiAx MDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvY2xrLTJ4eHguYworKysgYi9kcml2ZXJzL2Nsay90 aS9jbGstMnh4eC5jCkBAIC0yMzcsMTAgKzIzNywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBvbWFw Mnh4eF9kdF9jbGtfaW5pdChpbnQgc29jX3R5cGUpCiAJCQkJICAgICBBUlJBWV9TSVpFKGVuYWJs ZV9pbml0X2Nsa3MpKTsKIAogCXByX2luZm8oIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9N UFUpOiAlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JCShjbGtfZ2V0X3JhdGUoY2xrX2dldF9z eXMoTlVMTCwgInN5c19jayIpKSAvIDEwMDAwMDApLAotCQkoY2xrX2dldF9yYXRlKGNsa19nZXRf c3lzKE5VTEwsICJzeXNfY2siKSkgLyAxMDAwMDApICUgMTAsCi0JCShjbGtfZ2V0X3JhdGUoY2xr X2dldF9zeXMoTlVMTCwgImRwbGxfY2siKSkgLyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZShj bGtfZ2V0X3N5cyhOVUxMLCAibXB1X2NrIikpIC8gMTAwMDAwMCkpOworCQkoY2xrX3Byb3ZpZGVy X2dldF9yYXRlKGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJzeXNfY2siKSkgLyAxMDAwMDAw KSwKKwkJKGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAi c3lzX2NrIikpIC8gMTAwMDAwKSAlIDEwLAorCQkoY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsa19w cm92aWRlcl9nZXRfc3lzKE5VTEwsICJkcGxsX2NrIikpIC8gMTAwMDAwMCksCisJCShjbGtfcHJv dmlkZXJfZ2V0X3JhdGUoY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgIm1wdV9jayIpKSAvIDEw MDAwMDApKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvY2xr LTMzeHguYyBiL2RyaXZlcnMvY2xrL3RpL2Nsay0zM3h4LmMKaW5kZXggMDI4YjMzNy4uMDk4OGYx ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvY2xrLTMzeHguYworKysgYi9kcml2ZXJzL2Ns ay90aS9jbGstMzN4eC5jCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVu YWJsZV9pbml0X2Nsa3NbXSA9IHsKIAogaW50IF9faW5pdCBhbTMzeHhfZHRfY2xrX2luaXQodm9p ZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGsxLCAqY2xrMjsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazEs ICpjbGsyOwogCiAJdGlfZHRfY2xvY2tzX3JlZ2lzdGVyKGFtMzN4eF9jbGtzKTsKIApAQCAtMTM5 LDEyICsxMzksMTIgQEAgaW50IF9faW5pdCBhbTMzeHhfZHRfY2xrX2luaXQodm9pZCkKIAkgKiAg ICBvc2NpbGxhdG9yIGNsb2NrLgogCSAqLwogCi0JY2xrMSA9IGNsa19nZXRfc3lzKE5VTEwsICJz eXNfY2xraW5fY2siKTsKLQljbGsyID0gY2xrX2dldF9zeXMoTlVMTCwgInRpbWVyM19mY2siKTsK LQljbGtfc2V0X3BhcmVudChjbGsyLCBjbGsxKTsKKwljbGsxID0gY2xrX3Byb3ZpZGVyX2dldF9z eXMoTlVMTCwgInN5c19jbGtpbl9jayIpOworCWNsazIgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhO VUxMLCAidGltZXIzX2ZjayIpOworCWNsa19wcm92aWRlcl9zZXRfcGFyZW50KGNsazIsIGNsazEp OwogCi0JY2xrMiA9IGNsa19nZXRfc3lzKE5VTEwsICJ0aW1lcjZfZmNrIik7Ci0JY2xrX3NldF9w YXJlbnQoY2xrMiwgY2xrMSk7CisJY2xrMiA9IGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJ0 aW1lcjZfZmNrIik7CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrMiwgY2xrMSk7CiAJLyoK IAkgKiBUaGUgT24tQ2hpcCAzMksgUkMgT3NjIGNsb2NrIGlzIG5vdCBhbiBhY2N1cmF0ZSBjbG9j ay1zb3VyY2UgYXMgcGVyCiAJICogdGhlIGRlc2lnbi9zcGVjLCBzbyBhcyBhIHJlc3VsdCwgZm9y IGV4YW1wbGUsIHRpbWVyIHdoaWNoIHN1cHBvc2VkCkBAIC0xNTIsOSArMTUyLDkgQEAgaW50IF9f aW5pdCBhbTMzeHhfZHRfY2xrX2luaXQodm9pZCkKIAkgKiBub3QgZXhwZWN0ZWQgYnkgYW55IHVz ZS1jYXNlLCBzbyBjaGFuZ2UgV0RUMSBjbG9jayBzb3VyY2UgdG8gUFJDTQogCSAqIDMyS0h6IGNs b2NrLgogCSAqLwotCWNsazEgPSBjbGtfZ2V0X3N5cyhOVUxMLCAid2R0MV9mY2siKTsKLQljbGsy ID0gY2xrX2dldF9zeXMoTlVMTCwgImNsa2RpdjMya19pY2siKTsKLQljbGtfc2V0X3BhcmVudChj bGsxLCBjbGsyKTsKKwljbGsxID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgIndkdDFfZmNr Iik7CisJY2xrMiA9IGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJjbGtkaXYzMmtfaWNrIik7 CisJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoY2xrMSwgY2xrMik7CiAKIAlyZXR1cm4gMDsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL2Nsay0zeHh4LmMgYi9kcml2ZXJzL2Nsay90aS9j bGstM3h4eC5jCmluZGV4IDBkMTc1MGEuLjU4ZWYyMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xr L3RpL2Nsay0zeHh4LmMKKysrIGIvZHJpdmVycy9jbGsvdGkvY2xrLTN4eHguYwpAQCAtMzY1LDEw ICszNjUsMTAgQEAgc3RhdGljIGludCBfX2luaXQgb21hcDN4eHhfZHRfY2xrX2luaXQoaW50IHNv Y190eXBlKQogCQkJCSAgICAgQVJSQVlfU0laRShlbmFibGVfaW5pdF9jbGtzKSk7CiAKIAlwcl9p bmZvKCJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogJWxkLiUwMWxkLyVsZC8lbGQg TUh6XG4iLAotCQkoY2xrX2dldF9yYXRlKGNsa19nZXRfc3lzKE5VTEwsICJvc2Nfc3lzX2NrIikp IC8gMTAwMDAwMCksCi0JCShjbGtfZ2V0X3JhdGUoY2xrX2dldF9zeXMoTlVMTCwgIm9zY19zeXNf Y2siKSkgLyAxMDAwMDApICUgMTAsCi0JCShjbGtfZ2V0X3JhdGUoY2xrX2dldF9zeXMoTlVMTCwg ImNvcmVfY2siKSkgLyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZShjbGtfZ2V0X3N5cyhOVUxM LCAiYXJtX2ZjayIpKSAvIDEwMDAwMDApKTsKKwkJKGNsa19wcm92aWRlcl9nZXRfcmF0ZShjbGtf cHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAib3NjX3N5c19jayIpKSAvIDEwMDAwMDApLAorCQkoY2xr X3Byb3ZpZGVyX2dldF9yYXRlKGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJvc2Nfc3lzX2Nr IikpIC8gMTAwMDAwKSAlIDEwLAorCQkoY2xrX3Byb3ZpZGVyX2dldF9yYXRlKGNsa19wcm92aWRl cl9nZXRfc3lzKE5VTEwsICJjb3JlX2NrIikpIC8gMTAwMDAwMCksCisJCShjbGtfcHJvdmlkZXJf Z2V0X3JhdGUoY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgImFybV9mY2siKSkgLyAxMDAwMDAw KSk7CiAKIAlpZiAoc29jX3R5cGUgIT0gT01BUDNfU09DX1RJODFYWCAmJiBzb2NfdHlwZSAhPSBP TUFQM19TT0NfT01BUDM0MzBfRVMxKQogCQlvbWFwM19jbGtfbG9ja19kcGxsNSgpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9jbGsvdGkvY2xrLTQzeHguYyBiL2RyaXZlcnMvY2xrL3RpL2Nsay00M3h4 LmMKaW5kZXggMzc5NWZjZS4uMTI3NzQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvY2xr LTQzeHguYworKysgYi9kcml2ZXJzL2Nsay90aS9jbGstNDN4eC5jCkBAIC0xMTYsNyArMTE2LDcg QEAgc3RhdGljIHN0cnVjdCB0aV9kdF9jbGsgYW00M3h4X2Nsa3NbXSA9IHsKIAogaW50IF9faW5p dCBhbTQzeHhfZHRfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGsxLCAqY2xrMjsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazEsICpjbGsyOwogCiAJdGlfZHRfY2xvY2tzX3JlZ2lzdGVy KGFtNDN4eF9jbGtzKTsKIApAQCAtMTMyLDkgKzEzMiw5IEBAIGludCBfX2luaXQgYW00M3h4X2R0 X2Nsa19pbml0KHZvaWQpCiAJICogQnkgc2VsZWN0aW5nIGRwbGxfY29yZV9tNV9jayBhcyB0aGUg Y2xvY2tzb3VyY2UgZml4ZXMgdGhpcyBpc3N1ZS4KIAkgKiBJbiBBTTMzNXggZHBsbF9jb3JlX201 X2NrIGlzIHRoZSBkZWZhdWx0IGNsb2Nrc291cmNlLgogCSAqLwotCWNsazEgPSBjbGtfZ2V0X3N5 cyhOVUxMLCAiY3Bzd19jcHRzX3JmdF9jbGsiKTsKLQljbGsyID0gY2xrX2dldF9zeXMoTlVMTCwg ImRwbGxfY29yZV9tNV9jayIpOwotCWNsa19zZXRfcGFyZW50KGNsazEsIGNsazIpOworCWNsazEg PSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAiY3Bzd19jcHRzX3JmdF9jbGsiKTsKKwljbGsy ID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgImRwbGxfY29yZV9tNV9jayIpOworCWNsa19w cm92aWRlcl9zZXRfcGFyZW50KGNsazEsIGNsazIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay90aS9jbGstNDR4eC5jIGIvZHJpdmVycy9jbGsvdGkvY2xrLTQ0eHgu YwppbmRleCAwMjUxN2E4Li4xYWRjMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9jbGst NDR4eC5jCisrKyBiL2RyaXZlcnMvY2xrL3RpL2Nsay00NHh4LmMKQEAgLTI4MSw3ICsyODEsNyBA QCBzdGF0aWMgc3RydWN0IHRpX2R0X2NsayBvbWFwNDR4eF9jbGtzW10gPSB7CiBpbnQgX19pbml0 IG9tYXA0eHh4X2R0X2Nsa19pbml0KHZvaWQpCiB7CiAJaW50IHJjOwotCXN0cnVjdCBjbGsgKmFi ZV9kcGxsX3JlZiwgKmFiZV9kcGxsLCAqc3lzXzMya19jaywgKnVzYl9kcGxsOworCXN0cnVjdCBj bGtfY29yZSAqYWJlX2RwbGxfcmVmLCAqYWJlX2RwbGwsICpzeXNfMzJrX2NrLCAqdXNiX2RwbGw7 CiAKIAl0aV9kdF9jbG9ja3NfcmVnaXN0ZXIob21hcDQ0eHhfY2xrcyk7CiAKQEAgLTI5MSw4ICsy OTEsOCBAQCBpbnQgX19pbml0IG9tYXA0eHh4X2R0X2Nsa19pbml0KHZvaWQpCiAJICogTG9jayBV U0IgRFBMTCBvbiBPTUFQNCBkZXZpY2VzIHNvIHRoYXQgdGhlIEwzSU5JVCBwb3dlcgogCSAqIGRv bWFpbiBjYW4gdHJhbnNpdGlvbiB0byByZXRlbnRpb24gc3RhdGUgd2hlbiBub3QgaW4gdXNlLgog CSAqLwotCXVzYl9kcGxsID0gY2xrX2dldF9zeXMoTlVMTCwgImRwbGxfdXNiX2NrIik7Ci0JcmMg PSBjbGtfc2V0X3JhdGUodXNiX2RwbGwsIE9NQVA0X0RQTExfVVNCX0RFRkZSRVEpOworCXVzYl9k cGxsID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgImRwbGxfdXNiX2NrIik7CisJcmMgPSBj bGtfcHJvdmlkZXJfc2V0X3JhdGUodXNiX2RwbGwsIE9NQVA0X0RQTExfVVNCX0RFRkZSRVEpOwog CWlmIChyYykKIAkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGNvbmZpZ3VyZSBVU0IgRFBMTCFcbiIs IF9fZnVuY19fKTsKIApAQCAtMzAyLDEyICszMDIsMTIgQEAgaW50IF9faW5pdCBvbWFwNHh4eF9k dF9jbGtfaW5pdCh2b2lkKQogCSAqIGxvY2tpbmcgdGhlIEFCRSBEUExMIG9uIGJvb3QuCiAJICog TG9jayB0aGUgQUJFIERQTEwgaW4gYW55IGNhc2UgdG8gYXZvaWQgaXNzdWVzIHdpdGggYXVkaW8u CiAJICovCi0JYWJlX2RwbGxfcmVmID0gY2xrX2dldF9zeXMoTlVMTCwgImFiZV9kcGxsX3JlZmNs a19tdXhfY2siKTsKLQlzeXNfMzJrX2NrID0gY2xrX2dldF9zeXMoTlVMTCwgInN5c18zMmtfY2si KTsKLQlyYyA9IGNsa19zZXRfcGFyZW50KGFiZV9kcGxsX3JlZiwgc3lzXzMya19jayk7Ci0JYWJl X2RwbGwgPSBjbGtfZ2V0X3N5cyhOVUxMLCAiZHBsbF9hYmVfY2siKTsKKwlhYmVfZHBsbF9yZWYg PSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAiYWJlX2RwbGxfcmVmY2xrX211eF9jayIpOwor CXN5c18zMmtfY2sgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAic3lzXzMya19jayIpOwor CXJjID0gY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoYWJlX2RwbGxfcmVmLCBzeXNfMzJrX2NrKTsK KwlhYmVfZHBsbCA9IGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJkcGxsX2FiZV9jayIpOwog CWlmICghcmMpCi0JCXJjID0gY2xrX3NldF9yYXRlKGFiZV9kcGxsLCBPTUFQNF9EUExMX0FCRV9E RUZGUkVRKTsKKwkJcmMgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUoYWJlX2RwbGwsIE9NQVA0X0RQ TExfQUJFX0RFRkZSRVEpOwogCWlmIChyYykKIAkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGNvbmZp Z3VyZSBBQkUgRFBMTCFcbiIsIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv dGkvY2xrLTU0eHguYyBiL2RyaXZlcnMvY2xrL3RpL2Nsay01NHh4LmMKaW5kZXggNWUxODM5OS4u NWI2MDNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvY2xrLTU0eHguYworKysgYi9kcml2 ZXJzL2Nsay90aS9jbGstNTR4eC5jCkBAIC0yMjUsMzQgKzIyNSwzNSBAQCBzdGF0aWMgc3RydWN0 IHRpX2R0X2NsayBvbWFwNTR4eF9jbGtzW10gPSB7CiBpbnQgX19pbml0IG9tYXA1eHh4X2R0X2Ns a19pbml0KHZvaWQpCiB7CiAJaW50IHJjOwotCXN0cnVjdCBjbGsgKmFiZV9kcGxsX3JlZiwgKmFi ZV9kcGxsLCAqc3lzXzMya19jaywgKnVzYl9kcGxsOworCXN0cnVjdCBjbGtfY29yZSAqYWJlX2Rw bGxfcmVmLCAqYWJlX2RwbGwsICpzeXNfMzJrX2NrLCAqdXNiX2RwbGw7CiAKIAl0aV9kdF9jbG9j a3NfcmVnaXN0ZXIob21hcDU0eHhfY2xrcyk7CiAKIAlvbWFwMl9jbGtfZGlzYWJsZV9hdXRvaWRs ZV9hbGwoKTsKIAotCWFiZV9kcGxsX3JlZiA9IGNsa19nZXRfc3lzKE5VTEwsICJhYmVfZHBsbF9j bGtfbXV4Iik7Ci0Jc3lzXzMya19jayA9IGNsa19nZXRfc3lzKE5VTEwsICJzeXNfMzJrX2NrIik7 Ci0JcmMgPSBjbGtfc2V0X3BhcmVudChhYmVfZHBsbF9yZWYsIHN5c18zMmtfY2spOwotCWFiZV9k cGxsID0gY2xrX2dldF9zeXMoTlVMTCwgImRwbGxfYWJlX2NrIik7CisJYWJlX2RwbGxfcmVmID0g Y2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgImFiZV9kcGxsX2Nsa19tdXgiKTsKKwlzeXNfMzJr X2NrID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgInN5c18zMmtfY2siKTsKKwlyYyA9IGNs a19wcm92aWRlcl9zZXRfcGFyZW50KGFiZV9kcGxsX3JlZiwgc3lzXzMya19jayk7CisJYWJlX2Rw bGwgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAiZHBsbF9hYmVfY2siKTsKIAlpZiAoIXJj KQotCQlyYyA9IGNsa19zZXRfcmF0ZShhYmVfZHBsbCwgT01BUDVfRFBMTF9BQkVfREVGRlJFUSk7 CisJCXJjID0gY2xrX3Byb3ZpZGVyX3NldF9yYXRlKGFiZV9kcGxsLCBPTUFQNV9EUExMX0FCRV9E RUZGUkVRKTsKIAlpZiAocmMpCiAJCXByX2VycigiJXM6IGZhaWxlZCB0byBjb25maWd1cmUgQUJF IERQTEwhXG4iLCBfX2Z1bmNfXyk7CiAKLQlhYmVfZHBsbCA9IGNsa19nZXRfc3lzKE5VTEwsICJk cGxsX2FiZV9tMngyX2NrIik7CisJYWJlX2RwbGwgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5cyhOVUxM LCAiZHBsbF9hYmVfbTJ4Ml9jayIpOwogCWlmICghcmMpCi0JCXJjID0gY2xrX3NldF9yYXRlKGFi ZV9kcGxsLCBPTUFQNV9EUExMX0FCRV9ERUZGUkVRICogMik7CisJCXJjID0gY2xrX3Byb3ZpZGVy X3NldF9yYXRlKGFiZV9kcGxsLAorCQkJCQkgICBPTUFQNV9EUExMX0FCRV9ERUZGUkVRICogMik7 CiAJaWYgKHJjKQogCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gY29uZmlndXJlIEFCRSBtMngyIERQ TEwhXG4iLCBfX2Z1bmNfXyk7CiAKLQl1c2JfZHBsbCA9IGNsa19nZXRfc3lzKE5VTEwsICJkcGxs X3VzYl9jayIpOwotCXJjID0gY2xrX3NldF9yYXRlKHVzYl9kcGxsLCBPTUFQNV9EUExMX1VTQl9E RUZGUkVRKTsKKwl1c2JfZHBsbCA9IGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJkcGxsX3Vz Yl9jayIpOworCXJjID0gY2xrX3Byb3ZpZGVyX3NldF9yYXRlKHVzYl9kcGxsLCBPTUFQNV9EUExM X1VTQl9ERUZGUkVRKTsKIAlpZiAocmMpCiAJCXByX2VycigiJXM6IGZhaWxlZCB0byBjb25maWd1 cmUgVVNCIERQTEwhXG4iLCBfX2Z1bmNfXyk7CiAKLQl1c2JfZHBsbCA9IGNsa19nZXRfc3lzKE5V TEwsICJkcGxsX3VzYl9tMl9jayIpOwotCXJjID0gY2xrX3NldF9yYXRlKHVzYl9kcGxsLCBPTUFQ NV9EUExMX1VTQl9ERUZGUkVRLzIpOworCXVzYl9kcGxsID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMo TlVMTCwgImRwbGxfdXNiX20yX2NrIik7CisJcmMgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUodXNi X2RwbGwsIE9NQVA1X0RQTExfVVNCX0RFRkZSRVEgLyAyKTsKIAlpZiAocmMpCiAJCXByX2Vycigi JXM6IGZhaWxlZCB0byBzZXQgVVNCX0RQTEwgTTIgT1VUXG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvY2xrL3RpL2Nsay03eHguYyBiL2RyaXZlcnMvY2xrL3RpL2Nsay03eHgu YwppbmRleCA2MmFjOGY2Li45ZGJhMGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9jbGst N3h4LmMKKysrIGIvZHJpdmVycy9jbGsvdGkvY2xrLTd4eC5jCkBAIC0zMDcsMzkgKzMwNywzOSBA QCBzdGF0aWMgc3RydWN0IHRpX2R0X2NsayBkcmE3eHhfY2xrc1tdID0gewogaW50IF9faW5pdCBk cmE3eHhfZHRfY2xrX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7Ci0Jc3RydWN0IGNsayAqYWJlX2Rw bGxfbXV4LCAqc3lzX2Nsa2luMiwgKmRwbGxfY2s7CisJc3RydWN0IGNsa19jb3JlICphYmVfZHBs bF9tdXgsICpzeXNfY2xraW4yLCAqZHBsbF9jazsKIAogCXRpX2R0X2Nsb2Nrc19yZWdpc3Rlcihk cmE3eHhfY2xrcyk7CiAKIAlvbWFwMl9jbGtfZGlzYWJsZV9hdXRvaWRsZV9hbGwoKTsKIAotCWFi ZV9kcGxsX211eCA9IGNsa19nZXRfc3lzKE5VTEwsICJhYmVfZHBsbF9zeXNfY2xrX211eCIpOwot CXN5c19jbGtpbjIgPSBjbGtfZ2V0X3N5cyhOVUxMLCAic3lzX2Nsa2luMiIpOwotCWRwbGxfY2sg PSBjbGtfZ2V0X3N5cyhOVUxMLCAiZHBsbF9hYmVfY2siKTsKKwlhYmVfZHBsbF9tdXggPSBjbGtf cHJvdmlkZXJfZ2V0X3N5cyhOVUxMLCAiYWJlX2RwbGxfc3lzX2Nsa19tdXgiKTsKKwlzeXNfY2xr aW4yID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgInN5c19jbGtpbjIiKTsKKwlkcGxsX2Nr ID0gY2xrX3Byb3ZpZGVyX2dldF9zeXMoTlVMTCwgImRwbGxfYWJlX2NrIik7CiAKLQlyYyA9IGNs a19zZXRfcGFyZW50KGFiZV9kcGxsX211eCwgc3lzX2Nsa2luMik7CisJcmMgPSBjbGtfcHJvdmlk ZXJfc2V0X3BhcmVudChhYmVfZHBsbF9tdXgsIHN5c19jbGtpbjIpOwogCWlmICghcmMpCi0JCXJj ID0gY2xrX3NldF9yYXRlKGRwbGxfY2ssIERSQTdfRFBMTF9BQkVfREVGRlJFUSk7CisJCXJjID0g Y2xrX3Byb3ZpZGVyX3NldF9yYXRlKGRwbGxfY2ssIERSQTdfRFBMTF9BQkVfREVGRlJFUSk7CiAJ aWYgKHJjKQogCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gY29uZmlndXJlIEFCRSBEUExMIVxuIiwg X19mdW5jX18pOwogCi0JZHBsbF9jayA9IGNsa19nZXRfc3lzKE5VTEwsICJkcGxsX2FiZV9tMngy X2NrIik7Ci0JcmMgPSBjbGtfc2V0X3JhdGUoZHBsbF9jaywgRFJBN19EUExMX0FCRV9ERUZGUkVR ICogMik7CisJZHBsbF9jayA9IGNsa19wcm92aWRlcl9nZXRfc3lzKE5VTEwsICJkcGxsX2FiZV9t MngyX2NrIik7CisJcmMgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUoZHBsbF9jaywgRFJBN19EUExM X0FCRV9ERUZGUkVRICogMik7CiAJaWYgKHJjKQogCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gY29u ZmlndXJlIEFCRSBEUExMIG0yeDIhXG4iLCBfX2Z1bmNfXyk7CiAKLQlkcGxsX2NrID0gY2xrX2dl dF9zeXMoTlVMTCwgImRwbGxfZ21hY19jayIpOwotCXJjID0gY2xrX3NldF9yYXRlKGRwbGxfY2ss IERSQTdfRFBMTF9HTUFDX0RFRkZSRVEpOworCWRwbGxfY2sgPSBjbGtfcHJvdmlkZXJfZ2V0X3N5 cyhOVUxMLCAiZHBsbF9nbWFjX2NrIik7CisJcmMgPSBjbGtfcHJvdmlkZXJfc2V0X3JhdGUoZHBs bF9jaywgRFJBN19EUExMX0dNQUNfREVGRlJFUSk7CiAJaWYgKHJjKQogCQlwcl9lcnIoIiVzOiBm YWlsZWQgdG8gY29uZmlndXJlIEdNQUMgRFBMTCFcbiIsIF9fZnVuY19fKTsKIAotCWRwbGxfY2sg PSBjbGtfZ2V0X3N5cyhOVUxMLCAiZHBsbF91c2JfY2siKTsKLQlyYyA9IGNsa19zZXRfcmF0ZShk cGxsX2NrLCBEUkE3X0RQTExfVVNCX0RFRkZSRVEpOworCWRwbGxfY2sgPSBjbGtfcHJvdmlkZXJf Z2V0X3N5cyhOVUxMLCAiZHBsbF91c2JfY2siKTsKKwlyYyA9IGNsa19wcm92aWRlcl9zZXRfcmF0 ZShkcGxsX2NrLCBEUkE3X0RQTExfVVNCX0RFRkZSRVEpOwogCWlmIChyYykKIAkJcHJfZXJyKCIl czogZmFpbGVkIHRvIGNvbmZpZ3VyZSBVU0IgRFBMTCFcbiIsIF9fZnVuY19fKTsKIAotCWRwbGxf Y2sgPSBjbGtfZ2V0X3N5cyhOVUxMLCAiZHBsbF91c2JfbTJfY2siKTsKLQlyYyA9IGNsa19zZXRf cmF0ZShkcGxsX2NrLCBEUkE3X0RQTExfVVNCX0RFRkZSRVEvMik7CisJZHBsbF9jayA9IGNsa19w cm92aWRlcl9nZXRfc3lzKE5VTEwsICJkcGxsX3VzYl9tMl9jayIpOworCXJjID0gY2xrX3Byb3Zp ZGVyX3NldF9yYXRlKGRwbGxfY2ssIERSQTdfRFBMTF9VU0JfREVGRlJFUSAvIDIpOwogCWlmIChy YykKIAkJcHJfZXJyKCIlczogZmFpbGVkIHRvIHNldCBVU0JfRFBMTCBNMiBPVVRcbiIsIF9fZnVu Y19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvY2xrLWRyYTctYXRsLmMgYi9kcml2 ZXJzL2Nsay90aS9jbGstZHJhNy1hdGwuYwppbmRleCA0YTY1YjQxLi4wMjlhMGQzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2Nsay90aS9jbGstZHJhNy1hdGwuYworKysgYi9kcml2ZXJzL2Nsay90aS9j bGstZHJhNy1hdGwuYwpAQCAtNDAsNyArNDAsNyBAQAogc3RydWN0IGRyYTdfYXRsX2Nsb2NrX2lu Zm87CiAKIHN0cnVjdCBkcmE3X2F0bF9kZXNjIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0 IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19odyBodzsKIAlzdHJ1Y3QgZHJhN19hdGxfY2xv Y2tfaW5mbyAqY2luZm87CiAJaW50IGlkOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyB2b2lk IF9faW5pdCBvZl9kcmE3X2F0bF9jbG9ja19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUp CiAJc3RydWN0IGRyYTdfYXRsX2Rlc2MgKmNsa19odyA9IE5VTEw7CiAJc3RydWN0IGNsa19pbml0 X2RhdGEgaW5pdCA9IHsgMCB9OwogCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMgPSBOVUxMOwot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWNsa19odyA9IGt6 YWxsb2Moc2l6ZW9mKCpjbGtfaHcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsa19odykgewpAQCAt MjMzLDcgKzIzMyw3IEBAIHN0YXRpYyBpbnQgb2ZfZHJhN19hdGxfY2xrX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWNoYXIgcHJvcFs1XTsKIAkJc3RydWN0IGRyYTdfYXRs X2Rlc2MgKmNkZXNjOwogCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGNsa3NwZWM7Ci0JCXN0cnVj dCBjbGsgKmNsazsKKwkJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJCWludCByYzsKIAogCQlyYyA9 IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5vZGUsICJ0aSxwcm92aWRlZC1jbG9ja3MiLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvY2xrLmMgYi9kcml2ZXJzL2Nsay90aS9jbGsuYwpp bmRleCBiMWE2ZjcxLi5kODhhNzBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvY2xrLmMK KysrIGIvZHJpdmVycy9jbGsvdGkvY2xrLmMKQEAgLTQxLDcgKzQxLDcgQEAgdm9pZCBfX2luaXQg dGlfZHRfY2xvY2tzX3JlZ2lzdGVyKHN0cnVjdCB0aV9kdF9jbGsgb2Nsa3NbXSkKIHsKIAlzdHJ1 Y3QgdGlfZHRfY2xrICpjOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBj bGtzcGVjOwogCiAJZm9yIChjID0gb2Nsa3M7IGMtPm5vZGVfbmFtZSAhPSBOVUxMOyBjKyspIHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL2Nsb2NrZG9tYWluLmMgYi9kcml2ZXJzL2Nsay90 aS9jbG9ja2RvbWFpbi5jCmluZGV4IGYxZTAwMzguLjZiYzc1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvY2xrL3RpL2Nsb2NrZG9tYWluLmMKKysrIGIvZHJpdmVycy9jbGsvdGkvY2xvY2tkb21haW4u YwpAQCAtMjYsNyArMjYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfdGlfY2xvY2tkb21h aW5fc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVjdCBjbGsgKmNsazsK KwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2h3ICpjbGtfaHc7CiAJY29uc3Qg Y2hhciAqY2xrZG1fbmFtZSA9IG5vZGUtPm5hbWU7CiAJaW50IGk7CkBAIC0zNSw3ICszNSw3IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBvZl90aV9jbG9ja2RvbWFpbl9zZXR1cChzdHJ1Y3QgZGV2aWNl X25vZGUgKm5vZGUpCiAJbnVtX2Nsa3MgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhub2Rl LCAiY2xvY2tzIiwgIiNjbG9jay1jZWxscyIpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jbGtz OyBpKyspIHsKLQkJY2xrID0gb2ZfY2xrX2dldChub2RlLCBpKTsKKwkJY2xrID0gb2ZfY2xrX3By b3ZpZGVyX2dldChub2RlLCBpKTsKIAkJaWYgKF9fY2xrX2dldF9mbGFncyhjbGspICYgQ0xLX0lT X0JBU0lDKSB7CiAJCQlwcl93YXJuKCJjYW4ndCBzZXR1cCBjbGtkbSBmb3IgYmFzaWMgY2xrICVz XG4iLAogCQkJCV9fY2xrX2dldF9uYW1lKGNsaykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv dGkvY29tcG9zaXRlLmMgYi9kcml2ZXJzL2Nsay90aS9jb21wb3NpdGUuYwppbmRleCAxOWQ4OTgw Li4yY2JlZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9jb21wb3NpdGUuYworKysgYi9k cml2ZXJzL2Nsay90aS9jb21wb3NpdGUuYwpAQCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyBpbmxp bmUgc3RydWN0IGNsa19odyAqX2dldF9odyhzdHJ1Y3QgY2xrX2h3X29tYXBfY29tcCAqY2xrLCBp bnQgaWR4KQogc3RhdGljIHZvaWQgX19pbml0IHRpX2Nsa19yZWdpc3Rlcl9jb21wb3NpdGUoc3Ry dWN0IGNsa19odyAqaHcsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2h3 X29tYXBfY29tcCAqY2NsayA9IHRvX2Nsa19od19jb21wKGh3KTsKIAlzdHJ1Y3QgY29tcG9uZW50 X2NsayAqY29tcDsKIAlpbnQgbnVtX3BhcmVudHMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9j bGsvdGkvZGl2aWRlci5jIGIvZHJpdmVycy9jbGsvdGkvZGl2aWRlci5jCmluZGV4IGU2YWExMGQu LjFjNDE1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RpL2RpdmlkZXIuYworKysgYi9kcml2 ZXJzL2Nsay90aS9kaXZpZGVyLmMKQEAgLTI0Niw3ICsyNDYsNyBAQCBjb25zdCBzdHJ1Y3QgY2xr X29wcyB0aV9jbGtfZGl2aWRlcl9vcHMgPSB7CiAJLnNldF9yYXRlID0gdGlfY2xrX2RpdmlkZXJf c2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqX3JlZ2lzdGVyX2RpdmlkZXIoc3Ry dWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHN0cnVjdCBjbGtfY29y ZSAqX3JlZ2lzdGVyX2RpdmlkZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1l LAogCQkJCSAgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJICAgICB1bnNpZ25lZCBs b25nIGZsYWdzLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJCQkgICAgIHU4IHNoaWZ0LCB1OCB3aWR0 aCwgdTggY2xrX2RpdmlkZXJfZmxhZ3MsCkBAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIHN0cnVj dCBjbGsgKl9yZWdpc3Rlcl9kaXZpZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAq bmFtZSwKIAkJCQkgICAgIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IGNsa19kaXZpZGVy ICpkaXY7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVj dCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAKIAlpZiAoY2xrX2RpdmlkZXJfZmxhZ3MgJiBDTEtfRElW SURFUl9ISVdPUkRfTUFTSykgewpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0 IHRpX2Nsa19kaXZpZGVyX3BvcHVsYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKICAqLwog c3RhdGljIHZvaWQgX19pbml0IG9mX3RpX2RpdmlkZXJfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7 CiAJY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJdTggY2xr X2RpdmlkZXJfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvZHBsbC5jIGIv ZHJpdmVycy9jbGsvdGkvZHBsbC5jCmluZGV4IDc5NzkxZTEuLmUxZjc0Y2MgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvY2xrL3RpL2RwbGwuYworKysgYi9kcml2ZXJzL2Nsay90aS9kcGxsLmMKQEAgLTEy OCwxMCArMTI4LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCB0aV9jbGtfcmVnaXN0ZXJfZHBsbChz dHJ1Y3QgY2xrX2h3ICpodywKIHsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsa19odyA9IHRvX2Ns a19od19vbWFwKGh3KTsKIAlzdHJ1Y3QgZHBsbF9kYXRhICpkZCA9IGNsa19ody0+ZHBsbF9kYXRh OwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAotCWRkLT5jbGtf cmVmID0gb2ZfY2xrX2dldChub2RlLCAwKTsKLQlkZC0+Y2xrX2J5cGFzcyA9IG9mX2Nsa19nZXQo bm9kZSwgMSk7CisJZGQtPmNsa19yZWYgPSBvZl9jbGtfcHJvdmlkZXJfZ2V0KG5vZGUsIDApOwor CWRkLT5jbGtfYnlwYXNzID0gb2ZfY2xrX3Byb3ZpZGVyX2dldChub2RlLCAxKTsKIAogCWlmIChJ U19FUlIoZGQtPmNsa19yZWYpIHx8IElTX0VSUihkZC0+Y2xrX2J5cGFzcykpIHsKIAkJcHJfZGVi dWcoImNsay1yZWYgb3IgY2xrLWJ5cGFzcyBtaXNzaW5nIGZvciAlcywgcmV0cnkgbGF0ZXJcbiIs CkBAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIHZvaWQgdGlfY2xrX3JlZ2lzdGVyX2RwbGxfeDIo c3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2xrX29wcyAq b3BzLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2xrX2h3X29tYXBfb3BzICpod19vcHMpCiB7Ci0J c3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaW5p dF9kYXRhIGluaXQgPSB7IE5VTEwgfTsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsa19odzsKIAlj b25zdCBjaGFyICpuYW1lID0gbm9kZS0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Rp L2ZpeGVkLWZhY3Rvci5jIGIvZHJpdmVycy9jbGsvdGkvZml4ZWQtZmFjdG9yLmMKaW5kZXggYzJj OGEyOC4uMmFhMjcwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvZml4ZWQtZmFjdG9yLmMK KysrIGIvZHJpdmVycy9jbGsvdGkvZml4ZWQtZmFjdG9yLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAq Lwogc3RhdGljIHZvaWQgX19pbml0IG9mX3RpX2ZpeGVkX2ZhY3Rvcl9jbGtfc2V0dXAoc3RydWN0 IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2Nv cmUgKmNsazsKIAljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5vZGUtPm5hbWU7CiAJY29uc3QgY2hh ciAqcGFyZW50X25hbWU7CiAJdTMyIGRpdiwgbXVsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L3RpL2dhdGUuYyBiL2RyaXZlcnMvY2xrL3RpL2dhdGUuYwppbmRleCBiMzI2ZDI3Li5kZDFiODEz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9nYXRlLmMKKysrIGIvZHJpdmVycy9jbGsvdGkv Z2F0ZS5jCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBfb2ZfdGlfZ2F0ZV9j bGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCQkJCQkgY29uc3Qgc3RydWN0IGNs a19vcHMgKm9wcywKIAkJCQkJIGNvbnN0IHN0cnVjdCBjbGtfaHdfb21hcF9vcHMgKmh3X29wcykK IHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNs a19pbml0X2RhdGEgaW5pdCA9IHsgTlVMTCB9OwogCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrX2h3 OwogCWNvbnN0IGNoYXIgKmNsa19uYW1lID0gbm9kZS0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvY2xrL3RpL2ludGVyZmFjZS5jIGIvZHJpdmVycy9jbGsvdGkvaW50ZXJmYWNlLmMKaW5kZXgg OWMzZThjNC4uZTJmMmJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvaW50ZXJmYWNlLmMK KysrIGIvZHJpdmVycy9jbGsvdGkvaW50ZXJmYWNlLmMKQEAgLTM0LDcgKzM0LDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBjbGtfb3BzIHRpX2ludGVyZmFjZV9jbGtfb3BzID0gewogc3RhdGljIHZv aWQgX19pbml0IF9vZl90aV9pbnRlcmZhY2VfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSwKIAkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNsa19od19vbWFwX29wcyAqb3BzKQogewot CXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlzdHJ1Y3QgY2xrX2lu aXRfZGF0YSBpbml0ID0geyBOVUxMIH07CiAJc3RydWN0IGNsa19od19vbWFwICpjbGtfaHc7CiAJ Y29uc3QgY2hhciAqcGFyZW50X25hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90aS9tdXgu YyBiL2RyaXZlcnMvY2xrL3RpL211eC5jCmluZGV4IGU5ZDY1MGUuLjc0NTYxOTggMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvY2xrL3RpL211eC5jCisrKyBiL2RyaXZlcnMvY2xrL3RpL211eC5jCkBAIC0x MDQsMTQgKzEwNCwxNCBAQCBjb25zdCBzdHJ1Y3QgY2xrX29wcyB0aV9jbGtfbXV4X29wcyA9IHsK IAkuZGV0ZXJtaW5lX3JhdGUgPSBfX2Nsa19tdXhfZGV0ZXJtaW5lX3JhdGUsCiB9OwogCi1zdGF0 aWMgc3RydWN0IGNsayAqX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNo YXIgKm5hbWUsCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpfcmVnaXN0ZXJfbXV4KHN0cnVjdCBk ZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgY29uc3QgY2hhciAqKnBhcmVudF9u YW1lcywgdTggbnVtX3BhcmVudHMsCiAJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgX19p b21lbSAqcmVnLAogCQkJCSB1OCBzaGlmdCwgdTMyIG1hc2ssIHU4IGNsa19tdXhfZmxhZ3MsCiAJ CQkJIHUzMiAqdGFibGUsIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IGNsa19tdXggKm11 eDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNs a19pbml0X2RhdGEgaW5pdDsKIAogCS8qIGFsbG9jYXRlIHRoZSBtdXggKi8KQEAgLTE1Miw3ICsx NTIsNyBAQCBzdGF0aWMgc3RydWN0IGNsayAqX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAgKi8KIHN0YXRpYyB2b2lkIG9mX211eF9jbGtfc2V0dXAo c3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3Qg Y2xrX2NvcmUgKmNsazsKIAl2b2lkIF9faW9tZW0gKnJlZzsKIAlpbnQgbnVtX3BhcmVudHM7CiAJ Y29uc3QgY2hhciAqKnBhcmVudF9uYW1lczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3V4NTAw L2FieDUwMC1jbGsuYyBiL2RyaXZlcnMvY2xrL3V4NTAwL2FieDUwMC1jbGsuYwppbmRleCBlN2Jk NjJjLi5mMjdiZTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay91eDUwMC9hYng1MDAtY2xrLmMK KysrIGIvZHJpdmVycy9jbGsvdXg1MDAvYWJ4NTAwLWNsay5jCkBAIC0xMyw3ICsxMyw2IEBACiAj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2Fi eDUwMC9hYjg1MDAuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJs Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAj aW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2RieDUw MC1wcmNtdS5oPgpAQCAtMjMsNyArMjIsNyBAQAogc3RhdGljIGludCBhYjg1MDBfcmVnX2Nsa3Mo c3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0 cnVjdCBjbGtfY29yZSAqY2xrOwogCiAJY29uc3QgY2hhciAqaW50Y2xrX3BhcmVudHNbXSA9IHsi YWI4NTAwX3N5c2NsayIsICJ1bHBjbGsifTsKIAl1MTYgaW50Y2xrX3JlZ19zZWxbXSA9IHswICwg QUI4NTAwX1NZU1VMUENMS0NUUkwxfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3V4NTAwL2Ns ay1wcmNjLmMgYi9kcml2ZXJzL2Nsay91eDUwMC9jbGstcHJjYy5jCmluZGV4IGJkNDc2OWEuLjdl YjA1NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3V4NTAwL2Nsay1wcmNjLmMKKysrIGIvZHJp dmVycy9jbGsvdXg1MDAvY2xrLXByY2MuYwpAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0 IGNsa19vcHMgY2xrX3ByY2Nfa2Nsa19vcHMgPSB7CiAJLmlzX2VuYWJsZWQgPSBjbGtfcHJjY19p c19lbmFibGVkLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19yZWdfcHJjYyhjb25zdCBj aGFyICpuYW1lLAorc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19wcmNjKGNvbnN0IGNo YXIgKm5hbWUsCiAJCQkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJcmVzb3VyY2Vfc2l6 ZV90IHBoeV9iYXNlLAogCQkJCXUzMiBjZ19zZWwsCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGlj IHN0cnVjdCBjbGsgKmNsa19yZWdfcHJjYyhjb25zdCBjaGFyICpuYW1lLAogewogCXN0cnVjdCBj bGtfcHJjYyAqY2xrOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19wcmNjX2luaXQ7Ci0Jc3Ry dWN0IGNsayAqY2xrX3JlZzsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWc7CiAKIAlpZiAoIW5h bWUpIHsKIAkJcHJfZXJyKCJjbGtfcHJjYzogJXMgaW52YWxpZCBhcmd1bWVudHMgcGFzc2VkXG4i LCBfX2Z1bmNfXyk7CkBAIC0xNDIsNyArMTQyLDcgQEAgZnJlZV9jbGs6CiAJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CiB9CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdfcHJjY19wY2xrKGNvbnN0IGNo YXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdfcHJjY19wY2xrKGNvbnN0IGNoYXIg Km5hbWUsCiAJCQkgICAgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSAgICAgIHJlc291 cmNlX3NpemVfdCBwaHlfYmFzZSwKIAkJCSAgICAgIHUzMiBjZ19zZWwsCkBAIC0xNTIsNyArMTUy LDcgQEAgc3RydWN0IGNsayAqY2xrX3JlZ19wcmNjX3BjbGsoY29uc3QgY2hhciAqbmFtZSwKIAkJ CSZjbGtfcHJjY19wY2xrX29wcyk7CiB9CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdfcHJjY19rY2xr KGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdfcHJjY19rY2xrKGNv bnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSAg ICAgIHJlc291cmNlX3NpemVfdCBwaHlfYmFzZSwKIAkJCSAgICAgIHUzMiBjZ19zZWwsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2Nsay91eDUwMC9jbGstcHJjbXUuYyBiL2RyaXZlcnMvY2xrL3V4NTAw L2Nsay1wcmNtdS5jCmluZGV4IGUyZDYzYmMuLmJhYzU0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Y2xrL3V4NTAwL2Nsay1wcmNtdS5jCisrKyBiL2RyaXZlcnMvY2xrL3V4NTAwL2Nsay1wcmNtdS5j CkBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19wcmNtdV9vcHBf dm9sdF9zY2FsYWJsZV9vcHMgPSB7CiAJLnNldF9yYXRlID0gY2xrX3ByY211X3NldF9yYXRlLAog fTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19yZWdfcHJjbXUoY29uc3QgY2hhciAqbmFtZSwK K3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdfcHJjbXUoY29uc3QgY2hhciAqbmFtZSwK IAkJCQkgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJIHU4IGNnX3NlbCwKIAkJCQkgdW5z aWduZWQgbG9uZyByYXRlLApAQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICpj bGtfcmVnX3ByY211KGNvbnN0IGNoYXIgKm5hbWUsCiB7CiAJc3RydWN0IGNsa19wcmNtdSAqY2xr OwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19wcmNtdV9pbml0OwotCXN0cnVjdCBjbGsgKmNs a19yZWc7CisJc3RydWN0IGNsa19jb3JlICpjbGtfcmVnOwogCiAJaWYgKCFuYW1lKSB7CiAJCXBy X2VycigiY2xrX3ByY211OiAlcyBpbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWRcbiIsIF9fZnVuY19f KTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBmcmVlX2NsazoKIAlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKIH0KIAotc3RydWN0IGNsayAqY2xrX3JlZ19wcmNtdV9zY2FsYWJsZShjb25zdCBjaGFyICpu YW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3ByY211X3NjYWxhYmxlKGNvbnN0IGNoYXIg Km5hbWUsCiAJCQkJICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJICAgdTggY2dfc2Vs LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwKQEAgLTMwMiw3ICszMDIsNyBAQCBzdHJ1Y3Qg Y2xrICpjbGtfcmVnX3ByY211X3NjYWxhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkmY2xrX3By Y211X3NjYWxhYmxlX29wcyk7CiB9CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdfcHJjbXVfZ2F0ZShj b25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3ByY211X2dhdGUoY29u c3QgY2hhciAqbmFtZSwKIAkJCSAgICAgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCSAg ICAgICB1OCBjZ19zZWwsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKQEAgLTMxMSw3 ICszMTEsNyBAQCBzdHJ1Y3QgY2xrICpjbGtfcmVnX3ByY211X2dhdGUoY29uc3QgY2hhciAqbmFt ZSwKIAkJCSZjbGtfcHJjbXVfZ2F0ZV9vcHMpOwogfQogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnX3By Y211X3NjYWxhYmxlX3JhdGUoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xr X3JlZ19wcmNtdV9zY2FsYWJsZV9yYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCWNvbnN0IGNo YXIgKnBhcmVudF9uYW1lLAogCQkJCQl1OCBjZ19zZWwsCiAJCQkJCXVuc2lnbmVkIGxvbmcgcmF0 ZSwKQEAgLTMyMSw3ICszMjEsNyBAQCBzdHJ1Y3QgY2xrICpjbGtfcmVnX3ByY211X3NjYWxhYmxl X3JhdGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCSZjbGtfcHJjbXVfc2NhbGFibGVfcmF0ZV9vcHMp OwogfQogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnX3ByY211X3JhdGUoY29uc3QgY2hhciAqbmFtZSwK K3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19wcmNtdV9yYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJ CQkgICAgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkgICAgICAgdTggY2dfc2VsLAog CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC0zMzAsNyArMzMwLDcgQEAgc3RydWN0 IGNsayAqY2xrX3JlZ19wcmNtdV9yYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkmY2xrX3ByY211 X3JhdGVfb3BzKTsKIH0KIAotc3RydWN0IGNsayAqY2xrX3JlZ19wcmNtdV9vcHBfZ2F0ZShjb25z dCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3ByY211X29wcF9nYXRlKGNv bnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJICAg dTggY2dfc2VsLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC0zMzksNyArMzM5LDcg QEAgc3RydWN0IGNsayAqY2xrX3JlZ19wcmNtdV9vcHBfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAog CQkJJmNsa19wcmNtdV9vcHBfZ2F0ZV9vcHMpOwogfQogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnX3By Y211X29wcF92b2x0X3NjYWxhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUg KmNsa19yZWdfcHJjbXVfb3BwX3ZvbHRfc2NhbGFibGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJ ICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJCQkgICAgdTggY2dfc2VsLAogCQkJCQkg ICAgdW5zaWduZWQgbG9uZyByYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdXg1MDAvY2xr LXN5c2N0cmwuYyBiL2RyaXZlcnMvY2xrL3V4NTAwL2Nsay1zeXNjdHJsLmMKaW5kZXggZTM2NGM5 ZC4uZGM2NjA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdXg1MDAvY2xrLXN5c2N0cmwuYwor KysgYi9kcml2ZXJzL2Nsay91eDUwMC9jbGstc3lzY3RybC5jCkBAIC0xMTQsNyArMTE0LDcgQEAg c3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19zeXNjdHJsX3NldF9wYXJlbnRfb3BzID0gewogCS5n ZXRfcGFyZW50ID0gY2xrX3N5c2N0cmxfZ2V0X3BhcmVudCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qg Y2xrICpjbGtfcmVnX3N5c2N0cmwoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIHN0cnVjdCBj bGtfY29yZSAqY2xrX3JlZ19zeXNjdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQljb25zdCBj aGFyICpuYW1lLAogCQkJCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMsCiAJCQkJdTggbnVtX3Bh cmVudHMsCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHN0cnVjdCBjbGsgKmNsa19yZWdfc3lz Y3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IGNsa19zeXNjdHJsICpjbGs7CiAJ c3RydWN0IGNsa19pbml0X2RhdGEgY2xrX3N5c2N0cmxfaW5pdDsKLQlzdHJ1Y3QgY2xrICpjbGtf cmVnOworCXN0cnVjdCBjbGtfY29yZSAqY2xrX3JlZzsKIAlpbnQgaTsKIAogCWlmICghZGV2KQpA QCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfcmVnX3N5c2N0cmwoc3Ry dWN0IGRldmljZSAqZGV2LAogCXJldHVybiBjbGtfcmVnOwogfQogCi1zdHJ1Y3QgY2xrICpjbGtf cmVnX3N5c2N0cmxfZ2F0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdHJ1Y3QgY2xrX2NvcmUgKmNs a19yZWdfc3lzY3RybF9nYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQljb25zdCBjaGFyICpu YW1lLAogCQkJCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJCXUxNiByZWdfc2VsLApAQCAt MTkzLDcgKzE5Myw3IEBAIHN0cnVjdCBjbGsgKmNsa19yZWdfc3lzY3RybF9nYXRlKHN0cnVjdCBk ZXZpY2UgKmRldiwKIAkJCWZsYWdzLCAmY2xrX3N5c2N0cmxfZ2F0ZV9vcHMpOwogfQogCi1zdHJ1 Y3QgY2xrICpjbGtfcmVnX3N5c2N0cmxfZ2F0ZV9maXhlZF9yYXRlKHN0cnVjdCBkZXZpY2UgKmRl diwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19zeXNjdHJsX2dhdGVfZml4ZWRfcmF0ZShzdHJ1 Y3QgZGV2aWNlICpkZXYsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCWNvbnN0IGNoYXIg KnBhcmVudF9uYW1lLAogCQkJCQl1MTYgcmVnX3NlbCwKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1 Y3QgY2xrICpjbGtfcmVnX3N5c2N0cmxfZ2F0ZV9maXhlZF9yYXRlKHN0cnVjdCBkZXZpY2UgKmRl diwKIAkJCSZjbGtfc3lzY3RybF9nYXRlX2ZpeGVkX3JhdGVfb3BzKTsKIH0KIAotc3RydWN0IGNs ayAqY2xrX3JlZ19zeXNjdHJsX3NldF9wYXJlbnQoc3RydWN0IGRldmljZSAqZGV2LAorc3RydWN0 IGNsa19jb3JlICpjbGtfcmVnX3N5c2N0cmxfc2V0X3BhcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYs CiAJCQkJY29uc3QgY2hhciAqbmFtZSwKIAkJCQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAog CQkJCXU4IG51bV9wYXJlbnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdXg1MDAvY2xrLmgg Yi9kcml2ZXJzL2Nsay91eDUwMC9jbGsuaAppbmRleCBhMmJiOTJkLi5hY2I1MGY4IDEwMDY0NAot LS0gYS9kcml2ZXJzL2Nsay91eDUwMC9jbGsuaAorKysgYi9kcml2ZXJzL2Nsay91eDUwMC9jbGsu aApAQCAtMTAsNTYgKzEwLDU1IEBACiAjaWZuZGVmIF9fVVg1MDBfQ0xLX0gKICNkZWZpbmUgX19V WDUwMF9DTEtfSAogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2 aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotc3RydWN0IGNsayAqY2xrX3JlZ19w cmNjX3BjbGsoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19wcmNj X3BjbGsoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1l LAogCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHBoeV9iYXNlLAogCQkJICAgICAgdTMyIGNnX3Nl bCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1zdHJ1Y3QgY2xrICpjbGtfcmVn X3ByY2Nfa2Nsayhjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3By Y2Nfa2Nsayhjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgY29uc3QgY2hhciAqcGFyZW50X25h bWUsCiAJCQkgICAgICByZXNvdXJjZV9zaXplX3QgcGh5X2Jhc2UsCiAJCQkgICAgICB1MzIgY2df c2VsLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLXN0cnVjdCBjbGsgKmNsa19y ZWdfcHJjbXVfc2NhbGFibGUoY29uc3QgY2hhciAqbmFtZSwKK3N0cnVjdCBjbGtfY29yZSAqY2xr X3JlZ19wcmNtdV9zY2FsYWJsZShjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgIGNvbnN0IGNoYXIg KnBhcmVudF9uYW1lLAogCQkJCSAgIHU4IGNnX3NlbCwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHJh dGUsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdf cHJjbXVfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3By Y211X2dhdGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgICBjb25zdCBjaGFyICpwYXJlbnRf bmFtZSwKIAkJCSAgICAgICB1OCBjZ19zZWwsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn cyk7CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdfcHJjbXVfc2NhbGFibGVfcmF0ZShjb25zdCBjaGFy ICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3ByY211X3NjYWxhYmxlX3JhdGUoY29u c3QgY2hhciAqbmFtZSwKIAkJCQkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJCXU4IGNn X3NlbCwKIAkJCQkJdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdz KTsKIAotc3RydWN0IGNsayAqY2xrX3JlZ19wcmNtdV9yYXRlKGNvbnN0IGNoYXIgKm5hbWUsCitz dHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdfcHJjbXVfcmF0ZShjb25zdCBjaGFyICpuYW1lLAogCQkJ ICAgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJICAgICAgIHU4IGNnX3NlbCwKIAkJ CSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAotc3RydWN0IGNsayAqY2xrX3JlZ19wcmNt dV9vcHBfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAorc3RydWN0IGNsa19jb3JlICpjbGtfcmVnX3By Y211X29wcF9nYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgY29uc3QgY2hhciAqcGFyZW50 X25hbWUsCiAJCQkJICAgdTggY2dfc2VsLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwog Ci1zdHJ1Y3QgY2xrICpjbGtfcmVnX3ByY211X29wcF92b2x0X3NjYWxhYmxlKGNvbnN0IGNoYXIg Km5hbWUsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdfcHJjbXVfb3BwX3ZvbHRfc2NhbGFibGUo Y29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJ CQkgICAgdTggY2dfc2VsLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCQkgICAg dW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdfc3lzY3RybF9nYXRl KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19zeXNjdHJsX2dh dGUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJCSBjb25z dCBjaGFyICpwYXJlbnRfbmFtZSwKIAkJCQkgdTE2IHJlZ19zZWwsCkBAIC02OCw3ICs2Nyw3IEBA IHN0cnVjdCBjbGsgKmNsa19yZWdfc3lzY3RybF9nYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJ CQkgdW5zaWduZWQgbG9uZyBlbmFibGVfZGVsYXlfdXMsCiAJCQkJIHVuc2lnbmVkIGxvbmcgZmxh Z3MpOwogCi1zdHJ1Y3QgY2xrICpjbGtfcmVnX3N5c2N0cmxfZ2F0ZV9maXhlZF9yYXRlKHN0cnVj dCBkZXZpY2UgKmRldiwKK3N0cnVjdCBjbGtfY29yZSAqY2xrX3JlZ19zeXNjdHJsX2dhdGVfZml4 ZWRfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAog CQkJCQkgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQkJCSAgICB1MTYgcmVnX3NlbCwK QEAgLTc4LDcgKzc3LDcgQEAgc3RydWN0IGNsayAqY2xrX3JlZ19zeXNjdHJsX2dhdGVfZml4ZWRf cmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuYWJsZV9k ZWxheV91cywKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1zdHJ1Y3QgY2xrICpj bGtfcmVnX3N5c2N0cmxfc2V0X3BhcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdHJ1Y3QgY2xr X2NvcmUgKmNsa19yZWdfc3lzY3RybF9zZXRfcGFyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJ CQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqKnBhcmVu dF9uYW1lcywKIAkJCQkgICAgICAgdTggbnVtX3BhcmVudHMsCmRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay91eDUwMC91ODUwMF9jbGsuYyBiL2RyaXZlcnMvY2xrL3V4NTAwL3U4NTAwX2Nsay5jCmlu ZGV4IDgwMDY5YzMuLjcwODU4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3V4NTAwL3U4NTAw X2Nsay5jCisrKyBiL2RyaXZlcnMvY2xrL3V4NTAwL3U4NTAwX2Nsay5jCkBAIC03LDcgKzcsNiBA QAogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVy c2lvbiAyCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Ns a2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4 L21mZC9kYng1MDAtcHJjbXUuaD4KQEAgLTE5LDcgKzE4LDcgQEAgdm9pZCB1ODUwMF9jbGtfaW5p dCh1MzIgY2xrcnN0MV9iYXNlLCB1MzIgY2xrcnN0Ml9iYXNlLCB1MzIgY2xrcnN0M19iYXNlLAog ewogCXN0cnVjdCBwcmNtdV9md192ZXJzaW9uICpmd192ZXJzaW9uOwogCWNvbnN0IGNoYXIgKnNn YWNsa19wYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUg KmNsazsKIAogCS8qIENsb2NrIHNvdXJjZXMgKi8KIAljbGsgPSBjbGtfcmVnX3ByY211X2dhdGUo InNvYzBfcGxsIiwgTlVMTCwgUFJDTVVfUExMU09DMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L3V4NTAwL3U4NTAwX29mX2Nsay5jIGIvZHJpdmVycy9jbGsvdXg1MDAvdTg1MDBfb2ZfY2xrLmMK aW5kZXggN2I1NWVmOC4uNjFlZmI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdXg1MDAvdTg1 MDBfb2ZfY2xrLmMKKysrIGIvZHJpdmVycy9jbGsvdXg1MDAvdTg1MDBfb2ZfY2xrLmMKQEAgLTgs NyArOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgv Y2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXBy b3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2RieDUwMC1wcmNtdS5oPgpAQCAtMTgsOSAr MTcsOSBAQAogI2RlZmluZSBQUkNDX05VTV9QRVJJUEhfQ0xVU1RFUlMgNgogI2RlZmluZSBQUkND X1BFUklQSFNfUEVSX0NMVVNURVIgMzIKIAotc3RhdGljIHN0cnVjdCBjbGsgKnByY211X2Nsa1tQ UkNNVV9OVU1fQ0xLU107Ci1zdGF0aWMgc3RydWN0IGNsayAqcHJjY19wY2xrWyhQUkNDX05VTV9Q RVJJUEhfQ0xVU1RFUlMgKyAxKSAqIFBSQ0NfUEVSSVBIU19QRVJfQ0xVU1RFUl07Ci1zdGF0aWMg c3RydWN0IGNsayAqcHJjY19rY2xrWyhQUkNDX05VTV9QRVJJUEhfQ0xVU1RFUlMgKyAxKSAqIFBS Q0NfUEVSSVBIU19QRVJfQ0xVU1RFUl07CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpwcmNtdV9j bGtbUFJDTVVfTlVNX0NMS1NdOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqcHJjY19wY2xrWyhQ UkNDX05VTV9QRVJJUEhfQ0xVU1RFUlMgKyAxKSAqIFBSQ0NfUEVSSVBIU19QRVJfQ0xVU1RFUl07 CitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpwcmNjX2tjbGtbKFBSQ0NfTlVNX1BFUklQSF9DTFVT VEVSUyArIDEpICogUFJDQ19QRVJJUEhTX1BFUl9DTFVTVEVSXTsKIAogI2RlZmluZSBQUkNDX1NI T1coY2xrLCBiYXNlLCBiaXQpIFwKIAljbGtbKGJhc2UgKiBQUkNDX1BFUklQSFNfUEVSX0NMVVNU RVIpICsgYml0XQpAQCAtMjksMTAgKzI4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xrICpwcmNjX2tj bGtbKFBSQ0NfTlVNX1BFUklQSF9DTFVTVEVSUyArIDEpICogUFJDQ19QRVJJUEhTX1BFUl9DCiAj ZGVmaW5lIFBSQ0NfS0NMS19TVE9SRShjbGssIGJhc2UsIGJpdCkgICAgICAgIFwKIAlwcmNjX2tj bGtbKGJhc2UgKiBQUkNDX1BFUklQSFNfUEVSX0NMVVNURVIpICsgYml0XSA9IGNsawogCi1zdGF0 aWMgc3RydWN0IGNsayAqdXg1MDBfdHdvY2VsbF9nZXQoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAq Y2xrc3BlYywKK3N0YXRpYyBzdHJ1Y3QgY2xrX2NvcmUgKnV4NTAwX3R3b2NlbGxfZ2V0KHN0cnVj dCBvZl9waGFuZGxlX2FyZ3MgKmNsa3NwZWMsCiAJCQkJICAgICB2b2lkICpkYXRhKQogewotCXN0 cnVjdCBjbGsgKipjbGtfZGF0YSA9IGRhdGE7CisJc3RydWN0IGNsa19jb3JlICoqY2xrX2RhdGEg PSBkYXRhOwogCXVuc2lnbmVkIGludCBiYXNlLCBiaXQ7CiAKIAlpZiAoY2xrc3BlYy0+YXJnc19j b3VudCAhPSAyKQpAQCAtNjEsNyArNjAsNyBAQCB2b2lkIHU4NTAwX29mX2Nsa19pbml0KHUzMiBj bGtyc3QxX2Jhc2UsIHUzMiBjbGtyc3QyX2Jhc2UsIHUzMiBjbGtyc3QzX2Jhc2UsCiAJc3RydWN0 IGRldmljZV9ub2RlICpucCA9IE5VTEw7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5V TEw7CiAJY29uc3QgY2hhciAqc2dhY2xrX3BhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGNsayAqY2xr LCAqcnRjX2NsaywgKnR3ZF9jbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGssICpydGNfY2xrLCAq dHdkX2NsazsKIAogCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQogCQlucCA9IG9mX2ZpbmRf bWF0Y2hpbmdfbm9kZShOVUxMLCB1ODUwMF9jbGtfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9jbGsvdXg1MDAvdTg1NDBfY2xrLmMgYi9kcml2ZXJzL2Nsay91eDUwMC91ODU0MF9jbGsu YwppbmRleCAyMGM4YWRkLi5hNTA4ODQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay91eDUwMC91 ODU0MF9jbGsuYworKysgYi9kcml2ZXJzL2Nsay91eDUwMC91ODU0MF9jbGsuYwpAQCAtNyw3ICs3 LDYgQEAKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwp IHZlcnNpb24gMgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51 eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxs aW51eC9tZmQvZGJ4NTAwLXByY211Lmg+CkBAIC0xNyw3ICsxNiw3IEBACiB2b2lkIHU4NTQwX2Ns a19pbml0KHUzMiBjbGtyc3QxX2Jhc2UsIHUzMiBjbGtyc3QyX2Jhc2UsIHUzMiBjbGtyc3QzX2Jh c2UsCiAJCSAgICB1MzIgY2xrcnN0NV9iYXNlLCB1MzIgY2xrcnN0Nl9iYXNlKQogewotCXN0cnVj dCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCS8qIENsb2NrIHNvdXJjZXMu ICovCiAJLyogRml4ZWQgQ2xvY2tHZW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3V4NTAw L3U5NTQwX2Nsay5jIGIvZHJpdmVycy9jbGsvdXg1MDAvdTk1NDBfY2xrLmMKaW5kZXggNDQ3OTQ3 OC4uODkwNTVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdXg1MDAvdTk1NDBfY2xrLmMKKysr IGIvZHJpdmVycy9jbGsvdXg1MDAvdTk1NDBfY2xrLmMKQEAgLTcsNyArNyw2IEBACiAgKiBMaWNl bnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAq LwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAj aW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2RieDUw MC1wcmNtdS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1pY3N0LmMg Yi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuYwppbmRleCBiYzk2ZjEwLi5kNTcxOWUw IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuYworKysgYi9kcml2 ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuYwpAQCAtMTMsNyArMTMsNiBAQAogICogSUNTVCBj bG9jayBjb2RlIGZyb20gdGhlIEFSTSB0cmVlIHNob3VsZCBwcm9iYWJseSBiZSBtZXJnZWQgaW50 byB0aGlzCiAgKiBmaWxlLgogICovCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8 bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CkBAIC0xMjEsMTMgKzEyMCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgaWNzdF9vcHMgPSB7CiAJLnNldF9yYXRlID0gaWNzdF9zZXRfcmF0ZSwKIH07CiAK LXN0cnVjdCBjbGsgKmljc3RfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0cnVj dCBjbGtfY29yZSAqaWNzdF9jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQkJY29u c3Qgc3RydWN0IGNsa19pY3N0X2Rlc2MgKmRlc2MsCiAJCQljb25zdCBjaGFyICpuYW1lLAogCQkJ Y29uc3QgY2hhciAqcGFyZW50X25hbWUsCiAJCQl2b2lkIF9faW9tZW0gKmJhc2UpCiB7Ci0Jc3Ry dWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCXN0cnVjdCBjbGtfaWNzdCAq aWNzdDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCXN0cnVjdCBpY3N0X3BhcmFtcyAq cGNsb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1pY3N0LmggYi9k cml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuaAppbmRleCAwNGU2ZjBhLi5lZGU4NjdiIDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuaAorKysgYi9kcml2ZXJz L2Nsay92ZXJzYXRpbGUvY2xrLWljc3QuaApAQCAtMTMsNyArMTMsNyBAQCBzdHJ1Y3QgY2xrX2lj c3RfZGVzYyB7CiAJdTMyIGxvY2tfb2Zmc2V0OwogfTsKIAotc3RydWN0IGNsayAqaWNzdF9jbGtf cmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAorc3RydWN0IGNsa19jb3JlICppY3N0X2Nsa19y ZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2xrX2lj c3RfZGVzYyAqZGVzYywKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgICBjb25z dCBjaGFyICpwYXJlbnRfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9j bGstaW1wZDEuYyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstaW1wZDEuYwppbmRleCAxY2Mx MzMwLi40NjY4MGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLWltcGQx LmMKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1pbXBkMS5jCkBAIC03LDcgKzcsNiBA QAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNp bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNp bmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRl IDxsaW51eC9pby5oPgpAQCAtMjEsMTggKzIwLDE4IEBACiAKIHN0cnVjdCBpbXBkMV9jbGsgewog CWNoYXIgKnBjbGtuYW1lOwotCXN0cnVjdCBjbGsgKnBjbGs7CisJc3RydWN0IGNsa19jb3JlICpw Y2xrOwogCWNoYXIgKnZjbzFuYW1lOwotCXN0cnVjdCBjbGsgKnZjbzFjbGs7CisJc3RydWN0IGNs a19jb3JlICp2Y28xY2xrOwogCWNoYXIgKnZjbzJuYW1lOwotCXN0cnVjdCBjbGsgKnZjbzJjbGs7 Ci0Jc3RydWN0IGNsayAqbW1jaWNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnZjbzJjbGs7CisJc3Ry dWN0IGNsa19jb3JlICptbWNpY2xrOwogCWNoYXIgKnVhcnRuYW1lOwotCXN0cnVjdCBjbGsgKnVh cnRjbGs7CisJc3RydWN0IGNsa19jb3JlICp1YXJ0Y2xrOwogCWNoYXIgKnNwaW5hbWU7Ci0Jc3Ry dWN0IGNsayAqc3BpY2xrOworCXN0cnVjdCBjbGtfY29yZSAqc3BpY2xrOwogCWNoYXIgKnNjbmFt ZTsKLQlzdHJ1Y3QgY2xrICpzY2NsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKnNjY2xrOwogCXN0cnVj dCBjbGtfbG9va3VwICpjbGtzWzE1XTsKIH07CiAKQEAgLTg3LDggKzg2LDggQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfaWNzdF9kZXNjIGltcGQxX2ljc3QyX2Rlc2MgPSB7CiB2b2lkIGludGVn cmF0b3JfaW1wZDFfY2xrX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaWQp CiB7CiAJc3RydWN0IGltcGQxX2NsayAqaW1jOwotCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3Qg Y2xrICpwY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqcGNs azsKIAlpbnQgaTsKIAogCWlmIChpZCA+IDMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3Zl cnNhdGlsZS9jbGstcmVhbHZpZXcuYyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstcmVhbHZp ZXcuYwppbmRleCBjOGI1MjMxLi41MjRjYmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJz YXRpbGUvY2xrLXJlYWx2aWV3LmMKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1yZWFs dmlldy5jCkBAIC02LDcgKzYsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAj aW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVk ZSA8bGludXgvaW8uaD4KQEAgLTUwLDcgKzQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtf aWNzdF9kZXNjIF9faW5pdGRhdGEgcmVhbHZpZXdfb3NjNF9kZXNjID0gewogICovCiB2b2lkIF9f aW5pdCByZWFsdmlld19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnN5c2Jhc2UsIGJvb2wgaXNfcGIx MTc2KQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCS8q IEFQQiBjbG9jayBkdW1teSAqLwogCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEws ICJhcGJfcGNsayIsIE5VTEwsIENMS19JU19ST09ULCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL3ZlcnNhdGlsZS9jbGstc3A4MTAuYyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstc3A4 MTAuYwppbmRleCBjNmU4NmE5Li45MjU2ZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJz YXRpbGUvY2xrLXNwODEwLmMKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay1zcDgxMC5j CkBAIC0yNSw3ICsyNSw3IEBAIHN0cnVjdCBjbGtfc3A4MTA7CiAKIHN0cnVjdCBjbGtfc3A4MTBf dGltZXJjbGtlbiB7CiAJc3RydWN0IGNsa19odyBodzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNsa19zcDgxMCAqc3A4MTA7CiAJaW50IGNoYW5u ZWw7CiB9OwpAQCAtMzYsOCArMzYsOCBAQCBzdHJ1Y3QgY2xrX3NwODEwIHsKIAl2b2lkIF9faW9t ZW0gKmJhc2U7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBjbGtfc3A4MTBfdGltZXJjbGtl biB0aW1lcmNsa2VuWzRdOwotCXN0cnVjdCBjbGsgKnJlZmNsazsKLQlzdHJ1Y3QgY2xrICp0aW1j bGs7CisJc3RydWN0IGNsa19jb3JlICpyZWZjbGs7CisJc3RydWN0IGNsa19jb3JlICp0aW1jbGs7 CiB9OwogCiBzdGF0aWMgdTggY2xrX3NwODEwX3RpbWVyY2xrZW5fZ2V0X3BhcmVudChzdHJ1Y3Qg Y2xrX2h3ICpodykKQEAgLTc5LDI5ICs3OSwzMSBAQCBzdGF0aWMgaW50IGNsa19zcDgxMF90aW1l cmNsa2VuX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCiB7CiAJc3RydWN0IGNsa19zcDgxMF90 aW1lcmNsa2VuICp0aW1lcmNsa2VuID0gdG9fY2xrX3NwODEwX3RpbWVyY2xrZW4oaHcpOwogCXN0 cnVjdCBjbGtfc3A4MTAgKnNwODEwID0gdGltZXJjbGtlbi0+c3A4MTA7Ci0Jc3RydWN0IGNsayAq b2xkX3BhcmVudCA9IF9fY2xrX2dldF9wYXJlbnQoaHctPmNsayk7Ci0Jc3RydWN0IGNsayAqbmV3 X3BhcmVudDsKKwlzdHJ1Y3QgY2xrX2NvcmUgKm9sZF9wYXJlbnQgPSBfX2Nsa19nZXRfcGFyZW50 KGh3LT5jbGspOworCXN0cnVjdCBjbGtfY29yZSAqbmV3X3BhcmVudDsKIAogCWlmICghc3A4MTAt PnJlZmNsaykKLQkJc3A4MTAtPnJlZmNsayA9IG9mX2Nsa19nZXQoc3A4MTAtPm5vZGUsIHNwODEw LT5yZWZjbGtfaW5kZXgpOworCQlzcDgxMC0+cmVmY2xrID0gb2ZfY2xrX3Byb3ZpZGVyX2dldChz cDgxMC0+bm9kZSwKKwkJCQkJCSAgICBzcDgxMC0+cmVmY2xrX2luZGV4KTsKIAogCWlmICghc3A4 MTAtPnRpbWNsaykKLQkJc3A4MTAtPnRpbWNsayA9IG9mX2Nsa19nZXQoc3A4MTAtPm5vZGUsIHNw ODEwLT50aW1jbGtfaW5kZXgpOworCQlzcDgxMC0+dGltY2xrID0gb2ZfY2xrX3Byb3ZpZGVyX2dl dChzcDgxMC0+bm9kZSwKKwkJCQkJCSAgICBzcDgxMC0+dGltY2xrX2luZGV4KTsKIAogCWlmIChX QVJOX09OKElTX0VSUihzcDgxMC0+cmVmY2xrKSB8fCBJU19FUlIoc3A4MTAtPnRpbWNsaykpKQog CQlyZXR1cm4gLUVOT0VOVDsKIAogCS8qIFNlbGVjdCBmYXN0ZXN0IHBhcmVudCAqLwotCWlmIChj bGtfZ2V0X3JhdGUoc3A4MTAtPnJlZmNsaykgPiBjbGtfZ2V0X3JhdGUoc3A4MTAtPnRpbWNsaykp CisJaWYgKGNsa19wcm92aWRlcl9nZXRfcmF0ZShzcDgxMC0+cmVmY2xrKSA+IGNsa19wcm92aWRl cl9nZXRfcmF0ZShzcDgxMC0+dGltY2xrKSkKIAkJbmV3X3BhcmVudCA9IHNwODEwLT5yZWZjbGs7 CiAJZWxzZQogCQluZXdfcGFyZW50ID0gc3A4MTAtPnRpbWNsazsKIAogCS8qIFN3aXRjaCB0aGUg cGFyZW50IGlmIG5lY2Vzc2FyeSAqLwogCWlmIChvbGRfcGFyZW50ICE9IG5ld19wYXJlbnQpIHsK LQkJY2xrX3ByZXBhcmUobmV3X3BhcmVudCk7Ci0JCWNsa19zZXRfcGFyZW50KGh3LT5jbGssIG5l d19wYXJlbnQpOwotCQljbGtfdW5wcmVwYXJlKG9sZF9wYXJlbnQpOworCQljbGtfcHJvdmlkZXJf cHJlcGFyZShuZXdfcGFyZW50KTsKKwkJY2xrX3Byb3ZpZGVyX3NldF9wYXJlbnQoaHctPmNsaywg bmV3X3BhcmVudCk7CisJCWNsa19wcm92aWRlcl91bnByZXBhcmUob2xkX3BhcmVudCk7CiAJfQog CiAJcmV0dXJuIDA7CkBAIC0xMTIsOCArMTE0LDggQEAgc3RhdGljIHZvaWQgY2xrX3NwODEwX3Rp bWVyY2xrZW5fdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQogCXN0cnVjdCBjbGtfc3A4MTBf dGltZXJjbGtlbiAqdGltZXJjbGtlbiA9IHRvX2Nsa19zcDgxMF90aW1lcmNsa2VuKGh3KTsKIAlz dHJ1Y3QgY2xrX3NwODEwICpzcDgxMCA9IHRpbWVyY2xrZW4tPnNwODEwOwogCi0JY2xrX3B1dChz cDgxMC0+dGltY2xrKTsKLQljbGtfcHV0KHNwODEwLT5yZWZjbGspOworCV9fY2xrX3B1dChzcDgx MC0+dGltY2xrKTsKKwlfX2Nsa19wdXQoc3A4MTAtPnJlZmNsayk7CiB9CiAKIHN0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyBjbGtfc3A4MTBfdGltZXJjbGtlbl9vcHMgPSB7CkBAIC0xMjMsNyAr MTI1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19zcDgxMF90aW1lcmNsa2Vu X29wcyA9IHsKIAkuc2V0X3BhcmVudCA9IGNsa19zcDgxMF90aW1lcmNsa2VuX3NldF9wYXJlbnQs CiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrX3NwODEwX3RpbWVyY2xrZW5fb2ZfZ2V0KHN0 cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmNsa3NwZWMsCitzdGF0aWMgc3RydWN0IGNsa19jb3JlICpj bGtfc3A4MTBfdGltZXJjbGtlbl9vZl9nZXQoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqY2xrc3Bl YywKIAkJdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2xrX3NwODEwICpzcDgxMCA9IGRhdGE7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZlcnNhdGlsZS5jIGIvZHJpdmVy cy9jbGsvdmVyc2F0aWxlL2Nsay12ZXJzYXRpbGUuYwppbmRleCBhNzY5ODFlLi4xYmRkNTQyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZlcnNhdGlsZS5jCisrKyBiL2Ry aXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmVyc2F0aWxlLmMKQEAgLTgsNyArOCw2IEBACiAgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2luY2x1ZGUg PGxpbnV4L2Nsay1wcm92aWRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4 L29mLmg+CkBAIC02MCw3ICs1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2ljc3RfZGVz YyB2ZXJzYXRpbGVfYXV4b3NjX2Rlc2MgX19pbml0Y29uc3QgPSB7CiBzdGF0aWMgdm9pZCBfX2lu aXQgY21fb3NjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJY29uc3Qgc3RydWN0 IGNsa19pY3N0X2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRUlO VkFMKTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJY29uc3Qg Y2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsKIAljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYyBiL2Ry aXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKaW5kZXggNTI5YTU5Yy4uYzll MTc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2Mu YworKysgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCkBAIC03Myw3 ICs3Myw3IEBAIHN0YXRpYyBpbnQgdmV4cHJlc3Nfb3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCiAJc3RydWN0IGNsa19sb29rdXAgKmNsID0gcGRldi0+ZGV2LnBsYXRmb3Jt X2RhdGE7IC8qIE5vbi1EVCBsb29rdXAgKi8KIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owog CXN0cnVjdCB2ZXhwcmVzc19vc2MgKm9zYzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNs a19jb3JlICpjbGs7CiAJdTMyIHJhbmdlWzJdOwogCiAJb3NjID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLmMgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZl eHByZXNzLmMKaW5kZXggMmQ1ZTFiNC4uZTc3ZjNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv dmVyc2F0aWxlL2Nsay12ZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGst dmV4cHJlc3MuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2lu Y2x1ZGUgPGxpbnV4L3ZleHByZXNzLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZXhwcmVzc19z cDgxMF90aW1lcmNsa2VuWzRdOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqdmV4cHJlc3Nfc3A4 MTBfdGltZXJjbGtlbls0XTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmV4cHJlc3Nfc3A4MTBf bG9jayk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zcDgxMF9pbml0KHZvaWQgX19p b21lbSAqYmFzZSkKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2 ZXhwcmVzc19jbGtfMjRtaHpfcGVyaXBoc1tdIF9faW5pdGNvbnN0ID0gewogCiB2b2lkIF9faW5p dCB2ZXhwcmVzc19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnNwODEwX2Jhc2UpCiB7Ci0Jc3RydWN0 IGNsayAqY2xrOworCXN0cnVjdCBjbGtfY29yZSAqY2xrOwogCWludCBpOwogCiAJY2xrID0gY2xr X3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgImR1bW15X2FwYl9wY2xrIiwgTlVMTCwKQEAgLTc3 LDcgKzc3LDcgQEAgdm9pZCBfX2luaXQgdmV4cHJlc3NfY2xrX2luaXQodm9pZCBfX2lvbWVtICpz cDgxMF9iYXNlKQogCXZleHByZXNzX3NwODEwX2luaXQoc3A4MTBfYmFzZSk7CiAKIAlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSh2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuKTsgaSsrKQotCQlX QVJOX09OKGNsa19zZXRfcGFyZW50KHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5baV0sIGNsaykp OworCQlXQVJOX09OKGNsa19wcm92aWRlcl9zZXRfcGFyZW50KHZleHByZXNzX3NwODEwX3RpbWVy Y2xrZW5baV0sIGNsaykpOwogCiAJV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KHZleHByZXNz X3NwODEwX3RpbWVyY2xrZW5bMF0sCiAJCQkJInYybS10aW1lcjAiLCAic3A4MDQiKSk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2Nsay94ODYvY2xrLWxwdC5jIGIvZHJpdmVycy9jbGsveDg2L2Nsay1s cHQuYwppbmRleCA4MTJmODNmLi5mYmI2ODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay94ODYv Y2xrLWxwdC5jCisrKyBiL2RyaXZlcnMvY2xrL3g4Ni9jbGstbHB0LmMKQEAgLTEwLDcgKzEwLDYg QEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAK LSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNs dWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTIx LDcgKzIwLDcgQEAKIHN0YXRpYyBpbnQgbHB0X2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQogewogCXN0cnVjdCBscHNzX2Nsa19kYXRhICpkcnZkYXRhOwotCXN0cnVjdCBj bGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAogCWRydmRhdGEgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcnZkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnZk YXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenlucS9jbGtjLmMgYi9kcml2ZXJzL2Nsay96 eW5xL2Nsa2MuYwppbmRleCAyNDZjZjEyLi4wZWZkZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Ns ay96eW5xL2Nsa2MuYworKysgYi9kcml2ZXJzL2Nsay96eW5xL2Nsa2MuYwpAQCAtNjcsOCArNjcs OCBAQCBlbnVtIHp5bnFfY2xrIHsKIAlpMmMwX2FwZXIsIGkyYzFfYXBlciwgdWFydDBfYXBlciwg dWFydDFfYXBlciwgZ3Bpb19hcGVyLCBscXNwaV9hcGVyLAogCXNtY19hcGVyLCBzd2R0LCBkYmdf dHJjLCBkYmdfYXBiLCBjbGtfbWF4fTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKnBzX2NsazsKLXN0 YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW2Nsa19tYXhdOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAq cHNfY2xrOworc3RhdGljIHN0cnVjdCBjbGtfY29yZSAqY2xrc1tjbGtfbWF4XTsKIHN0YXRpYyBz dHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAogc3RhdGljIERFRklORV9TUElOTE9D Syhhcm1wbGxfbG9jayk7CkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHp5 bnFfY2xrX3JlZ2lzdGVyX2ZjbGsoZW51bSB6eW5xX2NsayBmY2xrLAogCQljb25zdCBjaGFyICpj bGtfbmFtZSwgdm9pZCBfX2lvbWVtICpmY2xrX2N0cmxfcmVnLAogCQljb25zdCBjaGFyICoqcGFy ZW50cywgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3Jl ICpjbGs7CiAJdTMyIGVuYWJsZV9yZWc7CiAJY2hhciAqbXV4X25hbWU7CiAJY2hhciAqZGl2MF9u YW1lOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2Nsa19yZWdp c3Rlcl9mY2xrKGVudW0genlucV9jbGsgZmNsaywKIAkJCTAsIENMS19HQVRFX1NFVF9UT19ESVNB QkxFLCBmY2xrX2dhdGVfbG9jayk7CiAJZW5hYmxlX3JlZyA9IGNsa19yZWFkbChmY2xrX2dhdGVf cmVnKSAmIDE7CiAJaWYgKGVuYWJsZSAmJiAhZW5hYmxlX3JlZykgewotCQlpZiAoY2xrX3ByZXBh cmVfZW5hYmxlKGNsa3NbZmNsa10pKQorCQlpZiAoY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxl KGNsa3NbZmNsa10pKQogCQkJcHJfd2FybigiJXM6IEZDTEsldSBlbmFibGUgZmFpbGVkXG4iLCBf X2Z1bmNfXywKIAkJCQkJZmNsayAtIGZjbGswKTsKIAl9CkBAIC0xODEsNyArMTgxLDcgQEAgc3Rh dGljIHZvaWQgX19pbml0IHp5bnFfY2xrX3JlZ2lzdGVyX3BlcmlwaF9jbGsoZW51bSB6eW5xX2Ns ayBjbGswLAogCQljb25zdCBjaGFyICpjbGtfbmFtZTEsIHZvaWQgX19pb21lbSAqY2xrX2N0cmws CiAJCWNvbnN0IGNoYXIgKipwYXJlbnRzLCB1bnNpZ25lZCBpbnQgdHdvX2dhdGVzKQogewotCXN0 cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAljaGFyICptdXhfbmFtZTsK IAljaGFyICpkaXZfbmFtZTsKIAlzcGlubG9ja190ICpsb2NrOwpAQCAtMjIyLDcgKzIyMiw3IEBA IHN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2Nsa19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w KQogCWludCBpOwogCXUzMiB0bXA7CiAJaW50IHJldDsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3Ry dWN0IGNsa19jb3JlICpjbGs7CiAJY2hhciAqY2xrX25hbWU7CiAJdW5zaWduZWQgaW50IGZjbGtf ZW5hYmxlID0gMDsKIAljb25zdCBjaGFyICpjbGtfb3V0cHV0X25hbWVbY2xrX21heF07CkBAIC0z MzMsMTMgKzMzMywxMyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgenlucV9jbGtfc2V0dXAoc3RydWN0 IGRldmljZV9ub2RlICpucCkKIAkJCUNMS19ESVZJREVSX0FMTE9XX1pFUk8sICZkZHJjbGtfbG9j ayk7CiAJY2xrc1tkZHIyeF0gPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBjbGtfb3V0cHV0X25h bWVbZGRyMnhdLAogCQkJImRkcjJ4X2RpdiIsIDAsIFNMQ1JfRERSX0NMS19DVFJMLCAxLCAwLCAm ZGRyY2xrX2xvY2spOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGtzW2RkcjJ4XSk7CisJY2xrX3By b3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGNsa3NbZGRyMnhdKTsKIAljbGsgPSBjbGtfcmVnaXN0ZXJf ZGl2aWRlcihOVUxMLCAiZGRyM3hfZGl2IiwgImRkcnBsbCIsIDAsCiAJCQlTTENSX0REUl9DTEtf Q1RSTCwgMjAsIDYsIENMS19ESVZJREVSX09ORV9CQVNFRCB8CiAJCQlDTEtfRElWSURFUl9BTExP V19aRVJPLCAmZGRyY2xrX2xvY2spOwogCWNsa3NbZGRyM3hdID0gY2xrX3JlZ2lzdGVyX2dhdGUo TlVMTCwgY2xrX291dHB1dF9uYW1lW2RkcjN4XSwKIAkJCSJkZHIzeF9kaXYiLCAwLCBTTENSX0RE Ul9DTEtfQ1RSTCwgMCwgMCwgJmRkcmNsa19sb2NrKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xr c1tkZHIzeF0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtzW2RkcjN4XSk7CiAK IAljbGsgPSBjbGtfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCAiZGNpX2RpdjAiLCAiZGRycGxsIiwg MCwKIAkJCVNMQ1JfRENJX0NMS19DVFJMLCA4LCA2LCBDTEtfRElWSURFUl9PTkVfQkFTRUQgfApA QCAtMzUxLDcgKzM1MSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2Nsa19zZXR1cChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wKQogCWNsa3NbZGNpXSA9IGNsa19yZWdpc3Rlcl9nYXRlKE5VTEws IGNsa19vdXRwdXRfbmFtZVtkY2ldLCAiZGNpX2RpdjEiLAogCQkJQ0xLX1NFVF9SQVRFX1BBUkVO VCwgU0xDUl9EQ0lfQ0xLX0NUUkwsIDAsIDAsCiAJCQkmZGNpY2xrX2xvY2spOwotCWNsa19wcmVw YXJlX2VuYWJsZShjbGtzW2RjaV0pOworCWNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtz W2RjaV0pOwogCiAJLyogUGVyaXBoZXJhbCBjbG9ja3MgKi8KIAlmb3IgKGkgPSBmY2xrMDsgaSA8 PSBmY2xrMzsgaSsrKSB7CkBAIC01MDUsMTAgKzUwNSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQg enlucV9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIAkvKiBsZWF2ZSBkZWJ1ZyBj bG9ja3MgaW4gdGhlIHN0YXRlIHRoZSBib290bG9hZGVyIHNldCB0aGVtIHVwIHRvICovCiAJdG1w ID0gY2xrX3JlYWRsKFNMQ1JfREJHX0NMS19DVFJMKTsKIAlpZiAodG1wICYgREJHX0NMS19DVFJM X0NMS0FDVF9UUkMpCi0JCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoY2xrc1tkYmdfdHJjXSkpCisJ CWlmIChjbGtfcHJvdmlkZXJfcHJlcGFyZV9lbmFibGUoY2xrc1tkYmdfdHJjXSkpCiAJCQlwcl93 YXJuKCIlczogdHJhY2UgY2xrIGVuYWJsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAlpZiAodG1w ICYgREJHX0NMS19DVFJMX0NQVV8xWENMS0FDVCkKLQkJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShj bGtzW2RiZ19hcGJdKSkKKwkJaWYgKGNsa19wcm92aWRlcl9wcmVwYXJlX2VuYWJsZShjbGtzW2Ri Z19hcGJdKSkKIAkJCXByX3dhcm4oIiVzOiBkZWJ1ZyBBUEIgY2xrIGVuYWJsZSBmYWlsZWRcbiIs IF9fZnVuY19fKTsKIAogCS8qIE9uZSBnYXRlZCBjbG9jayBmb3IgYWxsIEFQRVIgY2xvY2tzLiAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenlucS9wbGwuYyBiL2RyaXZlcnMvY2xrL3p5bnEv cGxsLmMKaW5kZXggY2VjOTc1OS4uNTE3NmY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvenlu cS9wbGwuYworKysgYi9kcml2ZXJzL2Nsay96eW5xL3BsbC5jCkBAIC0xOTMsMTIgKzE5MywxMiBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgenlucV9wbGxfb3BzID0gewogICogQGxvY2sJ UmVnaXN0ZXIgbG9jawogICogUmV0dXJucyBoYW5kbGUgdG8gdGhlIHJlZ2lzdGVyZWQgY2xvY2su CiAgKi8KLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl96eW5xX3BsbChjb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICpwYXJlbnQsCitzdHJ1Y3QgY2xrX2NvcmUgKmNsa19yZWdpc3Rlcl96eW5x X3BsbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCiAJCXZvaWQgX19pb21l bSAqcGxsX2N0cmwsIHZvaWQgX19pb21lbSAqcGxsX3N0YXR1cywgdTggbG9ja19pbmRleCwKIAkJ c3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzdHJ1Y3QgenlucV9wbGwgKnBsbDsKLQlzdHJ1Y3QgY2xr ICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJdTMyIHJlZzsKIAljb25zdCBjaGFyICpw YXJlbnRfYXJyWzFdID0ge3BhcmVudH07CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHlfODk2MC5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9oZG1pL2hkbWlfcGh5Xzg5NjAuYwppbmRleCA5MDJkNzY4Li44ZTk3NzAy IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHlfODk2MC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BoeV84OTYwLmMKQEAgLTE1LDcgKzE1 LDYgQEAKICAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGlu dXgvY2xrLXByb3ZpZGVyLmg+CiAKICNpbmNsdWRlICJoZG1pLmgiCkBAIC0yNCw3ICsyMyw3IEBA IHN0cnVjdCBoZG1pX3BoeV84OTYwIHsKIAlzdHJ1Y3QgaGRtaV9waHkgYmFzZTsKIAlzdHJ1Y3Qg aGRtaSAqaGRtaTsKIAlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKLQlzdHJ1Y3QgY2xrICpwbGw7CisJ c3RydWN0IGNsa19jb3JlICpwbGw7CiAJdW5zaWduZWQgbG9uZyBwaXhjbGs7CiB9OwogI2RlZmlu ZSB0b19oZG1pX3BoeV84OTYwKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaGRtaV9waHlfODk2 MCwgYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9t ZWRpYS1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9tZWRpYS1kZXYu YwppbmRleCAyNjIwYzQ4Li4yZmRhZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL2V4eW5vczQtaXMvbWVkaWEtZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9l eHlub3M0LWlzL21lZGlhLWRldi5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUg PGxpbnV4L2J1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgpAQCAtMjE1LDcgKzIxNCw3IEBAIHN0YXRpYyBpbnQgX19maW1jX3BpcGVsaW5l X29wZW4oc3RydWN0IGV4eW5vc19tZWRpYV9waXBlbGluZSAqZXAsCiAKIAkvKiBEaXNhYmxlIFBY TEFTWU5DIGNsb2NrIGlmIHRoaXMgcGlwZWxpbmUgaW5jbHVkZXMgRklNQy1JUyAqLwogCWlmICgh SVNfRVJSKGZtZC0+d2JjbGtbQ0xLX0lEWF9XQl9CXSkgJiYgcC0+c3ViZGV2c1tJRFhfSVNfSVNQ XSkgewotCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZm1kLT53YmNsa1tDTEtfSURYX1dCX0Jd KTsKKwkJcmV0ID0gY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKGZtZC0+d2JjbGtbQ0xLX0lE WF9XQl9CXSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0yMjUsNyAr MjI0LDcgQEAgc3RhdGljIGludCBfX2ZpbWNfcGlwZWxpbmVfb3BlbihzdHJ1Y3QgZXh5bm9zX21l ZGlhX3BpcGVsaW5lICplcCwKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIUlTX0VSUihmbWQtPndiY2xr W0NMS19JRFhfV0JfQl0pICYmIHAtPnN1YmRldnNbSURYX0lTX0lTUF0pCi0JCWNsa19kaXNhYmxl X3VucHJlcGFyZShmbWQtPndiY2xrW0NMS19JRFhfV0JfQl0pOworCQljbGtfcHJvdmlkZXJfZGlz YWJsZV91bnByZXBhcmUoZm1kLT53YmNsa1tDTEtfSURYX1dCX0JdKTsKIAogCXJldHVybiByZXQ7 CiB9CkBAIC0yNTQsNyArMjUzLDcgQEAgc3RhdGljIGludCBfX2ZpbWNfcGlwZWxpbmVfY2xvc2Uo c3RydWN0IGV4eW5vc19tZWRpYV9waXBlbGluZSAqZXApCiAKIAkvKiBEaXNhYmxlIFBYTEFTWU5D IGNsb2NrIGlmIHRoaXMgcGlwZWxpbmUgaW5jbHVkZXMgRklNQy1JUyAqLwogCWlmICghSVNfRVJS KGZtZC0+d2JjbGtbQ0xLX0lEWF9XQl9CXSkgJiYgcC0+c3ViZGV2c1tJRFhfSVNfSVNQXSkKLQkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGZtZC0+d2JjbGtbQ0xLX0lEWF9XQl9CXSk7CisJCWNsa19w cm92aWRlcl9kaXNhYmxlX3VucHJlcGFyZShmbWQtPndiY2xrW0NMS19JRFhfV0JfQl0pOwogCiAJ cmV0dXJuIHJldCA9PSAtRU5YSU8gPyAwIDogcmV0OwogfQpAQCAtOTU0LDcgKzk1Myw3IEBAIHN0 YXRpYyB2b2lkIGZpbWNfbWRfcHV0X2Nsb2NrcyhzdHJ1Y3QgZmltY19tZCAqZm1kKQogCXdoaWxl ICgtLWkgPj0gMCkgewogCQlpZiAoSVNfRVJSKGZtZC0+Y2FtY2xrW2ldLmNsb2NrKSkKIAkJCWNv bnRpbnVlOwotCQljbGtfcHV0KGZtZC0+Y2FtY2xrW2ldLmNsb2NrKTsKKwkJX19jbGtfcHV0KGZt ZC0+Y2FtY2xrW2ldLmNsb2NrKTsKIAkJZm1kLT5jYW1jbGtbaV0uY2xvY2sgPSBFUlJfUFRSKC1F SU5WQUwpOwogCX0KIApAQCAtOTYyLDcgKzk2MSw3IEBAIHN0YXRpYyB2b2lkIGZpbWNfbWRfcHV0 X2Nsb2NrcyhzdHJ1Y3QgZmltY19tZCAqZm1kKQogCWZvciAoaSA9IDA7IGkgPCBGSU1DX01BWF9X QkNMS1M7IGkrKykgewogCQlpZiAoSVNfRVJSKGZtZC0+d2JjbGtbaV0pKQogCQkJY29udGludWU7 Ci0JCWNsa19wdXQoZm1kLT53YmNsa1tpXSk7CisJCV9fY2xrX3B1dChmbWQtPndiY2xrW2ldKTsK IAkJZm1kLT53YmNsa1tpXSA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogfQpAQCAtOTcxLDcgKzk3 MCw3IEBAIHN0YXRpYyBpbnQgZmltY19tZF9nZXRfY2xvY2tzKHN0cnVjdCBmaW1jX21kICpmbWQp CiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmZtZC0+cGRldi0+ZGV2OwogCWNoYXIgY2xrX25h bWVbMzJdOwotCXN0cnVjdCBjbGsgKmNsb2NrOworCXN0cnVjdCBjbGtfY29yZSAqY2xvY2s7CiAJ aW50IGksIHJldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRklNQ19NQVhfQ0FNQ0xLUzsgaSsr KQpAQCAtOTc5LDcgKzk3OCw3IEBAIHN0YXRpYyBpbnQgZmltY19tZF9nZXRfY2xvY2tzKHN0cnVj dCBmaW1jX21kICpmbWQpCiAKIAlmb3IgKGkgPSAwOyBpIDwgRklNQ19NQVhfQ0FNQ0xLUzsgaSsr KSB7CiAJCXNucHJpbnRmKGNsa19uYW1lLCBzaXplb2YoY2xrX25hbWUpLCAic2Nsa19jYW0ldSIs IGkpOwotCQljbG9jayA9IGNsa19nZXQoZGV2LCBjbGtfbmFtZSk7CisJCWNsb2NrID0gY2xrX3By b3ZpZGVyX2dldChkZXYsIGNsa19uYW1lKTsKIAogCQlpZiAoSVNfRVJSKGNsb2NrKSkgewogCQkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrOiAlc1xuIiwgY2xrX25hbWUpOwpAQCAt MTAwMSw3ICsxMDAwLDcgQEAgc3RhdGljIGludCBmaW1jX21kX2dldF9jbG9ja3Moc3RydWN0IGZp bWNfbWQgKmZtZCkKIAogCWZvciAoaSA9IENMS19JRFhfV0JfQjsgaSA8IEZJTUNfTUFYX1dCQ0xL UzsgaSsrKSB7CiAJCXNucHJpbnRmKGNsa19uYW1lLCBzaXplb2YoY2xrX25hbWUpLCAicHhsX2Fz eW5jJXUiLCBpKTsKLQkJY2xvY2sgPSBjbGtfZ2V0KGRldiwgY2xrX25hbWUpOworCQljbG9jayA9 IGNsa19wcm92aWRlcl9nZXQoZGV2LCBjbGtfbmFtZSk7CiAJCWlmIChJU19FUlIoY2xvY2spKSB7 CiAJCQl2NGwyX2VycigmZm1kLT52NGwyX2RldiwgIkZhaWxlZCB0byBnZXQgY2xvY2s6ICVzXG4i LAogCQkJCSAgY2xrX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9l eHlub3M0LWlzL21lZGlhLWRldi5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlz L21lZGlhLWRldi5oCmluZGV4IDAzMjE0NTQuLmYyNGRhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9tZWRpYS1kZXYuaAorKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2V4eW5vczQtaXMvbWVkaWEtZGV2LmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVm IEZJTUNfTURFVklDRV9IXwogI2RlZmluZSBGSU1DX01ERVZJQ0VfSF8KIAotI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC03Miw3 ICs3MSw3IEBAIHN0cnVjdCBmaW1jX2NzaXNfaW5mbyB7CiB9OwogCiBzdHJ1Y3QgZmltY19jYW1j bGtfaW5mbyB7Ci0Jc3RydWN0IGNsayAqY2xvY2s7CisJc3RydWN0IGNsa19jb3JlICpjbG9jazsK IAlpbnQgdXNlX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OwogfTsKQEAgLTEyNCw3 ICsxMjMsNyBAQCBzdHJ1Y3QgZmltY19tZCB7CiAJc3RydWN0IGZpbWNfc2Vuc29yX2luZm8gc2Vu c29yW0ZJTUNfTUFYX1NFTlNPUlNdOwogCWludCBudW1fc2Vuc29yczsKIAlzdHJ1Y3QgZmltY19j YW1jbGtfaW5mbyBjYW1jbGtbRklNQ19NQVhfQ0FNQ0xLU107Ci0Jc3RydWN0IGNsayAqd2JjbGtb RklNQ19NQVhfV0JDTEtTXTsKKwlzdHJ1Y3QgY2xrX2NvcmUgKndiY2xrW0ZJTUNfTUFYX1dCQ0xL U107CiAJc3RydWN0IGZpbWNfbGl0ZSAqZmltY19saXRlW0ZJTUNfTElURV9NQVhfREVWU107CiAJ c3RydWN0IGZpbWNfZGV2ICpmaW1jW0ZJTUNfTUFYX0RFVlNdOwogCXN0cnVjdCBmaW1jX2lzICpm aW1jX2lzOwpAQCAtMTQxLDcgKzE0MCw3IEBAIHN0cnVjdCBmaW1jX21kIHsKIAl9IHBpbmN0bDsK IAogCXN0cnVjdCBjYW1fY2xrX3Byb3ZpZGVyIHsKLQkJc3RydWN0IGNsayAqY2xrc1tGSU1DX01B WF9DQU1DTEtTXTsKKwkJc3RydWN0IGNsa19jb3JlICpjbGtzW0ZJTUNfTUFYX0NBTUNMS1NdOwog CQlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKIAkJc3RydWN0IGRldmljZV9ub2Rl ICpvZl9ub2RlOwogCQlzdHJ1Y3QgY2FtX2NsayBjYW1jbGtbRklNQ19NQVhfQ0FNQ0xLU107CmRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcC5oIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3AuaAppbmRleCAyYzMxNGVlLi41ZmNlZGQ2IDEw MDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcC5oCisrKyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwLmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBz dHJ1Y3QgaXNwX3hjbGsgewogCXN0cnVjdCBpc3BfZGV2aWNlICppc3A7CiAJc3RydWN0IGNsa19o dyBodzsKIAlzdHJ1Y3QgY2xrX2xvb2t1cCAqbG9va3VwOwotCXN0cnVjdCBjbGsgKmNsazsKKwlz dHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAllbnVtIGlzcF94Y2xrX2lkIGlkOwogCiAJc3BpbmxvY2tf dCBsb2NrOwkvKiBQcm90ZWN0cyBlbmFibGVkIGFuZCBkaXZpZGVyICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL3J0Yy9ydGMtaHltODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLWh5bTg1NjMuYwppbmRl eCBiOTM2YmI0Li5lYTIxYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtaHltODU2My5j CisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1oeW04NTYzLmMKQEAgLTM5OCwxMSArMzk4LDExIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBoeW04NTYzX2Nsa291dF9vcHMgPSB7CiAJLnNldF9y YXRlID0gaHltODU2M19jbGtvdXRfc2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAq aHltODU2M19jbGtvdXRfcmVnaXN0ZXJfY2xrKHN0cnVjdCBoeW04NTYzICpoeW04NTYzKQorc3Rh dGljIHN0cnVjdCBjbGtfY29yZSAqaHltODU2M19jbGtvdXRfcmVnaXN0ZXJfY2xrKHN0cnVjdCBo eW04NTYzICpoeW04NTYzKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBoeW04NTYz LT5jbGllbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gY2xpZW50LT5kZXYub2Zfbm9k ZTsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsa19jb3JlICpjbGs7CiAJc3RydWN0IGNs a19pbml0X2RhdGEgaW5pdDsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9z cGktcHhhMnh4LXBjaS5jIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1wY2kuYwppbmRleCA1MzZj ODYzLi5mNTkwZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LXBjaS5jCisr KyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHgtcGNpLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVk ZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNs dWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvaW14LWRybS9pbXgtdHZlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pbXgt dHZlLmMKaW5kZXggMzFmZTdjZi4uNGZjYjRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5n L2lteC1kcm0vaW14LXR2ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lteC10dmUu YwpAQCAtMTgsNyArMTgsNiBAQAogICogTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEy MSwxMCArMTIwLDEwIEBAIHN0cnVjdCBpbXhfdHZlIHsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7 CiAJc3RydWN0IHJlZ3VsYXRvciAqZGFjX3JlZzsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsK LQlzdHJ1Y3QgY2xrICpjbGs7Ci0Jc3RydWN0IGNsayAqZGlfc2VsX2NsazsKKwlzdHJ1Y3QgY2xr X2NvcmUgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmRpX3NlbF9jbGs7CiAJc3RydWN0IGNsa19o dyBjbGtfaHdfZGk7Ci0Jc3RydWN0IGNsayAqZGlfY2xrOworCXN0cnVjdCBjbGtfY29yZSAqZGlf Y2xrOwogCWludCB2c3luY19waW47CiAJaW50IGhzeW5jX3BpbjsKIH07CkBAIC0xNTEsNyArMTUw LDcgQEAgc3RhdGljIHZvaWQgdHZlX2VuYWJsZShzdHJ1Y3QgaW14X3R2ZSAqdHZlKQogCiAJaWYg KCF0dmUtPmVuYWJsZWQpIHsKIAkJdHZlLT5lbmFibGVkID0gdHJ1ZTsKLQkJY2xrX3ByZXBhcmVf ZW5hYmxlKHR2ZS0+Y2xrKTsKKwkJY2xrX3Byb3ZpZGVyX3ByZXBhcmVfZW5hYmxlKHR2ZS0+Y2xr KTsKIAkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHR2ZS0+cmVnbWFwLCBUVkVfQ09NX0NPTkZf UkVHLAogCQkJCQkgVFZFX0lQVV9DTEtfRU4gfCBUVkVfRU4sCiAJCQkJCSBUVkVfSVBVX0NMS19F TiB8IFRWRV9FTik7CkBAIC0xNzgsNyArMTc3LDcgQEAgc3RhdGljIHZvaWQgdHZlX2Rpc2FibGUo c3RydWN0IGlteF90dmUgKnR2ZSkKIAkJdHZlLT5lbmFibGVkID0gZmFsc2U7CiAJCXJldCA9IHJl Z21hcF91cGRhdGVfYml0cyh0dmUtPnJlZ21hcCwgVFZFX0NPTV9DT05GX1JFRywKIAkJCQkJIFRW RV9JUFVfQ0xLX0VOIHwgVFZFX0VOLCAwKTsKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHR2ZS0+ Y2xrKTsKKwkJY2xrX3Byb3ZpZGVyX2Rpc2FibGVfdW5wcmVwYXJlKHR2ZS0+Y2xrKTsKIAl9CiB9 CiAKQEAgLTI1MywxMiArMjUyLDEyIEBAIHN0YXRpYyBpbnQgaW14X3R2ZV9jb25uZWN0b3JfbW9k ZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCXVuc2lnbmVkIGxvbmcg cmF0ZTsKIAogCS8qIHBpeGVsIGNsb2NrIHdpdGggMnggb3ZlcnNhbXBsaW5nICovCi0JcmF0ZSA9 IGNsa19yb3VuZF9yYXRlKHR2ZS0+Y2xrLCAyMDAwVUwgKiBtb2RlLT5jbG9jaykgLyAyMDAwOwor CXJhdGUgPSBjbGtfcHJvdmlkZXJfcm91bmRfcmF0ZSh0dmUtPmNsaywgMjAwMFVMICogbW9kZS0+ Y2xvY2spIC8gMjAwMDsKIAlpZiAocmF0ZSA9PSBtb2RlLT5jbG9jaykKIAkJcmV0dXJuIE1PREVf T0s7CiAKIAkvKiBwaXhlbCBjbG9jayB3aXRob3V0IG92ZXJzYW1wbGluZyAqLwotCXJhdGUgPSBj bGtfcm91bmRfcmF0ZSh0dmUtPmNsaywgMTAwMFVMICogbW9kZS0+Y2xvY2spIC8gMTAwMDsKKwly YXRlID0gY2xrX3Byb3ZpZGVyX3JvdW5kX3JhdGUodHZlLT5jbGssIDEwMDBVTCAqIG1vZGUtPmNs b2NrKSAvIDEwMDA7CiAJaWYgKHJhdGUgPT0gbW9kZS0+Y2xvY2spCiAJCXJldHVybiBNT0RFX09L OwogCkBAIC0zMjcsMTMgKzMyNiwxMyBAQCBzdGF0aWMgdm9pZCBpbXhfdHZlX2VuY29kZXJfbW9k ZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCSAqIGFuZCBlbmFibGUgNHggb3Zl cnNhbXBsaW5nIGZvciBsb3dlciByZXNvbHV0aW9ucwogCSAqLwogCXJhdGUgPSAyMDAwVUwgKiBt b2RlLT5jbG9jazsKLQljbGtfc2V0X3JhdGUodHZlLT5jbGssIHJhdGUpOwotCXJvdW5kZWRfcmF0 ZSA9IGNsa19nZXRfcmF0ZSh0dmUtPmNsayk7CisJY2xrX3Byb3ZpZGVyX3NldF9yYXRlKHR2ZS0+ Y2xrLCByYXRlKTsKKwlyb3VuZGVkX3JhdGUgPSBjbGtfcHJvdmlkZXJfZ2V0X3JhdGUodHZlLT5j bGspOwogCWlmIChyb3VuZGVkX3JhdGUgPj0gcmF0ZSkKIAkJZGl2ID0gMjsKLQljbGtfc2V0X3Jh dGUodHZlLT5kaV9jbGssIHJvdW5kZWRfcmF0ZSAvIGRpdik7CisJY2xrX3Byb3ZpZGVyX3NldF9y YXRlKHR2ZS0+ZGlfY2xrLCByb3VuZGVkX3JhdGUgLyBkaXYpOwogCi0JcmV0ID0gY2xrX3NldF9w YXJlbnQodHZlLT5kaV9zZWxfY2xrLCB0dmUtPmRpX2Nsayk7CisJcmV0ID0gY2xrX3Byb3ZpZGVy X3NldF9wYXJlbnQodHZlLT5kaV9zZWxfY2xrLCB0dmUtPmRpX2Nsayk7CiAJaWYgKHJldCA8IDAp IHsKIAkJZGV2X2Vycih0dmUtPmRldiwgImZhaWxlZCB0byBzZXQgZGlfc2VsIHBhcmVudCB0byB0 dmVfZGk6ICVkXG4iLAogCQkJcmV0KTsKQEAgLTY0NSw3ICs2NDQsNyBAQCBzdGF0aWMgaW50IGlt eF90dmVfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9p ZCAqZGF0YSkKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JdHZlLT5jbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAidHZlIik7CisJdHZlLT5jbGsgPSBkZXZtX2Nsa19wcm92aWRlcl9nZXQoZGV2LCAidHZl Iik7CiAJaWYgKElTX0VSUih0dmUtPmNsaykpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g Z2V0IGhpZ2ggc3BlZWQgdHZlIGNsb2NrOiAlbGRcbiIsCiAJCQlQVFJfRVJSKHR2ZS0+Y2xrKSk7 CkBAIC02NTMsNyArNjUyLDcgQEAgc3RhdGljIGludCBpbXhfdHZlX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCiAJfQogCiAJLyogdGhp cyBpcyB0aGUgSVBVIERJIGNsb2NrIGlucHV0IHNlbGVjdG9yLCBjYW4gYmUgcGFyZW50ZWQgdG8g dHZlX2RpICovCi0JdHZlLT5kaV9zZWxfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImRpX3NlbCIp OworCXR2ZS0+ZGlfc2VsX2NsayA9IGRldm1fY2xrX3Byb3ZpZGVyX2dldChkZXYsICJkaV9zZWwi KTsKIAlpZiAoSVNfRVJSKHR2ZS0+ZGlfc2VsX2NsaykpIHsKIAkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZ2V0IGlwdSBkaSBtdXggY2xvY2s6ICVsZFxuIiwKIAkJCVBUUl9FUlIodHZlLT5kaV9z ZWxfY2xrKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Nsa2Rldi5oIGIvaW5j bHVkZS9hc20tZ2VuZXJpYy9jbGtkZXYuaAppbmRleCA5MGEzMmE2Li40MzIwMjI1IDEwMDY0NAot LS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Nsa2Rldi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVy aWMvY2xrZGV2LmgKQEAgLTE1LDEwICsxNSwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5o PgogCi1zdHJ1Y3QgY2xrOworc3RydWN0IGNsa19jb3JlOwogCi1zdGF0aWMgaW5saW5lIGludCBf X2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKSB7IHJldHVybiAxOyB9Ci1zdGF0aWMgaW5saW5lIHZv aWQgX19jbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykgeyB9CitzdGF0aWMgaW5saW5lIGludCBfX2Ns a19nZXQoc3RydWN0IGNsa19jb3JlICpjbGspIHsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUg dm9pZCBfX2Nsa19wdXQoc3RydWN0IGNsa19jb3JlICpjbGspIHsgfQogCiBzdGF0aWMgaW5saW5l IHN0cnVjdCBjbGtfbG9va3VwX2FsbG9jICpfX2Nsa2Rldl9hbGxvYyhzaXplX3Qgc2l6ZSkKIHsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrL3RpLmggYi9pbmNsdWRlL2xpbnV4L2Nsay90 aS5oCmluZGV4IGU4ZDhhMzUuLjZiOWU2YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xr L3RpLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbGsvdGkuaApAQCAtMjIsOCArMjIsOCBAQAogICog QG11bHRfZGl2MV9yZWc6IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIERQTEwgTSBhbmQgTiBiaXRm aWVsZHMKICAqIEBtdWx0X21hc2s6IG1hc2sgb2YgdGhlIERQTEwgTSBiaXRmaWVsZCBpbiBAbXVs dF9kaXYxX3JlZwogICogQGRpdjFfbWFzazogbWFzayBvZiB0aGUgRFBMTCBOIGJpdGZpZWxkIGlu IEBtdWx0X2RpdjFfcmVnCi0gKiBAY2xrX2J5cGFzczogc3RydWN0IGNsayBwb2ludGVyIHRvIHRo ZSBjbG9jaydzIGJ5cGFzcyBjbG9jayBpbnB1dAotICogQGNsa19yZWY6IHN0cnVjdCBjbGsgcG9p bnRlciB0byB0aGUgY2xvY2sncyByZWZlcmVuY2UgY2xvY2sgaW5wdXQKKyAqIEBjbGtfYnlwYXNz OiBzdHJ1Y3QgY2xrX2NvcmUgcG9pbnRlciB0byB0aGUgY2xvY2sncyBieXBhc3MgY2xvY2sgaW5w dXQKKyAqIEBjbGtfcmVmOiBzdHJ1Y3QgY2xrX2NvcmUgcG9pbnRlciB0byB0aGUgY2xvY2sncyBy ZWZlcmVuY2UgY2xvY2sgaW5wdXQKICAqIEBjb250cm9sX3JlZzogcmVnaXN0ZXIgY29udGFpbmlu ZyB0aGUgRFBMTCBtb2RlIGJpdGZpZWxkCiAgKiBAZW5hYmxlX21hc2s6IG1hc2sgb2YgdGhlIERQ TEwgbW9kZSBiaXRmaWVsZCBpbiBAY29udHJvbF9yZWcKICAqIEBsYXN0X3JvdW5kZWRfcmF0ZTog Y2FjaGUgb2YgdGhlIGxhc3QgcmF0ZSByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkK QEAgLTY4LDggKzY4LDggQEAgc3RydWN0IGRwbGxfZGF0YSB7CiAJdm9pZCBfX2lvbWVtCQkqbXVs dF9kaXYxX3JlZzsKIAl1MzIJCQltdWx0X21hc2s7CiAJdTMyCQkJZGl2MV9tYXNrOwotCXN0cnVj dCBjbGsJCSpjbGtfYnlwYXNzOwotCXN0cnVjdCBjbGsJCSpjbGtfcmVmOworCXN0cnVjdCBjbGtf Y29yZQkJKmNsa19ieXBhc3M7CisJc3RydWN0IGNsa19jb3JlCQkqY2xrX3JlZjsKIAl2b2lkIF9f aW9tZW0JCSpjb250cm9sX3JlZzsKIAl1MzIJCQllbmFibGVfbWFzazsKIAl1bnNpZ25lZCBsb25n CQlsYXN0X3JvdW5kZWRfcmF0ZTsKQEAgLTI1MSw3ICsyNTEsNyBAQCBleHRlcm4gY29uc3Qgc3Ry dWN0IGNsa19vcHMgdGlfY2xrX211eF9vcHM7CiAKICNkZWZpbmUgdG9fY2xrX2h3X29tYXAoX2h3 KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1Y3QgY2xrX2h3X29tYXAsIGh3KQogCi12b2lkIG9tYXAy X2luaXRfY2xrX2h3X29tYXBfY2xvY2tzKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXAyX2lu aXRfY2xrX2h3X29tYXBfY2xvY2tzKHN0cnVjdCBjbGtfY29yZSAqY2xrKTsKIGludCBvbWFwM19u b25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KTsKIHZvaWQgb21hcDNfbm9uY29y ZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpOwogaW50IG9tYXAzX25vbmNvcmVfZHBs bF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLApkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9jbGsvenlucS5oIGIvaW5jbHVkZS9saW51eC9jbGsvenlucS5o CmluZGV4IGE5OTBhNTkuLjZjMzUyOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xrL3p5 bnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsay96eW5xLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAog dm9pZCB6eW5xX2Nsb2NrX2luaXQodm9pZCk7CiAKLXN0cnVjdCBjbGsgKmNsa19yZWdpc3Rlcl96 eW5xX3BsbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnQsCitzdHJ1Y3QgY2xr X2NvcmUgKmNsa19yZWdpc3Rlcl96eW5xX3BsbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpwYXJlbnQsCiAJCXZvaWQgX19pb21lbSAqcGxsX2N0cmwsIHZvaWQgX19pb21lbSAqcGxsX3N0 YXR1cywgdTggbG9ja19pbmRleCwKIAkJc3BpbmxvY2tfdCAqbG9jayk7CiAjZW5kaWYKZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zaTUzNTEuaCBiL2luY2x1ZGUvbGlu dXgvcGxhdGZvcm1fZGF0YS9zaTUzNTEuaAppbmRleCBhOTQ3YWI4Li40YjM0YzY5IDEwMDY0NAot LS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc2k1MzUxLmgKKysrIGIvaW5jbHVkZS9s aW51eC9wbGF0Zm9ybV9kYXRhL3NpNTM1MS5oCkBAIC0xMDcsOCArMTA3LDggQEAgc3RydWN0IHNp NTM1MV9jbGtvdXRfY29uZmlnIHsKICAqIEBjbGtvdXQ6IGFycmF5IG9mIGNsa291dCBjb25maWd1 cmF0aW9uCiAgKi8KIHN0cnVjdCBzaTUzNTFfcGxhdGZvcm1fZGF0YSB7Ci0Jc3RydWN0IGNsayAq Y2xrX3h0YWw7Ci0Jc3RydWN0IGNsayAqY2xrX2Nsa2luOworCXN0cnVjdCBjbGtfY29yZSAqY2xr X3h0YWw7CisJc3RydWN0IGNsa19jb3JlICpjbGtfY2xraW47CiAJZW51bSBzaTUzNTFfcGxsX3Ny YyBwbGxfc3JjWzJdOwogCXN0cnVjdCBzaTUzNTFfY2xrb3V0X2NvbmZpZyBjbGtvdXRbOF07CiB9 OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL214cy9teHMtc2FpZi5jIGIvc291bmQvc29jL214cy9t eHMtc2FpZi5jCmluZGV4IDIzMWQ3ZTcuLmEyNDM2N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9t eHMvbXhzLXNhaWYuYworKysgYi9zb3VuZC9zb2MvbXhzL214cy1zYWlmLmMKQEAgLTY4MiwxMSAr NjgyLDExIEBAIHN0YXRpYyBpbnQgbXhzX3NhaWZfbWNsa19pbml0KHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG14c19zYWlmICpzYWlmID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2Rl OwotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2NvcmUgKmNsazsKIAlpbnQgcmV0Owog CiAJY2xrID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXIoJnBkZXYtPmRldiwgIm14c19zYWlmX21jbGsi LAotCQkJCSAgIF9fY2xrX2dldF9uYW1lKHNhaWYtPmNsayksIDAsCisJCQkJICAgY2xrX2dldF9u YW1lKHNhaWYtPmNsayksIDAsCiAJCQkJICAgc2FpZi0+YmFzZSArIFNBSUZfQ1RSTCwKIAkJCQkg ICBCUF9TQUlGX0NUUkxfQklUQ0xLX01VTFRfUkFURSwgMywKIAkJCQkgICAwLCBOVUxMKTsKLS0g CjEuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpM aW51eHBwYy1kZXYgbWFpbGluZyBsaXN0CkxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCmh0 dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0aW5mby9saW51eHBwYy1kZXY= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-x233.google.com (mail-wi0-x233.google.com [IPv6:2a00:1450:400c:c05::233]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 446201A0AD2 for ; Wed, 10 Sep 2014 00:05:31 +1000 (EST) Received: by mail-wi0-f179.google.com with SMTP id q5so4523613wiv.12 for ; Tue, 09 Sep 2014 07:05:27 -0700 (PDT) Sender: Tomeu Vizoso From: Tomeu Vizoso To: Mike Turquette Subject: [PATCH v10 2/9] clk: Move all drivers to use internal API Date: Tue, 9 Sep 2014 16:04:57 +0200 Message-Id: <1410271497-27148-1-git-send-email-tomeu.vizoso@collabora.com> In-Reply-To: <1410271329-26637-1-git-send-email-tomeu.vizoso@collabora.com> References: <1410271329-26637-1-git-send-email-tomeu.vizoso@collabora.com> Cc: Andrew Lunn , Ulf Hansson , Prashant Gaikwad , Tony Lindgren , tomasz.figa@gmail.com, Liam Girdwood , Thierry Reding , Paul Mackerras , Sylwester Nawrocki , Daniel Walker , linux-arch@vger.kernel.org, Boris Brezillon , linux-samsung-soc@vger.kernel.org, Kukjin Kim , Russell King , =?UTF-8?q?Emilio=20L=C3=B3pez?= , Takashi Iwai , Michal Simek , Kyungmin Park , Kevin Hilman , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.wolfsonmicro.com, Viresh Kumar , David Brown , Anatolij Gustschin , Dinh Nguyen , Sebastian Hesselbarth , alsa-devel@alsa-project.org, Jason Cooper , Arnd Bergmann , Stephen Warren , linux-arm-msm@vger.kernel.org, spear-devel@list.st.com, Barry Song , Mark Brown , linux-rpi-kernel@lists.infradead.org, Ben Dooks , linux-tegra@vger.kernel.org, Jaroslav Kysela , Sascha Hauer , Shawn Guo , Paul Walmsley , Tomeu Vizoso , Peter De Schrijver , linux-kernel@vger.kernel.org, rabin@rab.in, Bryan Huntsman , Santosh Shilimkar , =?UTF-8?q?Beno=C3=AEt=20Cousson?= , Maxime Ripard , linux-media@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Mauro Carvalho Chehab List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , In preparation to change the public API to return a per-user clk structure, remove any usage of this public API from the clock implementations. The reason for having this in a separate commit from the one that introduces the implementation of the new functions is to separate the changes generated with Coccinelle from the rest, and keep the patches' size reasonable. Signed-off-by: Tomeu Vizoso Tested-by: Boris Brezillon Tested-by: Heiko Stuebner Acked-by: Boris Brezillon --- v10: * Add a few more files to be converted * Re-generate the patch on top of the latest changes v9: * Fold in changes to mxs-saif.c, so to not break bisectability * Re-generate the patch on top of the latest changes * Remove linux/clk.h includes from clk implementations --- arch/arm/mach-dove/common.c | 10 +- arch/arm/mach-imx/clk-busy.c | 9 +- arch/arm/mach-imx/clk-fixup-div.c | 4 +- arch/arm/mach-imx/clk-fixup-mux.c | 4 +- arch/arm/mach-imx/clk-gate-exclusive.c | 4 +- arch/arm/mach-imx/clk-gate2.c | 4 +- arch/arm/mach-imx/clk-imx1.c | 3 +- arch/arm/mach-imx/clk-imx21.c | 3 +- arch/arm/mach-imx/clk-imx25.c | 9 +- arch/arm/mach-imx/clk-imx27.c | 5 +- arch/arm/mach-imx/clk-imx31.c | 11 +- arch/arm/mach-imx/clk-imx35.c | 23 +- arch/arm/mach-imx/clk-imx51-imx53.c | 78 +++--- arch/arm/mach-imx/clk-imx6q.c | 75 ++++-- arch/arm/mach-imx/clk-imx6sl.c | 43 +-- arch/arm/mach-imx/clk-imx6sx.c | 119 +++++---- arch/arm/mach-imx/clk-pfd.c | 5 +- arch/arm/mach-imx/clk-pllv1.c | 5 +- arch/arm/mach-imx/clk-pllv2.c | 5 +- arch/arm/mach-imx/clk-pllv3.c | 5 +- arch/arm/mach-imx/clk-vf610.c | 45 ++-- arch/arm/mach-imx/clk.c | 11 +- arch/arm/mach-imx/clk.h | 44 +-- arch/arm/mach-msm/clock-pcom.c | 2 +- arch/arm/mach-mv78xx0/common.c | 2 +- arch/arm/mach-omap2/board-cm-t35.c | 2 +- arch/arm/mach-omap2/cclock3xxx_data.c | 371 +++++++++++++------------- arch/arm/mach-omap2/clkt2xxx_dpll.c | 5 +- arch/arm/mach-omap2/clkt2xxx_dpllcore.c | 5 +- arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 11 +- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 3 +- arch/arm/mach-omap2/clkt_clksel.c | 46 ++-- arch/arm/mach-omap2/clkt_dpll.c | 8 +- arch/arm/mach-omap2/clock.c | 52 ++-- arch/arm/mach-omap2/clock.h | 18 +- arch/arm/mach-omap2/clock3xxx.c | 23 +- arch/arm/mach-omap2/clock3xxx.h | 4 +- arch/arm/mach-omap2/clock_common_data.c | 2 +- arch/arm/mach-omap2/clockdomain.c | 9 +- arch/arm/mach-omap2/clockdomain.h | 4 +- arch/arm/mach-omap2/display.c | 5 +- arch/arm/mach-omap2/dpll3xxx.c | 29 +- arch/arm/mach-omap2/dpll44xx.c | 5 +- arch/arm/mach-omap2/mcbsp.c | 5 +- arch/arm/mach-omap2/omap_device.c | 9 +- arch/arm/mach-omap2/omap_hwmod.c | 42 +-- arch/arm/mach-omap2/omap_hwmod.h | 12 +- arch/arm/mach-omap2/pm24xx.c | 12 +- arch/arm/mach-orion5x/common.c | 2 +- arch/arm/mach-shmobile/clock.c | 9 +- arch/arm/mach-vexpress/spc.c | 4 +- arch/arm/plat-orion/common.c | 21 +- arch/arm/plat-orion/include/plat/common.h | 12 +- arch/mips/alchemy/common/clock.c | 42 +-- arch/powerpc/platforms/512x/clock-commonclk.c | 48 ++-- drivers/acpi/acpi_lpss.c | 5 +- drivers/clk/at91/clk-main.c | 24 +- drivers/clk/at91/clk-master.c | 6 +- drivers/clk/at91/clk-peripheral.c | 12 +- drivers/clk/at91/clk-pll.c | 6 +- drivers/clk/at91/clk-plldiv.c | 6 +- drivers/clk/at91/clk-programmable.c | 10 +- drivers/clk/at91/clk-slow.c | 24 +- drivers/clk/at91/clk-smd.c | 6 +- drivers/clk/at91/clk-system.c | 6 +- drivers/clk/at91/clk-usb.c | 20 +- drivers/clk/at91/clk-utmi.c | 6 +- drivers/clk/bcm/clk-kona-setup.c | 6 +- drivers/clk/bcm/clk-kona.c | 12 +- drivers/clk/bcm/clk-kona.h | 2 +- drivers/clk/berlin/berlin2-avpll.c | 4 +- drivers/clk/berlin/berlin2-avpll.h | 4 +- drivers/clk/berlin/berlin2-div.c | 2 +- drivers/clk/berlin/berlin2-div.h | 2 +- drivers/clk/berlin/berlin2-pll.c | 2 +- drivers/clk/berlin/berlin2-pll.h | 2 +- drivers/clk/berlin/bg2.c | 13 +- drivers/clk/berlin/bg2q.c | 9 +- drivers/clk/clk-axi-clkgen.c | 3 +- drivers/clk/clk-axm5516.c | 4 +- drivers/clk/clk-bcm2835.c | 2 +- drivers/clk/clk-clps711x.c | 3 +- drivers/clk/clk-composite.c | 11 +- drivers/clk/clk-conf.c | 17 +- drivers/clk/clk-divider.c | 8 +- drivers/clk/clk-efm32gg.c | 3 +- drivers/clk/clk-fixed-factor.c | 6 +- drivers/clk/clk-fixed-rate.c | 8 +- drivers/clk/clk-fractional-divider.c | 4 +- drivers/clk/clk-gate.c | 4 +- drivers/clk/clk-highbank.c | 8 +- drivers/clk/clk-ls1x.c | 16 +- drivers/clk/clk-max77686.c | 10 +- drivers/clk/clk-moxart.c | 8 +- drivers/clk/clk-mux.c | 7 +- drivers/clk/clk-nomadik.c | 15 +- drivers/clk/clk-nspire.c | 4 +- drivers/clk/clk-palmas.c | 7 +- drivers/clk/clk-ppc-corenet.c | 8 +- drivers/clk/clk-s2mps11.c | 6 +- drivers/clk/clk-si5351.c | 17 +- drivers/clk/clk-si570.c | 4 +- drivers/clk/clk-twl6040.c | 3 +- drivers/clk/clk-u300.c | 13 +- drivers/clk/clk-vt8500.c | 4 +- drivers/clk/clk-wm831x.c | 7 +- drivers/clk/clk-xgene.c | 12 +- drivers/clk/clk.h | 4 +- drivers/clk/hisilicon/clk-hi3620.c | 9 +- drivers/clk/hisilicon/clk-hip04.c | 1 - drivers/clk/hisilicon/clk.c | 17 +- drivers/clk/hisilicon/clk.h | 2 +- drivers/clk/hisilicon/clkgate-separated.c | 5 +- drivers/clk/keystone/gate.c | 7 +- drivers/clk/keystone/pll.c | 11 +- drivers/clk/mmp/clk-apbc.c | 5 +- drivers/clk/mmp/clk-apmu.c | 5 +- drivers/clk/mmp/clk-frac.c | 4 +- drivers/clk/mmp/clk-mmp2.c | 14 +- drivers/clk/mmp/clk-pxa168.c | 12 +- drivers/clk/mmp/clk-pxa910.c | 12 +- drivers/clk/mmp/clk.h | 8 +- drivers/clk/mvebu/clk-corediv.c | 4 +- drivers/clk/mvebu/clk-cpu.c | 8 +- drivers/clk/mvebu/common.c | 15 +- drivers/clk/mvebu/kirkwood.c | 6 +- drivers/clk/mxs/clk-div.c | 5 +- drivers/clk/mxs/clk-frac.c | 5 +- drivers/clk/mxs/clk-imx23.c | 5 +- drivers/clk/mxs/clk-imx28.c | 5 +- drivers/clk/mxs/clk-pll.c | 5 +- drivers/clk/mxs/clk-ref.c | 5 +- drivers/clk/mxs/clk-ssp.c | 3 +- drivers/clk/mxs/clk.h | 17 +- drivers/clk/qcom/clk-rcg.c | 8 +- drivers/clk/qcom/clk-rcg2.c | 14 +- drivers/clk/qcom/clk-regmap.c | 2 +- drivers/clk/qcom/clk-regmap.h | 2 +- drivers/clk/qcom/common.c | 6 +- drivers/clk/qcom/gcc-apq8084.c | 2 +- drivers/clk/qcom/gcc-ipq806x.c | 2 +- drivers/clk/qcom/gcc-msm8660.c | 2 +- drivers/clk/qcom/gcc-msm8960.c | 2 +- drivers/clk/qcom/gcc-msm8974.c | 2 +- drivers/clk/qcom/mmcc-msm8960.c | 6 +- drivers/clk/rockchip/clk-pll.c | 9 +- drivers/clk/rockchip/clk-rk3188.c | 2 +- drivers/clk/rockchip/clk-rk3288.c | 2 +- drivers/clk/rockchip/clk-rockchip.c | 2 +- drivers/clk/rockchip/clk.c | 23 +- drivers/clk/rockchip/clk.h | 5 +- drivers/clk/samsung/clk-exynos-audss.c | 16 +- drivers/clk/samsung/clk-exynos-clkout.c | 9 +- drivers/clk/samsung/clk-exynos3250.c | 1 - drivers/clk/samsung/clk-exynos4.c | 7 +- drivers/clk/samsung/clk-exynos5250.c | 1 - drivers/clk/samsung/clk-exynos5260.c | 1 - drivers/clk/samsung/clk-exynos5410.c | 1 - drivers/clk/samsung/clk-exynos5420.c | 1 - drivers/clk/samsung/clk-exynos5440.c | 1 - drivers/clk/samsung/clk-pll.c | 6 +- drivers/clk/samsung/clk-pll.h | 2 +- drivers/clk/samsung/clk-s3c2410-dclk.c | 30 +-- drivers/clk/samsung/clk-s3c2410.c | 1 - drivers/clk/samsung/clk-s3c2412.c | 1 - drivers/clk/samsung/clk-s3c2443.c | 1 - drivers/clk/samsung/clk-s3c64xx.c | 1 - drivers/clk/samsung/clk-s5pv210-audss.c | 16 +- drivers/clk/samsung/clk-s5pv210.c | 1 - drivers/clk/samsung/clk.c | 22 +- drivers/clk/samsung/clk.h | 3 +- drivers/clk/shmobile/clk-div6.c | 2 +- drivers/clk/shmobile/clk-emev2.c | 4 +- drivers/clk/shmobile/clk-mstp.c | 6 +- drivers/clk/shmobile/clk-r8a7740.c | 6 +- drivers/clk/shmobile/clk-r8a7779.c | 6 +- drivers/clk/shmobile/clk-rcar-gen2.c | 10 +- drivers/clk/shmobile/clk-rz.c | 6 +- drivers/clk/sirf/clk-atlas6.c | 3 +- drivers/clk/sirf/clk-common.c | 30 +-- drivers/clk/sirf/clk-prima2.c | 3 +- drivers/clk/socfpga/clk-gate.c | 3 +- drivers/clk/socfpga/clk-periph.c | 3 +- drivers/clk/socfpga/clk-pll.c | 5 +- drivers/clk/spear/clk-aux-synth.c | 8 +- drivers/clk/spear/clk-frac-synth.c | 4 +- drivers/clk/spear/clk-gpt-synth.c | 4 +- drivers/clk/spear/clk-vco-pll.c | 8 +- drivers/clk/spear/clk.h | 14 +- drivers/clk/spear/spear1310_clock.c | 3 +- drivers/clk/spear/spear1340_clock.c | 3 +- drivers/clk/spear/spear3xx_clock.c | 17 +- drivers/clk/spear/spear6xx_clock.c | 3 +- drivers/clk/st/clk-flexgen.c | 12 +- drivers/clk/st/clkgen-fsyn.c | 22 +- drivers/clk/st/clkgen-mux.c | 32 +-- drivers/clk/st/clkgen-pll.c | 34 +-- drivers/clk/sunxi/clk-a10-hosc.c | 2 +- drivers/clk/sunxi/clk-a20-gmac.c | 2 +- drivers/clk/sunxi/clk-factors.c | 4 +- drivers/clk/sunxi/clk-sun6i-apb0-gates.c | 2 +- drivers/clk/sunxi/clk-sun6i-apb0.c | 2 +- drivers/clk/sunxi/clk-sun6i-ar100.c | 6 +- drivers/clk/sunxi/clk-sun8i-apb0.c | 2 +- drivers/clk/sunxi/clk-sunxi.c | 18 +- drivers/clk/tegra/clk-audio-sync.c | 4 +- drivers/clk/tegra/clk-divider.c | 5 +- drivers/clk/tegra/clk-periph-gate.c | 5 +- drivers/clk/tegra/clk-periph.c | 9 +- drivers/clk/tegra/clk-pll-out.c | 5 +- drivers/clk/tegra/clk-pll.c | 41 ++- drivers/clk/tegra/clk-super.c | 5 +- drivers/clk/tegra/clk-tegra-audio.c | 5 +- drivers/clk/tegra/clk-tegra-fixed.c | 9 +- drivers/clk/tegra/clk-tegra-periph.c | 13 +- drivers/clk/tegra/clk-tegra-pmc.c | 5 +- drivers/clk/tegra/clk-tegra-super-gen4.c | 9 +- drivers/clk/tegra/clk-tegra114.c | 11 +- drivers/clk/tegra/clk-tegra124.c | 7 +- drivers/clk/tegra/clk-tegra20.c | 13 +- drivers/clk/tegra/clk-tegra30.c | 9 +- drivers/clk/tegra/clk.c | 25 +- drivers/clk/tegra/clk.h | 38 +-- drivers/clk/ti/apll.c | 8 +- drivers/clk/ti/clk-2xxx.c | 8 +- drivers/clk/ti/clk-33xx.c | 18 +- drivers/clk/ti/clk-3xxx.c | 8 +- drivers/clk/ti/clk-43xx.c | 8 +- drivers/clk/ti/clk-44xx.c | 16 +- drivers/clk/ti/clk-54xx.c | 25 +- drivers/clk/ti/clk-7xx.c | 28 +- drivers/clk/ti/clk-dra7-atl.c | 6 +- drivers/clk/ti/clk.c | 2 +- drivers/clk/ti/clockdomain.c | 4 +- drivers/clk/ti/composite.c | 2 +- drivers/clk/ti/divider.c | 6 +- drivers/clk/ti/dpll.c | 8 +- drivers/clk/ti/fixed-factor.c | 2 +- drivers/clk/ti/gate.c | 2 +- drivers/clk/ti/interface.c | 2 +- drivers/clk/ti/mux.c | 6 +- drivers/clk/ux500/abx500-clk.c | 3 +- drivers/clk/ux500/clk-prcc.c | 8 +- drivers/clk/ux500/clk-prcmu.c | 16 +- drivers/clk/ux500/clk-sysctrl.c | 10 +- drivers/clk/ux500/clk.h | 23 +- drivers/clk/ux500/u8500_clk.c | 3 +- drivers/clk/ux500/u8500_of_clk.c | 13 +- drivers/clk/ux500/u8540_clk.c | 3 +- drivers/clk/ux500/u9540_clk.c | 1 - drivers/clk/versatile/clk-icst.c | 5 +- drivers/clk/versatile/clk-icst.h | 2 +- drivers/clk/versatile/clk-impd1.c | 19 +- drivers/clk/versatile/clk-realview.c | 3 +- drivers/clk/versatile/clk-sp810.c | 30 ++- drivers/clk/versatile/clk-versatile.c | 3 +- drivers/clk/versatile/clk-vexpress-osc.c | 2 +- drivers/clk/versatile/clk-vexpress.c | 6 +- drivers/clk/x86/clk-lpt.c | 3 +- drivers/clk/zynq/clkc.c | 22 +- drivers/clk/zynq/pll.c | 4 +- drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c | 3 +- drivers/media/platform/exynos4-is/media-dev.c | 17 +- drivers/media/platform/exynos4-is/media-dev.h | 7 +- drivers/media/platform/omap3isp/isp.h | 2 +- drivers/rtc/rtc-hym8563.c | 4 +- drivers/spi/spi-pxa2xx-pci.c | 1 - drivers/staging/imx-drm/imx-tve.c | 27 +- include/asm-generic/clkdev.h | 6 +- include/linux/clk/ti.h | 10 +- include/linux/clk/zynq.h | 2 +- include/linux/platform_data/si5351.h | 4 +- sound/soc/mxs/mxs-saif.c | 4 +- 273 files changed, 1528 insertions(+), 1575 deletions(-) diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c index 0d1a892..4d95685 100644 --- a/arch/arm/mach-dove/common.c +++ b/arch/arm/mach-dove/common.c @@ -71,9 +71,9 @@ void __init dove_map_io(void) static int dove_tclk; static DEFINE_SPINLOCK(gating_lock); -static struct clk *tclk; +static struct clk_core *tclk; -static struct clk __init *dove_register_gate(const char *name, +static struct clk_core __init *dove_register_gate(const char *name, const char *parent, u8 bit_idx) { return clk_register_gate(NULL, name, parent, 0, @@ -83,9 +83,9 @@ static struct clk __init *dove_register_gate(const char *name, static void __init dove_clk_init(void) { - struct clk *usb0, *usb1, *sata, *pex0, *pex1, *sdio0, *sdio1; - struct clk *nand, *camera, *i2s0, *i2s1, *crypto, *ac97, *pdma; - struct clk *xor0, *xor1, *ge, *gephy; + struct clk_core *usb0, *usb1, *sata, *pex0, *pex1, *sdio0, *sdio1; + struct clk_core *nand, *camera, *i2s0, *i2s1, *crypto, *ac97, *pdma; + struct clk_core *xor0, *xor1, *ge, *gephy; tclk = clk_register_fixed_rate(NULL, "tclk", NULL, CLK_IS_ROOT, dove_tclk); diff --git a/arch/arm/mach-imx/clk-busy.c b/arch/arm/mach-imx/clk-busy.c index 4bb1bc4..bb3edc5 100644 --- a/arch/arm/mach-imx/clk-busy.c +++ b/arch/arm/mach-imx/clk-busy.c @@ -10,7 +10,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -78,12 +77,12 @@ static struct clk_ops clk_busy_divider_ops = { .set_rate = clk_busy_divider_set_rate, }; -struct clk *imx_clk_busy_divider(const char *name, const char *parent_name, +struct clk_core *imx_clk_busy_divider(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, void __iomem *busy_reg, u8 busy_shift) { struct clk_busy_divider *busy; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; busy = kzalloc(sizeof(*busy), GFP_KERNEL); @@ -152,12 +151,12 @@ static struct clk_ops clk_busy_mux_ops = { .set_parent = clk_busy_mux_set_parent, }; -struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift, +struct clk_core *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift, u8 width, void __iomem *busy_reg, u8 busy_shift, const char **parent_names, int num_parents) { struct clk_busy_mux *busy; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; busy = kzalloc(sizeof(*busy), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-fixup-div.c b/arch/arm/mach-imx/clk-fixup-div.c index 21db020..8a62bfd 100644 --- a/arch/arm/mach-imx/clk-fixup-div.c +++ b/arch/arm/mach-imx/clk-fixup-div.c @@ -92,12 +92,12 @@ static const struct clk_ops clk_fixup_div_ops = { .set_rate = clk_fixup_div_set_rate, }; -struct clk *imx_clk_fixup_divider(const char *name, const char *parent, +struct clk_core *imx_clk_fixup_divider(const char *name, const char *parent, void __iomem *reg, u8 shift, u8 width, void (*fixup)(u32 *val)) { struct clk_fixup_div *fixup_div; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (!fixup) diff --git a/arch/arm/mach-imx/clk-fixup-mux.c b/arch/arm/mach-imx/clk-fixup-mux.c index 0d40b35..e29dc62 100644 --- a/arch/arm/mach-imx/clk-fixup-mux.c +++ b/arch/arm/mach-imx/clk-fixup-mux.c @@ -71,12 +71,12 @@ static const struct clk_ops clk_fixup_mux_ops = { .set_parent = clk_fixup_mux_set_parent, }; -struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg, +struct clk_core *imx_clk_fixup_mux(const char *name, void __iomem *reg, u8 shift, u8 width, const char **parents, int num_parents, void (*fixup)(u32 *val)) { struct clk_fixup_mux *fixup_mux; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (!fixup) diff --git a/arch/arm/mach-imx/clk-gate-exclusive.c b/arch/arm/mach-imx/clk-gate-exclusive.c index c12f5f2..b036646 100644 --- a/arch/arm/mach-imx/clk-gate-exclusive.c +++ b/arch/arm/mach-imx/clk-gate-exclusive.c @@ -58,12 +58,12 @@ static const struct clk_ops clk_gate_exclusive_ops = { .is_enabled = clk_gate_exclusive_is_enabled, }; -struct clk *imx_clk_gate_exclusive(const char *name, const char *parent, +struct clk_core *imx_clk_gate_exclusive(const char *name, const char *parent, void __iomem *reg, u8 shift, u32 exclusive_mask) { struct clk_gate_exclusive *exgate; struct clk_gate *gate; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (exclusive_mask == 0) diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c index 84acdfd..d78f409 100644 --- a/arch/arm/mach-imx/clk-gate2.c +++ b/arch/arm/mach-imx/clk-gate2.c @@ -108,14 +108,14 @@ static struct clk_ops clk_gate2_ops = { .is_enabled = clk_gate2_is_enabled, }; -struct clk *clk_register_gate2(struct device *dev, const char *name, +struct clk_core *clk_register_gate2(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 bit_idx, u8 clk_gate2_flags, spinlock_t *lock, unsigned int *share_count) { struct clk_gate2 *gate; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; gate = kzalloc(sizeof(struct clk_gate2), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-imx1.c b/arch/arm/mach-imx/clk-imx1.c index 37c307a..8459bd7 100644 --- a/arch/arm/mach-imx/clk-imx1.c +++ b/arch/arm/mach-imx/clk-imx1.c @@ -15,7 +15,6 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include #include #include #include @@ -32,7 +31,7 @@ static const char *prem_sel_clks[] = { "clk32_premult", "clk16m", }; static const char *clko_sel_clks[] = { "per1", "hclk", "clk48m", "clk16m", "prem", "fclk", }; -static struct clk *clk[IMX1_CLK_MAX]; +static struct clk_core *clk[IMX1_CLK_MAX]; static struct clk_onecell_data clk_data; static void __iomem *ccm __initdata; diff --git a/arch/arm/mach-imx/clk-imx21.c b/arch/arm/mach-imx/clk-imx21.c index 4b4c753..56d799c 100644 --- a/arch/arm/mach-imx/clk-imx21.c +++ b/arch/arm/mach-imx/clk-imx21.c @@ -9,7 +9,6 @@ * of the License, or (at your option) any later version. */ -#include #include #include #include @@ -36,7 +35,7 @@ static const char *mpll_sel_clks[] = { "fpm_gate", "mpll_osc_sel", }; static const char *spll_sel_clks[] = { "fpm_gate", "mpll_osc_sel", }; static const char *ssi_sel_clks[] = { "spll_gate", "mpll_gate", }; -static struct clk *clk[IMX21_CLK_MAX]; +static struct clk_core *clk[IMX21_CLK_MAX]; static struct clk_onecell_data clk_data; static void __init _mx21_clocks_init(unsigned long lref, unsigned long href) diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index 59c0c85..06d2c72 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -87,7 +86,7 @@ enum mx25_clks { wdt_ipg, cko_div, cko_sel, cko, clk_max }; -static struct clk *clk[clk_max]; +static struct clk_core *clk[clk_max]; static int __init __mx25_clocks_init(unsigned long osc_rate, void __iomem *ccm_base) @@ -225,16 +224,16 @@ static int __init __mx25_clocks_init(unsigned long osc_rate, imx_check_clocks(clk, ARRAY_SIZE(clk)); - clk_prepare_enable(clk[emi_ahb]); + clk_provider_prepare_enable(clk[emi_ahb]); /* Clock source for gpt must be derived from AHB */ - clk_set_parent(clk[per5_sel], clk[ahb]); + clk_provider_set_parent(clk[per5_sel], clk[ahb]); /* * Let's initially set up CLKO parent as ipg, since this configuration * is used on some imx25 board designs to clock the audio codec. */ - clk_set_parent(clk[cko_sel], clk[ipg]); + clk_provider_set_parent(clk[cko_sel], clk[ipg]); return 0; } diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index ab6349e..7b0f01c 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -39,7 +38,7 @@ static const char *clko_sel_clks[] = { static const char *ssi_sel_clks[] = { "spll_gate", "mpll", }; -static struct clk *clk[IMX27_CLK_MAX]; +static struct clk_core *clk[IMX27_CLK_MAX]; static struct clk_onecell_data clk_data; static void __init _mx27_clocks_init(unsigned long fref) @@ -156,7 +155,7 @@ static void __init _mx27_clocks_init(unsigned long fref) clk_register_clkdev(clk[IMX27_CLK_CPU_DIV], NULL, "cpu0"); - clk_prepare_enable(clk[IMX27_CLK_EMI_AHB_GATE]); + clk_provider_prepare_enable(clk[IMX27_CLK_EMI_AHB_GATE]); imx_print_silicon_rev("i.MX27", mx27_revision()); } diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 286ef42..c95fc5c 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c @@ -16,7 +16,6 @@ */ #include -#include #include #include #include @@ -45,7 +44,7 @@ enum mx31_clks { gacc_gate, emi_gate, rtic_gate, firi_gate, clk_max }; -static struct clk *clk[clk_max]; +static struct clk_core *clk[clk_max]; static struct clk_onecell_data clk_data; int __init mx31_clocks_init(unsigned long fref) @@ -176,11 +175,11 @@ int __init mx31_clocks_init(unsigned long fref) clk_register_clkdev(clk[sdma_gate], NULL, "imx31-sdma"); clk_register_clkdev(clk[iim_gate], "iim", NULL); - clk_set_parent(clk[csi], clk[upll]); - clk_prepare_enable(clk[emi_gate]); - clk_prepare_enable(clk[iim_gate]); + clk_provider_set_parent(clk[csi], clk[upll]); + clk_provider_prepare_enable(clk[emi_gate]); + clk_provider_prepare_enable(clk[iim_gate]); mx31_revision(); - clk_disable_unprepare(clk[iim_gate]); + clk_provider_disable_unprepare(clk[iim_gate]); mxc_timer_init(MX31_IO_ADDRESS(MX31_GPT1_BASE_ADDR), MX31_INT_GPT); diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index a0d2b57..846b2cc 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -8,7 +8,6 @@ */ #include #include -#include #include #include #include @@ -67,7 +66,7 @@ enum mx35_clks { gpu2d_gate, clk_max }; -static struct clk *clk[clk_max]; +static struct clk_core *clk[clk_max]; int __init mx35_clocks_init(void) { @@ -99,7 +98,7 @@ int __init mx35_clocks_init(void) else clk[arm] = imx_clk_fixed_factor("arm", "mpll", 1, aad->arm); - if (clk_get_rate(clk[arm]) > 400000000) + if (clk_provider_get_rate(clk[arm]) > 400000000) hsp_div = hsp_div_532; else hsp_div = hsp_div_400; @@ -257,14 +256,14 @@ int __init mx35_clocks_init(void) clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); clk_register_clkdev(clk[admux_gate], "audmux", NULL); - clk_prepare_enable(clk[spba_gate]); - clk_prepare_enable(clk[gpio1_gate]); - clk_prepare_enable(clk[gpio2_gate]); - clk_prepare_enable(clk[gpio3_gate]); - clk_prepare_enable(clk[iim_gate]); - clk_prepare_enable(clk[emi_gate]); - clk_prepare_enable(clk[max_gate]); - clk_prepare_enable(clk[iomuxc_gate]); + clk_provider_prepare_enable(clk[spba_gate]); + clk_provider_prepare_enable(clk[gpio1_gate]); + clk_provider_prepare_enable(clk[gpio2_gate]); + clk_provider_prepare_enable(clk[gpio3_gate]); + clk_provider_prepare_enable(clk[iim_gate]); + clk_provider_prepare_enable(clk[emi_gate]); + clk_provider_prepare_enable(clk[max_gate]); + clk_provider_prepare_enable(clk[iomuxc_gate]); /* * SCC is needed to boot via mmc after a watchdog reset. The clock code @@ -272,7 +271,7 @@ int __init mx35_clocks_init(void) * handled here and not needed for mmc) and IIM (which is enabled * unconditionally above). */ - clk_prepare_enable(clk[scc_gate]); + clk_provider_prepare_enable(clk[scc_gate]); imx_print_silicon_rev("i.MX35", mx35_revision()); diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index 72d6521..fa9fc84 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c @@ -8,7 +8,6 @@ */ #include #include -#include #include #include #include @@ -126,7 +125,7 @@ static const char *spdif_sel[] = { "pll1_sw", "pll2_sw", "pll3_sw", "spdif_xtal_ static const char *spdif0_com_sel[] = { "spdif0_podf", "ssi1_root_gate", }; static const char *mx51_spdif1_com_sel[] = { "spdif1_podf", "ssi2_root_gate", }; -static struct clk *clk[IMX5_CLK_END]; +static struct clk_core *clk[IMX5_CLK_END]; static struct clk_onecell_data clk_data; static void __init mx5_clocks_common_init(void __iomem *ccm_base) @@ -289,26 +288,28 @@ static void __init mx5_clocks_common_init(void __iomem *ccm_base) clk_register_clkdev(clk[IMX5_CLK_GPC_DVFS], "gpc_dvfs", NULL); /* Set SDHC parents to be PLL2 */ - clk_set_parent(clk[IMX5_CLK_ESDHC_A_SEL], clk[IMX5_CLK_PLL2_SW]); - clk_set_parent(clk[IMX5_CLK_ESDHC_B_SEL], clk[IMX5_CLK_PLL2_SW]); + clk_provider_set_parent(clk[IMX5_CLK_ESDHC_A_SEL], + clk[IMX5_CLK_PLL2_SW]); + clk_provider_set_parent(clk[IMX5_CLK_ESDHC_B_SEL], + clk[IMX5_CLK_PLL2_SW]); /* move usb phy clk to 24MHz */ - clk_set_parent(clk[IMX5_CLK_USB_PHY_SEL], clk[IMX5_CLK_OSC]); - - clk_prepare_enable(clk[IMX5_CLK_GPC_DVFS]); - clk_prepare_enable(clk[IMX5_CLK_AHB_MAX]); /* esdhc3 */ - clk_prepare_enable(clk[IMX5_CLK_AIPS_TZ1]); - clk_prepare_enable(clk[IMX5_CLK_AIPS_TZ2]); /* fec */ - clk_prepare_enable(clk[IMX5_CLK_SPBA]); - clk_prepare_enable(clk[IMX5_CLK_EMI_FAST_GATE]); /* fec */ - clk_prepare_enable(clk[IMX5_CLK_EMI_SLOW_GATE]); /* eim */ - clk_prepare_enable(clk[IMX5_CLK_MIPI_HSC1_GATE]); - clk_prepare_enable(clk[IMX5_CLK_MIPI_HSC2_GATE]); - clk_prepare_enable(clk[IMX5_CLK_MIPI_ESC_GATE]); - clk_prepare_enable(clk[IMX5_CLK_MIPI_HSP_GATE]); - clk_prepare_enable(clk[IMX5_CLK_TMAX1]); - clk_prepare_enable(clk[IMX5_CLK_TMAX2]); /* esdhc2, fec */ - clk_prepare_enable(clk[IMX5_CLK_TMAX3]); /* esdhc1, esdhc4 */ + clk_provider_set_parent(clk[IMX5_CLK_USB_PHY_SEL], clk[IMX5_CLK_OSC]); + + clk_provider_prepare_enable(clk[IMX5_CLK_GPC_DVFS]); + clk_provider_prepare_enable(clk[IMX5_CLK_AHB_MAX]); /* esdhc3 */ + clk_provider_prepare_enable(clk[IMX5_CLK_AIPS_TZ1]); + clk_provider_prepare_enable(clk[IMX5_CLK_AIPS_TZ2]); /* fec */ + clk_provider_prepare_enable(clk[IMX5_CLK_SPBA]); + clk_provider_prepare_enable(clk[IMX5_CLK_EMI_FAST_GATE]); /* fec */ + clk_provider_prepare_enable(clk[IMX5_CLK_EMI_SLOW_GATE]); /* eim */ + clk_provider_prepare_enable(clk[IMX5_CLK_MIPI_HSC1_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_MIPI_HSC2_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_MIPI_ESC_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_MIPI_HSP_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_TMAX1]); + clk_provider_prepare_enable(clk[IMX5_CLK_TMAX2]); /* esdhc2, fec */ + clk_provider_prepare_enable(clk[IMX5_CLK_TMAX3]); /* esdhc1, esdhc4 */ } static void __init mx50_clocks_init(struct device_node *np) @@ -361,15 +362,15 @@ static void __init mx50_clocks_init(struct device_node *np) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); /* set SDHC root clock to 200MHZ*/ - clk_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 200000000); - clk_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 200000000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 200000000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 200000000); - clk_prepare_enable(clk[IMX5_CLK_IIM_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_IIM_GATE]); imx_print_silicon_rev("i.MX50", IMX_CHIP_REVISION_1_1); - clk_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); + clk_provider_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); - r = clk_round_rate(clk[IMX5_CLK_USBOH3_PER_GATE], 54000000); - clk_set_rate(clk[IMX5_CLK_USBOH3_PER_GATE], r); + r = clk_provider_round_rate(clk[IMX5_CLK_USBOH3_PER_GATE], 54000000); + clk_provider_set_rate(clk[IMX5_CLK_USBOH3_PER_GATE], r); } CLK_OF_DECLARE(imx50_ccm, "fsl,imx50-ccm", mx50_clocks_init); @@ -435,15 +436,16 @@ static void __init mx51_clocks_init(struct device_node *np) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); /* set the usboh3 parent to pll2_sw */ - clk_set_parent(clk[IMX5_CLK_USBOH3_SEL], clk[IMX5_CLK_PLL2_SW]); + clk_provider_set_parent(clk[IMX5_CLK_USBOH3_SEL], + clk[IMX5_CLK_PLL2_SW]); /* set SDHC root clock to 166.25MHZ*/ - clk_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 166250000); - clk_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 166250000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 166250000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 166250000); - clk_prepare_enable(clk[IMX5_CLK_IIM_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_IIM_GATE]); imx_print_silicon_rev("i.MX51", mx51_revision()); - clk_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); + clk_provider_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); /* * Reference Manual says: Functionality of CCDR[18] and CLPCR[23] is no @@ -545,17 +547,17 @@ static void __init mx53_clocks_init(struct device_node *np) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); /* set SDHC root clock to 200MHZ*/ - clk_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 200000000); - clk_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 200000000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 200000000); + clk_provider_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 200000000); /* move can bus clk to 24MHz */ - clk_set_parent(clk[IMX5_CLK_CAN_SEL], clk[IMX5_CLK_LP_APM]); + clk_provider_set_parent(clk[IMX5_CLK_CAN_SEL], clk[IMX5_CLK_LP_APM]); - clk_prepare_enable(clk[IMX5_CLK_IIM_GATE]); + clk_provider_prepare_enable(clk[IMX5_CLK_IIM_GATE]); imx_print_silicon_rev("i.MX53", mx53_revision()); - clk_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); + clk_provider_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); - r = clk_round_rate(clk[IMX5_CLK_USBOH3_PER_GATE], 54000000); - clk_set_rate(clk[IMX5_CLK_USBOH3_PER_GATE], r); + r = clk_provider_round_rate(clk[IMX5_CLK_USBOH3_PER_GATE], 54000000); + clk_provider_set_rate(clk[IMX5_CLK_USBOH3_PER_GATE], r); } CLK_OF_DECLARE(imx53_ccm, "fsl,imx53-ccm", mx53_clocks_init); diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 4ee6e77..2171ebf 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -82,7 +81,7 @@ static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", }; static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", }; static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", }; -static struct clk *clk[IMX6QDL_CLK_END]; +static struct clk_core *clk[IMX6QDL_CLK_END]; static struct clk_onecell_data clk_data; static unsigned int const clks_init_on[] __initconst = { @@ -173,13 +172,20 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); /* Do not bypass PLLs initially */ - clk_set_parent(clk[IMX6QDL_PLL1_BYPASS], clk[IMX6QDL_CLK_PLL1]); - clk_set_parent(clk[IMX6QDL_PLL2_BYPASS], clk[IMX6QDL_CLK_PLL2]); - clk_set_parent(clk[IMX6QDL_PLL3_BYPASS], clk[IMX6QDL_CLK_PLL3]); - clk_set_parent(clk[IMX6QDL_PLL4_BYPASS], clk[IMX6QDL_CLK_PLL4]); - clk_set_parent(clk[IMX6QDL_PLL5_BYPASS], clk[IMX6QDL_CLK_PLL5]); - clk_set_parent(clk[IMX6QDL_PLL6_BYPASS], clk[IMX6QDL_CLK_PLL6]); - clk_set_parent(clk[IMX6QDL_PLL7_BYPASS], clk[IMX6QDL_CLK_PLL7]); + clk_provider_set_parent(clk[IMX6QDL_PLL1_BYPASS], + clk[IMX6QDL_CLK_PLL1]); + clk_provider_set_parent(clk[IMX6QDL_PLL2_BYPASS], + clk[IMX6QDL_CLK_PLL2]); + clk_provider_set_parent(clk[IMX6QDL_PLL3_BYPASS], + clk[IMX6QDL_CLK_PLL3]); + clk_provider_set_parent(clk[IMX6QDL_PLL4_BYPASS], + clk[IMX6QDL_CLK_PLL4]); + clk_provider_set_parent(clk[IMX6QDL_PLL5_BYPASS], + clk[IMX6QDL_CLK_PLL5]); + clk_provider_set_parent(clk[IMX6QDL_PLL6_BYPASS], + clk[IMX6QDL_CLK_PLL6]); + clk_provider_set_parent(clk[IMX6QDL_PLL7_BYPASS], + clk[IMX6QDL_CLK_PLL7]); clk[IMX6QDL_CLK_PLL1_SYS] = imx_clk_gate("pll1_sys", "pll1_bypass", base + 0x00, 13); clk[IMX6QDL_CLK_PLL2_BUS] = imx_clk_gate("pll2_bus", "pll2_bypass", base + 0x30, 13); @@ -471,50 +477,65 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) if ((imx_get_soc_revision() != IMX_CHIP_REVISION_1_0) || cpu_is_imx6dl()) { - clk_set_parent(clk[IMX6QDL_CLK_LDB_DI0_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_LDB_DI1_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_LDB_DI0_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_LDB_DI1_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); } - clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI0_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI1_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI1_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI0_SEL], clk[IMX6QDL_CLK_IPU1_DI0_PRE]); - clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI1_SEL], clk[IMX6QDL_CLK_IPU1_DI1_PRE]); - clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_SEL], clk[IMX6QDL_CLK_IPU2_DI0_PRE]); - clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI1_SEL], clk[IMX6QDL_CLK_IPU2_DI1_PRE]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU1_DI0_PRE_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU1_DI1_PRE_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_PRE_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU2_DI1_PRE_SEL], + clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU1_DI0_SEL], + clk[IMX6QDL_CLK_IPU1_DI0_PRE]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU1_DI1_SEL], + clk[IMX6QDL_CLK_IPU1_DI1_PRE]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_SEL], + clk[IMX6QDL_CLK_IPU2_DI0_PRE]); + clk_provider_set_parent(clk[IMX6QDL_CLK_IPU2_DI1_SEL], + clk[IMX6QDL_CLK_IPU2_DI1_PRE]); /* * The gpmi needs 100MHz frequency in the EDO/Sync mode, * We can not get the 100MHz from the pll2_pfd0_352m. * So choose pll2_pfd2_396m as enfc_sel's parent. */ - clk_set_parent(clk[IMX6QDL_CLK_ENFC_SEL], clk[IMX6QDL_CLK_PLL2_PFD2_396M]); + clk_provider_set_parent(clk[IMX6QDL_CLK_ENFC_SEL], + clk[IMX6QDL_CLK_PLL2_PFD2_396M]); for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clk[clks_init_on[i]]); + clk_provider_prepare_enable(clk[clks_init_on[i]]); if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { - clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY1_GATE]); - clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY2_GATE]); + clk_provider_prepare_enable(clk[IMX6QDL_CLK_USBPHY1_GATE]); + clk_provider_prepare_enable(clk[IMX6QDL_CLK_USBPHY2_GATE]); } /* * Let's initially set up CLKO with OSC24M, since this configuration * is widely used by imx6q board designs to clock audio codec. */ - ret = clk_set_parent(clk[IMX6QDL_CLK_CKO2_SEL], clk[IMX6QDL_CLK_OSC]); + ret = clk_provider_set_parent(clk[IMX6QDL_CLK_CKO2_SEL], + clk[IMX6QDL_CLK_OSC]); if (!ret) - ret = clk_set_parent(clk[IMX6QDL_CLK_CKO], clk[IMX6QDL_CLK_CKO2]); + ret = clk_provider_set_parent(clk[IMX6QDL_CLK_CKO], + clk[IMX6QDL_CLK_CKO2]); if (ret) pr_warn("failed to set up CLKO: %d\n", ret); /* Audio-related clocks configuration */ - clk_set_parent(clk[IMX6QDL_CLK_SPDIF_SEL], clk[IMX6QDL_CLK_PLL3_PFD3_454M]); + clk_provider_set_parent(clk[IMX6QDL_CLK_SPDIF_SEL], + clk[IMX6QDL_CLK_PLL3_PFD3_454M]); /* All existing boards with PCIe use LVDS1 */ if (IS_ENABLED(CONFIG_PCI_IMX6)) - clk_set_parent(clk[IMX6QDL_CLK_LVDS1_SEL], clk[IMX6QDL_CLK_SATA_REF_100M]); + clk_provider_set_parent(clk[IMX6QDL_CLK_LVDS1_SEL], + clk[IMX6QDL_CLK_SATA_REF_100M]); /* Set initial power mode */ imx6q_set_lpm(WAIT_CLOCKED); diff --git a/arch/arm/mach-imx/clk-imx6sl.c b/arch/arm/mach-imx/clk-imx6sl.c index 6791ff3..23e6d10 100644 --- a/arch/arm/mach-imx/clk-imx6sl.c +++ b/arch/arm/mach-imx/clk-imx6sl.c @@ -7,7 +7,6 @@ * */ -#include #include #include #include @@ -95,7 +94,7 @@ static struct clk_div_table video_div_table[] = { { } }; -static struct clk *clks[IMX6SL_CLK_END]; +static struct clk_core *clks[IMX6SL_CLK_END]; static struct clk_onecell_data clk_data; static void __iomem *ccm_base; static void __iomem *anatop_base; @@ -225,13 +224,20 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) clks[IMX6SL_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); /* Do not bypass PLLs initially */ - clk_set_parent(clks[IMX6SL_PLL1_BYPASS], clks[IMX6SL_CLK_PLL1]); - clk_set_parent(clks[IMX6SL_PLL2_BYPASS], clks[IMX6SL_CLK_PLL2]); - clk_set_parent(clks[IMX6SL_PLL3_BYPASS], clks[IMX6SL_CLK_PLL3]); - clk_set_parent(clks[IMX6SL_PLL4_BYPASS], clks[IMX6SL_CLK_PLL4]); - clk_set_parent(clks[IMX6SL_PLL5_BYPASS], clks[IMX6SL_CLK_PLL5]); - clk_set_parent(clks[IMX6SL_PLL6_BYPASS], clks[IMX6SL_CLK_PLL6]); - clk_set_parent(clks[IMX6SL_PLL7_BYPASS], clks[IMX6SL_CLK_PLL7]); + clk_provider_set_parent(clks[IMX6SL_PLL1_BYPASS], + clks[IMX6SL_CLK_PLL1]); + clk_provider_set_parent(clks[IMX6SL_PLL2_BYPASS], + clks[IMX6SL_CLK_PLL2]); + clk_provider_set_parent(clks[IMX6SL_PLL3_BYPASS], + clks[IMX6SL_CLK_PLL3]); + clk_provider_set_parent(clks[IMX6SL_PLL4_BYPASS], + clks[IMX6SL_CLK_PLL4]); + clk_provider_set_parent(clks[IMX6SL_PLL5_BYPASS], + clks[IMX6SL_CLK_PLL5]); + clk_provider_set_parent(clks[IMX6SL_PLL6_BYPASS], + clks[IMX6SL_CLK_PLL6]); + clk_provider_set_parent(clks[IMX6SL_PLL7_BYPASS], + clks[IMX6SL_CLK_PLL7]); clks[IMX6SL_CLK_PLL1_SYS] = imx_clk_gate("pll1_sys", "pll1_bypass", base + 0x00, 13); clks[IMX6SL_CLK_PLL2_BUS] = imx_clk_gate("pll2_bus", "pll2_bypass", base + 0x30, 13); @@ -410,7 +416,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); /* Ensure the AHB clk is at 132MHz. */ - ret = clk_set_rate(clks[IMX6SL_CLK_AHB], 132000000); + ret = clk_provider_set_rate(clks[IMX6SL_CLK_AHB], 132000000); if (ret) pr_warn("%s: failed to set AHB clock rate %d!\n", __func__, ret); @@ -420,22 +426,23 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) * usecount and enabling/disabling of parent PLLs. */ for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clks[clks_init_on[i]]); + clk_provider_prepare_enable(clks[clks_init_on[i]]); if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { - clk_prepare_enable(clks[IMX6SL_CLK_USBPHY1_GATE]); - clk_prepare_enable(clks[IMX6SL_CLK_USBPHY2_GATE]); + clk_provider_prepare_enable(clks[IMX6SL_CLK_USBPHY1_GATE]); + clk_provider_prepare_enable(clks[IMX6SL_CLK_USBPHY2_GATE]); } /* Audio-related clocks configuration */ - clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]); + clk_provider_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], + clks[IMX6SL_CLK_PLL3_PFD3]); /* set PLL5 video as lcdif pix parent clock */ - clk_set_parent(clks[IMX6SL_CLK_LCDIF_PIX_SEL], - clks[IMX6SL_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clks[IMX6SL_CLK_LCDIF_PIX_SEL], + clks[IMX6SL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clks[IMX6SL_CLK_LCDIF_AXI_SEL], - clks[IMX6SL_CLK_PLL2_PFD2]); + clk_provider_set_parent(clks[IMX6SL_CLK_LCDIF_AXI_SEL], + clks[IMX6SL_CLK_PLL2_PFD2]); /* Set initial power mode */ imx6q_set_lpm(WAIT_CLOCKED); diff --git a/arch/arm/mach-imx/clk-imx6sx.c b/arch/arm/mach-imx/clk-imx6sx.c index 27070a7..5fe643f 100644 --- a/arch/arm/mach-imx/clk-imx6sx.c +++ b/arch/arm/mach-imx/clk-imx6sx.c @@ -10,7 +10,6 @@ */ #include -#include #include #include #include @@ -90,7 +89,7 @@ static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", }; static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", }; static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", }; -static struct clk *clks[IMX6SX_CLK_CLK_END]; +static struct clk_core *clks[IMX6SX_CLK_CLK_END]; static struct clk_onecell_data clk_data; static int const clks_init_on[] __initconst = { @@ -144,12 +143,14 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node) clks[IMX6SX_CLK_DUMMY] = imx_clk_fixed("dummy", 0); - clks[IMX6SX_CLK_CKIL] = of_clk_get_by_name(ccm_node, "ckil"); - clks[IMX6SX_CLK_OSC] = of_clk_get_by_name(ccm_node, "osc"); + clks[IMX6SX_CLK_CKIL] = of_clk_provider_get_by_name(ccm_node, "ckil"); + clks[IMX6SX_CLK_OSC] = of_clk_provider_get_by_name(ccm_node, "osc"); /* ipp_di clock is external input */ - clks[IMX6SX_CLK_IPP_DI0] = of_clk_get_by_name(ccm_node, "ipp_di0"); - clks[IMX6SX_CLK_IPP_DI1] = of_clk_get_by_name(ccm_node, "ipp_di1"); + clks[IMX6SX_CLK_IPP_DI0] = of_clk_provider_get_by_name(ccm_node, + "ipp_di0"); + clks[IMX6SX_CLK_IPP_DI1] = of_clk_provider_get_by_name(ccm_node, + "ipp_di1"); /* Clock source from external clock via CLK1 PAD */ clks[IMX6SX_CLK_ANACLK1] = imx_obtain_fixed_clock("anaclk1", 0); @@ -184,13 +185,20 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node) clks[IMX6SX_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); /* Do not bypass PLLs initially */ - clk_set_parent(clks[IMX6SX_PLL1_BYPASS], clks[IMX6SX_CLK_PLL1]); - clk_set_parent(clks[IMX6SX_PLL2_BYPASS], clks[IMX6SX_CLK_PLL2]); - clk_set_parent(clks[IMX6SX_PLL3_BYPASS], clks[IMX6SX_CLK_PLL3]); - clk_set_parent(clks[IMX6SX_PLL4_BYPASS], clks[IMX6SX_CLK_PLL4]); - clk_set_parent(clks[IMX6SX_PLL5_BYPASS], clks[IMX6SX_CLK_PLL5]); - clk_set_parent(clks[IMX6SX_PLL6_BYPASS], clks[IMX6SX_CLK_PLL6]); - clk_set_parent(clks[IMX6SX_PLL7_BYPASS], clks[IMX6SX_CLK_PLL7]); + clk_provider_set_parent(clks[IMX6SX_PLL1_BYPASS], + clks[IMX6SX_CLK_PLL1]); + clk_provider_set_parent(clks[IMX6SX_PLL2_BYPASS], + clks[IMX6SX_CLK_PLL2]); + clk_provider_set_parent(clks[IMX6SX_PLL3_BYPASS], + clks[IMX6SX_CLK_PLL3]); + clk_provider_set_parent(clks[IMX6SX_PLL4_BYPASS], + clks[IMX6SX_CLK_PLL4]); + clk_provider_set_parent(clks[IMX6SX_PLL5_BYPASS], + clks[IMX6SX_CLK_PLL5]); + clk_provider_set_parent(clks[IMX6SX_PLL6_BYPASS], + clks[IMX6SX_CLK_PLL6]); + clk_provider_set_parent(clks[IMX6SX_PLL7_BYPASS], + clks[IMX6SX_CLK_PLL7]); clks[IMX6SX_CLK_PLL1_SYS] = imx_clk_gate("pll1_sys", "pll1_bypass", base + 0x00, 13); clks[IMX6SX_CLK_PLL2_BUS] = imx_clk_gate("pll2_bus", "pll2_bypass", base + 0x30, 13); @@ -498,65 +506,80 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clks[clks_init_on[i]]); + clk_provider_prepare_enable(clks[clks_init_on[i]]); if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { - clk_prepare_enable(clks[IMX6SX_CLK_USBPHY1_GATE]); - clk_prepare_enable(clks[IMX6SX_CLK_USBPHY2_GATE]); + clk_provider_prepare_enable(clks[IMX6SX_CLK_USBPHY1_GATE]); + clk_provider_prepare_enable(clks[IMX6SX_CLK_USBPHY2_GATE]); } /* Set the default 132MHz for EIM module */ - clk_set_parent(clks[IMX6SX_CLK_EIM_SLOW_SEL], clks[IMX6SX_CLK_PLL2_PFD2]); - clk_set_rate(clks[IMX6SX_CLK_EIM_SLOW], 132000000); + clk_provider_set_parent(clks[IMX6SX_CLK_EIM_SLOW_SEL], + clks[IMX6SX_CLK_PLL2_PFD2]); + clk_provider_set_rate(clks[IMX6SX_CLK_EIM_SLOW], 132000000); /* set parent clock for LCDIF1 pixel clock */ - clk_set_parent(clks[IMX6SX_CLK_LCDIF1_PRE_SEL], clks[IMX6SX_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clks[IMX6SX_CLK_LCDIF1_SEL], clks[IMX6SX_CLK_LCDIF1_PODF]); + clk_provider_set_parent(clks[IMX6SX_CLK_LCDIF1_PRE_SEL], + clks[IMX6SX_CLK_PLL5_VIDEO_DIV]); + clk_provider_set_parent(clks[IMX6SX_CLK_LCDIF1_SEL], + clks[IMX6SX_CLK_LCDIF1_PODF]); /* Set the parent clks of PCIe lvds1 and pcie_axi to be pcie ref, axi */ - if (clk_set_parent(clks[IMX6SX_CLK_LVDS1_SEL], clks[IMX6SX_CLK_PCIE_REF_125M])) + if (clk_provider_set_parent(clks[IMX6SX_CLK_LVDS1_SEL], clks[IMX6SX_CLK_PCIE_REF_125M])) pr_err("Failed to set pcie bus parent clk.\n"); - if (clk_set_parent(clks[IMX6SX_CLK_PCIE_AXI_SEL], clks[IMX6SX_CLK_AXI])) + if (clk_provider_set_parent(clks[IMX6SX_CLK_PCIE_AXI_SEL], clks[IMX6SX_CLK_AXI])) pr_err("Failed to set pcie parent clk.\n"); /* * Init enet system AHB clock, set to 200Mhz * pll2_pfd2_396m-> ENET_PODF-> ENET_AHB */ - clk_set_parent(clks[IMX6SX_CLK_ENET_PRE_SEL], clks[IMX6SX_CLK_PLL2_PFD2]); - clk_set_parent(clks[IMX6SX_CLK_ENET_SEL], clks[IMX6SX_CLK_ENET_PODF]); - clk_set_rate(clks[IMX6SX_CLK_ENET_PODF], 200000000); - clk_set_rate(clks[IMX6SX_CLK_ENET_REF], 125000000); - clk_set_rate(clks[IMX6SX_CLK_ENET2_REF], 125000000); + clk_provider_set_parent(clks[IMX6SX_CLK_ENET_PRE_SEL], + clks[IMX6SX_CLK_PLL2_PFD2]); + clk_provider_set_parent(clks[IMX6SX_CLK_ENET_SEL], + clks[IMX6SX_CLK_ENET_PODF]); + clk_provider_set_rate(clks[IMX6SX_CLK_ENET_PODF], 200000000); + clk_provider_set_rate(clks[IMX6SX_CLK_ENET_REF], 125000000); + clk_provider_set_rate(clks[IMX6SX_CLK_ENET2_REF], 125000000); /* Audio clocks */ - clk_set_rate(clks[IMX6SX_CLK_PLL4_AUDIO_DIV], 393216000); - - clk_set_parent(clks[IMX6SX_CLK_SPDIF_SEL], clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); - clk_set_rate(clks[IMX6SX_CLK_SPDIF_PODF], 98304000); - - clk_set_parent(clks[IMX6SX_CLK_AUDIO_SEL], clks[IMX6SX_CLK_PLL3_USB_OTG]); - clk_set_rate(clks[IMX6SX_CLK_AUDIO_PODF], 24000000); - - clk_set_parent(clks[IMX6SX_CLK_SSI1_SEL], clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); - clk_set_parent(clks[IMX6SX_CLK_SSI2_SEL], clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); - clk_set_parent(clks[IMX6SX_CLK_SSI3_SEL], clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); - clk_set_rate(clks[IMX6SX_CLK_SSI1_PODF], 24576000); - clk_set_rate(clks[IMX6SX_CLK_SSI2_PODF], 24576000); - clk_set_rate(clks[IMX6SX_CLK_SSI3_PODF], 24576000); - - clk_set_parent(clks[IMX6SX_CLK_ESAI_SEL], clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); - clk_set_rate(clks[IMX6SX_CLK_ESAI_PODF], 24576000); + clk_provider_set_rate(clks[IMX6SX_CLK_PLL4_AUDIO_DIV], 393216000); + + clk_provider_set_parent(clks[IMX6SX_CLK_SPDIF_SEL], + clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); + clk_provider_set_rate(clks[IMX6SX_CLK_SPDIF_PODF], 98304000); + + clk_provider_set_parent(clks[IMX6SX_CLK_AUDIO_SEL], + clks[IMX6SX_CLK_PLL3_USB_OTG]); + clk_provider_set_rate(clks[IMX6SX_CLK_AUDIO_PODF], 24000000); + + clk_provider_set_parent(clks[IMX6SX_CLK_SSI1_SEL], + clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); + clk_provider_set_parent(clks[IMX6SX_CLK_SSI2_SEL], + clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); + clk_provider_set_parent(clks[IMX6SX_CLK_SSI3_SEL], + clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); + clk_provider_set_rate(clks[IMX6SX_CLK_SSI1_PODF], 24576000); + clk_provider_set_rate(clks[IMX6SX_CLK_SSI2_PODF], 24576000); + clk_provider_set_rate(clks[IMX6SX_CLK_SSI3_PODF], 24576000); + + clk_provider_set_parent(clks[IMX6SX_CLK_ESAI_SEL], + clks[IMX6SX_CLK_PLL4_AUDIO_DIV]); + clk_provider_set_rate(clks[IMX6SX_CLK_ESAI_PODF], 24576000); /* Set parent clock for vadc */ - clk_set_parent(clks[IMX6SX_CLK_VID_SEL], clks[IMX6SX_CLK_PLL3_USB_OTG]); + clk_provider_set_parent(clks[IMX6SX_CLK_VID_SEL], + clks[IMX6SX_CLK_PLL3_USB_OTG]); /* default parent of can_sel clock is invalid, manually set it here */ - clk_set_parent(clks[IMX6SX_CLK_CAN_SEL], clks[IMX6SX_CLK_PLL3_60M]); + clk_provider_set_parent(clks[IMX6SX_CLK_CAN_SEL], + clks[IMX6SX_CLK_PLL3_60M]); /* Update gpu clock from default 528M to 720M */ - clk_set_parent(clks[IMX6SX_CLK_GPU_CORE_SEL], clks[IMX6SX_CLK_PLL3_PFD0]); - clk_set_parent(clks[IMX6SX_CLK_GPU_AXI_SEL], clks[IMX6SX_CLK_PLL3_PFD0]); + clk_provider_set_parent(clks[IMX6SX_CLK_GPU_CORE_SEL], + clks[IMX6SX_CLK_PLL3_PFD0]); + clk_provider_set_parent(clks[IMX6SX_CLK_GPU_AXI_SEL], + clks[IMX6SX_CLK_PLL3_PFD0]); /* Set initial power mode */ imx6q_set_lpm(WAIT_CLOCKED); diff --git a/arch/arm/mach-imx/clk-pfd.c b/arch/arm/mach-imx/clk-pfd.c index 0b0f6f6..7f172a2 100644 --- a/arch/arm/mach-imx/clk-pfd.c +++ b/arch/arm/mach-imx/clk-pfd.c @@ -10,7 +10,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -128,11 +127,11 @@ static const struct clk_ops clk_pfd_ops = { .is_enabled = clk_pfd_is_enabled, }; -struct clk *imx_clk_pfd(const char *name, const char *parent_name, +struct clk_core *imx_clk_pfd(const char *name, const char *parent_name, void __iomem *reg, u8 idx) { struct clk_pfd *pfd; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pfd = kzalloc(sizeof(*pfd), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-pllv1.c b/arch/arm/mach-imx/clk-pllv1.c index d21d14c..7ef2cab 100644 --- a/arch/arm/mach-imx/clk-pllv1.c +++ b/arch/arm/mach-imx/clk-pllv1.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -97,11 +96,11 @@ static struct clk_ops clk_pllv1_ops = { .recalc_rate = clk_pllv1_recalc_rate, }; -struct clk *imx_clk_pllv1(const char *name, const char *parent, +struct clk_core *imx_clk_pllv1(const char *name, const char *parent, void __iomem *base) { struct clk_pllv1 *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kmalloc(sizeof(*pll), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-pllv2.c b/arch/arm/mach-imx/clk-pllv2.c index 20889d5..3dca7df 100644 --- a/arch/arm/mach-imx/clk-pllv2.c +++ b/arch/arm/mach-imx/clk-pllv2.c @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -237,11 +236,11 @@ static struct clk_ops clk_pllv2_ops = { .set_rate = clk_pllv2_set_rate, }; -struct clk *imx_clk_pllv2(const char *name, const char *parent, +struct clk_core *imx_clk_pllv2(const char *name, const char *parent, void __iomem *base) { struct clk_pllv2 *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kzalloc(sizeof(*pll), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-pllv3.c b/arch/arm/mach-imx/clk-pllv3.c index 57de74d..eabcdcd 100644 --- a/arch/arm/mach-imx/clk-pllv3.c +++ b/arch/arm/mach-imx/clk-pllv3.c @@ -10,7 +10,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -283,13 +282,13 @@ static const struct clk_ops clk_pllv3_enet_ops = { .recalc_rate = clk_pllv3_enet_recalc_rate, }; -struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, +struct clk_core *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, const char *parent_name, void __iomem *base, u32 div_mask) { struct clk_pllv3 *pll; const struct clk_ops *ops; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kzalloc(sizeof(*pll), GFP_KERNEL); diff --git a/arch/arm/mach-imx/clk-vf610.c b/arch/arm/mach-imx/clk-vf610.c index a178184..d631305 100644 --- a/arch/arm/mach-imx/clk-vf610.c +++ b/arch/arm/mach-imx/clk-vf610.c @@ -9,7 +9,6 @@ */ #include -#include #include #include "clk.h" @@ -97,7 +96,7 @@ static struct clk_div_table pll4_main_div_table[] = { { } }; -static struct clk *clk[VF610_CLK_END]; +static struct clk_core *clk[VF610_CLK_END]; static struct clk_onecell_data clk_data; static unsigned int const clks_init_on[] __initconst = { @@ -321,23 +320,35 @@ static void __init vf610_clocks_init(struct device_node *ccm_node) imx_check_clocks(clk, ARRAY_SIZE(clk)); - clk_set_parent(clk[VF610_CLK_QSPI0_SEL], clk[VF610_CLK_PLL1_PFD4]); - clk_set_rate(clk[VF610_CLK_QSPI0_X4_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_SEL]) / 2); - clk_set_rate(clk[VF610_CLK_QSPI0_X2_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_X4_DIV]) / 2); - clk_set_rate(clk[VF610_CLK_QSPI0_X1_DIV], clk_get_rate(clk[VF610_CLK_QSPI0_X2_DIV]) / 2); - - clk_set_parent(clk[VF610_CLK_QSPI1_SEL], clk[VF610_CLK_PLL1_PFD4]); - clk_set_rate(clk[VF610_CLK_QSPI1_X4_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_SEL]) / 2); - clk_set_rate(clk[VF610_CLK_QSPI1_X2_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_X4_DIV]) / 2); - clk_set_rate(clk[VF610_CLK_QSPI1_X1_DIV], clk_get_rate(clk[VF610_CLK_QSPI1_X2_DIV]) / 2); - - clk_set_parent(clk[VF610_CLK_SAI0_SEL], clk[VF610_CLK_AUDIO_EXT]); - clk_set_parent(clk[VF610_CLK_SAI1_SEL], clk[VF610_CLK_AUDIO_EXT]); - clk_set_parent(clk[VF610_CLK_SAI2_SEL], clk[VF610_CLK_AUDIO_EXT]); - clk_set_parent(clk[VF610_CLK_SAI3_SEL], clk[VF610_CLK_AUDIO_EXT]); + clk_provider_set_parent(clk[VF610_CLK_QSPI0_SEL], + clk[VF610_CLK_PLL1_PFD4]); + clk_provider_set_rate(clk[VF610_CLK_QSPI0_X4_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI0_SEL]) / 2); + clk_provider_set_rate(clk[VF610_CLK_QSPI0_X2_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI0_X4_DIV]) / 2); + clk_provider_set_rate(clk[VF610_CLK_QSPI0_X1_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI0_X2_DIV]) / 2); + + clk_provider_set_parent(clk[VF610_CLK_QSPI1_SEL], + clk[VF610_CLK_PLL1_PFD4]); + clk_provider_set_rate(clk[VF610_CLK_QSPI1_X4_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI1_SEL]) / 2); + clk_provider_set_rate(clk[VF610_CLK_QSPI1_X2_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI1_X4_DIV]) / 2); + clk_provider_set_rate(clk[VF610_CLK_QSPI1_X1_DIV], + clk_provider_get_rate(clk[VF610_CLK_QSPI1_X2_DIV]) / 2); + + clk_provider_set_parent(clk[VF610_CLK_SAI0_SEL], + clk[VF610_CLK_AUDIO_EXT]); + clk_provider_set_parent(clk[VF610_CLK_SAI1_SEL], + clk[VF610_CLK_AUDIO_EXT]); + clk_provider_set_parent(clk[VF610_CLK_SAI2_SEL], + clk[VF610_CLK_AUDIO_EXT]); + clk_provider_set_parent(clk[VF610_CLK_SAI3_SEL], + clk[VF610_CLK_AUDIO_EXT]); for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clk[clks_init_on[i]]); + clk_provider_prepare_enable(clk[clks_init_on[i]]); /* Add the clocks to provider list */ clk_data.clks = clk; diff --git a/arch/arm/mach-imx/clk.c b/arch/arm/mach-imx/clk.c index df12b53..fc54203 100644 --- a/arch/arm/mach-imx/clk.c +++ b/arch/arm/mach-imx/clk.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -7,7 +6,7 @@ DEFINE_SPINLOCK(imx_ccm_lock); -void __init imx_check_clocks(struct clk *clks[], unsigned int count) +void __init imx_check_clocks(struct clk_core *clks[], unsigned int count) { unsigned i; @@ -17,10 +16,10 @@ void __init imx_check_clocks(struct clk *clks[], unsigned int count) i, PTR_ERR(clks[i])); } -static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name) +static struct clk_core * __init imx_obtain_fixed_clock_from_dt(const char *name) { struct of_phandle_args phandle; - struct clk *clk = ERR_PTR(-ENODEV); + struct clk_core *clk = ERR_PTR(-ENODEV); char *path; path = kasprintf(GFP_KERNEL, "/clocks/%s", name); @@ -37,10 +36,10 @@ static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name) return clk; } -struct clk * __init imx_obtain_fixed_clock( +struct clk_core * __init imx_obtain_fixed_clock( const char *name, unsigned long rate) { - struct clk *clk; + struct clk_core *clk; clk = imx_obtain_fixed_clock_from_dt(name); if (IS_ERR(clk)) diff --git a/arch/arm/mach-imx/clk.h b/arch/arm/mach-imx/clk.h index 4cdf8b6..d4d234c 100644 --- a/arch/arm/mach-imx/clk.h +++ b/arch/arm/mach-imx/clk.h @@ -6,14 +6,14 @@ extern spinlock_t imx_ccm_lock; -void imx_check_clocks(struct clk *clks[], unsigned int count); +void imx_check_clocks(struct clk_core *clks[], unsigned int count); extern void imx_cscmr1_fixup(u32 *val); -struct clk *imx_clk_pllv1(const char *name, const char *parent, +struct clk_core *imx_clk_pllv1(const char *name, const char *parent, void __iomem *base); -struct clk *imx_clk_pllv2(const char *name, const char *parent, +struct clk_core *imx_clk_pllv2(const char *name, const char *parent, void __iomem *base); enum imx_pllv3_type { @@ -24,29 +24,29 @@ enum imx_pllv3_type { IMX_PLLV3_ENET, }; -struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, +struct clk_core *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, const char *parent_name, void __iomem *base, u32 div_mask); -struct clk *clk_register_gate2(struct device *dev, const char *name, +struct clk_core *clk_register_gate2(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 bit_idx, u8 clk_gate_flags, spinlock_t *lock, unsigned int *share_count); -struct clk * imx_obtain_fixed_clock( +struct clk_core * imx_obtain_fixed_clock( const char *name, unsigned long rate); -struct clk *imx_clk_gate_exclusive(const char *name, const char *parent, +struct clk_core *imx_clk_gate_exclusive(const char *name, const char *parent, void __iomem *reg, u8 shift, u32 exclusive_mask); -static inline struct clk *imx_clk_gate2(const char *name, const char *parent, +static inline struct clk_core *imx_clk_gate2(const char *name, const char *parent, void __iomem *reg, u8 shift) { return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg, shift, 0, &imx_ccm_lock, NULL); } -static inline struct clk *imx_clk_gate2_shared(const char *name, +static inline struct clk_core *imx_clk_gate2_shared(const char *name, const char *parent, void __iomem *reg, u8 shift, unsigned int *share_count) { @@ -54,38 +54,38 @@ static inline struct clk *imx_clk_gate2_shared(const char *name, shift, 0, &imx_ccm_lock, share_count); } -struct clk *imx_clk_pfd(const char *name, const char *parent_name, +struct clk_core *imx_clk_pfd(const char *name, const char *parent_name, void __iomem *reg, u8 idx); -struct clk *imx_clk_busy_divider(const char *name, const char *parent_name, +struct clk_core *imx_clk_busy_divider(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, void __iomem *busy_reg, u8 busy_shift); -struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift, +struct clk_core *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift, u8 width, void __iomem *busy_reg, u8 busy_shift, const char **parent_names, int num_parents); -struct clk *imx_clk_fixup_divider(const char *name, const char *parent, +struct clk_core *imx_clk_fixup_divider(const char *name, const char *parent, void __iomem *reg, u8 shift, u8 width, void (*fixup)(u32 *val)); -struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg, +struct clk_core *imx_clk_fixup_mux(const char *name, void __iomem *reg, u8 shift, u8 width, const char **parents, int num_parents, void (*fixup)(u32 *val)); -static inline struct clk *imx_clk_fixed(const char *name, int rate) +static inline struct clk_core *imx_clk_fixed(const char *name, int rate) { return clk_register_fixed_rate(NULL, name, NULL, CLK_IS_ROOT, rate); } -static inline struct clk *imx_clk_divider(const char *name, const char *parent, +static inline struct clk_core *imx_clk_divider(const char *name, const char *parent, void __iomem *reg, u8 shift, u8 width) { return clk_register_divider(NULL, name, parent, CLK_SET_RATE_PARENT, reg, shift, width, 0, &imx_ccm_lock); } -static inline struct clk *imx_clk_divider_flags(const char *name, +static inline struct clk_core *imx_clk_divider_flags(const char *name, const char *parent, void __iomem *reg, u8 shift, u8 width, unsigned long flags) { @@ -93,21 +93,21 @@ static inline struct clk *imx_clk_divider_flags(const char *name, reg, shift, width, 0, &imx_ccm_lock); } -static inline struct clk *imx_clk_gate(const char *name, const char *parent, +static inline struct clk_core *imx_clk_gate(const char *name, const char *parent, void __iomem *reg, u8 shift) { return clk_register_gate(NULL, name, parent, CLK_SET_RATE_PARENT, reg, shift, 0, &imx_ccm_lock); } -static inline struct clk *imx_clk_gate_dis(const char *name, const char *parent, +static inline struct clk_core *imx_clk_gate_dis(const char *name, const char *parent, void __iomem *reg, u8 shift) { return clk_register_gate(NULL, name, parent, CLK_SET_RATE_PARENT, reg, shift, CLK_GATE_SET_TO_DISABLE, &imx_ccm_lock); } -static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg, +static inline struct clk_core *imx_clk_mux(const char *name, void __iomem *reg, u8 shift, u8 width, const char **parents, int num_parents) { return clk_register_mux(NULL, name, parents, num_parents, @@ -115,7 +115,7 @@ static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg, width, 0, &imx_ccm_lock); } -static inline struct clk *imx_clk_mux_flags(const char *name, +static inline struct clk_core *imx_clk_mux_flags(const char *name, void __iomem *reg, u8 shift, u8 width, const char **parents, int num_parents, unsigned long flags) { @@ -124,7 +124,7 @@ static inline struct clk *imx_clk_mux_flags(const char *name, &imx_ccm_lock); } -static inline struct clk *imx_clk_fixed_factor(const char *name, +static inline struct clk_core *imx_clk_fixed_factor(const char *name, const char *parent, unsigned int mult, unsigned int div) { return clk_register_fixed_factor(NULL, name, parent, diff --git a/arch/arm/mach-msm/clock-pcom.c b/arch/arm/mach-msm/clock-pcom.c index 9a80449..14352c4 100644 --- a/arch/arm/mach-msm/clock-pcom.c +++ b/arch/arm/mach-msm/clock-pcom.c @@ -132,7 +132,7 @@ static int msm_clock_pcom_probe(struct platform_device *pdev) for (i = 0; i < pdata->num_lookups; i++) { const struct clk_pcom_desc *desc = &pdata->lookup[i]; - struct clk *c; + struct clk_core *c; struct clk_pcom *p; struct clk_hw *hw; struct clk_init_data init; diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index e6ac679..fee2643 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c @@ -164,7 +164,7 @@ void __init mv78xx0_map_io(void) /***************************************************************************** * CLK tree ****************************************************************************/ -static struct clk *tclk; +static struct clk_core *tclk; static void __init clk_init(void) { diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 018353d..0f41427 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -551,7 +551,7 @@ static struct regulator_consumer_supply cm_t35_camera_supplies[] = { static void __init cm_t35_init_camera(void) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_fixed_rate(NULL, "mt9t001-clkin", NULL, CLK_IS_ROOT, 48000000); diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index eb8c75e..1180abe 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c @@ -18,7 +18,6 @@ */ #include -#include #include #include #include @@ -107,7 +106,7 @@ static struct dpll_data dpll3_dd = { .max_divider = OMAP3_MAX_DPLL_DIV, }; -static struct clk dpll3_ck; +static struct clk_core dpll3_ck; static const char *dpll3_ck_parent_names[] = { "sys_ck", @@ -137,7 +136,7 @@ DEFINE_CLK_DIVIDER(dpll3_m2_ck, "dpll3_ck", &dpll3_ck, 0x0, OMAP3430_CORE_DPLL_CLKOUT_DIV_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk core_ck; +static struct clk_core core_ck; static const char *core_ck_parent_names[] = { "dpll3_m2_ck", @@ -158,7 +157,7 @@ DEFINE_CLK_DIVIDER(l4_ick, "l3_ick", &l3_ick, 0x0, OMAP3430_CLKSEL_L4_SHIFT, OMAP3430_CLKSEL_L4_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk security_l4_ick2; +static struct clk_core security_l4_ick2; static const char *security_l4_ick2_parent_names[] = { "l4_ick", @@ -167,7 +166,7 @@ static const char *security_l4_ick2_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(security_l4_ick2, NULL); DEFINE_STRUCT_CLK(security_l4_ick2, security_l4_ick2_parent_names, core_ck_ops); -static struct clk aes1_ick; +static struct clk_core aes1_ick; static const char *aes1_ick_parent_names[] = { "security_l4_ick2", @@ -190,7 +189,7 @@ static struct clk_hw_omap aes1_ick_hw = { DEFINE_STRUCT_CLK(aes1_ick, aes1_ick_parent_names, aes1_ick_ops); -static struct clk core_l4_ick; +static struct clk_core core_l4_ick; static const struct clk_ops core_l4_ick_ops = { .init = &omap2_init_clk_clkdm, @@ -199,7 +198,7 @@ static const struct clk_ops core_l4_ick_ops = { DEFINE_STRUCT_CLK_HW_OMAP(core_l4_ick, "core_l4_clkdm"); DEFINE_STRUCT_CLK(core_l4_ick, security_l4_ick2_parent_names, core_l4_ick_ops); -static struct clk aes2_ick; +static struct clk_core aes2_ick; static const char *aes2_ick_parent_names[] = { "core_l4_ick", @@ -224,7 +223,7 @@ static struct clk_hw_omap aes2_ick_hw = { DEFINE_STRUCT_CLK(aes2_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk dpll1_fck; +static struct clk_core dpll1_fck; static struct dpll_data dpll1_dd = { .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL), @@ -248,7 +247,7 @@ static struct dpll_data dpll1_dd = { .max_divider = OMAP3_MAX_DPLL_DIV, }; -static struct clk dpll1_ck; +static struct clk_core dpll1_ck; static const struct clk_ops dpll1_ck_ops = { .init = &omap2_init_clk_clkdm, @@ -279,7 +278,7 @@ DEFINE_CLK_DIVIDER(dpll1_x2m2_ck, "dpll1_x2_ck", &dpll1_x2_ck, 0x0, OMAP3430_MPU_DPLL_CLKOUT_DIV_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk mpu_ck; +static struct clk_core mpu_ck; static const char *mpu_ck_parent_names[] = { "dpll1_x2m2_ck", @@ -293,7 +292,7 @@ DEFINE_CLK_DIVIDER(arm_fck, "mpu_ck", &mpu_ck, 0x0, OMAP3430_ST_MPU_CLK_SHIFT, OMAP3430_ST_MPU_CLK_WIDTH, 0x0, NULL); -static struct clk cam_ick; +static struct clk_core cam_ick; static struct clk_hw_omap cam_ick_hw = { .hw = { @@ -358,7 +357,7 @@ static struct dpll_data dpll4_dd_3630 __initdata = { .flags = DPLL_J_TYPE }; -static struct clk dpll4_ck; +static struct clk_core dpll4_ck; static const struct clk_ops dpll4_ck_ops = { .init = &omap2_init_clk_clkdm, @@ -422,7 +421,7 @@ DEFINE_CLK_DIVIDER(dpll4_m5_ck, "dpll4_ck", &dpll4_ck, 0x0, OMAP3430_CLKSEL_CAM_SHIFT, OMAP3630_CLKSEL_CAM_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dpll4_m5x2_ck; +static struct clk_core dpll4_m5x2_ck; static const char *dpll4_m5x2_ck_parent_names[] = { "dpll4_m5_ck", @@ -459,7 +458,7 @@ static struct clk_hw_omap dpll4_m5x2_ck_hw = { DEFINE_STRUCT_CLK_FLAGS(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); -static struct clk dpll4_m5x2_ck_3630 = { +static struct clk_core dpll4_m5x2_ck_3630 = { .name = "dpll4_m5x2_ck", .hw = &dpll4_m5x2_ck_hw.hw, .parent_names = dpll4_m5x2_ck_parent_names, @@ -468,7 +467,7 @@ static struct clk dpll4_m5x2_ck_3630 = { .flags = CLK_SET_RATE_PARENT, }; -static struct clk cam_mclk; +static struct clk_core cam_mclk; static const char *cam_mclk_parent_names[] = { "dpll4_m5x2_ck", @@ -483,7 +482,7 @@ static struct clk_hw_omap cam_mclk_hw = { .clkdm_name = "cam_clkdm", }; -static struct clk cam_mclk = { +static struct clk_core cam_mclk = { .name = "cam_mclk", .hw = &cam_mclk_hw.hw, .parent_names = cam_mclk_parent_names, @@ -512,7 +511,7 @@ DEFINE_CLK_DIVIDER(dpll4_m2_ck, "dpll4_ck", &dpll4_ck, 0x0, OMAP3430_DIV_96M_SHIFT, OMAP3630_DIV_96M_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dpll4_m2x2_ck; +static struct clk_core dpll4_m2x2_ck; static const char *dpll4_m2x2_ck_parent_names[] = { "dpll4_m2_ck", @@ -531,7 +530,7 @@ static struct clk_hw_omap dpll4_m2x2_ck_hw = { DEFINE_STRUCT_CLK(dpll4_m2x2_ck, dpll4_m2x2_ck_parent_names, dpll4_m5x2_ck_ops); -static struct clk dpll4_m2x2_ck_3630 = { +static struct clk_core dpll4_m2x2_ck_3630 = { .name = "dpll4_m2x2_ck", .hw = &dpll4_m2x2_ck_hw.hw, .parent_names = dpll4_m2x2_ck_parent_names, @@ -539,7 +538,7 @@ static struct clk dpll4_m2x2_ck_3630 = { .ops = &dpll4_m5x2_ck_3630_ops, }; -static struct clk omap_96m_alwon_fck; +static struct clk_core omap_96m_alwon_fck; static const char *omap_96m_alwon_fck_parent_names[] = { "dpll4_m2x2_ck", @@ -549,7 +548,7 @@ DEFINE_STRUCT_CLK_HW_OMAP(omap_96m_alwon_fck, NULL); DEFINE_STRUCT_CLK(omap_96m_alwon_fck, omap_96m_alwon_fck_parent_names, core_ck_ops); -static struct clk cm_96m_fck; +static struct clk_core cm_96m_fck; static const char *cm_96m_fck_parent_names[] = { "omap_96m_alwon_fck", @@ -568,7 +567,7 @@ DEFINE_CLK_DIVIDER_TABLE(dpll4_m3_ck, "dpll4_ck", &dpll4_ck, 0x0, OMAP3430_CLKSEL_TV_SHIFT, OMAP3630_CLKSEL_TV_WIDTH, 0, dpll4_mx_ck_div_table, NULL); -static struct clk dpll4_m3x2_ck; +static struct clk_core dpll4_m3x2_ck; static const char *dpll4_m3x2_ck_parent_names[] = { "dpll4_m3_ck", @@ -587,7 +586,7 @@ static struct clk_hw_omap dpll4_m3x2_ck_hw = { DEFINE_STRUCT_CLK(dpll4_m3x2_ck, dpll4_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); -static struct clk dpll4_m3x2_ck_3630 = { +static struct clk_core dpll4_m3x2_ck_3630 = { .name = "dpll4_m3x2_ck", .hw = &dpll4_m3x2_ck_hw.hw, .parent_names = dpll4_m3x2_ck_parent_names, @@ -651,7 +650,7 @@ static const char *omap_48m_fck_parent_names[] = { "cm_96m_fck", "sys_altclk", }; -static struct clk omap_48m_fck; +static struct clk_core omap_48m_fck; static const struct clk_ops omap_48m_fck_ops = { .recalc_rate = &omap2_clksel_recalc, @@ -672,7 +671,7 @@ DEFINE_STRUCT_CLK(omap_48m_fck, omap_48m_fck_parent_names, omap_48m_fck_ops); DEFINE_CLK_FIXED_FACTOR(omap_12m_fck, "omap_48m_fck", &omap_48m_fck, 0x0, 1, 4); -static struct clk core_12m_fck; +static struct clk_core core_12m_fck; static const char *core_12m_fck_parent_names[] = { "omap_12m_fck", @@ -681,7 +680,7 @@ static const char *core_12m_fck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(core_12m_fck, "core_l4_clkdm"); DEFINE_STRUCT_CLK(core_12m_fck, core_12m_fck_parent_names, core_l4_ick_ops); -static struct clk core_48m_fck; +static struct clk_core core_48m_fck; static const char *core_48m_fck_parent_names[] = { "omap_48m_fck", @@ -698,7 +697,7 @@ DEFINE_CLK_MUX(omap_96m_fck, omap_96m_fck_parent_names, NULL, 0x0, OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), OMAP3430_SOURCE_96M_SHIFT, OMAP3430_SOURCE_96M_WIDTH, 0x0, NULL); -static struct clk core_96m_fck; +static struct clk_core core_96m_fck; static const char *core_96m_fck_parent_names[] = { "omap_96m_fck", @@ -707,7 +706,7 @@ static const char *core_96m_fck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(core_96m_fck, "core_l4_clkdm"); DEFINE_STRUCT_CLK(core_96m_fck, core_96m_fck_parent_names, core_l4_ick_ops); -static struct clk core_l3_ick; +static struct clk_core core_l3_ick; static const char *core_l3_ick_parent_names[] = { "l3_ick", @@ -718,7 +717,7 @@ DEFINE_STRUCT_CLK(core_l3_ick, core_l3_ick_parent_names, core_l4_ick_ops); DEFINE_CLK_FIXED_FACTOR(dpll3_m2x2_ck, "dpll3_m2_ck", &dpll3_m2_ck, 0x0, 2, 1); -static struct clk corex2_fck; +static struct clk_core corex2_fck; static const char *corex2_fck_parent_names[] = { "dpll3_m2x2_ck", @@ -727,7 +726,7 @@ static const char *corex2_fck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(corex2_fck, NULL); DEFINE_STRUCT_CLK(corex2_fck, corex2_fck_parent_names, core_ck_ops); -static struct clk cpefuse_fck; +static struct clk_core cpefuse_fck; static struct clk_hw_omap cpefuse_fck_hw = { .hw = { @@ -740,7 +739,7 @@ static struct clk_hw_omap cpefuse_fck_hw = { DEFINE_STRUCT_CLK(cpefuse_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk csi2_96m_fck; +static struct clk_core csi2_96m_fck; static const char *csi2_96m_fck_parent_names[] = { "core_96m_fck", @@ -757,7 +756,7 @@ static struct clk_hw_omap csi2_96m_fck_hw = { DEFINE_STRUCT_CLK(csi2_96m_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk d2d_26m_fck; +static struct clk_core d2d_26m_fck; static struct clk_hw_omap d2d_26m_fck_hw = { .hw = { @@ -771,7 +770,7 @@ static struct clk_hw_omap d2d_26m_fck_hw = { DEFINE_STRUCT_CLK(d2d_26m_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk des1_ick; +static struct clk_core des1_ick; static struct clk_hw_omap des1_ick_hw = { .hw = { @@ -784,7 +783,7 @@ static struct clk_hw_omap des1_ick_hw = { DEFINE_STRUCT_CLK(des1_ick, aes1_ick_parent_names, aes1_ick_ops); -static struct clk des2_ick; +static struct clk_core des2_ick; static struct clk_hw_omap des2_ick_hw = { .hw = { @@ -803,7 +802,7 @@ DEFINE_CLK_DIVIDER(dpll1_fck, "core_ck", &core_ck, 0x0, OMAP3430_MPU_CLK_SRC_SHIFT, OMAP3430_MPU_CLK_SRC_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dpll2_fck; +static struct clk_core dpll2_fck; static struct dpll_data dpll2_dd = { .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL), @@ -828,7 +827,7 @@ static struct dpll_data dpll2_dd = { .max_divider = OMAP3_MAX_DPLL_DIV, }; -static struct clk dpll2_ck; +static struct clk_core dpll2_ck; static struct clk_hw_omap dpll2_ck_hw = { .hw = { @@ -857,7 +856,7 @@ DEFINE_CLK_DIVIDER(dpll3_m3_ck, "dpll3_ck", &dpll3_ck, 0x0, OMAP3430_DIV_DPLL3_SHIFT, OMAP3430_DIV_DPLL3_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dpll3_m3x2_ck; +static struct clk_core dpll3_m3x2_ck; static const char *dpll3_m3x2_ck_parent_names[] = { "dpll3_m3_ck", @@ -876,7 +875,7 @@ static struct clk_hw_omap dpll3_m3x2_ck_hw = { DEFINE_STRUCT_CLK(dpll3_m3x2_ck, dpll3_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); -static struct clk dpll3_m3x2_ck_3630 = { +static struct clk_core dpll3_m3x2_ck_3630 = { .name = "dpll3_m3x2_ck", .hw = &dpll3_m3x2_ck_hw.hw, .parent_names = dpll3_m3x2_ck_parent_names, @@ -891,7 +890,7 @@ DEFINE_CLK_DIVIDER_TABLE(dpll4_m4_ck, "dpll4_ck", &dpll4_ck, 0x0, OMAP3430_CLKSEL_DSS1_SHIFT, OMAP3630_CLKSEL_DSS1_WIDTH, 0, dpll4_mx_ck_div_table, NULL); -static struct clk dpll4_m4x2_ck; +static struct clk_core dpll4_m4x2_ck; static const char *dpll4_m4x2_ck_parent_names[] = { "dpll4_m4_ck", @@ -911,7 +910,7 @@ static struct clk_hw_omap dpll4_m4x2_ck_hw = { DEFINE_STRUCT_CLK_FLAGS(dpll4_m4x2_ck, dpll4_m4x2_ck_parent_names, dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); -static struct clk dpll4_m4x2_ck_3630 = { +static struct clk_core dpll4_m4x2_ck_3630 = { .name = "dpll4_m4x2_ck", .hw = &dpll4_m4x2_ck_hw.hw, .parent_names = dpll4_m4x2_ck_parent_names, @@ -925,7 +924,7 @@ DEFINE_CLK_DIVIDER(dpll4_m6_ck, "dpll4_ck", &dpll4_ck, 0x0, OMAP3430_DIV_DPLL4_SHIFT, OMAP3630_DIV_DPLL4_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dpll4_m6x2_ck; +static struct clk_core dpll4_m6x2_ck; static const char *dpll4_m6x2_ck_parent_names[] = { "dpll4_m6_ck", @@ -944,7 +943,7 @@ static struct clk_hw_omap dpll4_m6x2_ck_hw = { DEFINE_STRUCT_CLK(dpll4_m6x2_ck, dpll4_m6x2_ck_parent_names, dpll4_m5x2_ck_ops); -static struct clk dpll4_m6x2_ck_3630 = { +static struct clk_core dpll4_m6x2_ck_3630 = { .name = "dpll4_m6x2_ck", .hw = &dpll4_m6x2_ck_hw.hw, .parent_names = dpll4_m6x2_ck_parent_names, @@ -976,7 +975,7 @@ static struct dpll_data dpll5_dd = { .max_divider = OMAP3_MAX_DPLL_DIV, }; -static struct clk dpll5_ck; +static struct clk_core dpll5_ck; static struct clk_hw_omap dpll5_ck_hw = { .hw = { @@ -994,7 +993,7 @@ DEFINE_CLK_DIVIDER(dpll5_m2_ck, "dpll5_ck", &dpll5_ck, 0x0, OMAP3430ES2_DIV_120M_SHIFT, OMAP3430ES2_DIV_120M_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk dss1_alwon_fck_3430es1; +static struct clk_core dss1_alwon_fck_3430es1; static const char *dss1_alwon_fck_3430es1_parent_names[] = { "dpll4_m4x2_ck", @@ -1013,7 +1012,7 @@ DEFINE_STRUCT_CLK_FLAGS(dss1_alwon_fck_3430es1, dss1_alwon_fck_3430es1_parent_names, aes2_ick_ops, CLK_SET_RATE_PARENT); -static struct clk dss1_alwon_fck_3430es2; +static struct clk_core dss1_alwon_fck_3430es2; static struct clk_hw_omap dss1_alwon_fck_3430es2_hw = { .hw = { @@ -1029,7 +1028,7 @@ DEFINE_STRUCT_CLK_FLAGS(dss1_alwon_fck_3430es2, dss1_alwon_fck_3430es1_parent_names, aes2_ick_ops, CLK_SET_RATE_PARENT); -static struct clk dss2_alwon_fck; +static struct clk_core dss2_alwon_fck; static struct clk_hw_omap dss2_alwon_fck_hw = { .hw = { @@ -1042,7 +1041,7 @@ static struct clk_hw_omap dss2_alwon_fck_hw = { DEFINE_STRUCT_CLK(dss2_alwon_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk dss_96m_fck; +static struct clk_core dss_96m_fck; static struct clk_hw_omap dss_96m_fck_hw = { .hw = { @@ -1055,7 +1054,7 @@ static struct clk_hw_omap dss_96m_fck_hw = { DEFINE_STRUCT_CLK(dss_96m_fck, core_96m_fck_parent_names, aes2_ick_ops); -static struct clk dss_ick_3430es1; +static struct clk_core dss_ick_3430es1; static struct clk_hw_omap dss_ick_3430es1_hw = { .hw = { @@ -1069,7 +1068,7 @@ static struct clk_hw_omap dss_ick_3430es1_hw = { DEFINE_STRUCT_CLK(dss_ick_3430es1, security_l4_ick2_parent_names, aes2_ick_ops); -static struct clk dss_ick_3430es2; +static struct clk_core dss_ick_3430es2; static struct clk_hw_omap dss_ick_3430es2_hw = { .hw = { @@ -1083,7 +1082,7 @@ static struct clk_hw_omap dss_ick_3430es2_hw = { DEFINE_STRUCT_CLK(dss_ick_3430es2, security_l4_ick2_parent_names, aes2_ick_ops); -static struct clk dss_tv_fck; +static struct clk_core dss_tv_fck; static const char *dss_tv_fck_parent_names[] = { "omap_54m_fck", @@ -1100,7 +1099,7 @@ static struct clk_hw_omap dss_tv_fck_hw = { DEFINE_STRUCT_CLK(dss_tv_fck, dss_tv_fck_parent_names, aes2_ick_ops); -static struct clk emac_fck; +static struct clk_core emac_fck; static const char *emac_fck_parent_names[] = { "rmii_ck", @@ -1116,7 +1115,7 @@ static struct clk_hw_omap emac_fck_hw = { DEFINE_STRUCT_CLK(emac_fck, emac_fck_parent_names, aes1_ick_ops); -static struct clk ipss_ick; +static struct clk_core ipss_ick; static const char *ipss_ick_parent_names[] = { "core_l3_ick", @@ -1134,7 +1133,7 @@ static struct clk_hw_omap ipss_ick_hw = { DEFINE_STRUCT_CLK(ipss_ick, ipss_ick_parent_names, aes2_ick_ops); -static struct clk emac_ick; +static struct clk_core emac_ick; static const char *emac_ick_parent_names[] = { "ipss_ick", @@ -1152,7 +1151,7 @@ static struct clk_hw_omap emac_ick_hw = { DEFINE_STRUCT_CLK(emac_ick, emac_ick_parent_names, aes2_ick_ops); -static struct clk emu_core_alwon_ck; +static struct clk_core emu_core_alwon_ck; static const char *emu_core_alwon_ck_parent_names[] = { "dpll3_m3x2_ck", @@ -1162,7 +1161,7 @@ DEFINE_STRUCT_CLK_HW_OMAP(emu_core_alwon_ck, "dpll3_clkdm"); DEFINE_STRUCT_CLK(emu_core_alwon_ck, emu_core_alwon_ck_parent_names, core_l4_ick_ops); -static struct clk emu_mpu_alwon_ck; +static struct clk_core emu_mpu_alwon_ck; static const char *emu_mpu_alwon_ck_parent_names[] = { "mpu_ck", @@ -1171,7 +1170,7 @@ static const char *emu_mpu_alwon_ck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(emu_mpu_alwon_ck, NULL); DEFINE_STRUCT_CLK(emu_mpu_alwon_ck, emu_mpu_alwon_ck_parent_names, core_ck_ops); -static struct clk emu_per_alwon_ck; +static struct clk_core emu_per_alwon_ck; static const char *emu_per_alwon_ck_parent_names[] = { "dpll4_m6x2_ck", @@ -1222,7 +1221,7 @@ static const struct clk_ops emu_src_ck_ops = { .disable = &omap2_clkops_disable_clkdm, }; -static struct clk emu_src_ck; +static struct clk_core emu_src_ck; static struct clk_hw_omap emu_src_ck_hw = { .hw = { @@ -1241,7 +1240,7 @@ DEFINE_CLK_DIVIDER(atclk_fck, "emu_src_ck", &emu_src_ck, 0x0, OMAP3430_CLKSEL_ATCLK_SHIFT, OMAP3430_CLKSEL_ATCLK_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk fac_ick; +static struct clk_core fac_ick; static struct clk_hw_omap fac_ick_hw = { .hw = { @@ -1255,7 +1254,7 @@ static struct clk_hw_omap fac_ick_hw = { DEFINE_STRUCT_CLK(fac_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk fshostusb_fck; +static struct clk_core fshostusb_fck; static const char *fshostusb_fck_parent_names[] = { "core_48m_fck", @@ -1273,7 +1272,7 @@ static struct clk_hw_omap fshostusb_fck_hw = { DEFINE_STRUCT_CLK(fshostusb_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk gfx_l3_ck; +static struct clk_core gfx_l3_ck; static struct clk_hw_omap gfx_l3_ck_hw = { .hw = { @@ -1292,7 +1291,7 @@ DEFINE_CLK_DIVIDER(gfx_l3_fck, "l3_ick", &l3_ick, 0x0, OMAP_CLKSEL_GFX_SHIFT, OMAP_CLKSEL_GFX_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk gfx_cg1_ck; +static struct clk_core gfx_cg1_ck; static const char *gfx_cg1_ck_parent_names[] = { "gfx_l3_fck", @@ -1310,7 +1309,7 @@ static struct clk_hw_omap gfx_cg1_ck_hw = { DEFINE_STRUCT_CLK(gfx_cg1_ck, gfx_cg1_ck_parent_names, aes2_ick_ops); -static struct clk gfx_cg2_ck; +static struct clk_core gfx_cg2_ck; static struct clk_hw_omap gfx_cg2_ck_hw = { .hw = { @@ -1324,7 +1323,7 @@ static struct clk_hw_omap gfx_cg2_ck_hw = { DEFINE_STRUCT_CLK(gfx_cg2_ck, gfx_cg1_ck_parent_names, aes2_ick_ops); -static struct clk gfx_l3_ick; +static struct clk_core gfx_l3_ick; static const char *gfx_l3_ick_parent_names[] = { "gfx_l3_ck", @@ -1333,7 +1332,7 @@ static const char *gfx_l3_ick_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(gfx_l3_ick, "gfx_3430es1_clkdm"); DEFINE_STRUCT_CLK(gfx_l3_ick, gfx_l3_ick_parent_names, core_l4_ick_ops); -static struct clk wkup_32k_fck; +static struct clk_core wkup_32k_fck; static const char *wkup_32k_fck_parent_names[] = { "omap_32k_fck", @@ -1342,7 +1341,7 @@ static const char *wkup_32k_fck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(wkup_32k_fck, "wkup_clkdm"); DEFINE_STRUCT_CLK(wkup_32k_fck, wkup_32k_fck_parent_names, core_l4_ick_ops); -static struct clk gpio1_dbck; +static struct clk_core gpio1_dbck; static const char *gpio1_dbck_parent_names[] = { "wkup_32k_fck", @@ -1359,12 +1358,12 @@ static struct clk_hw_omap gpio1_dbck_hw = { DEFINE_STRUCT_CLK(gpio1_dbck, gpio1_dbck_parent_names, aes2_ick_ops); -static struct clk wkup_l4_ick; +static struct clk_core wkup_l4_ick; DEFINE_STRUCT_CLK_HW_OMAP(wkup_l4_ick, "wkup_clkdm"); DEFINE_STRUCT_CLK(wkup_l4_ick, dpll3_ck_parent_names, core_l4_ick_ops); -static struct clk gpio1_ick; +static struct clk_core gpio1_ick; static const char *gpio1_ick_parent_names[] = { "wkup_l4_ick", @@ -1382,13 +1381,13 @@ static struct clk_hw_omap gpio1_ick_hw = { DEFINE_STRUCT_CLK(gpio1_ick, gpio1_ick_parent_names, aes2_ick_ops); -static struct clk per_32k_alwon_fck; +static struct clk_core per_32k_alwon_fck; DEFINE_STRUCT_CLK_HW_OMAP(per_32k_alwon_fck, "per_clkdm"); DEFINE_STRUCT_CLK(per_32k_alwon_fck, wkup_32k_fck_parent_names, core_l4_ick_ops); -static struct clk gpio2_dbck; +static struct clk_core gpio2_dbck; static const char *gpio2_dbck_parent_names[] = { "per_32k_alwon_fck", @@ -1405,12 +1404,12 @@ static struct clk_hw_omap gpio2_dbck_hw = { DEFINE_STRUCT_CLK(gpio2_dbck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk per_l4_ick; +static struct clk_core per_l4_ick; DEFINE_STRUCT_CLK_HW_OMAP(per_l4_ick, "per_clkdm"); DEFINE_STRUCT_CLK(per_l4_ick, security_l4_ick2_parent_names, core_l4_ick_ops); -static struct clk gpio2_ick; +static struct clk_core gpio2_ick; static const char *gpio2_ick_parent_names[] = { "per_l4_ick", @@ -1428,7 +1427,7 @@ static struct clk_hw_omap gpio2_ick_hw = { DEFINE_STRUCT_CLK(gpio2_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk gpio3_dbck; +static struct clk_core gpio3_dbck; static struct clk_hw_omap gpio3_dbck_hw = { .hw = { @@ -1441,7 +1440,7 @@ static struct clk_hw_omap gpio3_dbck_hw = { DEFINE_STRUCT_CLK(gpio3_dbck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk gpio3_ick; +static struct clk_core gpio3_ick; static struct clk_hw_omap gpio3_ick_hw = { .hw = { @@ -1455,7 +1454,7 @@ static struct clk_hw_omap gpio3_ick_hw = { DEFINE_STRUCT_CLK(gpio3_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk gpio4_dbck; +static struct clk_core gpio4_dbck; static struct clk_hw_omap gpio4_dbck_hw = { .hw = { @@ -1468,7 +1467,7 @@ static struct clk_hw_omap gpio4_dbck_hw = { DEFINE_STRUCT_CLK(gpio4_dbck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk gpio4_ick; +static struct clk_core gpio4_ick; static struct clk_hw_omap gpio4_ick_hw = { .hw = { @@ -1482,7 +1481,7 @@ static struct clk_hw_omap gpio4_ick_hw = { DEFINE_STRUCT_CLK(gpio4_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk gpio5_dbck; +static struct clk_core gpio5_dbck; static struct clk_hw_omap gpio5_dbck_hw = { .hw = { @@ -1495,7 +1494,7 @@ static struct clk_hw_omap gpio5_dbck_hw = { DEFINE_STRUCT_CLK(gpio5_dbck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk gpio5_ick; +static struct clk_core gpio5_ick; static struct clk_hw_omap gpio5_ick_hw = { .hw = { @@ -1509,7 +1508,7 @@ static struct clk_hw_omap gpio5_ick_hw = { DEFINE_STRUCT_CLK(gpio5_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk gpio6_dbck; +static struct clk_core gpio6_dbck; static struct clk_hw_omap gpio6_dbck_hw = { .hw = { @@ -1522,7 +1521,7 @@ static struct clk_hw_omap gpio6_dbck_hw = { DEFINE_STRUCT_CLK(gpio6_dbck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk gpio6_ick; +static struct clk_core gpio6_ick; static struct clk_hw_omap gpio6_ick_hw = { .hw = { @@ -1536,7 +1535,7 @@ static struct clk_hw_omap gpio6_ick_hw = { DEFINE_STRUCT_CLK(gpio6_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk gpmc_fck; +static struct clk_core gpmc_fck; static struct clk_hw_omap gpmc_fck_hw = { .hw = { @@ -1565,7 +1564,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt10_fck, "core_l4_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT10_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt10_ick; +static struct clk_core gpt10_ick; static struct clk_hw_omap gpt10_ick_hw = { .hw = { @@ -1586,7 +1585,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt11_fck, "core_l4_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT11_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt11_ick; +static struct clk_core gpt11_ick; static struct clk_hw_omap gpt11_ick_hw = { .hw = { @@ -1600,7 +1599,7 @@ static struct clk_hw_omap gpt11_ick_hw = { DEFINE_STRUCT_CLK(gpt11_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk gpt12_fck; +static struct clk_core gpt12_fck; static const char *gpt12_fck_parent_names[] = { "secure_32k_fck", @@ -1609,7 +1608,7 @@ static const char *gpt12_fck_parent_names[] = { DEFINE_STRUCT_CLK_HW_OMAP(gpt12_fck, "wkup_clkdm"); DEFINE_STRUCT_CLK(gpt12_fck, gpt12_fck_parent_names, core_l4_ick_ops); -static struct clk gpt12_ick; +static struct clk_core gpt12_ick; static struct clk_hw_omap gpt12_ick_hw = { .hw = { @@ -1630,7 +1629,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt1_fck, "wkup_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT1_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt1_ick; +static struct clk_core gpt1_ick; static struct clk_hw_omap gpt1_ick_hw = { .hw = { @@ -1651,7 +1650,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt2_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT2_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt2_ick; +static struct clk_core gpt2_ick; static struct clk_hw_omap gpt2_ick_hw = { .hw = { @@ -1672,7 +1671,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt3_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT3_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt3_ick; +static struct clk_core gpt3_ick; static struct clk_hw_omap gpt3_ick_hw = { .hw = { @@ -1693,7 +1692,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt4_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT4_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt4_ick; +static struct clk_core gpt4_ick; static struct clk_hw_omap gpt4_ick_hw = { .hw = { @@ -1714,7 +1713,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt5_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT5_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt5_ick; +static struct clk_core gpt5_ick; static struct clk_hw_omap gpt5_ick_hw = { .hw = { @@ -1735,7 +1734,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt6_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT6_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt6_ick; +static struct clk_core gpt6_ick; static struct clk_hw_omap gpt6_ick_hw = { .hw = { @@ -1756,7 +1755,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt7_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT7_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt7_ick; +static struct clk_core gpt7_ick; static struct clk_hw_omap gpt7_ick_hw = { .hw = { @@ -1777,7 +1776,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt8_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT8_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt8_ick; +static struct clk_core gpt8_ick; static struct clk_hw_omap gpt8_ick_hw = { .hw = { @@ -1798,7 +1797,7 @@ DEFINE_CLK_OMAP_MUX_GATE(gpt9_fck, "per_clkdm", omap343x_gpt_clksel, OMAP3430_EN_GPT9_SHIFT, &clkhwops_wait, gpt10_fck_parent_names, clkout2_src_ck_ops); -static struct clk gpt9_ick; +static struct clk_core gpt9_ick; static struct clk_hw_omap gpt9_ick_hw = { .hw = { @@ -1812,7 +1811,7 @@ static struct clk_hw_omap gpt9_ick_hw = { DEFINE_STRUCT_CLK(gpt9_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk hdq_fck; +static struct clk_core hdq_fck; static const char *hdq_fck_parent_names[] = { "core_12m_fck", @@ -1830,7 +1829,7 @@ static struct clk_hw_omap hdq_fck_hw = { DEFINE_STRUCT_CLK(hdq_fck, hdq_fck_parent_names, aes2_ick_ops); -static struct clk hdq_ick; +static struct clk_core hdq_ick; static struct clk_hw_omap hdq_ick_hw = { .hw = { @@ -1844,7 +1843,7 @@ static struct clk_hw_omap hdq_ick_hw = { DEFINE_STRUCT_CLK(hdq_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk hecc_ck; +static struct clk_core hecc_ck; static struct clk_hw_omap hecc_ck_hw = { .hw = { @@ -1858,7 +1857,7 @@ static struct clk_hw_omap hecc_ck_hw = { DEFINE_STRUCT_CLK(hecc_ck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk hsotgusb_fck_am35xx; +static struct clk_core hsotgusb_fck_am35xx; static struct clk_hw_omap hsotgusb_fck_am35xx_hw = { .hw = { @@ -1871,7 +1870,7 @@ static struct clk_hw_omap hsotgusb_fck_am35xx_hw = { DEFINE_STRUCT_CLK(hsotgusb_fck_am35xx, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk hsotgusb_ick_3430es1; +static struct clk_core hsotgusb_ick_3430es1; static struct clk_hw_omap hsotgusb_ick_3430es1_hw = { .hw = { @@ -1885,7 +1884,7 @@ static struct clk_hw_omap hsotgusb_ick_3430es1_hw = { DEFINE_STRUCT_CLK(hsotgusb_ick_3430es1, ipss_ick_parent_names, aes2_ick_ops); -static struct clk hsotgusb_ick_3430es2; +static struct clk_core hsotgusb_ick_3430es2; static struct clk_hw_omap hsotgusb_ick_3430es2_hw = { .hw = { @@ -1899,7 +1898,7 @@ static struct clk_hw_omap hsotgusb_ick_3430es2_hw = { DEFINE_STRUCT_CLK(hsotgusb_ick_3430es2, ipss_ick_parent_names, aes2_ick_ops); -static struct clk hsotgusb_ick_am35xx; +static struct clk_core hsotgusb_ick_am35xx; static struct clk_hw_omap hsotgusb_ick_am35xx_hw = { .hw = { @@ -1913,7 +1912,7 @@ static struct clk_hw_omap hsotgusb_ick_am35xx_hw = { DEFINE_STRUCT_CLK(hsotgusb_ick_am35xx, emac_ick_parent_names, aes2_ick_ops); -static struct clk i2c1_fck; +static struct clk_core i2c1_fck; static struct clk_hw_omap i2c1_fck_hw = { .hw = { @@ -1927,7 +1926,7 @@ static struct clk_hw_omap i2c1_fck_hw = { DEFINE_STRUCT_CLK(i2c1_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk i2c1_ick; +static struct clk_core i2c1_ick; static struct clk_hw_omap i2c1_ick_hw = { .hw = { @@ -1941,7 +1940,7 @@ static struct clk_hw_omap i2c1_ick_hw = { DEFINE_STRUCT_CLK(i2c1_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk i2c2_fck; +static struct clk_core i2c2_fck; static struct clk_hw_omap i2c2_fck_hw = { .hw = { @@ -1955,7 +1954,7 @@ static struct clk_hw_omap i2c2_fck_hw = { DEFINE_STRUCT_CLK(i2c2_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk i2c2_ick; +static struct clk_core i2c2_ick; static struct clk_hw_omap i2c2_ick_hw = { .hw = { @@ -1969,7 +1968,7 @@ static struct clk_hw_omap i2c2_ick_hw = { DEFINE_STRUCT_CLK(i2c2_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk i2c3_fck; +static struct clk_core i2c3_fck; static struct clk_hw_omap i2c3_fck_hw = { .hw = { @@ -1983,7 +1982,7 @@ static struct clk_hw_omap i2c3_fck_hw = { DEFINE_STRUCT_CLK(i2c3_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk i2c3_ick; +static struct clk_core i2c3_ick; static struct clk_hw_omap i2c3_ick_hw = { .hw = { @@ -1997,7 +1996,7 @@ static struct clk_hw_omap i2c3_ick_hw = { DEFINE_STRUCT_CLK(i2c3_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk icr_ick; +static struct clk_core icr_ick; static struct clk_hw_omap icr_ick_hw = { .hw = { @@ -2011,7 +2010,7 @@ static struct clk_hw_omap icr_ick_hw = { DEFINE_STRUCT_CLK(icr_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk iva2_ck; +static struct clk_core iva2_ck; static const char *iva2_ck_parent_names[] = { "dpll2_m2_ck", @@ -2029,7 +2028,7 @@ static struct clk_hw_omap iva2_ck_hw = { DEFINE_STRUCT_CLK(iva2_ck, iva2_ck_parent_names, aes2_ick_ops); -static struct clk mad2d_ick; +static struct clk_core mad2d_ick; static struct clk_hw_omap mad2d_ick_hw = { .hw = { @@ -2043,7 +2042,7 @@ static struct clk_hw_omap mad2d_ick_hw = { DEFINE_STRUCT_CLK(mad2d_ick, core_l3_ick_parent_names, aes2_ick_ops); -static struct clk mailboxes_ick; +static struct clk_core mailboxes_ick; static struct clk_hw_omap mailboxes_ick_hw = { .hw = { @@ -2084,7 +2083,7 @@ DEFINE_CLK_OMAP_MUX_GATE(mcbsp1_fck, "core_l4_clkdm", mcbsp_15_clksel, OMAP3430_EN_MCBSP1_SHIFT, &clkhwops_wait, mcbsp1_fck_parent_names, clkout2_src_ck_ops); -static struct clk mcbsp1_ick; +static struct clk_core mcbsp1_ick; static struct clk_hw_omap mcbsp1_ick_hw = { .hw = { @@ -2098,7 +2097,7 @@ static struct clk_hw_omap mcbsp1_ick_hw = { DEFINE_STRUCT_CLK(mcbsp1_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk per_96m_fck; +static struct clk_core per_96m_fck; DEFINE_STRUCT_CLK_HW_OMAP(per_96m_fck, "per_clkdm"); DEFINE_STRUCT_CLK(per_96m_fck, cm_96m_fck_parent_names, core_l4_ick_ops); @@ -2120,7 +2119,7 @@ DEFINE_CLK_OMAP_MUX_GATE(mcbsp2_fck, "per_clkdm", mcbsp_234_clksel, OMAP3430_EN_MCBSP2_SHIFT, &clkhwops_wait, mcbsp2_fck_parent_names, clkout2_src_ck_ops); -static struct clk mcbsp2_ick; +static struct clk_core mcbsp2_ick; static struct clk_hw_omap mcbsp2_ick_hw = { .hw = { @@ -2141,7 +2140,7 @@ DEFINE_CLK_OMAP_MUX_GATE(mcbsp3_fck, "per_clkdm", mcbsp_234_clksel, OMAP3430_EN_MCBSP3_SHIFT, &clkhwops_wait, mcbsp2_fck_parent_names, clkout2_src_ck_ops); -static struct clk mcbsp3_ick; +static struct clk_core mcbsp3_ick; static struct clk_hw_omap mcbsp3_ick_hw = { .hw = { @@ -2162,7 +2161,7 @@ DEFINE_CLK_OMAP_MUX_GATE(mcbsp4_fck, "per_clkdm", mcbsp_234_clksel, OMAP3430_EN_MCBSP4_SHIFT, &clkhwops_wait, mcbsp2_fck_parent_names, clkout2_src_ck_ops); -static struct clk mcbsp4_ick; +static struct clk_core mcbsp4_ick; static struct clk_hw_omap mcbsp4_ick_hw = { .hw = { @@ -2183,7 +2182,7 @@ DEFINE_CLK_OMAP_MUX_GATE(mcbsp5_fck, "core_l4_clkdm", mcbsp_15_clksel, OMAP3430_EN_MCBSP5_SHIFT, &clkhwops_wait, mcbsp1_fck_parent_names, clkout2_src_ck_ops); -static struct clk mcbsp5_ick; +static struct clk_core mcbsp5_ick; static struct clk_hw_omap mcbsp5_ick_hw = { .hw = { @@ -2197,7 +2196,7 @@ static struct clk_hw_omap mcbsp5_ick_hw = { DEFINE_STRUCT_CLK(mcbsp5_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mcspi1_fck; +static struct clk_core mcspi1_fck; static struct clk_hw_omap mcspi1_fck_hw = { .hw = { @@ -2211,7 +2210,7 @@ static struct clk_hw_omap mcspi1_fck_hw = { DEFINE_STRUCT_CLK(mcspi1_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk mcspi1_ick; +static struct clk_core mcspi1_ick; static struct clk_hw_omap mcspi1_ick_hw = { .hw = { @@ -2225,7 +2224,7 @@ static struct clk_hw_omap mcspi1_ick_hw = { DEFINE_STRUCT_CLK(mcspi1_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mcspi2_fck; +static struct clk_core mcspi2_fck; static struct clk_hw_omap mcspi2_fck_hw = { .hw = { @@ -2239,7 +2238,7 @@ static struct clk_hw_omap mcspi2_fck_hw = { DEFINE_STRUCT_CLK(mcspi2_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk mcspi2_ick; +static struct clk_core mcspi2_ick; static struct clk_hw_omap mcspi2_ick_hw = { .hw = { @@ -2253,7 +2252,7 @@ static struct clk_hw_omap mcspi2_ick_hw = { DEFINE_STRUCT_CLK(mcspi2_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mcspi3_fck; +static struct clk_core mcspi3_fck; static struct clk_hw_omap mcspi3_fck_hw = { .hw = { @@ -2267,7 +2266,7 @@ static struct clk_hw_omap mcspi3_fck_hw = { DEFINE_STRUCT_CLK(mcspi3_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk mcspi3_ick; +static struct clk_core mcspi3_ick; static struct clk_hw_omap mcspi3_ick_hw = { .hw = { @@ -2281,7 +2280,7 @@ static struct clk_hw_omap mcspi3_ick_hw = { DEFINE_STRUCT_CLK(mcspi3_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mcspi4_fck; +static struct clk_core mcspi4_fck; static struct clk_hw_omap mcspi4_fck_hw = { .hw = { @@ -2295,7 +2294,7 @@ static struct clk_hw_omap mcspi4_fck_hw = { DEFINE_STRUCT_CLK(mcspi4_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk mcspi4_ick; +static struct clk_core mcspi4_ick; static struct clk_hw_omap mcspi4_ick_hw = { .hw = { @@ -2309,7 +2308,7 @@ static struct clk_hw_omap mcspi4_ick_hw = { DEFINE_STRUCT_CLK(mcspi4_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mmchs1_fck; +static struct clk_core mmchs1_fck; static struct clk_hw_omap mmchs1_fck_hw = { .hw = { @@ -2323,7 +2322,7 @@ static struct clk_hw_omap mmchs1_fck_hw = { DEFINE_STRUCT_CLK(mmchs1_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk mmchs1_ick; +static struct clk_core mmchs1_ick; static struct clk_hw_omap mmchs1_ick_hw = { .hw = { @@ -2337,7 +2336,7 @@ static struct clk_hw_omap mmchs1_ick_hw = { DEFINE_STRUCT_CLK(mmchs1_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mmchs2_fck; +static struct clk_core mmchs2_fck; static struct clk_hw_omap mmchs2_fck_hw = { .hw = { @@ -2351,7 +2350,7 @@ static struct clk_hw_omap mmchs2_fck_hw = { DEFINE_STRUCT_CLK(mmchs2_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk mmchs2_ick; +static struct clk_core mmchs2_ick; static struct clk_hw_omap mmchs2_ick_hw = { .hw = { @@ -2365,7 +2364,7 @@ static struct clk_hw_omap mmchs2_ick_hw = { DEFINE_STRUCT_CLK(mmchs2_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk mmchs3_fck; +static struct clk_core mmchs3_fck; static struct clk_hw_omap mmchs3_fck_hw = { .hw = { @@ -2379,7 +2378,7 @@ static struct clk_hw_omap mmchs3_fck_hw = { DEFINE_STRUCT_CLK(mmchs3_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk mmchs3_ick; +static struct clk_core mmchs3_ick; static struct clk_hw_omap mmchs3_ick_hw = { .hw = { @@ -2393,7 +2392,7 @@ static struct clk_hw_omap mmchs3_ick_hw = { DEFINE_STRUCT_CLK(mmchs3_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk modem_fck; +static struct clk_core modem_fck; static struct clk_hw_omap modem_fck_hw = { .hw = { @@ -2407,7 +2406,7 @@ static struct clk_hw_omap modem_fck_hw = { DEFINE_STRUCT_CLK(modem_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk mspro_fck; +static struct clk_core mspro_fck; static struct clk_hw_omap mspro_fck_hw = { .hw = { @@ -2421,7 +2420,7 @@ static struct clk_hw_omap mspro_fck_hw = { DEFINE_STRUCT_CLK(mspro_fck, csi2_96m_fck_parent_names, aes2_ick_ops); -static struct clk mspro_ick; +static struct clk_core mspro_ick; static struct clk_hw_omap mspro_ick_hw = { .hw = { @@ -2435,13 +2434,13 @@ static struct clk_hw_omap mspro_ick_hw = { DEFINE_STRUCT_CLK(mspro_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk omap_192m_alwon_fck; +static struct clk_core omap_192m_alwon_fck; DEFINE_STRUCT_CLK_HW_OMAP(omap_192m_alwon_fck, NULL); DEFINE_STRUCT_CLK(omap_192m_alwon_fck, omap_96m_alwon_fck_parent_names, core_ck_ops); -static struct clk omap_32ksync_ick; +static struct clk_core omap_32ksync_ick; static struct clk_hw_omap omap_32ksync_ick_hw = { .hw = { @@ -2466,7 +2465,7 @@ static const struct clksel omap_96m_alwon_fck_clksel[] = { { .parent = NULL } }; -static struct clk omap_96m_alwon_fck_3630; +static struct clk_core omap_96m_alwon_fck_3630; static const char *omap_96m_alwon_fck_3630_parent_names[] = { "omap_192m_alwon_fck", @@ -2487,7 +2486,7 @@ static struct clk_hw_omap omap_96m_alwon_fck_3630_hw = { .clksel_mask = OMAP3630_CLKSEL_96M_MASK, }; -static struct clk omap_96m_alwon_fck_3630 = { +static struct clk_core omap_96m_alwon_fck_3630 = { .name = "omap_96m_alwon_fck", .hw = &omap_96m_alwon_fck_3630_hw.hw, .parent_names = omap_96m_alwon_fck_3630_parent_names, @@ -2495,7 +2494,7 @@ static struct clk omap_96m_alwon_fck_3630 = { .ops = &omap_96m_alwon_fck_3630_ops, }; -static struct clk omapctrl_ick; +static struct clk_core omapctrl_ick; static struct clk_hw_omap omapctrl_ick_hw = { .hw = { @@ -2520,17 +2519,17 @@ DEFINE_CLK_DIVIDER(pclkx2_fck, "emu_src_ck", &emu_src_ck, 0x0, OMAP3430_CLKSEL_PCLKX2_SHIFT, OMAP3430_CLKSEL_PCLKX2_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk per_48m_fck; +static struct clk_core per_48m_fck; DEFINE_STRUCT_CLK_HW_OMAP(per_48m_fck, "per_clkdm"); DEFINE_STRUCT_CLK(per_48m_fck, core_48m_fck_parent_names, core_l4_ick_ops); -static struct clk security_l3_ick; +static struct clk_core security_l3_ick; DEFINE_STRUCT_CLK_HW_OMAP(security_l3_ick, NULL); DEFINE_STRUCT_CLK(security_l3_ick, core_l3_ick_parent_names, core_ck_ops); -static struct clk pka_ick; +static struct clk_core pka_ick; static const char *pka_ick_parent_names[] = { "security_l3_ick", @@ -2552,7 +2551,7 @@ DEFINE_CLK_DIVIDER(rm_ick, "l4_ick", &l4_ick, 0x0, OMAP3430_CLKSEL_RM_SHIFT, OMAP3430_CLKSEL_RM_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk rng_ick; +static struct clk_core rng_ick; static struct clk_hw_omap rng_ick_hw = { .hw = { @@ -2565,7 +2564,7 @@ static struct clk_hw_omap rng_ick_hw = { DEFINE_STRUCT_CLK(rng_ick, aes1_ick_parent_names, aes1_ick_ops); -static struct clk sad2d_ick; +static struct clk_core sad2d_ick; static struct clk_hw_omap sad2d_ick_hw = { .hw = { @@ -2579,7 +2578,7 @@ static struct clk_hw_omap sad2d_ick_hw = { DEFINE_STRUCT_CLK(sad2d_ick, core_l3_ick_parent_names, aes2_ick_ops); -static struct clk sdrc_ick; +static struct clk_core sdrc_ick; static struct clk_hw_omap sdrc_ick_hw = { .hw = { @@ -2630,7 +2629,7 @@ static const char *sgx_fck_parent_names[] = { "core_ck", "cm_96m_fck", "omap_192m_alwon_fck", "corex2_fck", }; -static struct clk sgx_fck; +static struct clk_core sgx_fck; static const struct clk_ops sgx_fck_ops = { .init = &omap2_init_clk_clkdm, @@ -2651,7 +2650,7 @@ DEFINE_CLK_OMAP_MUX_GATE(sgx_fck, "sgx_clkdm", sgx_clksel, OMAP3430ES2_CM_FCLKEN_SGX_EN_SGX_SHIFT, &clkhwops_wait, sgx_fck_parent_names, sgx_fck_ops); -static struct clk sgx_ick; +static struct clk_core sgx_ick; static struct clk_hw_omap sgx_ick_hw = { .hw = { @@ -2665,7 +2664,7 @@ static struct clk_hw_omap sgx_ick_hw = { DEFINE_STRUCT_CLK(sgx_ick, core_l3_ick_parent_names, aes2_ick_ops); -static struct clk sha11_ick; +static struct clk_core sha11_ick; static struct clk_hw_omap sha11_ick_hw = { .hw = { @@ -2678,7 +2677,7 @@ static struct clk_hw_omap sha11_ick_hw = { DEFINE_STRUCT_CLK(sha11_ick, aes1_ick_parent_names, aes1_ick_ops); -static struct clk sha12_ick; +static struct clk_core sha12_ick; static struct clk_hw_omap sha12_ick_hw = { .hw = { @@ -2692,7 +2691,7 @@ static struct clk_hw_omap sha12_ick_hw = { DEFINE_STRUCT_CLK(sha12_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk sr1_fck; +static struct clk_core sr1_fck; static struct clk_hw_omap sr1_fck_hw = { .hw = { @@ -2706,7 +2705,7 @@ static struct clk_hw_omap sr1_fck_hw = { DEFINE_STRUCT_CLK(sr1_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk sr2_fck; +static struct clk_core sr2_fck; static struct clk_hw_omap sr2_fck_hw = { .hw = { @@ -2720,17 +2719,17 @@ static struct clk_hw_omap sr2_fck_hw = { DEFINE_STRUCT_CLK(sr2_fck, dpll3_ck_parent_names, aes2_ick_ops); -static struct clk sr_l4_ick; +static struct clk_core sr_l4_ick; DEFINE_STRUCT_CLK_HW_OMAP(sr_l4_ick, "core_l4_clkdm"); DEFINE_STRUCT_CLK(sr_l4_ick, security_l4_ick2_parent_names, core_l4_ick_ops); -static struct clk ssi_l4_ick; +static struct clk_core ssi_l4_ick; DEFINE_STRUCT_CLK_HW_OMAP(ssi_l4_ick, "core_l4_clkdm"); DEFINE_STRUCT_CLK(ssi_l4_ick, security_l4_ick2_parent_names, core_l4_ick_ops); -static struct clk ssi_ick_3430es1; +static struct clk_core ssi_ick_3430es1; static const char *ssi_ick_3430es1_parent_names[] = { "ssi_l4_ick", @@ -2748,7 +2747,7 @@ static struct clk_hw_omap ssi_ick_3430es1_hw = { DEFINE_STRUCT_CLK(ssi_ick_3430es1, ssi_ick_3430es1_parent_names, aes2_ick_ops); -static struct clk ssi_ick_3430es2; +static struct clk_core ssi_ick_3430es2; static struct clk_hw_omap ssi_ick_3430es2_hw = { .hw = { @@ -2813,7 +2812,7 @@ DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es1, "ssi_ssr_fck_3430es1", DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es2, "ssi_ssr_fck_3430es2", &ssi_ssr_fck_3430es2, 0x0, 1, 2); -static struct clk sys_clkout1; +static struct clk_core sys_clkout1; static const char *sys_clkout1_parent_names[] = { "osc_sys_ck", @@ -2843,7 +2842,7 @@ DEFINE_CLK_DIVIDER(traceclk_fck, "traceclk_src_fck", &traceclk_src_fck, 0x0, OMAP3430_CLKSEL_TRACECLK_SHIFT, OMAP3430_CLKSEL_TRACECLK_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); -static struct clk ts_fck; +static struct clk_core ts_fck; static struct clk_hw_omap ts_fck_hw = { .hw = { @@ -2856,7 +2855,7 @@ static struct clk_hw_omap ts_fck_hw = { DEFINE_STRUCT_CLK(ts_fck, wkup_32k_fck_parent_names, aes2_ick_ops); -static struct clk uart1_fck; +static struct clk_core uart1_fck; static struct clk_hw_omap uart1_fck_hw = { .hw = { @@ -2870,7 +2869,7 @@ static struct clk_hw_omap uart1_fck_hw = { DEFINE_STRUCT_CLK(uart1_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk uart1_ick; +static struct clk_core uart1_ick; static struct clk_hw_omap uart1_ick_hw = { .hw = { @@ -2884,7 +2883,7 @@ static struct clk_hw_omap uart1_ick_hw = { DEFINE_STRUCT_CLK(uart1_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk uart2_fck; +static struct clk_core uart2_fck; static struct clk_hw_omap uart2_fck_hw = { .hw = { @@ -2898,7 +2897,7 @@ static struct clk_hw_omap uart2_fck_hw = { DEFINE_STRUCT_CLK(uart2_fck, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk uart2_ick; +static struct clk_core uart2_ick; static struct clk_hw_omap uart2_ick_hw = { .hw = { @@ -2912,7 +2911,7 @@ static struct clk_hw_omap uart2_ick_hw = { DEFINE_STRUCT_CLK(uart2_ick, aes2_ick_parent_names, aes2_ick_ops); -static struct clk uart3_fck; +static struct clk_core uart3_fck; static const char *uart3_fck_parent_names[] = { "per_48m_fck", @@ -2930,7 +2929,7 @@ static struct clk_hw_omap uart3_fck_hw = { DEFINE_STRUCT_CLK(uart3_fck, uart3_fck_parent_names, aes2_ick_ops); -static struct clk uart3_ick; +static struct clk_core uart3_ick; static struct clk_hw_omap uart3_ick_hw = { .hw = { @@ -2944,7 +2943,7 @@ static struct clk_hw_omap uart3_ick_hw = { DEFINE_STRUCT_CLK(uart3_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk uart4_fck; +static struct clk_core uart4_fck; static struct clk_hw_omap uart4_fck_hw = { .hw = { @@ -2958,7 +2957,7 @@ static struct clk_hw_omap uart4_fck_hw = { DEFINE_STRUCT_CLK(uart4_fck, uart3_fck_parent_names, aes2_ick_ops); -static struct clk uart4_fck_am35xx; +static struct clk_core uart4_fck_am35xx; static struct clk_hw_omap uart4_fck_am35xx_hw = { .hw = { @@ -2972,7 +2971,7 @@ static struct clk_hw_omap uart4_fck_am35xx_hw = { DEFINE_STRUCT_CLK(uart4_fck_am35xx, fshostusb_fck_parent_names, aes2_ick_ops); -static struct clk uart4_ick; +static struct clk_core uart4_ick; static struct clk_hw_omap uart4_ick_hw = { .hw = { @@ -2986,7 +2985,7 @@ static struct clk_hw_omap uart4_ick_hw = { DEFINE_STRUCT_CLK(uart4_ick, gpio2_ick_parent_names, aes2_ick_ops); -static struct clk uart4_ick_am35xx; +static struct clk_core uart4_ick_am35xx; static struct clk_hw_omap uart4_ick_am35xx_hw = { .hw = { @@ -3023,7 +3022,7 @@ DEFINE_CLK_OMAP_MUX_GATE(usb_l4_ick, "core_l4_clkdm", usb_l4_clksel, &clkhwops_iclk_wait, usb_l4_ick_parent_names, ssi_ssr_fck_3430es1_ops); -static struct clk usbhost_120m_fck; +static struct clk_core usbhost_120m_fck; static const char *usbhost_120m_fck_parent_names[] = { "dpll5_m2_ck", @@ -3041,7 +3040,7 @@ static struct clk_hw_omap usbhost_120m_fck_hw = { DEFINE_STRUCT_CLK(usbhost_120m_fck, usbhost_120m_fck_parent_names, aes2_ick_ops); -static struct clk usbhost_48m_fck; +static struct clk_core usbhost_48m_fck; static struct clk_hw_omap usbhost_48m_fck_hw = { .hw = { @@ -3055,7 +3054,7 @@ static struct clk_hw_omap usbhost_48m_fck_hw = { DEFINE_STRUCT_CLK(usbhost_48m_fck, core_48m_fck_parent_names, aes2_ick_ops); -static struct clk usbhost_ick; +static struct clk_core usbhost_ick; static struct clk_hw_omap usbhost_ick_hw = { .hw = { @@ -3069,7 +3068,7 @@ static struct clk_hw_omap usbhost_ick_hw = { DEFINE_STRUCT_CLK(usbhost_ick, security_l4_ick2_parent_names, aes2_ick_ops); -static struct clk usbtll_fck; +static struct clk_core usbtll_fck; static struct clk_hw_omap usbtll_fck_hw = { .hw = { @@ -3083,7 +3082,7 @@ static struct clk_hw_omap usbtll_fck_hw = { DEFINE_STRUCT_CLK(usbtll_fck, usbhost_120m_fck_parent_names, aes2_ick_ops); -static struct clk usbtll_ick; +static struct clk_core usbtll_ick; static struct clk_hw_omap usbtll_ick_hw = { .hw = { @@ -3124,7 +3123,7 @@ static const char *usim_fck_parent_names[] = { "omap_96m_fck", "dpll5_m2_ck", "sys_ck", }; -static struct clk usim_fck; +static struct clk_core usim_fck; static const struct clk_ops usim_fck_ops = { .enable = &omap2_dflt_clk_enable, @@ -3142,7 +3141,7 @@ DEFINE_CLK_OMAP_MUX_GATE(usim_fck, NULL, usim_clksel, OMAP3430ES2_EN_USIMOCP_SHIFT, &clkhwops_wait, usim_fck_parent_names, usim_fck_ops); -static struct clk usim_ick; +static struct clk_core usim_ick; static struct clk_hw_omap usim_ick_hw = { .hw = { @@ -3156,7 +3155,7 @@ static struct clk_hw_omap usim_ick_hw = { DEFINE_STRUCT_CLK(usim_ick, gpio1_ick_parent_names, aes2_ick_ops); -static struct clk vpfe_fck; +static struct clk_core vpfe_fck; static const char *vpfe_fck_parent_names[] = { "pclk_ck", @@ -3172,7 +3171,7 @@ static struct clk_hw_omap vpfe_fck_hw = { DEFINE_STRUCT_CLK(vpfe_fck, vpfe_fck_parent_names, aes1_ick_ops); -static struct clk vpfe_ick; +static struct clk_core vpfe_ick; static struct clk_hw_omap vpfe_ick_hw = { .hw = { @@ -3186,12 +3185,12 @@ static struct clk_hw_omap vpfe_ick_hw = { DEFINE_STRUCT_CLK(vpfe_ick, emac_ick_parent_names, aes2_ick_ops); -static struct clk wdt1_fck; +static struct clk_core wdt1_fck; DEFINE_STRUCT_CLK_HW_OMAP(wdt1_fck, "wkup_clkdm"); DEFINE_STRUCT_CLK(wdt1_fck, gpt12_fck_parent_names, core_l4_ick_ops); -static struct clk wdt1_ick; +static struct clk_core wdt1_ick; static struct clk_hw_omap wdt1_ick_hw = { .hw = { @@ -3205,7 +3204,7 @@ static struct clk_hw_omap wdt1_ick_hw = { DEFINE_STRUCT_CLK(wdt1_ick, gpio1_ick_parent_names, aes2_ick_ops); -static struct clk wdt2_fck; +static struct clk_core wdt2_fck; static struct clk_hw_omap wdt2_fck_hw = { .hw = { @@ -3219,7 +3218,7 @@ static struct clk_hw_omap wdt2_fck_hw = { DEFINE_STRUCT_CLK(wdt2_fck, gpio1_dbck_parent_names, aes2_ick_ops); -static struct clk wdt2_ick; +static struct clk_core wdt2_ick; static struct clk_hw_omap wdt2_ick_hw = { .hw = { @@ -3233,7 +3232,7 @@ static struct clk_hw_omap wdt2_ick_hw = { DEFINE_STRUCT_CLK(wdt2_ick, gpio1_ick_parent_names, aes2_ick_ops); -static struct clk wdt3_fck; +static struct clk_core wdt3_fck; static struct clk_hw_omap wdt3_fck_hw = { .hw = { @@ -3247,7 +3246,7 @@ static struct clk_hw_omap wdt3_fck_hw = { DEFINE_STRUCT_CLK(wdt3_fck, gpio2_dbck_parent_names, aes2_ick_ops); -static struct clk wdt3_ick; +static struct clk_core wdt3_ick; static struct clk_hw_omap wdt3_ick_hw = { .hw = { @@ -3661,10 +3660,10 @@ int __init omap3xxx_clk_init(void) ARRAY_SIZE(enable_init_clks)); pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n", - (clk_get_rate(&osc_sys_ck) / 1000000), - (clk_get_rate(&osc_sys_ck) / 100000) % 10, - (clk_get_rate(&core_ck) / 1000000), - (clk_get_rate(&arm_fck) / 1000000)); + (clk_provider_get_rate(&osc_sys_ck) / 1000000), + (clk_provider_get_rate(&osc_sys_ck) / 100000) % 10, + (clk_provider_get_rate(&core_ck) / 1000000), + (clk_provider_get_rate(&arm_fck) / 1000000)); /* * Lock DPLL5 -- here only until other device init code can @@ -3674,8 +3673,8 @@ int __init omap3xxx_clk_init(void) omap3_clk_lock_dpll5(); /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */ - sdrc_ick_p = clk_get(NULL, "sdrc_ick"); - arm_fck_p = clk_get(NULL, "arm_fck"); + sdrc_ick_p = clk_provider_get(NULL, "sdrc_ick"); + arm_fck_p = clk_provider_get(NULL, "arm_fck"); return 0; } diff --git a/arch/arm/mach-omap2/clkt2xxx_dpll.c b/arch/arm/mach-omap2/clkt2xxx_dpll.c index 82572e2..d7bbbb6 100644 --- a/arch/arm/mach-omap2/clkt2xxx_dpll.c +++ b/arch/arm/mach-omap2/clkt2xxx_dpll.c @@ -11,7 +11,6 @@ #include #include -#include #include #include "clock.h" @@ -22,7 +21,7 @@ /** * _allow_idle - enable DPLL autoidle bits - * @clk: struct clk * of the DPLL to operate on + * @clk: struct clk_core * of the DPLL to operate on * * Enable DPLL automatic idle control. The DPLL will enter low-power * stop when its downstream clocks are gated. No return value. @@ -39,7 +38,7 @@ static void _allow_idle(struct clk_hw_omap *clk) /** * _deny_idle - prevent DPLL from automatically idling - * @clk: struct clk * of the DPLL to operate on + * @clk: struct clk_core * of the DPLL to operate on * * Disable DPLL automatic idle control. No return value. */ diff --git a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c index 59cf310..9a60ce2 100644 --- a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c +++ b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c @@ -22,7 +22,6 @@ #include #include -#include #include #include "clock.h" @@ -48,7 +47,7 @@ static struct clk_hw_omap *dpll_core_ck; * Returns the CORE_CLK rate. CORE_CLK can have one of three rate * sources on OMAP2xxx: the DPLL CLKOUT rate, DPLL CLKOUTX2, or 32KHz * (the latter is unusual). This currently should be called with - * struct clk *dpll_ck, which is a composite clock of dpll_ck and + * struct clk_core *dpll_ck, which is a composite clock of dpll_ck and * core_ck. */ unsigned long omap2xxx_clk_get_core_rate(void) @@ -179,7 +178,7 @@ int omap2_reprogram_dpllcore(struct clk_hw *hw, unsigned long rate, /** * omap2xxx_clkt_dpllcore_init - clk init function for dpll_ck - * @clk: struct clk *dpll_ck + * @clk: struct clk_core *dpll_ck * * Store a local copy of @clk in dpll_core_ck so other code can query * the core rate without having to clk_get(), which can sleep. Must diff --git a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c index 85e0b0c0..d621a4c 100644 --- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c +++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c @@ -28,7 +28,6 @@ #include #include -#include #include #include #include @@ -198,14 +197,14 @@ void omap2xxx_clkt_vps_check_bootloader_rates(void) */ void omap2xxx_clkt_vps_late_init(void) { - struct clk *c; + struct clk_core *c; - c = clk_get(NULL, "sys_ck"); + c = clk_provider_get(NULL, "sys_ck"); if (IS_ERR(c)) { WARN(1, "could not locate sys_ck\n"); } else { - sys_ck_rate = clk_get_rate(c); - clk_put(c); + sys_ck_rate = clk_provider_get_rate(c); + __clk_put(c); } } @@ -230,7 +229,7 @@ void omap2xxx_clkt_vps_init(void) { struct clk_init_data init = { NULL }; struct clk_hw_omap *hw = NULL; - struct clk *clk; + struct clk_core *clk; const char *parent_name = "mpu_ck"; struct clk_lookup *lookup = NULL; diff --git a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c index eb69acf..16ff4ed 100644 --- a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c +++ b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c @@ -18,7 +18,6 @@ #include #include -#include #include #include "clock.h" @@ -38,7 +37,7 @@ /** * omap3_core_dpll_m2_set_rate - set CORE DPLL M2 divider - * @clk: struct clk * of DPLL to set + * @clk: struct clk_core * of DPLL to set * @rate: rounded target rate * * Program the DPLL M2 divider with the rounded target rate. Returns diff --git a/arch/arm/mach-omap2/clkt_clksel.c b/arch/arm/mach-omap2/clkt_clksel.c index 7ee2610..b4796b3 100644 --- a/arch/arm/mach-omap2/clkt_clksel.c +++ b/arch/arm/mach-omap2/clkt_clksel.c @@ -51,15 +51,15 @@ /** * _get_clksel_by_parent() - return clksel struct for a given clk & parent - * @clk: OMAP struct clk ptr to inspect - * @src_clk: OMAP struct clk ptr of the parent clk to search for + * @clk: OMAP struct clk_core ptr to inspect + * @src_clk: OMAP struct clk_core ptr of the parent clk to search for * * Scan the struct clksel array associated with the clock to find * the element associated with the supplied parent clock address. * Returns a pointer to the struct clksel on success or NULL on error. */ static const struct clksel *_get_clksel_by_parent(struct clk_hw_omap *clk, - struct clk *src_clk) + struct clk_core *src_clk) { const struct clksel *clks; @@ -82,7 +82,7 @@ static const struct clksel *_get_clksel_by_parent(struct clk_hw_omap *clk, /** * _write_clksel_reg() - program a clock's clksel register in hardware - * @clk: struct clk * to program + * @clk: struct clk_core * to program * @v: clksel bitfield value to program (with LSB at bit 0) * * Shift the clksel register bitfield value @v to its appropriate @@ -107,10 +107,10 @@ static void _write_clksel_reg(struct clk_hw_omap *clk, u32 field_val) /** * _clksel_to_divisor() - turn clksel field value into integer divider - * @clk: OMAP struct clk to use + * @clk: OMAP struct clk_core to use * @field_val: register field value to find * - * Given a struct clk of a rate-selectable clksel clock, and a register field + * Given a struct clk_core of a rate-selectable clksel clock, and a register field * value to search for, find the corresponding clock divisor. The register * field value should be pre-masked and shifted down so the LSB is at bit 0 * before calling. Returns 0 on error or returns the actual integer divisor @@ -120,7 +120,7 @@ static u32 _clksel_to_divisor(struct clk_hw_omap *clk, u32 field_val) { const struct clksel *clks; const struct clksel_rate *clkr; - struct clk *parent; + struct clk_core *parent; parent = __clk_get_parent(clk->hw.clk); @@ -149,10 +149,10 @@ static u32 _clksel_to_divisor(struct clk_hw_omap *clk, u32 field_val) /** * _divisor_to_clksel() - turn clksel integer divisor into a field value - * @clk: OMAP struct clk to use + * @clk: OMAP struct clk_core to use * @div: integer divisor to search for * - * Given a struct clk of a rate-selectable clksel clock, and a clock + * Given a struct clk_core of a rate-selectable clksel clock, and a clock * divisor, find the corresponding register field value. Returns the * register field value _before_ left-shifting (i.e., LSB is at bit * 0); or returns 0xFFFFFFFF (~0) upon error. @@ -161,7 +161,7 @@ static u32 _divisor_to_clksel(struct clk_hw_omap *clk, u32 div) { const struct clksel *clks; const struct clksel_rate *clkr; - struct clk *parent; + struct clk_core *parent; /* should never happen */ WARN_ON(div == 0); @@ -191,7 +191,7 @@ static u32 _divisor_to_clksel(struct clk_hw_omap *clk, u32 div) /** * _read_divisor() - get current divisor applied to parent clock (from hdwr) - * @clk: OMAP struct clk to use. + * @clk: OMAP struct clk_core to use. * * Read the current divisor register value for @clk that is programmed * into the hardware, convert it into the actual divisor value, and @@ -215,7 +215,7 @@ static u32 _read_divisor(struct clk_hw_omap *clk) /** * omap2_clksel_round_rate_div() - find divisor for the given clock and rate - * @clk: OMAP struct clk to use + * @clk: OMAP struct clk_core to use * @target_rate: desired clock rate * @new_div: ptr to where we should store the divisor * @@ -233,7 +233,7 @@ u32 omap2_clksel_round_rate_div(struct clk_hw_omap *clk, const struct clksel *clks; const struct clksel_rate *clkr; u32 last_div = 0; - struct clk *parent; + struct clk_core *parent; unsigned long parent_rate; const char *clk_name; @@ -286,7 +286,7 @@ u32 omap2_clksel_round_rate_div(struct clk_hw_omap *clk, /* * Clocktype interface functions to the OMAP clock code - * (i.e., those used in struct clk field function pointers, etc.) + * (i.e., those used in struct clk_core field function pointers, etc.) */ /** @@ -309,7 +309,7 @@ u8 omap2_clksel_find_parent_index(struct clk_hw *hw) const struct clksel *clks; const struct clksel_rate *clkr; u32 r, found = 0; - struct clk *parent; + struct clk_core *parent; const char *clk_name; int ret = 0, f = 0; @@ -345,11 +345,11 @@ u8 omap2_clksel_find_parent_index(struct clk_hw *hw) /** - * omap2_clksel_recalc() - function ptr to pass via struct clk .recalc field - * @clk: struct clk * + * omap2_clksel_recalc() - function ptr to pass via struct clk_core .recalc field + * @clk: struct clk_core * * * This function is intended to be called only by the clock framework. - * Each clksel clock should have its struct clk .recalc field set to this + * Each clksel clock should have its struct clk_core .recalc field set to this * function. Returns the clock's current rate, based on its parent's rate * and its current divisor setting in the hardware. */ @@ -376,7 +376,7 @@ unsigned long omap2_clksel_recalc(struct clk_hw *hw, unsigned long parent_rate) /** * omap2_clksel_round_rate() - find rounded rate for the given clock and rate - * @clk: OMAP struct clk to use + * @clk: OMAP struct clk_core to use * @target_rate: desired clock rate * * This function is intended to be called only by the clock framework. @@ -396,7 +396,7 @@ long omap2_clksel_round_rate(struct clk_hw *hw, unsigned long target_rate, /** * omap2_clksel_set_rate() - program clock rate in hardware - * @clk: struct clk * to program rate + * @clk: struct clk_core * to program rate * @rate: target rate to program * * This function is intended to be called only by the clock framework. @@ -435,7 +435,7 @@ int omap2_clksel_set_rate(struct clk_hw *hw, unsigned long rate, } /* - * Clksel parent setting function - not passed in struct clk function + * Clksel parent setting function - not passed in struct clk_core function * pointer - instead, the OMAP clock code currently assumes that any * parent-setting clock is a clksel clock, and calls * omap2_clksel_set_parent() by default @@ -443,8 +443,8 @@ int omap2_clksel_set_rate(struct clk_hw *hw, unsigned long rate, /** * omap2_clksel_set_parent() - change a clock's parent clock - * @clk: struct clk * of the child clock - * @new_parent: struct clk * of the new parent clock + * @clk: struct clk_core * of the child clock + * @new_parent: struct clk_core * of the new parent clock * * This function is intended to be called only by the clock framework. * Change the parent clock of clock @clk to @new_parent. This is diff --git a/arch/arm/mach-omap2/clkt_dpll.c b/arch/arm/mach-omap2/clkt_dpll.c index f251a14..36f263d 100644 --- a/arch/arm/mach-omap2/clkt_dpll.c +++ b/arch/arm/mach-omap2/clkt_dpll.c @@ -56,7 +56,7 @@ /* * _dpll_test_fint - test whether an Fint value is valid for the DPLL - * @clk: DPLL struct clk to test + * @clk: DPLL struct clk_core to test * @n: divider value (N) to test * * Tests whether a particular divider @n will result in a valid DPLL @@ -215,7 +215,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw) v &= dd->enable_mask; v >>= __ffs(dd->enable_mask); - /* Reparent the struct clk in case the dpll is in bypass */ + /* Reparent the struct clk_core in case the dpll is in bypass */ if (_omap2_dpll_is_in_bypass(v)) return 1; @@ -224,7 +224,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw) /** * omap2_get_dpll_rate - returns the current DPLL CLKOUT rate - * @clk: struct clk * of a DPLL + * @clk: struct clk_core * of a DPLL * * DPLLs can be locked or bypassed - basically, enabled or disabled. * When locked, the DPLL output depends on the M and N values. When @@ -270,7 +270,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk) /** * omap2_dpll_round_rate - round a target rate for an OMAP DPLL - * @clk: struct clk * for a DPLL + * @clk: struct clk_core * for a DPLL * @target_rate: desired DPLL clock rate * * Given a DPLL and a desired target rate, round the target rate to a diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 500530d..ab341e4 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c @@ -142,7 +142,7 @@ static int _wait_idlest_generic(struct clk_hw_omap *clk, void __iomem *reg, /** * _omap2_module_wait_ready - wait for an OMAP module to leave IDLE - * @clk: struct clk * belonging to the module + * @clk: struct clk_core * belonging to the module * * If the necessary clocks for the OMAP hardware IP block that * corresponds to clock @clk are enabled, then wait for the module to @@ -181,7 +181,7 @@ static void _omap2_module_wait_ready(struct clk_hw_omap *clk) * omap2_init_clk_clkdm - look up a clockdomain name, store pointer in clk * @clk: OMAP clock struct ptr to use * - * Convert a clockdomain name stored in a struct clk 'clk' into a + * Convert a clockdomain name stored in a struct clk_core 'clk' into a * clockdomain pointer, and save it into the struct clk. Intended to be * called during clk_register(). No return value. */ @@ -222,7 +222,7 @@ void __init omap2_clk_disable_clkdm_control(void) /** * omap2_clk_dflt_find_companion - find companion clock to @clk - * @clk: struct clk * to find the companion clock of + * @clk: struct clk_core * to find the companion clock of * @other_reg: void __iomem ** to return the companion clock CM_*CLKEN va in * @other_bit: u8 ** to return the companion clock bit shift in * @@ -258,7 +258,7 @@ void omap2_clk_dflt_find_companion(struct clk_hw_omap *clk, /** * omap2_clk_dflt_find_idlest - find CM_IDLEST reg va, bit shift for @clk - * @clk: struct clk * to find IDLEST info for + * @clk: struct clk_core * to find IDLEST info for * @idlest_reg: void __iomem ** to return the CM_IDLEST va in * @idlest_bit: u8 * to return the CM_IDLEST bit shift in * @idlest_val: u8 * to return the idle status indicator @@ -502,14 +502,14 @@ __setup("mpurate=", omap_clk_setup); /** * omap2_init_clk_hw_omap_clocks - initialize an OMAP clock - * @clk: struct clk * to initialize + * @clk: struct clk_core * to initialize * * Add an OMAP clock @clk to the internal list of OMAP clocks. Used * temporarily for autoidle handling, until this support can be * integrated into the common clock framework code in some way. No * return value. */ -void omap2_init_clk_hw_omap_clocks(struct clk *clk) +void omap2_init_clk_hw_omap_clocks(struct clk_core *clk) { struct clk_hw_omap *c; @@ -566,11 +566,11 @@ int omap2_clk_disable_autoidle_all(void) /** * omap2_clk_deny_idle - disable autoidle on an OMAP clock - * @clk: struct clk * to disable autoidle for + * @clk: struct clk_core * to disable autoidle for * * Disable autoidle on an OMAP clock. */ -int omap2_clk_deny_idle(struct clk *clk) +int omap2_clk_deny_idle(struct clk_core *clk) { struct clk_hw_omap *c; @@ -585,11 +585,11 @@ int omap2_clk_deny_idle(struct clk *clk) /** * omap2_clk_allow_idle - enable autoidle on an OMAP clock - * @clk: struct clk * to enable autoidle for + * @clk: struct clk_core * to enable autoidle for * * Enable autoidle on an OMAP clock. */ -int omap2_clk_allow_idle(struct clk *clk) +int omap2_clk_allow_idle(struct clk_core *clk) { struct clk_hw_omap *c; @@ -614,12 +614,12 @@ int omap2_clk_allow_idle(struct clk *clk) */ void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks) { - struct clk *init_clk; + struct clk_core *init_clk; int i; for (i = 0; i < num_clocks; i++) { - init_clk = clk_get(NULL, clk_names[i]); - clk_prepare_enable(init_clk); + init_clk = clk_provider_get(NULL, clk_names[i]); + clk_provider_prepare_enable(init_clk); } } @@ -655,31 +655,31 @@ void __init omap_clocks_register(struct omap_clk oclks[], int cnt) * the OPP layer. XXX This is intended to be handled by the OPP layer * code in the near future and should be removed from the clock code. * Returns -EINVAL if 'mpurate' is zero or if clk_set_rate() rejects - * the rate, -ENOENT if the struct clk referred to by @mpurate_ck_name + * the rate, -ENOENT if the struct clk_core referred to by @mpurate_ck_name * cannot be found, or 0 upon success. */ int __init omap2_clk_switch_mpurate_at_boot(const char *mpurate_ck_name) { - struct clk *mpurate_ck; + struct clk_core *mpurate_ck; int r; if (!mpurate) return -EINVAL; - mpurate_ck = clk_get(NULL, mpurate_ck_name); + mpurate_ck = clk_provider_get(NULL, mpurate_ck_name); if (WARN(IS_ERR(mpurate_ck), "Failed to get %s.\n", mpurate_ck_name)) return -ENOENT; - r = clk_set_rate(mpurate_ck, mpurate); + r = clk_provider_set_rate(mpurate_ck, mpurate); if (r < 0) { WARN(1, "clock: %s: unable to set MPU rate to %d: %d\n", mpurate_ck_name, mpurate, r); - clk_put(mpurate_ck); + __clk_put(mpurate_ck); return -EINVAL; } calibrate_delay(); - clk_put(mpurate_ck); + __clk_put(mpurate_ck); return 0; } @@ -700,27 +700,27 @@ void __init omap2_clk_print_new_rates(const char *hfclkin_ck_name, const char *core_ck_name, const char *mpu_ck_name) { - struct clk *hfclkin_ck, *core_ck, *mpu_ck; + struct clk_core *hfclkin_ck, *core_ck, *mpu_ck; unsigned long hfclkin_rate; - mpu_ck = clk_get(NULL, mpu_ck_name); + mpu_ck = clk_provider_get(NULL, mpu_ck_name); if (WARN(IS_ERR(mpu_ck), "clock: failed to get %s.\n", mpu_ck_name)) return; - core_ck = clk_get(NULL, core_ck_name); + core_ck = clk_provider_get(NULL, core_ck_name); if (WARN(IS_ERR(core_ck), "clock: failed to get %s.\n", core_ck_name)) return; - hfclkin_ck = clk_get(NULL, hfclkin_ck_name); + hfclkin_ck = clk_provider_get(NULL, hfclkin_ck_name); if (WARN(IS_ERR(hfclkin_ck), "Failed to get %s.\n", hfclkin_ck_name)) return; - hfclkin_rate = clk_get_rate(hfclkin_ck); + hfclkin_rate = clk_provider_get_rate(hfclkin_ck); pr_info("Switched to new clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n", (hfclkin_rate / 1000000), ((hfclkin_rate / 100000) % 10), - (clk_get_rate(core_ck) / 1000000), - (clk_get_rate(mpu_ck) / 1000000)); + (clk_provider_get_rate(core_ck) / 1000000), + (clk_provider_get_rate(mpu_ck) / 1000000)); } /** diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 4592a27..7068684 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h @@ -40,7 +40,7 @@ struct omap_clk { struct clockdomain; #define DEFINE_STRUCT_CLK(_name, _parent_array_name, _clkops_name) \ - static struct clk _name = { \ + static struct clk_core _name = { \ .name = #_name, \ .hw = &_name##_hw.hw, \ .parent_names = _parent_array_name, \ @@ -50,7 +50,7 @@ struct clockdomain; #define DEFINE_STRUCT_CLK_FLAGS(_name, _parent_array_name, \ _clkops_name, _flags) \ - static struct clk _name = { \ + static struct clk_core _name = { \ .name = #_name, \ .hw = &_name##_hw.hw, \ .parent_names = _parent_array_name, \ @@ -70,7 +70,7 @@ struct clockdomain; #define DEFINE_CLK_OMAP_MUX(_name, _clkdm_name, _clksel, \ _clksel_reg, _clksel_mask, \ _parent_names, _ops) \ - static struct clk _name; \ + static struct clk_core _name; \ static struct clk_hw_omap _name##_hw = { \ .hw = { \ .clk = &_name, \ @@ -86,7 +86,7 @@ struct clockdomain; _clksel_reg, _clksel_mask, \ _enable_reg, _enable_bit, \ _hwops, _parent_names, _ops) \ - static struct clk _name; \ + static struct clk_core _name; \ static struct clk_hw_omap _name##_hw = { \ .hw = { \ .clk = &_name, \ @@ -142,14 +142,14 @@ struct clksel_rate { /** * struct clksel - available parent clocks, and a pointer to their divisors - * @parent: struct clk * to a possible parent clock + * @parent: struct clk_core * to a possible parent clock * @rates: available divisors for this parent clock * * A struct clksel is always associated with one or more struct clks * and one or more struct clksel_rates. */ struct clksel { - struct clk *parent; + struct clk_core *parent; const struct clksel_rate *rates; }; @@ -208,8 +208,8 @@ void omap2_clk_dflt_find_idlest(struct clk_hw_omap *clk, void __iomem **idlest_reg, u8 *idlest_bit, u8 *idlest_val); int omap2_clk_enable_autoidle_all(void); -int omap2_clk_allow_idle(struct clk *clk); -int omap2_clk_deny_idle(struct clk *clk); +int omap2_clk_allow_idle(struct clk_core *clk); +int omap2_clk_deny_idle(struct clk_core *clk); int omap2_clk_switch_mpurate_at_boot(const char *mpurate_ck_name); void omap2_clk_print_new_rates(const char *hfclkin_ck_name, const char *core_ck_name, @@ -247,7 +247,7 @@ extern const struct clksel_rate gpt_32k_rates[]; extern const struct clksel_rate gpt_sys_rates[]; extern const struct clksel_rate gfx_l3_rates[]; extern const struct clksel_rate dsp_ick_rates[]; -extern struct clk dummy_ck; +extern struct clk_core dummy_ck; extern const struct clk_hw_omap_ops clkhwops_iclk_wait; extern const struct clk_hw_omap_ops clkhwops_wait; diff --git a/arch/arm/mach-omap2/clock3xxx.c b/arch/arm/mach-omap2/clock3xxx.c index 0b02b41..8d1b843 100644 --- a/arch/arm/mach-omap2/clock3xxx.c +++ b/arch/arm/mach-omap2/clock3xxx.c @@ -18,7 +18,6 @@ #include #include -#include #include #include "soc.h" @@ -37,7 +36,7 @@ #define DPLL5_FREQ_FOR_USBHOST 120000000 /* needed by omap3_core_dpll_m2_set_rate() */ -struct clk *sdrc_ick_p, *arm_fck_p; +struct clk_core *sdrc_ick_p, *arm_fck_p; int omap3_dpll4_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { @@ -56,20 +55,20 @@ int omap3_dpll4_set_rate(struct clk_hw *hw, unsigned long rate, void __init omap3_clk_lock_dpll5(void) { - struct clk *dpll5_clk; - struct clk *dpll5_m2_clk; + struct clk_core *dpll5_clk; + struct clk_core *dpll5_m2_clk; - dpll5_clk = clk_get(NULL, "dpll5_ck"); - clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); - clk_prepare_enable(dpll5_clk); + dpll5_clk = clk_provider_get(NULL, "dpll5_ck"); + clk_provider_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); + clk_provider_prepare_enable(dpll5_clk); /* Program dpll5_m2_clk divider for no division */ - dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck"); - clk_prepare_enable(dpll5_m2_clk); - clk_set_rate(dpll5_m2_clk, DPLL5_FREQ_FOR_USBHOST); + dpll5_m2_clk = clk_provider_get(NULL, "dpll5_m2_ck"); + clk_provider_prepare_enable(dpll5_m2_clk); + clk_provider_set_rate(dpll5_m2_clk, DPLL5_FREQ_FOR_USBHOST); - clk_disable_unprepare(dpll5_m2_clk); - clk_disable_unprepare(dpll5_clk); + clk_provider_disable_unprepare(dpll5_m2_clk); + clk_provider_disable_unprepare(dpll5_clk); return; } diff --git a/arch/arm/mach-omap2/clock3xxx.h b/arch/arm/mach-omap2/clock3xxx.h index 78d9f56..063fbf1 100644 --- a/arch/arm/mach-omap2/clock3xxx.h +++ b/arch/arm/mach-omap2/clock3xxx.h @@ -12,8 +12,8 @@ int omap3xxx_clk_init(void); int omap3_core_dpll_m2_set_rate(struct clk_hw *clk, unsigned long rate, unsigned long parent_rate); -extern struct clk *sdrc_ick_p; -extern struct clk *arm_fck_p; +extern struct clk_core *sdrc_ick_p; +extern struct clk_core *arm_fck_p; extern const struct clkops clkops_noncore_dpll_ops; diff --git a/arch/arm/mach-omap2/clock_common_data.c b/arch/arm/mach-omap2/clock_common_data.c index ef4d21b..31e3e79 100644 --- a/arch/arm/mach-omap2/clock_common_data.c +++ b/arch/arm/mach-omap2/clock_common_data.c @@ -119,7 +119,7 @@ const struct clksel_rate div31_1to31_rates[] = { static struct clk_ops dummy_ck_ops = {}; -struct clk dummy_ck = { +struct clk_core dummy_ck = { .name = "dummy_clk", .ops = &dummy_ck_ops, .flags = CLK_IS_BASIC, diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index 2da3b5e..dd89095 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -1141,7 +1140,7 @@ static int _clkdm_clk_hwmod_enable(struct clockdomain *clkdm) /** * clkdm_clk_enable - add an enabled downstream clock to this clkdm * @clkdm: struct clockdomain * - * @clk: struct clk * of the enabled downstream clock + * @clk: struct clk_core * of the enabled downstream clock * * Increment the usecount of the clockdomain @clkdm and ensure that it * is awake before @clk is enabled. Intended to be called by @@ -1152,7 +1151,7 @@ static int _clkdm_clk_hwmod_enable(struct clockdomain *clkdm) * by on-chip processors. Returns -EINVAL if passed null pointers; * returns 0 upon success or if the clockdomain is in hwsup idle mode. */ -int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) +int clkdm_clk_enable(struct clockdomain *clkdm, struct clk_core *clk) { /* * XXX Rewrite this code to maintain a list of enabled @@ -1168,7 +1167,7 @@ int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) /** * clkdm_clk_disable - remove an enabled downstream clock from this clkdm * @clkdm: struct clockdomain * - * @clk: struct clk * of the disabled downstream clock + * @clk: struct clk_core * of the disabled downstream clock * * Decrement the usecount of this clockdomain @clkdm when @clk is * disabled. Intended to be called by clk_disable() code. If the @@ -1178,7 +1177,7 @@ int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) * pointers; -ERANGE if the @clkdm usecount underflows; or returns 0 * upon success or if the clockdomain is in hwsup idle mode. */ -int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) +int clkdm_clk_disable(struct clockdomain *clkdm, struct clk_core *clk) { if (!clkdm || !clk || !arch_clkdm || !arch_clkdm->clkdm_clk_disable) return -EINVAL; diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 82c37b1..f1a2cad 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h @@ -207,8 +207,8 @@ int clkdm_wakeup(struct clockdomain *clkdm); int clkdm_sleep_nolock(struct clockdomain *clkdm); int clkdm_sleep(struct clockdomain *clkdm); -int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk); -int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk); +int clkdm_clk_enable(struct clockdomain *clkdm, struct clk_core *clk); +int clkdm_clk_disable(struct clockdomain *clkdm, struct clk_core *clk); int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh); int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh); diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index 0f9e479..ff1f6c1 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -524,7 +523,7 @@ int omap_dss_reset(struct omap_hwmod *oh) for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++) if (oc->_clk) - clk_prepare_enable(oc->_clk); + clk_provider_prepare_enable(oc->_clk); dispc_disable_outputs(); @@ -551,7 +550,7 @@ int omap_dss_reset(struct omap_hwmod *oh) for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++) if (oc->_clk) - clk_disable_unprepare(oc->_clk); + clk_provider_disable_unprepare(oc->_clk); r = (c == MAX_MODULE_SOFTRESET_WAIT) ? -ETIMEDOUT : 0; diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index ac3d789..39c3861 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -288,7 +287,7 @@ static void _lookup_sddiv(struct clk_hw_omap *clk, u8 *sd_div, u16 m, u8 n) /* * _omap3_noncore_dpll_program - set non-core DPLL M,N values directly - * @clk: struct clk * of DPLL to set + * @clk: struct clk_core * of DPLL to set * @freqsel: FREQSEL value to set * * Program the DPLL with the last M, N values calculated, and wait for @@ -410,7 +409,7 @@ int omap3_noncore_dpll_enable(struct clk_hw *hw) struct clk_hw_omap *clk = to_clk_hw_omap(hw); int r; struct dpll_data *dd; - struct clk *parent; + struct clk_core *parent; dd = clk->dpll_data; if (!dd) @@ -461,7 +460,7 @@ void omap3_noncore_dpll_disable(struct clk_hw *hw) /** * omap3_noncore_dpll_set_rate - set non-core DPLL rate - * @clk: struct clk * of DPLL to set + * @clk: struct clk_core * of DPLL to set * @rate: rounded target rate * * Set the DPLL CLKOUT to the target rate. If the DPLL can enter @@ -474,7 +473,7 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { struct clk_hw_omap *clk = to_clk_hw_omap(hw); - struct clk *new_parent = NULL; + struct clk_core *new_parent = NULL; unsigned long rrate; u16 freqsel = 0; struct dpll_data *dd; @@ -493,15 +492,15 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, __func__, __clk_get_name(hw->clk)); __clk_prepare(dd->clk_bypass); - clk_enable(dd->clk_bypass); + clk_provider_enable(dd->clk_bypass); ret = _omap3_noncore_dpll_bypass(clk); if (!ret) new_parent = dd->clk_bypass; - clk_disable(dd->clk_bypass); + clk_provider_disable(dd->clk_bypass); __clk_unprepare(dd->clk_bypass); } else { __clk_prepare(dd->clk_ref); - clk_enable(dd->clk_ref); + clk_provider_enable(dd->clk_ref); /* XXX this check is probably pointless in the CCF context */ if (dd->last_rounded_rate != rate) { @@ -530,7 +529,7 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, ret = omap3_noncore_dpll_program(clk, freqsel); if (!ret) new_parent = dd->clk_ref; - clk_disable(dd->clk_ref); + clk_provider_disable(dd->clk_ref); __clk_unprepare(dd->clk_ref); } /* @@ -540,7 +539,7 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, * stuff is inherited for free */ - if (!ret && clk_get_parent(hw->clk) != new_parent) + if (!ret && clk_provider_get_parent(hw->clk) != new_parent) __clk_reparent(hw->clk, new_parent); return 0; @@ -550,10 +549,10 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, /** * omap3_dpll_autoidle_read - read a DPLL's autoidle bits - * @clk: struct clk * of the DPLL to read + * @clk: struct clk_core * of the DPLL to read * * Return the DPLL's autoidle bits, shifted down to bit 0. Returns - * -EINVAL if passed a null pointer or if the struct clk does not + * -EINVAL if passed a null pointer or if the struct clk_core does not * appear to refer to a DPLL. */ u32 omap3_dpll_autoidle_read(struct clk_hw_omap *clk) @@ -578,7 +577,7 @@ u32 omap3_dpll_autoidle_read(struct clk_hw_omap *clk) /** * omap3_dpll_allow_idle - enable DPLL autoidle bits - * @clk: struct clk * of the DPLL to operate on + * @clk: struct clk_core * of the DPLL to operate on * * Enable DPLL automatic idle control. This automatic idle mode * switching takes effect only when the DPLL is locked, at least on @@ -612,7 +611,7 @@ void omap3_dpll_allow_idle(struct clk_hw_omap *clk) /** * omap3_dpll_deny_idle - prevent DPLL from automatically idling - * @clk: struct clk * of the DPLL to operate on + * @clk: struct clk_core * of the DPLL to operate on * * Disable DPLL automatic idle control. No return value. */ @@ -642,7 +641,7 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk) static struct clk_hw_omap *omap3_find_clkoutx2_dpll(struct clk_hw *hw) { struct clk_hw_omap *pclk = NULL; - struct clk *parent; + struct clk_core *parent; /* Walk up the parents of clk, looking for a DPLL */ do { diff --git a/arch/arm/mach-omap2/dpll44xx.c b/arch/arm/mach-omap2/dpll44xx.c index 4613f1e..726b254 100644 --- a/arch/arm/mach-omap2/dpll44xx.c +++ b/arch/arm/mach-omap2/dpll44xx.c @@ -11,7 +11,6 @@ #include #include -#include #include #include @@ -124,7 +123,7 @@ static void omap4_dpll_lpmode_recalc(struct dpll_data *dd) /** * omap4_dpll_regm4xen_recalc - compute DPLL rate, considering REGM4XEN bit - * @clk: struct clk * of the DPLL to compute the rate for + * @clk: struct clk_core * of the DPLL to compute the rate for * * Compute the output rate for the OMAP4 DPLL represented by @clk. * Takes the REGM4XEN bit into consideration, which is needed for the @@ -156,7 +155,7 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw, /** * omap4_dpll_regm4xen_round_rate - round DPLL rate, considering REGM4XEN bit - * @clk: struct clk * of the DPLL to round a rate for + * @clk: struct clk_core * of the DPLL to round a rate for * @target_rate: the desired rate of the DPLL * * Compute the rate that would be programmed into the DPLL hardware diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index b4ac3af..1424c90 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c @@ -12,7 +12,6 @@ */ #include #include -#include #include #include #include @@ -34,7 +33,7 @@ #include "cm3xxx.h" #include "cm-regbits-34xx.h" -static struct clk *mcbsp_iclks[5]; +static struct clk_core *mcbsp_iclks[5]; static int omap3_enable_st_clock(unsigned int id, bool enable) { @@ -98,7 +97,7 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused) (struct omap_mcbsp_dev_attr *)(oh->dev_attr))->sidetone); pdata->enable_st_clock = omap3_enable_st_clock; sprintf(clk_name, "mcbsp%d_ick", id); - mcbsp_iclks[id] = clk_get(NULL, clk_name); + mcbsp_iclks[id] = clk_provider_get(NULL, clk_name); count++; } pdev = omap_device_build_ss(name, id, oh_device, count, pdata, diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index f138a62..c5386a4 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -47,7 +46,7 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias, const char *clk_name) { - struct clk *r; + struct clk_core *r; struct clk_lookup *l; if (!clk_alias || !clk_name) @@ -55,15 +54,15 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias, dev_dbg(&od->pdev->dev, "Creating %s -> %s\n", clk_alias, clk_name); - r = clk_get_sys(dev_name(&od->pdev->dev), clk_alias); + r = clk_provider_get_sys(dev_name(&od->pdev->dev), clk_alias); if (!IS_ERR(r)) { dev_dbg(&od->pdev->dev, "alias %s already exists\n", clk_alias); - clk_put(r); + __clk_put(r); return; } - r = clk_get(NULL, clk_name); + r = clk_provider_get(NULL, clk_name); if (IS_ERR(r)) { dev_err(&od->pdev->dev, "clk_get for %s failed\n", clk_name); diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 8fd87a3..c61b392 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -753,7 +753,7 @@ static int _del_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh) } /** - * _init_main_clk - get a struct clk * for the the hwmod's main functional clk + * _init_main_clk - get a struct clk_core * for the the hwmod's main functional clk * @oh: struct omap_hwmod * * * Called from _init_clocks(). Populates the @oh _clk (main @@ -767,7 +767,7 @@ static int _init_main_clk(struct omap_hwmod *oh) if (!oh->main_clk) return 0; - oh->_clk = clk_get(NULL, oh->main_clk); + oh->_clk = clk_provider_get(NULL, oh->main_clk); if (IS_ERR(oh->_clk)) { pr_warning("omap_hwmod: %s: cannot clk_get main_clk %s\n", oh->name, oh->main_clk); @@ -781,7 +781,7 @@ static int _init_main_clk(struct omap_hwmod *oh) * some point where subsystems like i2c and pmic become * available. */ - clk_prepare(oh->_clk); + clk_provider_prepare(oh->_clk); if (!_get_clkdm(oh)) pr_debug("omap_hwmod: %s: missing clockdomain for %s.\n", @@ -791,7 +791,7 @@ static int _init_main_clk(struct omap_hwmod *oh) } /** - * _init_interface_clks - get a struct clk * for the the hwmod's interface clks + * _init_interface_clks - get a struct clk_core * for the the hwmod's interface clks * @oh: struct omap_hwmod * * * Called from _init_clocks(). Populates the @oh OCP slave interface @@ -801,7 +801,7 @@ static int _init_interface_clks(struct omap_hwmod *oh) { struct omap_hwmod_ocp_if *os; struct list_head *p; - struct clk *c; + struct clk_core *c; int i = 0; int ret = 0; @@ -812,7 +812,7 @@ static int _init_interface_clks(struct omap_hwmod *oh) if (!os->clk) continue; - c = clk_get(NULL, os->clk); + c = clk_provider_get(NULL, os->clk); if (IS_ERR(c)) { pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n", oh->name, os->clk); @@ -828,14 +828,14 @@ static int _init_interface_clks(struct omap_hwmod *oh) * some point where subsystems like i2c and pmic become * available. */ - clk_prepare(os->_clk); + clk_provider_prepare(os->_clk); } return ret; } /** - * _init_opt_clk - get a struct clk * for the the hwmod's optional clocks + * _init_opt_clk - get a struct clk_core * for the the hwmod's optional clocks * @oh: struct omap_hwmod * * * Called from _init_clocks(). Populates the @oh omap_hwmod_opt_clk @@ -844,12 +844,12 @@ static int _init_interface_clks(struct omap_hwmod *oh) static int _init_opt_clks(struct omap_hwmod *oh) { struct omap_hwmod_opt_clk *oc; - struct clk *c; + struct clk_core *c; int i; int ret = 0; for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++) { - c = clk_get(NULL, oc->clk); + c = clk_provider_get(NULL, oc->clk); if (IS_ERR(c)) { pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n", oh->name, oc->clk); @@ -865,7 +865,7 @@ static int _init_opt_clks(struct omap_hwmod *oh) * some point where subsystems like i2c and pmic become * available. */ - clk_prepare(oc->_clk); + clk_provider_prepare(oc->_clk); } return ret; @@ -887,7 +887,7 @@ static int _enable_clocks(struct omap_hwmod *oh) pr_debug("omap_hwmod: %s: enabling clocks\n", oh->name); if (oh->_clk) - clk_enable(oh->_clk); + clk_provider_enable(oh->_clk); p = oh->slave_ports.next; @@ -895,7 +895,7 @@ static int _enable_clocks(struct omap_hwmod *oh) os = _fetch_next_ocp_if(&p, &i); if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE)) - clk_enable(os->_clk); + clk_provider_enable(os->_clk); } /* The opt clocks are controlled by the device driver. */ @@ -918,7 +918,7 @@ static int _disable_clocks(struct omap_hwmod *oh) pr_debug("omap_hwmod: %s: disabling clocks\n", oh->name); if (oh->_clk) - clk_disable(oh->_clk); + clk_provider_disable(oh->_clk); p = oh->slave_ports.next; @@ -926,7 +926,7 @@ static int _disable_clocks(struct omap_hwmod *oh) os = _fetch_next_ocp_if(&p, &i); if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE)) - clk_disable(os->_clk); + clk_provider_disable(os->_clk); } /* The opt clocks are controlled by the device driver. */ @@ -945,7 +945,7 @@ static void _enable_optional_clocks(struct omap_hwmod *oh) if (oc->_clk) { pr_debug("omap_hwmod: enable %s:%s\n", oc->role, __clk_get_name(oc->_clk)); - clk_enable(oc->_clk); + clk_provider_enable(oc->_clk); } } @@ -960,7 +960,7 @@ static void _disable_optional_clocks(struct omap_hwmod *oh) if (oc->_clk) { pr_debug("omap_hwmod: disable %s:%s\n", oc->role, __clk_get_name(oc->_clk)); - clk_disable(oc->_clk); + clk_provider_disable(oc->_clk); } } @@ -2589,7 +2589,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh) /* XXX omap_iclk_deny_idle(c); */ } else { /* XXX omap_iclk_allow_idle(c); */ - clk_enable(os->_clk); + clk_provider_enable(os->_clk); } } @@ -3396,7 +3396,7 @@ static void __init _ensure_mpu_hwmod_is_setup(struct omap_hwmod *oh) * Initialize and set up a single hwmod. Intended to be used for a * small number of early devices, such as the timer IP blocks used for * the scheduler clock. Must be called after omap2_clk_init(). - * Resolves the struct clk names to struct clk pointers for each + * Resolves the struct clk_core names to struct clk_core pointers for each * registered omap_hwmod. Also calls _setup() on each hwmod. Returns * -EINVAL upon error or 0 upon success. */ @@ -3425,7 +3425,7 @@ int __init omap_hwmod_setup_one(const char *oh_name) * * Initialize and set up all IP blocks registered with the hwmod code. * Must be called after omap2_clk_init(). Resolves the struct clk - * names to struct clk pointers for each registered omap_hwmod. Also + * names to struct clk_core pointers for each registered omap_hwmod. Also * calls _setup() on each hwmod. Returns 0 upon success. */ static int __init omap_hwmod_setup_all(void) @@ -3792,7 +3792,7 @@ int omap_hwmod_get_resource_byname(struct omap_hwmod *oh, unsigned int type, */ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh) { - struct clk *c; + struct clk_core *c; struct omap_hwmod_ocp_if *oi; struct clockdomain *clkdm; struct clk_hw_omap *clk; diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 0f97d63..46ffd06 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -207,7 +207,7 @@ struct omap_hwmod_rst_info { * struct omap_hwmod_opt_clk - optional clocks used by this hwmod * @role: "sys", "32k", "tv", etc -- for use in clk_get() * @clk: opt clock: OMAP clock name - * @_clk: pointer to the struct clk (filled in at runtime) + * @_clk: pointer to the struct clk_core (filled in at runtime) * * The module's interface clock and main functional clock should not * be added as optional clocks. @@ -215,7 +215,7 @@ struct omap_hwmod_rst_info { struct omap_hwmod_opt_clk { const char *role; const char *clk; - struct clk *_clk; + struct clk_core *_clk; }; @@ -289,7 +289,7 @@ struct omap_hwmod_addr_space { * @slave: struct omap_hwmod that responds to OCP transactions on this link * @addr: address space associated with this link * @clk: interface clock: OMAP clock name - * @_clk: pointer to the interface struct clk (filled in at runtime) + * @_clk: pointer to the interface struct clk_core (filled in at runtime) * @fw: interface firewall data * @width: OCP data width * @user: initiators using this interface (see OCP_USER_* macros above) @@ -306,7 +306,7 @@ struct omap_hwmod_ocp_if { struct omap_hwmod *slave; struct omap_hwmod_addr_space *addr; const char *clk; - struct clk *_clk; + struct clk_core *_clk; union { struct omap_hwmod_omap2_firewall omap2; } fw; @@ -611,7 +611,7 @@ struct omap_hwmod_link { * @sdma_reqs: ptr to an array of System DMA request IDs * @prcm: PRCM data pertaining to this hwmod * @main_clk: main clock: OMAP clock name - * @_clk: pointer to the main struct clk (filled in at runtime) + * @_clk: pointer to the main struct clk_core (filled in at runtime) * @opt_clks: other device clocks that drivers can request (0..*) * @voltdm: pointer to voltage domain (filled in at runtime) * @dev_attr: arbitrary device attributes that can be passed to the driver @@ -653,7 +653,7 @@ struct omap_hwmod { struct omap_hwmod_omap4_prcm omap4; } prcm; const char *main_clk; - struct clk *_clk; + struct clk_core *_clk; struct omap_hwmod_opt_clk *opt_clks; char *clkdm_name; struct clockdomain *clkdm; diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index fe01c5a..56e5e77 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c @@ -60,7 +60,7 @@ static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, static struct powerdomain *mpu_pwrdm, *core_pwrdm; static struct clockdomain *dsp_clkdm, *mpu_clkdm, *wkup_clkdm, *gfx_clkdm; -static struct clk *osc_ck, *emul_ck; +static struct clk_core *osc_ck, *emul_ck; static int omap2_enter_full_retention(void) { @@ -71,7 +71,7 @@ static int omap2_enter_full_retention(void) * oscillator itself it will be disabled if/when we enter retention * mode. */ - clk_disable(osc_ck); + clk_provider_disable(osc_ck); /* Clear old wake-up events */ /* REVISIT: These write to reserved bits? */ @@ -101,7 +101,7 @@ static int omap2_enter_full_retention(void) no_sleep: omap2_gpio_resume_after_idle(); - clk_enable(osc_ck); + clk_provider_enable(osc_ck); /* clear CORE wake-up events */ omap2xxx_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0); @@ -287,17 +287,17 @@ int __init omap2_pm_init(void) pr_err("PM: gfx_clkdm not found\n"); - osc_ck = clk_get(NULL, "osc_ck"); + osc_ck = clk_provider_get(NULL, "osc_ck"); if (IS_ERR(osc_ck)) { printk(KERN_ERR "could not get osc_ck\n"); return -ENODEV; } if (cpu_is_omap242x()) { - emul_ck = clk_get(NULL, "emul_ck"); + emul_ck = clk_provider_get(NULL, "emul_ck"); if (IS_ERR(emul_ck)) { printk(KERN_ERR "could not get emul_ck\n"); - clk_put(osc_ck); + __clk_put(osc_ck); return -ENODEV; } } diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 6bbb7b5..6be2d2d 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c @@ -62,7 +62,7 @@ void __init orion5x_map_io(void) /***************************************************************************** * CLK tree ****************************************************************************/ -static struct clk *tclk; +static struct clk_core *tclk; void __init clk_init(void) { diff --git a/arch/arm/mach-shmobile/clock.c b/arch/arm/mach-shmobile/clock.c index ed415dc..827f746 100644 --- a/arch/arm/mach-shmobile/clock.c +++ b/arch/arm/mach-shmobile/clock.c @@ -23,7 +23,6 @@ #include #ifdef CONFIG_COMMON_CLK -#include #include #include #include "clock.h" @@ -32,17 +31,17 @@ void __init shmobile_clk_workaround(const struct clk_name *clks, int nr_clks, bool enable) { const struct clk_name *clkn; - struct clk *clk; + struct clk_core *clk; unsigned int i; for (i = 0; i < nr_clks; ++i) { clkn = clks + i; - clk = clk_get(NULL, clkn->clk); + clk = clk_provider_get(NULL, clkn->clk); if (!IS_ERR(clk)) { clk_register_clkdev(clk, clkn->con_id, clkn->dev_id); if (enable) - clk_prepare_enable(clk); - clk_put(clk); + clk_provider_prepare_enable(clk); + __clk_put(clk); } } } diff --git a/arch/arm/mach-vexpress/spc.c b/arch/arm/mach-vexpress/spc.c index f61158c..e497df6 100644 --- a/arch/arm/mach-vexpress/spc.c +++ b/arch/arm/mach-vexpress/spc.c @@ -529,7 +529,7 @@ static struct clk_ops clk_spc_ops = { .set_rate = spc_set_rate, }; -static struct clk *ve_spc_clk_register(struct device *cpu_dev) +static struct clk_core *ve_spc_clk_register(struct device *cpu_dev) { struct clk_init_data init; struct clk_spc *spc; @@ -556,7 +556,7 @@ static struct clk *ve_spc_clk_register(struct device *cpu_dev) static int __init ve_spc_clk_init(void) { int cpu; - struct clk *clk; + struct clk_core *clk; if (!info) return 0; /* Continue only if SPC is initialised */ diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c index 961b593..abf63ce 100644 --- a/arch/arm/plat-orion/common.c +++ b/arch/arm/plat-orion/common.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -27,7 +26,7 @@ /* Create a clkdev entry for a given device/clk */ void __init orion_clkdev_add(const char *con_id, const char *dev_id, - struct clk *clk) + struct clk_core *clk) { struct clk_lookup *cl; @@ -40,7 +39,7 @@ void __init orion_clkdev_add(const char *con_id, const char *dev_id, Kirkwood has gated clocks for some of its peripherals, so creates its own clkdev entries. For all the other orion devices, create clkdev entries to the tclk. */ -void __init orion_clkdev_init(struct clk *tclk) +void __init orion_clkdev_init(struct clk_core *tclk) { orion_clkdev_add(NULL, "orion_spi.0", tclk); orion_clkdev_add(NULL, "orion_spi.1", tclk); @@ -78,10 +77,10 @@ static void fill_resources(struct platform_device *device, /***************************************************************************** * UART ****************************************************************************/ -static unsigned long __init uart_get_clk_rate(struct clk *clk) +static unsigned long __init uart_get_clk_rate(struct clk_core *clk) { - clk_prepare_enable(clk); - return clk_get_rate(clk); + clk_provider_prepare_enable(clk); + return clk_provider_get_rate(clk); } static void __init uart_complete( @@ -91,7 +90,7 @@ static void __init uart_complete( void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk) + struct clk_core *clk) { data->mapbase = mapbase; data->membase = membase; @@ -125,7 +124,7 @@ static struct platform_device orion_uart0 = { void __init orion_uart0_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk) + struct clk_core *clk) { uart_complete(&orion_uart0, orion_uart0_data, orion_uart0_resources, membase, mapbase, irq, clk); @@ -153,7 +152,7 @@ static struct platform_device orion_uart1 = { void __init orion_uart1_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk) + struct clk_core *clk) { uart_complete(&orion_uart1, orion_uart1_data, orion_uart1_resources, membase, mapbase, irq, clk); @@ -181,7 +180,7 @@ static struct platform_device orion_uart2 = { void __init orion_uart2_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk) + struct clk_core *clk) { uart_complete(&orion_uart2, orion_uart2_data, orion_uart2_resources, membase, mapbase, irq, clk); @@ -209,7 +208,7 @@ static struct platform_device orion_uart3 = { void __init orion_uart3_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk) + struct clk_core *clk) { uart_complete(&orion_uart3, orion_uart3_data, orion_uart3_resources, membase, mapbase, irq, clk); diff --git a/arch/arm/plat-orion/include/plat/common.h b/arch/arm/plat-orion/include/plat/common.h index d9a24f6..44f1bbe 100644 --- a/arch/arm/plat-orion/include/plat/common.h +++ b/arch/arm/plat-orion/include/plat/common.h @@ -18,22 +18,22 @@ struct mv_sata_platform_data; void __init orion_uart0_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk); + struct clk_core *clk); void __init orion_uart1_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk); + struct clk_core *clk); void __init orion_uart2_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk); + struct clk_core *clk); void __init orion_uart3_init(void __iomem *membase, resource_size_t mapbase, unsigned int irq, - struct clk *clk); + struct clk_core *clk); void __init orion_rtc_init(unsigned long mapbase, unsigned long irq); @@ -107,7 +107,7 @@ void __init orion_crypto_init(unsigned long mapbase, unsigned long irq); void __init orion_clkdev_add(const char *con_id, const char *dev_id, - struct clk *clk); + struct clk_core *clk); -void __init orion_clkdev_init(struct clk *tclk); +void __init orion_clkdev_init(struct clk_core *tclk); #endif diff --git a/arch/mips/alchemy/common/clock.c b/arch/mips/alchemy/common/clock.c index d7557cd..46e1c3c 100644 --- a/arch/mips/alchemy/common/clock.c +++ b/arch/mips/alchemy/common/clock.c @@ -138,7 +138,7 @@ static struct clk_ops alchemy_clkops_cpu = { .recalc_rate = alchemy_clk_cpu_recalc, }; -static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name, +static struct clk_core __init *alchemy_clk_setup_cpu(const char *parent_name, int ctype) { struct clk_init_data id; @@ -221,12 +221,12 @@ static struct clk_ops alchemy_clkops_aux = { .round_rate = alchemy_clk_aux_roundr, }; -static struct clk __init *alchemy_clk_setup_aux(const char *parent_name, +static struct clk_core __init *alchemy_clk_setup_aux(const char *parent_name, char *name, int maxmult, unsigned long reg) { struct clk_init_data id; - struct clk *c; + struct clk_core *c; struct alchemy_auxpll_clk *a; a = kzalloc(sizeof(*a), GFP_KERNEL); @@ -254,10 +254,10 @@ static struct clk __init *alchemy_clk_setup_aux(const char *parent_name, /* sysbus_clk *********************************************************/ -static struct clk __init *alchemy_clk_setup_sysbus(const char *pn) +static struct clk_core __init *alchemy_clk_setup_sysbus(const char *pn) { unsigned long v = (alchemy_rdsys(AU1000_SYS_POWERCTRL) & 3) + 2; - struct clk *c; + struct clk_core *c; c = clk_register_fixed_factor(NULL, ALCHEMY_SYSBUS_CLK, pn, 0, 1, v); @@ -268,10 +268,10 @@ static struct clk __init *alchemy_clk_setup_sysbus(const char *pn) /* Peripheral Clock ***************************************************/ -static struct clk __init *alchemy_clk_setup_periph(const char *pn) +static struct clk_core __init *alchemy_clk_setup_periph(const char *pn) { /* Peripheral clock runs at half the rate of sysbus clk */ - struct clk *c; + struct clk_core *c; c = clk_register_fixed_factor(NULL, ALCHEMY_PERIPH_CLK, pn, 0, 1, 2); @@ -282,11 +282,11 @@ static struct clk __init *alchemy_clk_setup_periph(const char *pn) /* mem clock **********************************************************/ -static struct clk __init *alchemy_clk_setup_mem(const char *pn, int ct) +static struct clk_core __init *alchemy_clk_setup_mem(const char *pn, int ct) { void __iomem *addr = IOMEM(AU1000_MEM_PHYS_ADDR); unsigned long v; - struct clk *c; + struct clk_core *c; int div; switch (ct) { @@ -316,14 +316,14 @@ static struct clk __init *alchemy_clk_setup_mem(const char *pn, int ct) /* lrclk: external synchronous static bus clock ***********************/ -static struct clk __init *alchemy_clk_setup_lrclk(const char *pn) +static struct clk_core __init *alchemy_clk_setup_lrclk(const char *pn) { /* MEM_STCFG0[15:13] = divisor. * L/RCLK = periph_clk / (divisor + 1) * On Au1000, Au1500, Au1100 it's called LCLK, * on later models it's called RCLK, but it's the same thing. */ - struct clk *c; + struct clk_core *c; unsigned long v = alchemy_rdsmem(AU1000_MEM_STCFG0) >> 13; v = (v & 7) + 1; @@ -375,10 +375,10 @@ static long alchemy_calc_div(unsigned long rate, unsigned long prate, static long alchemy_clk_fgcs_detr(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk, + struct clk_core **best_parent_clk, int scale, int maxdiv) { - struct clk *pc, *bpc, *free; + struct clk_core *pc, *bpc, *free; long tdv, tpr, pr, nr, br, bpr, diff, lastdiff; int j; @@ -405,7 +405,7 @@ static long alchemy_clk_fgcs_detr(struct clk_hw *hw, unsigned long rate, free = pc; } - pr = clk_get_rate(pc); + pr = clk_provider_get_rate(pc); if (pr < rate) continue; @@ -435,7 +435,7 @@ static long alchemy_clk_fgcs_detr(struct clk_hw *hw, unsigned long rate, tpr = rate * j; if (tpr < 0) break; - pr = clk_round_rate(free, tpr); + pr = clk_provider_round_rate(free, tpr); tdv = alchemy_calc_div(rate, pr, scale, maxdiv, NULL); nr = pr / tdv; @@ -548,7 +548,7 @@ static unsigned long alchemy_clk_fgv1_recalc(struct clk_hw *hw, static long alchemy_clk_fgv1_detr(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk) + struct clk_core **best_parent_clk) { return alchemy_clk_fgcs_detr(hw, rate, best_parent_rate, best_parent_clk, 2, 512); @@ -680,7 +680,7 @@ static unsigned long alchemy_clk_fgv2_recalc(struct clk_hw *hw, static long alchemy_clk_fgv2_detr(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk) + struct clk_core **best_parent_clk) { struct alchemy_fgcs_clk *c = to_fgcs_clk(hw); int scale, maxdiv; @@ -723,7 +723,7 @@ static const char * const alchemy_clk_fgen_names[] = { static int __init alchemy_clk_init_fgens(int ctype) { - struct clk *c; + struct clk_core *c; struct clk_init_data id; struct alchemy_fgcs_clk *a; unsigned long v; @@ -899,7 +899,7 @@ static int alchemy_clk_csrc_setr(struct clk_hw *hw, unsigned long rate, static long alchemy_clk_csrc_detr(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk) + struct clk_core **best_parent_clk) { struct alchemy_fgcs_clk *c = to_fgcs_clk(hw); int scale = c->dt[2] == 3 ? 1 : 2; /* au1300 check */ @@ -936,7 +936,7 @@ static int __init alchemy_clk_setup_imux(int ctype) struct clk_init_data id; unsigned long v; int i, ret, *dt; - struct clk *c; + struct clk_core *c; id.ops = &alchemy_clkops_csrc; id.parent_names = (const char **)alchemy_clk_csrc_parents; @@ -1023,7 +1023,7 @@ static int __init alchemy_clk_init(void) { int ctype = alchemy_get_cputype(), ret, i; struct clk_aliastable *t = alchemy_clk_aliases; - struct clk *c; + struct clk_core *c; /* Root of the Alchemy clock tree: external 12MHz crystal osc */ c = clk_register_fixed_rate(NULL, ALCHEMY_ROOT_CLK, NULL, diff --git a/arch/powerpc/platforms/512x/clock-commonclk.c b/arch/powerpc/platforms/512x/clock-commonclk.c index 6eb614a..81afe83 100644 --- a/arch/powerpc/platforms/512x/clock-commonclk.c +++ b/arch/powerpc/platforms/512x/clock-commonclk.c @@ -70,7 +70,7 @@ enum { }; /* data required for the OF clock provider registration */ -static struct clk *clks[MPC512x_CLK_LAST_PRIVATE]; +static struct clk_core *clks[MPC512x_CLK_LAST_PRIVATE]; static struct clk_onecell_data clk_data; /* CCM register access */ @@ -218,12 +218,12 @@ static bool soc_has_mclk_mux0_canin(void) /* common clk API wrappers {{{ */ /* convenience wrappers around the common clk API */ -static inline struct clk *mpc512x_clk_fixed(const char *name, int rate) +static inline struct clk_core *mpc512x_clk_fixed(const char *name, int rate) { return clk_register_fixed_rate(NULL, name, NULL, CLK_IS_ROOT, rate); } -static inline struct clk *mpc512x_clk_factor( +static inline struct clk_core *mpc512x_clk_factor( const char *name, const char *parent_name, int mul, int div) { @@ -234,7 +234,7 @@ static inline struct clk *mpc512x_clk_factor( mul, div); } -static inline struct clk *mpc512x_clk_divider( +static inline struct clk_core *mpc512x_clk_divider( const char *name, const char *parent_name, u8 clkflags, u32 __iomem *reg, u8 pos, u8 len, int divflags) { @@ -242,7 +242,7 @@ static inline struct clk *mpc512x_clk_divider( reg, pos, len, divflags, &clklock); } -static inline struct clk *mpc512x_clk_divtable( +static inline struct clk_core *mpc512x_clk_divtable( const char *name, const char *parent_name, u32 __iomem *reg, u8 pos, u8 len, const struct clk_div_table *divtab) @@ -255,7 +255,7 @@ static inline struct clk *mpc512x_clk_divtable( divtab, &clklock); } -static inline struct clk *mpc512x_clk_gated( +static inline struct clk_core *mpc512x_clk_gated( const char *name, const char *parent_name, u32 __iomem *reg, u8 pos) { @@ -266,7 +266,7 @@ static inline struct clk *mpc512x_clk_gated( reg, pos, 0, &clklock); } -static inline struct clk *mpc512x_clk_muxed(const char *name, +static inline struct clk_core *mpc512x_clk_muxed(const char *name, const char **parent_names, int parent_count, u32 __iomem *reg, u8 pos, u8 len) { @@ -422,7 +422,7 @@ static void mpc512x_clk_setup_ref_clock(struct device_node *np, int bus_freq, int *sys_mul, int *sys_div, int *ips_div) { - struct clk *osc_clk; + struct clk_core *osc_clk; int calc_freq; /* fetch mul/div factors from the hardware */ @@ -432,7 +432,7 @@ static void mpc512x_clk_setup_ref_clock(struct device_node *np, int bus_freq, *ips_div = get_bit_field(&clkregs->scfr1, 23, 3); /* lookup the oscillator clock for its rate */ - osc_clk = of_clk_get_by_name(np, "osc"); + osc_clk = of_clk_provider_get_by_name(np, "osc"); /* * either descend from OSC to REF (and in bypassing verify the @@ -444,7 +444,7 @@ static void mpc512x_clk_setup_ref_clock(struct device_node *np, int bus_freq, */ if (!IS_ERR(osc_clk)) { clks[MPC512x_CLK_REF] = mpc512x_clk_factor("ref", "osc", 1, 1); - calc_freq = clk_get_rate(clks[MPC512x_CLK_REF]); + calc_freq = clk_provider_get_rate(clks[MPC512x_CLK_REF]); calc_freq *= *sys_mul; calc_freq /= *sys_div; calc_freq /= 2; @@ -647,8 +647,8 @@ static void mpc512x_clk_setup_mclk(struct mclk_setup_data *entry, size_t idx) * - MCLK 0 enabled * - MCLK 1 from MCLK DIV */ - div = clk_get_rate(clks[MPC512x_CLK_SYS]); - div /= clk_get_rate(clks[MPC512x_CLK_IPS]); + div = clk_provider_get_rate(clks[MPC512x_CLK_SYS]); + div /= clk_provider_get_rate(clks[MPC512x_CLK_IPS]); out_be32(mccr_reg, (0 << 16)); out_be32(mccr_reg, (0 << 16) | ((div - 1) << 17)); out_be32(mccr_reg, (1 << 16) | ((div - 1) << 17)); @@ -925,12 +925,12 @@ static void mpc512x_clk_setup_clock_tree(struct device_node *np, int busfreq) * claimed by any peripheral driver, to not have the clock * subsystem disable them late at startup */ - clk_prepare_enable(clks[MPC512x_CLK_DUMMY]); - clk_prepare_enable(clks[MPC512x_CLK_E300]); /* PowerPC CPU */ - clk_prepare_enable(clks[MPC512x_CLK_DDR]); /* DRAM */ - clk_prepare_enable(clks[MPC512x_CLK_MEM]); /* SRAM */ - clk_prepare_enable(clks[MPC512x_CLK_IPS]); /* SoC periph */ - clk_prepare_enable(clks[MPC512x_CLK_LPC]); /* boot media */ + clk_provider_prepare_enable(clks[MPC512x_CLK_DUMMY]); + clk_provider_prepare_enable(clks[MPC512x_CLK_E300]); /* PowerPC CPU */ + clk_provider_prepare_enable(clks[MPC512x_CLK_DDR]); /* DRAM */ + clk_provider_prepare_enable(clks[MPC512x_CLK_MEM]); /* SRAM */ + clk_provider_prepare_enable(clks[MPC512x_CLK_IPS]); /* SoC periph */ + clk_provider_prepare_enable(clks[MPC512x_CLK_LPC]); /* boot media */ } /* @@ -969,9 +969,9 @@ static void mpc5121_clk_provide_migration_support(void) * has attached to bridges, otherwise the PCI clock remains * unused and so it gets disabled */ - clk_prepare_enable(clks[MPC512x_CLK_PSC3_MCLK]);/* serial console */ + clk_provider_prepare_enable(clks[MPC512x_CLK_PSC3_MCLK]);/* serial console */ if (of_find_compatible_node(NULL, "pci", "fsl,mpc5121-pci")) - clk_prepare_enable(clks[MPC512x_CLK_PCI]); + clk_provider_prepare_enable(clks[MPC512x_CLK_PCI]); } /* @@ -988,8 +988,8 @@ static void mpc5121_clk_provide_migration_support(void) } while (0) #define NODE_CHK(clkname, clkitem, regnode, regflag) do { \ - struct clk *clk; \ - clk = of_clk_get_by_name(np, clkname); \ + struct clk_core *clk; \ + clk = of_clk_provider_get_by_name(np, clkname); \ if (IS_ERR(clk)) { \ clk = clkitem; \ clk_register_clkdev(clk, clkname, devname); \ @@ -999,7 +999,7 @@ static void mpc5121_clk_provide_migration_support(void) pr_debug("clock alias name '%s' for dev '%s' pointer %p\n", \ clkname, devname, clk); \ } else { \ - clk_put(clk); \ + __clk_put(clk); \ } \ } while (0) @@ -1090,7 +1090,7 @@ static void mpc5121_clk_provide_backwards_compat(void) * workaround obsolete */ if (did_register & DID_REG_I2C) - clk_prepare_enable(clks[MPC512x_CLK_I2C]); + clk_provider_prepare_enable(clks[MPC512x_CLK_I2C]); FOR_NODES("fsl,mpc5121-diu") { NODE_PREP; diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c index bcbdbd2..f4c6ccf 100644 --- a/drivers/acpi/acpi_lpss.c +++ b/drivers/acpi/acpi_lpss.c @@ -11,7 +11,6 @@ */ #include -#include #include #include #include @@ -78,7 +77,7 @@ struct lpss_private_data { void __iomem *mmio_base; resource_size_t mmio_size; unsigned int fixed_clk_rate; - struct clk *clk; + struct clk_core *clk; const struct lpss_device_desc *dev_desc; u32 prv_reg_ctx[LPSS_PRV_REG_COUNT]; }; @@ -229,7 +228,7 @@ static int register_device_clock(struct acpi_device *adev, { const struct lpss_device_desc *dev_desc = pdata->dev_desc; const char *devname = dev_name(&adev->dev); - struct clk *clk = ERR_PTR(-ENODEV); + struct clk_core *clk = ERR_PTR(-ENODEV); struct lpss_clk_data *clk_data; const char *parent, *clk_name; void __iomem *prv_base; diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c index 59fa3cc..11bcdb1 100644 --- a/drivers/clk/at91/clk-main.c +++ b/drivers/clk/at91/clk-main.c @@ -138,7 +138,7 @@ static const struct clk_ops main_osc_ops = { .is_prepared = clk_main_osc_is_prepared, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_main_osc(struct at91_pmc *pmc, unsigned int irq, const char *name, @@ -147,7 +147,7 @@ at91_clk_register_main_osc(struct at91_pmc *pmc, { int ret; struct clk_main_osc *osc; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !irq || !name || !parent_name) @@ -192,7 +192,7 @@ at91_clk_register_main_osc(struct at91_pmc *pmc, void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; unsigned int irq; const char *name = np->name; const char *parent_name; @@ -291,7 +291,7 @@ static const struct clk_ops main_rc_osc_ops = { .recalc_accuracy = clk_main_rc_osc_recalc_accuracy, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_main_rc_osc(struct at91_pmc *pmc, unsigned int irq, const char *name, @@ -299,7 +299,7 @@ at91_clk_register_main_rc_osc(struct at91_pmc *pmc, { int ret; struct clk_main_rc_osc *osc; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !irq || !name || !frequency) @@ -340,7 +340,7 @@ at91_clk_register_main_rc_osc(struct at91_pmc *pmc, void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; unsigned int irq; u32 frequency = 0; u32 accuracy = 0; @@ -424,13 +424,13 @@ static const struct clk_ops rm9200_main_ops = { .recalc_rate = clk_rm9200_main_recalc_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_rm9200_main(struct at91_pmc *pmc, const char *name, const char *parent_name) { struct clk_rm9200_main *clkmain; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !name) @@ -462,7 +462,7 @@ at91_clk_register_rm9200_main(struct at91_pmc *pmc, void __init of_at91rm9200_clk_main_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; @@ -555,7 +555,7 @@ static const struct clk_ops sam9x5_main_ops = { .get_parent = clk_sam9x5_main_get_parent, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_sam9x5_main(struct at91_pmc *pmc, unsigned int irq, const char *name, @@ -564,7 +564,7 @@ at91_clk_register_sam9x5_main(struct at91_pmc *pmc, { int ret; struct clk_sam9x5_main *clkmain; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !irq || !name) @@ -607,7 +607,7 @@ at91_clk_register_sam9x5_main(struct at91_pmc *pmc, void __init of_at91sam9x5_clk_main_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_names[2]; int num_parents; unsigned int irq; diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c index c1af80b..95ae1b6 100644 --- a/drivers/clk/at91/clk-master.c +++ b/drivers/clk/at91/clk-master.c @@ -131,7 +131,7 @@ static const struct clk_ops master_ops = { .get_parent = clk_master_get_parent, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_master(struct at91_pmc *pmc, unsigned int irq, const char *name, int num_parents, const char **parent_names, @@ -140,7 +140,7 @@ at91_clk_register_master(struct at91_pmc *pmc, unsigned int irq, { int ret; struct clk_master *master; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !irq || !name || !num_parents || !parent_names) @@ -216,7 +216,7 @@ static void __init of_at91_clk_master_setup(struct device_node *np, struct at91_pmc *pmc, const struct clk_master_layout *layout) { - struct clk *clk; + struct clk_core *clk; int num_parents; int i; unsigned int irq; diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c index 597fed4..cdf8e8a 100644 --- a/drivers/clk/at91/clk-peripheral.c +++ b/drivers/clk/at91/clk-peripheral.c @@ -100,12 +100,12 @@ static const struct clk_ops peripheral_ops = { .is_enabled = clk_peripheral_is_enabled, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_peripheral(struct at91_pmc *pmc, const char *name, const char *parent_name, u32 id) { struct clk_peripheral *periph; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !name || !parent_name || id > PERIPHERAL_ID_MAX) @@ -134,7 +134,7 @@ at91_clk_register_peripheral(struct at91_pmc *pmc, const char *name, static void clk_sam9x5_peripheral_autodiv(struct clk_sam9x5_peripheral *periph) { - struct clk *parent; + struct clk_core *parent; unsigned long parent_rate; int shift = 0; @@ -309,13 +309,13 @@ static const struct clk_ops sam9x5_peripheral_ops = { .set_rate = clk_sam9x5_peripheral_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_sam9x5_peripheral(struct at91_pmc *pmc, const char *name, const char *parent_name, u32 id, const struct clk_range *range) { struct clk_sam9x5_peripheral *periph; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !name || !parent_name) @@ -352,7 +352,7 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) { int num; u32 id; - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name; struct device_node *periphclknp; diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c index 6ec79db..6a1b900 100644 --- a/drivers/clk/at91/clk-pll.c +++ b/drivers/clk/at91/clk-pll.c @@ -299,14 +299,14 @@ static const struct clk_ops pll_ops = { .set_rate = clk_pll_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_pll(struct at91_pmc *pmc, unsigned int irq, const char *name, const char *parent_name, u8 id, const struct clk_pll_layout *layout, const struct clk_pll_characteristics *characteristics) { struct clk_pll *pll; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; int ret; int offset = PLL_REG(id); @@ -476,7 +476,7 @@ of_at91_clk_pll_setup(struct device_node *np, struct at91_pmc *pmc, { u32 id; unsigned int irq; - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; struct clk_pll_characteristics *characteristics; diff --git a/drivers/clk/at91/clk-plldiv.c b/drivers/clk/at91/clk-plldiv.c index ea22656..f8204d8 100644 --- a/drivers/clk/at91/clk-plldiv.c +++ b/drivers/clk/at91/clk-plldiv.c @@ -79,12 +79,12 @@ static const struct clk_ops plldiv_ops = { .set_rate = clk_plldiv_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_plldiv(struct at91_pmc *pmc, const char *name, const char *parent_name) { struct clk_plldiv *plldiv; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; plldiv = kzalloc(sizeof(*plldiv), GFP_KERNEL); @@ -111,7 +111,7 @@ at91_clk_register_plldiv(struct at91_pmc *pmc, const char *name, static void __init of_at91_clk_plldiv_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c index 62e2509..b72e98c 100644 --- a/drivers/clk/at91/clk-programmable.c +++ b/drivers/clk/at91/clk-programmable.c @@ -57,9 +57,9 @@ static unsigned long clk_programmable_recalc_rate(struct clk_hw *hw, static long clk_programmable_determine_rate(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk) + struct clk_core **best_parent_clk) { - struct clk *parent = NULL; + struct clk_core *parent = NULL; long best_rate = -EINVAL; unsigned long parent_rate; unsigned long tmp_rate; @@ -169,14 +169,14 @@ static const struct clk_ops programmable_ops = { .set_rate = clk_programmable_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_programmable(struct at91_pmc *pmc, const char *name, const char **parent_names, u8 num_parents, u8 id, const struct clk_programmable_layout *layout) { struct clk_programmable *prog; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (id > PROG_ID_MAX) @@ -229,7 +229,7 @@ of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, int num; u32 id; int i; - struct clk *clk; + struct clk_core *clk; int num_parents; const char *parent_names[PROG_SOURCE_MAX]; const char *name; diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c index 0300c46..d50fe02 100644 --- a/drivers/clk/at91/clk-slow.c +++ b/drivers/clk/at91/clk-slow.c @@ -117,7 +117,7 @@ static const struct clk_ops slow_osc_ops = { .is_prepared = clk_slow_osc_is_prepared, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_slow_osc(void __iomem *sckcr, const char *name, const char *parent_name, @@ -125,7 +125,7 @@ at91_clk_register_slow_osc(void __iomem *sckcr, bool bypass) { struct clk_slow_osc *osc; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!sckcr || !name || !parent_name) @@ -159,7 +159,7 @@ at91_clk_register_slow_osc(void __iomem *sckcr, void __init of_at91sam9x5_clk_slow_osc_setup(struct device_node *np, void __iomem *sckcr) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; u32 startup; @@ -229,7 +229,7 @@ static const struct clk_ops slow_rc_osc_ops = { .recalc_accuracy = clk_slow_rc_osc_recalc_accuracy, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_slow_rc_osc(void __iomem *sckcr, const char *name, unsigned long frequency, @@ -237,7 +237,7 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr, unsigned long startup) { struct clk_slow_rc_osc *osc; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!sckcr || !name) @@ -269,7 +269,7 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr, void __init of_at91sam9x5_clk_slow_rc_osc_setup(struct device_node *np, void __iomem *sckcr) { - struct clk *clk; + struct clk_core *clk; u32 frequency = 0; u32 accuracy = 0; u32 startup = 0; @@ -327,14 +327,14 @@ static const struct clk_ops sam9x5_slow_ops = { .get_parent = clk_sam9x5_slow_get_parent, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_sam9x5_slow(void __iomem *sckcr, const char *name, const char **parent_names, int num_parents) { struct clk_sam9x5_slow *slowck; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!sckcr || !name || !parent_names || !num_parents) @@ -364,7 +364,7 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr, void __init of_at91sam9x5_clk_slow_setup(struct device_node *np, void __iomem *sckcr) { - struct clk *clk; + struct clk_core *clk; const char *parent_names[2]; int num_parents; const char *name = np->name; @@ -401,14 +401,14 @@ static const struct clk_ops sam9260_slow_ops = { .get_parent = clk_sam9260_slow_get_parent, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_sam9260_slow(struct at91_pmc *pmc, const char *name, const char **parent_names, int num_parents) { struct clk_sam9260_slow *slowck; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; if (!pmc || !name) @@ -440,7 +440,7 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc, void __init of_at91sam9260_clk_slow_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_names[2]; int num_parents; const char *name = np->name; diff --git a/drivers/clk/at91/clk-smd.c b/drivers/clk/at91/clk-smd.c index 144d47e..8820b84 100644 --- a/drivers/clk/at91/clk-smd.c +++ b/drivers/clk/at91/clk-smd.c @@ -113,12 +113,12 @@ static const struct clk_ops at91sam9x5_smd_ops = { .set_rate = at91sam9x5_clk_smd_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91sam9x5_clk_register_smd(struct at91_pmc *pmc, const char *name, const char **parent_names, u8 num_parents) { struct at91sam9x5_clk_smd *smd; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; smd = kzalloc(sizeof(*smd), GFP_KERNEL); @@ -144,7 +144,7 @@ at91sam9x5_clk_register_smd(struct at91_pmc *pmc, const char *name, void __init of_at91sam9x5_clk_smd_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; int i; int num_parents; const char *parent_names[SMD_SOURCE_MAX]; diff --git a/drivers/clk/at91/clk-system.c b/drivers/clk/at91/clk-system.c index a76d03f..7f48cde 100644 --- a/drivers/clk/at91/clk-system.c +++ b/drivers/clk/at91/clk-system.c @@ -99,12 +99,12 @@ static const struct clk_ops system_ops = { .is_prepared = clk_system_is_prepared, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_system(struct at91_pmc *pmc, const char *name, const char *parent_name, u8 id, int irq) { struct clk_system *sys; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; int ret; @@ -147,7 +147,7 @@ of_at91_clk_sys_setup(struct device_node *np, struct at91_pmc *pmc) int num; int irq = 0; u32 id; - struct clk *clk; + struct clk_core *clk; const char *name; struct device_node *sysclknp; const char *parent_name; diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c index 24b5b02..94b5871 100644 --- a/drivers/clk/at91/clk-usb.c +++ b/drivers/clk/at91/clk-usb.c @@ -162,12 +162,12 @@ static const struct clk_ops at91sam9n12_usb_ops = { .set_rate = at91sam9x5_clk_usb_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name, const char **parent_names, u8 num_parents) { struct at91sam9x5_clk_usb *usb; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; usb = kzalloc(sizeof(*usb), GFP_KERNEL); @@ -190,12 +190,12 @@ at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name, return clk; } -static struct clk * __init +static struct clk_core * __init at91sam9n12_clk_register_usb(struct at91_pmc *pmc, const char *name, const char *parent_name) { struct at91sam9x5_clk_usb *usb; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; usb = kzalloc(sizeof(*usb), GFP_KERNEL); @@ -238,7 +238,7 @@ static long at91rm9200_clk_usb_round_rate(struct clk_hw *hw, unsigned long rate, unsigned long *parent_rate) { struct at91rm9200_clk_usb *usb = to_at91rm9200_clk_usb(hw); - struct clk *parent = __clk_get_parent(hw->clk); + struct clk_core *parent = __clk_get_parent(hw->clk); unsigned long bestrate = 0; int bestdiff = -1; unsigned long tmprate; @@ -305,12 +305,12 @@ static const struct clk_ops at91rm9200_usb_ops = { .set_rate = at91rm9200_clk_usb_set_rate, }; -static struct clk * __init +static struct clk_core * __init at91rm9200_clk_register_usb(struct at91_pmc *pmc, const char *name, const char *parent_name, const u32 *divisors) { struct at91rm9200_clk_usb *usb; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; usb = kzalloc(sizeof(*usb), GFP_KERNEL); @@ -337,7 +337,7 @@ at91rm9200_clk_register_usb(struct at91_pmc *pmc, const char *name, void __init of_at91sam9x5_clk_usb_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; int i; int num_parents; const char *parent_names[USB_SOURCE_MAX]; @@ -365,7 +365,7 @@ void __init of_at91sam9x5_clk_usb_setup(struct device_node *np, void __init of_at91sam9n12_clk_usb_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; @@ -385,7 +385,7 @@ void __init of_at91sam9n12_clk_usb_setup(struct device_node *np, void __init of_at91rm9200_clk_usb_setup(struct device_node *np, struct at91_pmc *pmc) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; u32 divisors[4] = {0, 0, 0, 0}; diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c index ae3263b..0502050 100644 --- a/drivers/clk/at91/clk-utmi.c +++ b/drivers/clk/at91/clk-utmi.c @@ -92,13 +92,13 @@ static const struct clk_ops utmi_ops = { .recalc_rate = clk_utmi_recalc_rate, }; -static struct clk * __init +static struct clk_core * __init at91_clk_register_utmi(struct at91_pmc *pmc, unsigned int irq, const char *name, const char *parent_name) { int ret; struct clk_utmi *utmi; - struct clk *clk = NULL; + struct clk_core *clk = NULL; struct clk_init_data init; utmi = kzalloc(sizeof(*utmi), GFP_KERNEL); @@ -132,7 +132,7 @@ static void __init of_at91_clk_utmi_setup(struct device_node *np, struct at91_pmc *pmc) { unsigned int irq; - struct clk *clk; + struct clk_core *clk; const char *parent_name; const char *name = np->name; diff --git a/drivers/clk/bcm/clk-kona-setup.c b/drivers/clk/bcm/clk-kona-setup.c index e5aeded..122e7b0 100644 --- a/drivers/clk/bcm/clk-kona-setup.c +++ b/drivers/clk/bcm/clk-kona-setup.c @@ -697,7 +697,7 @@ static void bcm_clk_teardown(struct kona_clk *bcm_clk) bcm_clk->type = bcm_clk_none; } -static void kona_clk_teardown(struct clk *clk) +static void kona_clk_teardown(struct clk_core *clk) { struct clk_hw *hw; struct kona_clk *bcm_clk; @@ -716,10 +716,10 @@ static void kona_clk_teardown(struct clk *clk) bcm_clk_teardown(bcm_clk); } -struct clk *kona_clk_setup(struct kona_clk *bcm_clk) +struct clk_core *kona_clk_setup(struct kona_clk *bcm_clk) { struct clk_init_data *init_data = &bcm_clk->init_data; - struct clk *clk = NULL; + struct clk_core *clk = NULL; switch (bcm_clk->type) { case bcm_clk_peri: diff --git a/drivers/clk/bcm/clk-kona.c b/drivers/clk/bcm/clk-kona.c index 95af2e6..a301aa9 100644 --- a/drivers/clk/bcm/clk-kona.c +++ b/drivers/clk/bcm/clk-kona.c @@ -1032,11 +1032,11 @@ static long kona_peri_clk_round_rate(struct clk_hw *hw, unsigned long rate, } static long kona_peri_clk_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *best_parent_rate, struct clk **best_parent) + unsigned long *best_parent_rate, struct clk_core **best_parent) { struct kona_clk *bcm_clk = to_kona_clk(hw); - struct clk *clk = hw->clk; - struct clk *current_parent; + struct clk_core *clk = hw->clk; + struct clk_core *current_parent; unsigned long parent_rate; unsigned long best_delta; unsigned long best_rate; @@ -1053,14 +1053,14 @@ static long kona_peri_clk_determine_rate(struct clk_hw *hw, unsigned long rate, return kona_peri_clk_round_rate(hw, rate, best_parent_rate); /* Unless we can do better, stick with current parent */ - current_parent = clk_get_parent(clk); + current_parent = clk_provider_get_parent(clk); parent_rate = __clk_get_rate(current_parent); best_rate = kona_peri_clk_round_rate(hw, rate, &parent_rate); best_delta = abs(best_rate - rate); /* Check whether any other parent clock can produce a better result */ for (which = 0; which < parent_count; which++) { - struct clk *parent = clk_get_parent_by_index(clk, which); + struct clk_core *parent = clk_get_parent_by_index(clk, which); unsigned long delta; unsigned long other_rate; @@ -1260,7 +1260,7 @@ bool __init kona_ccu_init(struct ccu_data *ccu) { unsigned long flags; unsigned int which; - struct clk **clks = ccu->clk_data.clks; + struct clk_core **clks = ccu->clk_data.clks; bool success = true; flags = ccu_lock(ccu); diff --git a/drivers/clk/bcm/clk-kona.h b/drivers/clk/bcm/clk-kona.h index 2537b30..c2d0152 100644 --- a/drivers/clk/bcm/clk-kona.h +++ b/drivers/clk/bcm/clk-kona.h @@ -508,7 +508,7 @@ extern u64 scaled_div_max(struct bcm_clk_div *div); extern u64 scaled_div_build(struct bcm_clk_div *div, u32 div_value, u32 billionths); -extern struct clk *kona_clk_setup(struct kona_clk *bcm_clk); +extern struct clk_core *kona_clk_setup(struct kona_clk *bcm_clk); extern void __init kona_dt_ccu_setup(struct ccu_data *ccu, struct device_node *node); extern bool __init kona_ccu_init(struct ccu_data *ccu); diff --git a/drivers/clk/berlin/berlin2-avpll.c b/drivers/clk/berlin/berlin2-avpll.c index fd0f26c..488d986 100644 --- a/drivers/clk/berlin/berlin2-avpll.c +++ b/drivers/clk/berlin/berlin2-avpll.c @@ -188,7 +188,7 @@ static const struct clk_ops berlin2_avpll_vco_ops = { .recalc_rate = berlin2_avpll_vco_recalc_rate, }; -struct clk * __init berlin2_avpll_vco_register(void __iomem *base, +struct clk_core * __init berlin2_avpll_vco_register(void __iomem *base, const char *name, const char *parent_name, u8 vco_flags, unsigned long flags) { @@ -364,7 +364,7 @@ static const struct clk_ops berlin2_avpll_channel_ops = { */ static const u8 quirk_index[] __initconst = { 0, 6, 5, 4, 3, 2, 1, 7 }; -struct clk * __init berlin2_avpll_channel_register(void __iomem *base, +struct clk_core * __init berlin2_avpll_channel_register(void __iomem *base, const char *name, u8 index, const char *parent_name, u8 ch_flags, unsigned long flags) { diff --git a/drivers/clk/berlin/berlin2-avpll.h b/drivers/clk/berlin/berlin2-avpll.h index a37f506..216eee7 100644 --- a/drivers/clk/berlin/berlin2-avpll.h +++ b/drivers/clk/berlin/berlin2-avpll.h @@ -24,11 +24,11 @@ struct clk; #define BERLIN2_AVPLL_BIT_QUIRK BIT(0) #define BERLIN2_AVPLL_SCRAMBLE_QUIRK BIT(1) -struct clk * __init +struct clk_core * __init berlin2_avpll_vco_register(void __iomem *base, const char *name, const char *parent_name, u8 vco_flags, unsigned long flags); -struct clk * __init +struct clk_core * __init berlin2_avpll_channel_register(void __iomem *base, const char *name, u8 index, const char *parent_name, u8 ch_flags, unsigned long flags); diff --git a/drivers/clk/berlin/berlin2-div.c b/drivers/clk/berlin/berlin2-div.c index 81ff97f..c673082 100644 --- a/drivers/clk/berlin/berlin2-div.c +++ b/drivers/clk/berlin/berlin2-div.c @@ -234,7 +234,7 @@ static const struct clk_ops berlin2_div_mux_ops = { .get_parent = berlin2_div_get_parent, }; -struct clk * __init +struct clk_core * __init berlin2_div_register(const struct berlin2_div_map *map, void __iomem *base, const char *name, u8 div_flags, const char **parent_names, int num_parents, diff --git a/drivers/clk/berlin/berlin2-div.h b/drivers/clk/berlin/berlin2-div.h index 15e3384..3ddb87a 100644 --- a/drivers/clk/berlin/berlin2-div.h +++ b/drivers/clk/berlin/berlin2-div.h @@ -80,7 +80,7 @@ struct berlin2_div_data { u8 div_flags; }; -struct clk * __init +struct clk_core * __init berlin2_div_register(const struct berlin2_div_map *map, void __iomem *base, const char *name, u8 div_flags, const char **parent_names, int num_parents, diff --git a/drivers/clk/berlin/berlin2-pll.c b/drivers/clk/berlin/berlin2-pll.c index bdc506b..b7a3016 100644 --- a/drivers/clk/berlin/berlin2-pll.c +++ b/drivers/clk/berlin/berlin2-pll.c @@ -91,7 +91,7 @@ static const struct clk_ops berlin2_pll_ops = { .recalc_rate = berlin2_pll_recalc_rate, }; -struct clk * __init +struct clk_core * __init berlin2_pll_register(const struct berlin2_pll_map *map, void __iomem *base, const char *name, const char *parent_name, unsigned long flags) diff --git a/drivers/clk/berlin/berlin2-pll.h b/drivers/clk/berlin/berlin2-pll.h index 8831ce2..6b6a6ed 100644 --- a/drivers/clk/berlin/berlin2-pll.h +++ b/drivers/clk/berlin/berlin2-pll.h @@ -29,7 +29,7 @@ struct berlin2_pll_map { u8 divsel_shift; }; -struct clk * __init +struct clk_core * __init berlin2_pll_register(const struct berlin2_pll_map *map, void __iomem *base, const char *name, const char *parent_name, unsigned long flags); diff --git a/drivers/clk/berlin/bg2.c b/drivers/clk/berlin/bg2.c index 4c81e09..49ecb3e 100644 --- a/drivers/clk/berlin/bg2.c +++ b/drivers/clk/berlin/bg2.c @@ -17,7 +17,6 @@ * this program. If not, see . */ -#include #include #include #include @@ -93,7 +92,7 @@ */ #define MAX_CLKS 41 -static struct clk *clks[MAX_CLKS]; +static struct clk_core *clks[MAX_CLKS]; static struct clk_onecell_data clk_data; static DEFINE_SPINLOCK(lock); static void __iomem *gbase; @@ -504,7 +503,7 @@ static const struct berlin2_gate_data bg2_gates[] __initconst = { static void __init berlin2_clock_setup(struct device_node *np) { const char *parent_names[9]; - struct clk *clk; + struct clk_core *clk; u8 avpll_flags = 0; int n; @@ -513,16 +512,16 @@ static void __init berlin2_clock_setup(struct device_node *np) return; /* overwrite default clock names with DT provided ones */ - clk = of_clk_get_by_name(np, clk_names[REFCLK]); + clk = of_clk_provider_get_by_name(np, clk_names[REFCLK]); if (!IS_ERR(clk)) { clk_names[REFCLK] = __clk_get_name(clk); - clk_put(clk); + __clk_put(clk); } - clk = of_clk_get_by_name(np, clk_names[VIDEO_EXT0]); + clk = of_clk_provider_get_by_name(np, clk_names[VIDEO_EXT0]); if (!IS_ERR(clk)) { clk_names[VIDEO_EXT0] = __clk_get_name(clk); - clk_put(clk); + __clk_put(clk); } /* simple register PLLs */ diff --git a/drivers/clk/berlin/bg2q.c b/drivers/clk/berlin/bg2q.c index 748da9b..33cc08b 100644 --- a/drivers/clk/berlin/bg2q.c +++ b/drivers/clk/berlin/bg2q.c @@ -17,7 +17,6 @@ * this program. If not, see . */ -#include #include #include #include @@ -47,7 +46,7 @@ #define REG_SDIO1XIN_CLKCTL 0x015c #define MAX_CLKS 27 -static struct clk *clks[MAX_CLKS]; +static struct clk_core *clks[MAX_CLKS]; static struct clk_onecell_data clk_data; static DEFINE_SPINLOCK(lock); static void __iomem *gbase; @@ -293,7 +292,7 @@ static const struct berlin2_gate_data bg2q_gates[] __initconst = { static void __init berlin2q_clock_setup(struct device_node *np) { const char *parent_names[9]; - struct clk *clk; + struct clk_core *clk; int n; gbase = of_iomap(np, 0); @@ -311,10 +310,10 @@ static void __init berlin2q_clock_setup(struct device_node *np) } /* overwrite default clock names with DT provided ones */ - clk = of_clk_get_by_name(np, clk_names[REFCLK]); + clk = of_clk_provider_get_by_name(np, clk_names[REFCLK]); if (!IS_ERR(clk)) { clk_names[REFCLK] = __clk_get_name(clk); - clk_put(clk); + __clk_put(clk); } /* simple register PLLs */ diff --git a/drivers/clk/clk-axi-clkgen.c b/drivers/clk/clk-axi-clkgen.c index 1127ee4..d91550c 100644 --- a/drivers/clk/clk-axi-clkgen.c +++ b/drivers/clk/clk-axi-clkgen.c @@ -10,7 +10,6 @@ #include #include -#include #include #include #include @@ -489,7 +488,7 @@ static int axi_clkgen_probe(struct platform_device *pdev) const char *parent_name; const char *clk_name; struct resource *mem; - struct clk *clk; + struct clk_core *clk; if (!pdev->dev.of_node) return -ENODEV; diff --git a/drivers/clk/clk-axm5516.c b/drivers/clk/clk-axm5516.c index d2f1e11..3dc6e58 100644 --- a/drivers/clk/clk-axm5516.c +++ b/drivers/clk/clk-axm5516.c @@ -532,7 +532,7 @@ MODULE_DEVICE_TABLE(of, axmclk_match_table); struct axmclk_priv { struct clk_onecell_data onecell; - struct clk *clks[]; + struct clk_core *clks[]; }; static int axmclk_probe(struct platform_device *pdev) @@ -541,7 +541,7 @@ static int axmclk_probe(struct platform_device *pdev) struct resource *res; int i, ret; struct device *dev = &pdev->dev; - struct clk *clk; + struct clk_core *clk; struct regmap *regmap; size_t num_clks; struct axmclk_priv *priv; diff --git a/drivers/clk/clk-bcm2835.c b/drivers/clk/clk-bcm2835.c index 6b950ca..f25e85e 100644 --- a/drivers/clk/clk-bcm2835.c +++ b/drivers/clk/clk-bcm2835.c @@ -29,7 +29,7 @@ */ void __init bcm2835_init_clocks(void) { - struct clk *clk; + struct clk_core *clk; int ret; clk = clk_register_fixed_rate(NULL, "sys_pclk", NULL, CLK_IS_ROOT, diff --git a/drivers/clk/clk-clps711x.c b/drivers/clk/clk-clps711x.c index 715eec1..6aa64bb 100644 --- a/drivers/clk/clk-clps711x.c +++ b/drivers/clk/clk-clps711x.c @@ -9,7 +9,6 @@ * (at your option) any later version. */ -#include #include #include #include @@ -43,7 +42,7 @@ static const struct clk_div_table timer_div_table[] = { struct clps711x_clk { struct clk_onecell_data clk_data; spinlock_t lock; - struct clk *clks[CLPS711X_CLK_MAX]; + struct clk_core *clks[CLPS711X_CLK_MAX]; }; static struct clps711x_clk * __init _clps711x_clk_init(void __iomem *base, diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c index b9355da..d7322fa 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include #include @@ -57,14 +56,14 @@ static unsigned long clk_composite_recalc_rate(struct clk_hw *hw, static long clk_composite_determine_rate(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_p) + struct clk_core **best_parent_p) { struct clk_composite *composite = to_clk_composite(hw); const struct clk_ops *rate_ops = composite->rate_ops; const struct clk_ops *mux_ops = composite->mux_ops; struct clk_hw *rate_hw = composite->rate_hw; struct clk_hw *mux_hw = composite->mux_hw; - struct clk *parent; + struct clk_core *parent; unsigned long parent_rate; long tmp_rate, best_rate = 0; unsigned long rate_diff; @@ -80,7 +79,7 @@ static long clk_composite_determine_rate(struct clk_hw *hw, unsigned long rate, *best_parent_p = NULL; if (__clk_get_flags(hw->clk) & CLK_SET_RATE_NO_REPARENT) { - *best_parent_p = clk_get_parent(mux_hw->clk); + *best_parent_p = clk_provider_get_parent(mux_hw->clk); *best_parent_rate = __clk_get_rate(*best_parent_p); return rate_ops->round_rate(rate_hw, rate, @@ -181,14 +180,14 @@ static void clk_composite_disable(struct clk_hw *hw) gate_ops->disable(gate_hw); } -struct clk *clk_register_composite(struct device *dev, const char *name, +struct clk_core *clk_register_composite(struct device *dev, const char *name, const char **parent_names, int num_parents, struct clk_hw *mux_hw, const struct clk_ops *mux_ops, struct clk_hw *rate_hw, const struct clk_ops *rate_ops, struct clk_hw *gate_hw, const struct clk_ops *gate_ops, unsigned long flags) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; struct clk_composite *composite; struct clk_ops *clk_composite_ops; diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index d36a7b3..c9231cd 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -7,7 +7,6 @@ * published by the Free Software Foundation. */ -#include #include #include #include @@ -20,7 +19,7 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) { struct of_phandle_args clkspec; int index, rc, num_parents; - struct clk *clk, *pclk; + struct clk_core *clk, *pclk; num_parents = of_count_phandle_with_args(node, "assigned-clock-parents", "#clock-cells"); @@ -63,16 +62,16 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) goto err; } - rc = clk_set_parent(clk, pclk); + rc = clk_provider_set_parent(clk, pclk); if (rc < 0) pr_err("clk: failed to reparent %s to %s: %d\n", __clk_get_name(clk), __clk_get_name(pclk), rc); - clk_put(clk); - clk_put(pclk); + __clk_put(clk); + __clk_put(pclk); } return 0; err: - clk_put(pclk); + __clk_put(pclk); return rc; } @@ -82,7 +81,7 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier) struct property *prop; const __be32 *cur; int rc, index = 0; - struct clk *clk; + struct clk_core *clk; u32 rate; of_property_for_each_u32(node, "assigned-clock-rates", prop, cur, rate) { @@ -106,11 +105,11 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier) return PTR_ERR(clk); } - rc = clk_set_rate(clk, rate); + rc = clk_provider_set_rate(clk, rate); if (rc < 0) pr_err("clk: couldn't set %s clock rate: %d\n", __clk_get_name(clk), rc); - clk_put(clk); + __clk_put(clk); } index++; } diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 18a9de2..3c78139 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -366,14 +366,14 @@ const struct clk_ops clk_divider_ro_ops = { }; EXPORT_SYMBOL_GPL(clk_divider_ro_ops); -static struct clk *_register_divider(struct device *dev, const char *name, +static struct clk_core *_register_divider(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, const struct clk_div_table *table, spinlock_t *lock) { struct clk_divider *div; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (clk_divider_flags & CLK_DIVIDER_HIWORD_MASK) { @@ -429,7 +429,7 @@ static struct clk *_register_divider(struct device *dev, const char *name, * @clk_divider_flags: divider-specific flags for this clock * @lock: shared register lock for this clock */ -struct clk *clk_register_divider(struct device *dev, const char *name, +struct clk_core *clk_register_divider(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, spinlock_t *lock) @@ -453,7 +453,7 @@ EXPORT_SYMBOL_GPL(clk_register_divider); * @table: array of divider/value pairs ending with a div set to 0 * @lock: shared register lock for this clock */ -struct clk *clk_register_divider_table(struct device *dev, const char *name, +struct clk_core *clk_register_divider_table(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, const struct clk_div_table *table, diff --git a/drivers/clk/clk-efm32gg.c b/drivers/clk/clk-efm32gg.c index bac2ddf..3240887 100644 --- a/drivers/clk/clk-efm32gg.c +++ b/drivers/clk/clk-efm32gg.c @@ -6,7 +6,6 @@ * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. */ -#include #include #include #include @@ -16,7 +15,7 @@ #define CMU_HFPERCLKEN0 0x44 -static struct clk *clk[37]; +static struct clk_core *clk[37]; static struct clk_onecell_data clk_data = { .clks = clk, .clk_num = ARRAY_SIZE(clk), diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c index d9e3f67..ae1fef0 100644 --- a/drivers/clk/clk-fixed-factor.c +++ b/drivers/clk/clk-fixed-factor.c @@ -65,13 +65,13 @@ struct clk_ops clk_fixed_factor_ops = { }; EXPORT_SYMBOL_GPL(clk_fixed_factor_ops); -struct clk *clk_register_fixed_factor(struct device *dev, const char *name, +struct clk_core *clk_register_fixed_factor(struct device *dev, const char *name, const char *parent_name, unsigned long flags, unsigned int mult, unsigned int div) { struct clk_fixed_factor *fix; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; fix = kmalloc(sizeof(*fix), GFP_KERNEL); if (!fix) { @@ -105,7 +105,7 @@ EXPORT_SYMBOL_GPL(clk_register_fixed_factor); */ void __init of_fixed_factor_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; const char *parent_name; u32 div, mult; diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c index 0fc56ab..56c0ced 100644 --- a/drivers/clk/clk-fixed-rate.c +++ b/drivers/clk/clk-fixed-rate.c @@ -56,12 +56,12 @@ EXPORT_SYMBOL_GPL(clk_fixed_rate_ops); * @fixed_rate: non-adjustable clock rate * @fixed_accuracy: non-adjustable clock rate */ -struct clk *clk_register_fixed_rate_with_accuracy(struct device *dev, +struct clk_core *clk_register_fixed_rate_with_accuracy(struct device *dev, const char *name, const char *parent_name, unsigned long flags, unsigned long fixed_rate, unsigned long fixed_accuracy) { struct clk_fixed_rate *fixed; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* allocate fixed-rate clock */ @@ -99,7 +99,7 @@ EXPORT_SYMBOL_GPL(clk_register_fixed_rate_with_accuracy); * @flags: framework-specific flags * @fixed_rate: non-adjustable clock rate */ -struct clk *clk_register_fixed_rate(struct device *dev, const char *name, +struct clk_core *clk_register_fixed_rate(struct device *dev, const char *name, const char *parent_name, unsigned long flags, unsigned long fixed_rate) { @@ -114,7 +114,7 @@ EXPORT_SYMBOL_GPL(clk_register_fixed_rate); */ void of_fixed_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; u32 rate; u32 accuracy = 0; diff --git a/drivers/clk/clk-fractional-divider.c b/drivers/clk/clk-fractional-divider.c index ede685c..8104683 100644 --- a/drivers/clk/clk-fractional-divider.c +++ b/drivers/clk/clk-fractional-divider.c @@ -96,14 +96,14 @@ const struct clk_ops clk_fractional_divider_ops = { }; EXPORT_SYMBOL_GPL(clk_fractional_divider_ops); -struct clk *clk_register_fractional_divider(struct device *dev, +struct clk_core *clk_register_fractional_divider(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth, u8 clk_divider_flags, spinlock_t *lock) { struct clk_fractional_divider *fd; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; fd = kzalloc(sizeof(*fd), GFP_KERNEL); if (!fd) { diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c index 4a58c55..429d302 100644 --- a/drivers/clk/clk-gate.c +++ b/drivers/clk/clk-gate.c @@ -118,13 +118,13 @@ EXPORT_SYMBOL_GPL(clk_gate_ops); * @clk_gate_flags: gate-specific flags for this clock * @lock: shared register lock for this clock */ -struct clk *clk_register_gate(struct device *dev, const char *name, +struct clk_core *clk_register_gate(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 bit_idx, u8 clk_gate_flags, spinlock_t *lock) { struct clk_gate *gate; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (clk_gate_flags & CLK_GATE_HIWORD_MASK) { diff --git a/drivers/clk/clk-highbank.c b/drivers/clk/clk-highbank.c index 2e7e9d9..cad2fba 100644 --- a/drivers/clk/clk-highbank.c +++ b/drivers/clk/clk-highbank.c @@ -271,10 +271,10 @@ static const struct clk_ops periclk_ops = { .set_rate = clk_periclk_set_rate, }; -static __init struct clk *hb_clk_init(struct device_node *node, const struct clk_ops *ops) +static __init struct clk_core *hb_clk_init(struct device_node *node, const struct clk_ops *ops) { u32 reg; - struct clk *clk; + struct clk_core *clk; struct hb_clk *hb_clk; const char *clk_name = node->name; const char *parent_name; @@ -330,8 +330,8 @@ CLK_OF_DECLARE(hb_a9periph, "calxeda,hb-a9periph-clock", hb_a9periph_init); static void __init hb_a9bus_init(struct device_node *node) { - struct clk *clk = hb_clk_init(node, &a9bclk_ops); - clk_prepare_enable(clk); + struct clk_core *clk = hb_clk_init(node, &a9bclk_ops); + clk_provider_prepare_enable(clk); } CLK_OF_DECLARE(hb_a9bus, "calxeda,hb-a9bus-clock", hb_a9bus_init); diff --git a/drivers/clk/clk-ls1x.c b/drivers/clk/clk-ls1x.c index f20b750..796043c 100644 --- a/drivers/clk/clk-ls1x.c +++ b/drivers/clk/clk-ls1x.c @@ -48,11 +48,11 @@ static const struct clk_ops ls1x_pll_clk_ops = { .recalc_rate = ls1x_pll_recalc_rate, }; -static struct clk * __init clk_register_pll(struct device *dev, +static struct clk_core * __init clk_register_pll(struct device *dev, const char *name, const char *parent_name, unsigned long flags) { struct clk_hw *hw; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* allocate the divider */ @@ -80,32 +80,32 @@ static struct clk * __init clk_register_pll(struct device *dev, void __init ls1x_clk_init(void) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_pll(NULL, "pll_clk", NULL, CLK_IS_ROOT); - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); clk = clk_register_divider(NULL, "cpu_clk", "pll_clk", CLK_SET_RATE_PARENT, LS1X_CLK_PLL_DIV, DIV_CPU_SHIFT, DIV_CPU_WIDTH, CLK_DIVIDER_ONE_BASED, &_lock); - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); clk_register_clkdev(clk, "cpu", NULL); clk = clk_register_divider(NULL, "dc_clk", "pll_clk", CLK_SET_RATE_PARENT, LS1X_CLK_PLL_DIV, DIV_DC_SHIFT, DIV_DC_WIDTH, CLK_DIVIDER_ONE_BASED, &_lock); - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); clk_register_clkdev(clk, "dc", NULL); clk = clk_register_divider(NULL, "ahb_clk", "pll_clk", CLK_SET_RATE_PARENT, LS1X_CLK_PLL_DIV, DIV_DDR_SHIFT, DIV_DDR_WIDTH, CLK_DIVIDER_ONE_BASED, &_lock); - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); clk_register_clkdev(clk, "ahb", NULL); clk_register_clkdev(clk, "stmmaceth", NULL); clk = clk_register_fixed_factor(NULL, "apb_clk", "ahb_clk", 0, 1, 2); - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); clk_register_clkdev(clk, "apb", NULL); clk_register_clkdev(clk, "serial8250", NULL); } diff --git a/drivers/clk/clk-max77686.c b/drivers/clk/clk-max77686.c index 3d7e8dd..42fa43a 100644 --- a/drivers/clk/clk-max77686.c +++ b/drivers/clk/clk-max77686.c @@ -112,10 +112,10 @@ static struct clk_init_data max77686_clks_init[MAX77686_CLKS_NUM] = { }, }; -static struct clk *max77686_clk_register(struct device *dev, +static struct clk_core *max77686_clk_register(struct device *dev, struct max77686_clk *max77686) { - struct clk *clk; + struct clk_core *clk; struct clk_hw *hw = &max77686->hw; clk = clk_register(dev, hw); @@ -138,10 +138,10 @@ static int max77686_clk_probe(struct platform_device *pdev) { struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct max77686_clk *max77686_clks[MAX77686_CLKS_NUM]; - struct clk **clocks; + struct clk_core **clocks; int i, ret; - clocks = devm_kzalloc(&pdev->dev, sizeof(struct clk *) + clocks = devm_kzalloc(&pdev->dev, sizeof(struct clk_core *) * MAX77686_CLKS_NUM, GFP_KERNEL); if (!clocks) return -ENOMEM; @@ -203,7 +203,7 @@ err_clocks: static int max77686_clk_remove(struct platform_device *pdev) { struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); - struct clk **clocks = platform_get_drvdata(pdev); + struct clk_core **clocks = platform_get_drvdata(pdev); int i; if (iodev->dev->of_node) diff --git a/drivers/clk/clk-moxart.c b/drivers/clk/clk-moxart.c index 30a3b69..c503c09 100644 --- a/drivers/clk/clk-moxart.c +++ b/drivers/clk/clk-moxart.c @@ -18,7 +18,7 @@ void __init moxart_of_pll_clk_init(struct device_node *node) { static void __iomem *base; - struct clk *clk, *ref_clk; + struct clk_core *clk, *ref_clk; unsigned int mul; const char *name = node->name; const char *parent_name; @@ -35,7 +35,7 @@ void __init moxart_of_pll_clk_init(struct device_node *node) mul = readl(base + 0x30) >> 3 & 0x3f; iounmap(base); - ref_clk = of_clk_get(node, 0); + ref_clk = of_clk_provider_get(node, 0); if (IS_ERR(ref_clk)) { pr_err("%s: of_clk_get failed\n", node->full_name); return; @@ -56,7 +56,7 @@ CLK_OF_DECLARE(moxart_pll_clock, "moxa,moxart-pll-clock", void __init moxart_of_apb_clk_init(struct device_node *node) { static void __iomem *base; - struct clk *clk, *pll_clk; + struct clk_core *clk, *pll_clk; unsigned int div, val; unsigned int div_idx[] = { 2, 3, 4, 6, 8}; const char *name = node->name; @@ -78,7 +78,7 @@ void __init moxart_of_apb_clk_init(struct device_node *node) val = 0; div = div_idx[val] * 2; - pll_clk = of_clk_get(node, 0); + pll_clk = of_clk_provider_get(node, 0); if (IS_ERR(pll_clk)) { pr_err("%s: of_clk_get failed\n", node->full_name); return; diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index 4f96ff3..538c455 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c @@ -10,7 +10,6 @@ * Simple multiplexer clock implementation */ -#include #include #include #include @@ -113,13 +112,13 @@ const struct clk_ops clk_mux_ro_ops = { }; EXPORT_SYMBOL_GPL(clk_mux_ro_ops); -struct clk *clk_register_mux_table(struct device *dev, const char *name, +struct clk_core *clk_register_mux_table(struct device *dev, const char *name, const char **parent_names, u8 num_parents, unsigned long flags, void __iomem *reg, u8 shift, u32 mask, u8 clk_mux_flags, u32 *table, spinlock_t *lock) { struct clk_mux *mux; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; u8 width = 0; @@ -165,7 +164,7 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name, } EXPORT_SYMBOL_GPL(clk_register_mux_table); -struct clk *clk_register_mux(struct device *dev, const char *name, +struct clk_core *clk_register_mux(struct device *dev, const char *name, const char **parent_names, u8 num_parents, unsigned long flags, void __iomem *reg, u8 shift, u8 width, u8 clk_mux_flags, spinlock_t *lock) diff --git a/drivers/clk/clk-nomadik.c b/drivers/clk/clk-nomadik.c index 05e04ce..91855d3 100644 --- a/drivers/clk/clk-nomadik.c +++ b/drivers/clk/clk-nomadik.c @@ -8,7 +8,6 @@ #define pr_fmt(fmt) "Nomadik SRC clocks: " fmt #include -#include #include #include #include @@ -254,11 +253,11 @@ static const struct clk_ops pll_clk_ops = { .recalc_rate = pll_clk_recalc_rate, }; -static struct clk * __init +static struct clk_core * __init pll_clk_register(struct device *dev, const char *name, const char *parent_name, u32 id) { - struct clk *clk; + struct clk_core *clk; struct clk_pll *pll; struct clk_init_data init; @@ -346,11 +345,11 @@ static const struct clk_ops src_clk_ops = { .recalc_rate = src_clk_recalc_rate, }; -static struct clk * __init +static struct clk_core * __init src_clk_register(struct device *dev, const char *name, const char *parent_name, u8 id) { - struct clk *clk; + struct clk_core *clk; struct clk_src *sclk; struct clk_init_data init; @@ -510,7 +509,7 @@ module_init(nomadik_src_clk_init_debugfs); static void __init of_nomadik_pll_setup(struct device_node *np) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; u32 pll_id; @@ -533,7 +532,7 @@ CLK_OF_DECLARE(nomadik_pll_clk, static void __init of_nomadik_hclk_setup(struct device_node *np) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; @@ -557,7 +556,7 @@ CLK_OF_DECLARE(nomadik_hclk_clk, static void __init of_nomadik_src_clk_setup(struct device_node *np) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; u32 clk_id; diff --git a/drivers/clk/clk-nspire.c b/drivers/clk/clk-nspire.c index a378db7..e9c43f4 100644 --- a/drivers/clk/clk-nspire.c +++ b/drivers/clk/clk-nspire.c @@ -69,7 +69,7 @@ static void __init nspire_ahbdiv_setup(struct device_node *node, { u32 val; void __iomem *io; - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; const char *parent_name; struct nspire_clk_info info; @@ -111,7 +111,7 @@ static void __init nspire_clk_setup(struct device_node *node, { u32 val; void __iomem *io; - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; struct nspire_clk_info info; diff --git a/drivers/clk/clk-palmas.c b/drivers/clk/clk-palmas.c index 781630e..8febd8c 100644 --- a/drivers/clk/clk-palmas.c +++ b/drivers/clk/clk-palmas.c @@ -17,7 +17,6 @@ * General Public License for more details. */ -#include #include #include #include @@ -42,7 +41,7 @@ struct palmas_clk32k_desc { struct palmas_clock_info { struct device *dev; - struct clk *clk; + struct clk_core *clk; struct clk_hw hw; struct palmas *palmas; struct palmas_clk32k_desc *clk_desc; @@ -219,7 +218,7 @@ static int palmas_clks_init_configure(struct palmas_clock_info *cinfo) } if (cinfo->ext_control_pin) { - ret = clk_prepare(cinfo->clk); + ret = clk_provider_prepare(cinfo->clk); if (ret < 0) { dev_err(cinfo->dev, "Clock prep failed, %d\n", ret); return ret; @@ -244,7 +243,7 @@ static int palmas_clks_probe(struct platform_device *pdev) struct palmas_clks_of_match_data *match_data; const struct of_device_id *match; struct palmas_clock_info *cinfo; - struct clk *clk; + struct clk_core *clk; int ret; match = of_match_device(palmas_clks_of_match, &pdev->dev); diff --git a/drivers/clk/clk-ppc-corenet.c b/drivers/clk/clk-ppc-corenet.c index 8e58edf..5619ee9 100644 --- a/drivers/clk/clk-ppc-corenet.c +++ b/drivers/clk/clk-ppc-corenet.c @@ -64,7 +64,7 @@ const struct clk_ops cmux_ops = { static void __init core_mux_init(struct device_node *np) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; struct cmux_clk *cmux_clk; struct device_node *node; @@ -150,7 +150,7 @@ static void __init core_pll_init(struct device_node *np) int i, rc, count; const char *clk_name, *parent_name; struct clk_onecell_data *onecell_data; - struct clk **subclks; + struct clk_core **subclks; void __iomem *base; base = of_iomap(np, 0); @@ -184,7 +184,7 @@ static void __init core_pll_init(struct device_node *np) /* output clock number per PLL */ clocks_per_pll = count; - subclks = kzalloc(sizeof(struct clk *) * count, GFP_KERNEL); + subclks = kzalloc(sizeof(struct clk_core *) * count, GFP_KERNEL); if (!subclks) { pr_err("%s: could not allocate subclks\n", __func__); goto err_map; @@ -246,7 +246,7 @@ err_map: static void __init sysclk_init(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; struct device_node *np = of_get_parent(node); u32 rate; diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c index b7797fb..17fc7e1 100644 --- a/drivers/clk/clk-s2mps11.c +++ b/drivers/clk/clk-s2mps11.c @@ -29,7 +29,7 @@ #define s2mps11_name(a) (a->hw.init->name) -static struct clk **clk_table; +static struct clk_core **clk_table; static struct clk_onecell_data clk_data; enum { @@ -43,7 +43,7 @@ struct s2mps11_clk { struct sec_pmic_dev *iodev; struct device_node *clk_np; struct clk_hw hw; - struct clk *clk; + struct clk_core *clk; struct clk_lookup *lookup; u32 mask; unsigned int reg; @@ -174,7 +174,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) s2mps11_clk = s2mps11_clks; - clk_table = devm_kzalloc(&pdev->dev, sizeof(struct clk *) * + clk_table = devm_kzalloc(&pdev->dev, sizeof(struct clk_core *) * S2MPS11_CLKS_NUM, GFP_KERNEL); if (!clk_table) return -ENOMEM; diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c index 3b2a66f..57c9eb5 100644 --- a/drivers/clk/clk-si5351.c +++ b/drivers/clk/clk-si5351.c @@ -56,10 +56,10 @@ struct si5351_driver_data { struct regmap *regmap; struct clk_onecell_data onecell; - struct clk *pxtal; + struct clk_core *pxtal; const char *pxtal_name; struct clk_hw xtal; - struct clk *pclkin; + struct clk_core *pclkin; const char *pclkin_name; struct clk_hw clkin; @@ -1128,12 +1128,12 @@ static int si5351_dt_parse(struct i2c_client *client, if (!pdata) return -ENOMEM; - pdata->clk_xtal = of_clk_get(np, 0); + pdata->clk_xtal = of_clk_provider_get(np, 0); if (!IS_ERR(pdata->clk_xtal)) - clk_put(pdata->clk_xtal); - pdata->clk_clkin = of_clk_get(np, 1); + __clk_put(pdata->clk_xtal); + pdata->clk_clkin = of_clk_provider_get(np, 1); if (!IS_ERR(pdata->clk_clkin)) - clk_put(pdata->clk_clkin); + __clk_put(pdata->clk_clkin); /* * property silabs,pll-source : , [<..>] @@ -1306,7 +1306,7 @@ static int si5351_i2c_probe(struct i2c_client *client, struct si5351_platform_data *pdata; struct si5351_driver_data *drvdata; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; const char *parent_names[4]; u8 num_parents, num_clocks; int ret, n; @@ -1545,7 +1545,8 @@ static int si5351_i2c_probe(struct i2c_client *client, /* set initial clkout rate */ if (pdata->clkout[n].rate != 0) { int ret; - ret = clk_set_rate(clk, pdata->clkout[n].rate); + ret = clk_provider_set_rate(clk, + pdata->clkout[n].rate); if (ret != 0) { dev_err(&client->dev, "Cannot set rate : %d\n", ret); diff --git a/drivers/clk/clk-si570.c b/drivers/clk/clk-si570.c index fc167b3..f0eec4e 100644 --- a/drivers/clk/clk-si570.c +++ b/drivers/clk/clk-si570.c @@ -407,7 +407,7 @@ static int si570_probe(struct i2c_client *client, { struct clk_si570 *data; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; u32 initial_fout, factory_fout, stability; int err; enum clk_si570_variant variant = id->driver_data; @@ -476,7 +476,7 @@ static int si570_probe(struct i2c_client *client, /* Read the requested initial output frequency from device tree */ if (!of_property_read_u32(client->dev.of_node, "clock-frequency", &initial_fout)) { - err = clk_set_rate(clk, initial_fout); + err = clk_provider_set_rate(clk, initial_fout); if (err) { of_clk_del_provider(client->dev.of_node); return err; diff --git a/drivers/clk/clk-twl6040.c b/drivers/clk/clk-twl6040.c index 1ada79a..d24a8a2 100644 --- a/drivers/clk/clk-twl6040.c +++ b/drivers/clk/clk-twl6040.c @@ -20,7 +20,6 @@ * */ -#include #include #include #include @@ -31,7 +30,7 @@ struct twl6040_clk { struct twl6040 *twl6040; struct device *dev; struct clk_hw mcpdm_fclk; - struct clk *clk; + struct clk_core *clk; int enabled; }; diff --git a/drivers/clk/clk-u300.c b/drivers/clk/clk-u300.c index 406bfc1..392bcbf 100644 --- a/drivers/clk/clk-u300.c +++ b/drivers/clk/clk-u300.c @@ -5,7 +5,6 @@ * Author: Linus Walleij * Author: Jonas Aaberg */ -#include #include #include #include @@ -688,7 +687,7 @@ static const struct clk_ops syscon_clk_ops = { .set_rate = syscon_clk_set_rate, }; -static struct clk * __init +static struct clk_core * __init syscon_clk_register(struct device *dev, const char *name, const char *parent_name, unsigned long flags, bool hw_ctrld, @@ -696,7 +695,7 @@ syscon_clk_register(struct device *dev, const char *name, void __iomem *en_reg, u8 en_bit, u16 clk_val) { - struct clk *clk; + struct clk_core *clk; struct clk_syscon *sclk; struct clk_init_data init; @@ -867,7 +866,7 @@ static struct u300_clock const u300_clk_lookup[] __initconst = { static void __init of_u300_syscon_clk_init(struct device_node *np) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; void __iomem *res_reg; @@ -1110,11 +1109,11 @@ static const struct clk_ops mclk_ops = { .set_rate = mclk_clk_set_rate, }; -static struct clk * __init +static struct clk_core * __init mclk_clk_register(struct device *dev, const char *name, const char *parent_name, bool is_mspro) { - struct clk *clk; + struct clk_core *clk; struct clk_mclk *mclk; struct clk_init_data init; @@ -1141,7 +1140,7 @@ mclk_clk_register(struct device *dev, const char *name, static void __init of_u300_syscon_mclk_init(struct device_node *np) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; diff --git a/drivers/clk/clk-vt8500.c b/drivers/clk/clk-vt8500.c index 37e9288..e5fb933 100644 --- a/drivers/clk/clk-vt8500.c +++ b/drivers/clk/clk-vt8500.c @@ -232,7 +232,7 @@ static const struct clk_ops vt8500_gated_divisor_clk_ops = { static __init void vtwm_device_clk_init(struct device_node *node) { u32 en_reg, div_reg; - struct clk *clk; + struct clk_core *clk; struct clk_device *dev_clk; const char *clk_name = node->name; const char *parent_name; @@ -650,7 +650,7 @@ static const struct clk_ops vtwm_pll_ops = { static __init void vtwm_pll_clk_init(struct device_node *node, int pll_type) { u32 reg; - struct clk *clk; + struct clk_core *clk; struct clk_pll *pll_clk; const char *clk_name = node->name; const char *parent_name; diff --git a/drivers/clk/clk-wm831x.c b/drivers/clk/clk-wm831x.c index b131041..84ce873 100644 --- a/drivers/clk/clk-wm831x.c +++ b/drivers/clk/clk-wm831x.c @@ -12,7 +12,6 @@ * */ -#include #include #include #include @@ -25,9 +24,9 @@ struct wm831x_clk { struct clk_hw xtal_hw; struct clk_hw fll_hw; struct clk_hw clkout_hw; - struct clk *xtal; - struct clk *fll; - struct clk *clkout; + struct clk_core *xtal; + struct clk_core *fll; + struct clk_core *clkout; bool xtal_ena; }; diff --git a/drivers/clk/clk-xgene.c b/drivers/clk/clk-xgene.c index dd8a62d..ce3ed34 100644 --- a/drivers/clk/clk-xgene.c +++ b/drivers/clk/clk-xgene.c @@ -124,13 +124,13 @@ const struct clk_ops xgene_clk_pll_ops = { .recalc_rate = xgene_clk_pll_recalc_rate, }; -static struct clk *xgene_register_clk_pll(struct device *dev, +static struct clk_core *xgene_register_clk_pll(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u32 pll_offset, u32 type, spinlock_t *lock) { struct xgene_clk_pll *apmclk; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* allocate the APM clock structure */ @@ -166,7 +166,7 @@ static struct clk *xgene_register_clk_pll(struct device *dev, static void xgene_pllclk_init(struct device_node *np, enum xgene_pll_type pll_type) { const char *clk_name = np->full_name; - struct clk *clk; + struct clk_core *clk; void *reg; reg = of_iomap(np, 0); @@ -395,12 +395,12 @@ const struct clk_ops xgene_clk_ops = { .round_rate = xgene_clk_round_rate, }; -static struct clk *xgene_register_clk(struct device *dev, +static struct clk_core *xgene_register_clk(struct device *dev, const char *name, const char *parent_name, struct xgene_dev_parameters *parameters, spinlock_t *lock) { struct xgene_clk *apmclk; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; int rc; @@ -442,7 +442,7 @@ static struct clk *xgene_register_clk(struct device *dev, static void __init xgene_devclk_init(struct device_node *np) { const char *clk_name = np->full_name; - struct clk *clk; + struct clk_core *clk; struct resource res; int rc; struct xgene_dev_parameters parameters; diff --git a/drivers/clk/clk.h b/drivers/clk/clk.h index c798138..d278572 100644 --- a/drivers/clk/clk.h +++ b/drivers/clk/clk.h @@ -10,8 +10,8 @@ */ #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) -struct clk *of_clk_get_by_clkspec(struct of_phandle_args *clkspec); -struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec); +struct clk_core *of_clk_get_by_clkspec(struct of_phandle_args *clkspec); +struct clk_core *__of_clk_get_from_provider(struct of_phandle_args *clkspec); void of_clk_lock(void); void of_clk_unlock(void); #endif diff --git a/drivers/clk/hisilicon/clk-hi3620.c b/drivers/clk/hisilicon/clk-hi3620.c index 339945d..26f11a3 100644 --- a/drivers/clk/hisilicon/clk-hi3620.c +++ b/drivers/clk/hisilicon/clk-hi3620.c @@ -31,7 +31,6 @@ #include #include #include -#include #include @@ -296,7 +295,7 @@ static unsigned long mmc_clk_recalc_rate(struct clk_hw *hw, static long mmc_clk_determine_rate(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_p) + struct clk_core **best_parent_p) { struct clk_mmc *mclk = to_mmc(hw); unsigned long best = 0; @@ -427,11 +426,11 @@ static struct clk_ops clk_mmc_ops = { .recalc_rate = mmc_clk_recalc_rate, }; -static struct clk *hisi_register_clk_mmc(struct hisi_mmc_clock *mmc_clk, +static struct clk_core *hisi_register_clk_mmc(struct hisi_mmc_clock *mmc_clk, void __iomem *base, struct device_node *np) { struct clk_mmc *mclk; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; mclk = kzalloc(sizeof(*mclk), GFP_KERNEL); @@ -487,7 +486,7 @@ static void __init hi3620_mmc_clk_init(struct device_node *node) if (WARN_ON(!clk_data)) return; - clk_data->clks = kzalloc(sizeof(struct clk *) * num, GFP_KERNEL); + clk_data->clks = kzalloc(sizeof(struct clk_core *) * num, GFP_KERNEL); if (!clk_data->clks) { pr_err("%s: fail to allocate mmc clk\n", __func__); return; diff --git a/drivers/clk/hisilicon/clk-hip04.c b/drivers/clk/hisilicon/clk-hip04.c index 132b57a..e8403c0 100644 --- a/drivers/clk/hisilicon/clk-hip04.c +++ b/drivers/clk/hisilicon/clk-hip04.c @@ -30,7 +30,6 @@ #include #include #include -#include #include diff --git a/drivers/clk/hisilicon/clk.c b/drivers/clk/hisilicon/clk.c index a078e84..00b7c9c 100644 --- a/drivers/clk/hisilicon/clk.c +++ b/drivers/clk/hisilicon/clk.c @@ -32,7 +32,6 @@ #include #include #include -#include #include "clk.h" @@ -42,7 +41,7 @@ struct hisi_clock_data __init *hisi_clk_init(struct device_node *np, int nr_clks) { struct hisi_clock_data *clk_data; - struct clk **clk_table; + struct clk_core **clk_table; void __iomem *base; if (np) { @@ -63,7 +62,7 @@ struct hisi_clock_data __init *hisi_clk_init(struct device_node *np, } clk_data->base = base; - clk_table = kzalloc(sizeof(struct clk *) * nr_clks, GFP_KERNEL); + clk_table = kzalloc(sizeof(struct clk_core *) * nr_clks, GFP_KERNEL); if (!clk_table) { pr_err("%s: could not allocate clock lookup table\n", __func__); goto err_data; @@ -81,7 +80,7 @@ err: void __init hisi_clk_register_fixed_rate(struct hisi_fixed_rate_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; int i; for (i = 0; i < nums; i++) { @@ -102,7 +101,7 @@ void __init hisi_clk_register_fixed_factor(struct hisi_fixed_factor_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; int i; for (i = 0; i < nums; i++) { @@ -122,7 +121,7 @@ void __init hisi_clk_register_fixed_factor(struct hisi_fixed_factor_clock *clks, void __init hisi_clk_register_mux(struct hisi_mux_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; void __iomem *base = data->base; int i; @@ -151,7 +150,7 @@ void __init hisi_clk_register_mux(struct hisi_mux_clock *clks, void __init hisi_clk_register_divider(struct hisi_divider_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; void __iomem *base = data->base; int i; @@ -180,7 +179,7 @@ void __init hisi_clk_register_divider(struct hisi_divider_clock *clks, void __init hisi_clk_register_gate(struct hisi_gate_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; void __iomem *base = data->base; int i; @@ -208,7 +207,7 @@ void __init hisi_clk_register_gate(struct hisi_gate_clock *clks, void __init hisi_clk_register_gate_sep(struct hisi_gate_clock *clks, int nums, struct hisi_clock_data *data) { - struct clk *clk; + struct clk_core *clk; void __iomem *base = data->base; int i; diff --git a/drivers/clk/hisilicon/clk.h b/drivers/clk/hisilicon/clk.h index 31083ff..f7fc4b9 100644 --- a/drivers/clk/hisilicon/clk.h +++ b/drivers/clk/hisilicon/clk.h @@ -90,7 +90,7 @@ struct hisi_gate_clock { const char *alias; }; -struct clk *hisi_register_clkgate_sep(struct device *, const char *, +struct clk_core *hisi_register_clkgate_sep(struct device *, const char *, const char *, unsigned long, void __iomem *, u8, u8, spinlock_t *); diff --git a/drivers/clk/hisilicon/clkgate-separated.c b/drivers/clk/hisilicon/clkgate-separated.c index b03d5a7..5db5ba6 100644 --- a/drivers/clk/hisilicon/clkgate-separated.c +++ b/drivers/clk/hisilicon/clkgate-separated.c @@ -28,7 +28,6 @@ #include #include #include -#include #include "clk.h" @@ -96,14 +95,14 @@ static struct clk_ops clkgate_separated_ops = { .is_enabled = clkgate_separated_is_enabled, }; -struct clk *hisi_register_clkgate_sep(struct device *dev, const char *name, +struct clk_core *hisi_register_clkgate_sep(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 bit_idx, u8 clk_gate_flags, spinlock_t *lock) { struct clkgate_separated *sclk; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; sclk = kzalloc(sizeof(*sclk), GFP_KERNEL); diff --git a/drivers/clk/keystone/gate.c b/drivers/clk/keystone/gate.c index 86f1e36..6bb211a 100644 --- a/drivers/clk/keystone/gate.c +++ b/drivers/clk/keystone/gate.c @@ -10,7 +10,6 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ -#include #include #include #include @@ -163,7 +162,7 @@ static const struct clk_ops clk_psc_ops = { * @psc_data: platform data to configure this clock * @lock: spinlock used by this clock */ -static struct clk *clk_register_psc(struct device *dev, +static struct clk_core *clk_register_psc(struct device *dev, const char *name, const char *parent_name, struct clk_psc_data *psc_data, @@ -171,7 +170,7 @@ static struct clk *clk_register_psc(struct device *dev, { struct clk_init_data init; struct clk_psc *psc; - struct clk *clk; + struct clk_core *clk; psc = kzalloc(sizeof(*psc), GFP_KERNEL); if (!psc) @@ -204,7 +203,7 @@ static void __init of_psc_clk_init(struct device_node *node, spinlock_t *lock) const char *clk_name = node->name; const char *parent_name; struct clk_psc_data *data; - struct clk *clk; + struct clk_core *clk; int i; data = kzalloc(sizeof(*data), GFP_KERNEL); diff --git a/drivers/clk/keystone/pll.c b/drivers/clk/keystone/pll.c index 0dd8a4b..2e31895 100644 --- a/drivers/clk/keystone/pll.c +++ b/drivers/clk/keystone/pll.c @@ -10,7 +10,6 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ -#include #include #include #include @@ -116,14 +115,14 @@ static const struct clk_ops clk_pll_ops = { .recalc_rate = clk_pllclk_recalc, }; -static struct clk *clk_register_pll(struct device *dev, +static struct clk_core *clk_register_pll(struct device *dev, const char *name, const char *parent_name, struct clk_pll_data *pll_data) { struct clk_init_data init; struct clk_pll *pll; - struct clk *clk; + struct clk_core *clk; pll = kzalloc(sizeof(*pll), GFP_KERNEL); if (!pll) @@ -158,7 +157,7 @@ static void __init _of_pll_clk_init(struct device_node *node, bool pllctrl) { struct clk_pll_data *pll_data; const char *parent_name; - struct clk *clk; + struct clk_core *clk; int i; pll_data = kzalloc(sizeof(*pll_data), GFP_KERNEL); @@ -239,7 +238,7 @@ static void __init of_pll_div_clk_init(struct device_node *node) const char *parent_name; void __iomem *reg; u32 shift, mask; - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; of_property_read_string(node, "clock-output-names", &clk_name); @@ -282,7 +281,7 @@ static void __init of_pll_mux_clk_init(struct device_node *node) { void __iomem *reg; u32 shift, mask; - struct clk *clk; + struct clk_core *clk; const char *parents[2]; const char *clk_name = node->name; diff --git a/drivers/clk/mmp/clk-apbc.c b/drivers/clk/mmp/clk-apbc.c index d14120e..4a1de49 100644 --- a/drivers/clk/mmp/clk-apbc.c +++ b/drivers/clk/mmp/clk-apbc.c @@ -10,7 +10,6 @@ */ #include -#include #include #include #include @@ -120,12 +119,12 @@ struct clk_ops clk_apbc_ops = { .unprepare = clk_apbc_unprepare, }; -struct clk *mmp_clk_register_apbc(const char *name, const char *parent_name, +struct clk_core *mmp_clk_register_apbc(const char *name, const char *parent_name, void __iomem *base, unsigned int delay, unsigned int apbc_flags, spinlock_t *lock) { struct clk_apbc *apbc; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; apbc = kzalloc(sizeof(*apbc), GFP_KERNEL); diff --git a/drivers/clk/mmp/clk-apmu.c b/drivers/clk/mmp/clk-apmu.c index abe182b..cbc0712 100644 --- a/drivers/clk/mmp/clk-apmu.c +++ b/drivers/clk/mmp/clk-apmu.c @@ -10,7 +10,6 @@ */ #include -#include #include #include #include @@ -66,11 +65,11 @@ struct clk_ops clk_apmu_ops = { .disable = clk_apmu_disable, }; -struct clk *mmp_clk_register_apmu(const char *name, const char *parent_name, +struct clk_core *mmp_clk_register_apmu(const char *name, const char *parent_name, void __iomem *base, u32 enable_mask, spinlock_t *lock) { struct clk_apmu *apmu; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; apmu = kzalloc(sizeof(*apmu), GFP_KERNEL); diff --git a/drivers/clk/mmp/clk-frac.c b/drivers/clk/mmp/clk-frac.c index 23a56f5..0386cdd 100644 --- a/drivers/clk/mmp/clk-frac.c +++ b/drivers/clk/mmp/clk-frac.c @@ -116,14 +116,14 @@ static struct clk_ops clk_factor_ops = { .set_rate = clk_factor_set_rate, }; -struct clk *mmp_clk_register_factor(const char *name, const char *parent_name, +struct clk_core *mmp_clk_register_factor(const char *name, const char *parent_name, unsigned long flags, void __iomem *base, struct clk_factor_masks *masks, struct clk_factor_tbl *ftbl, unsigned int ftbl_cnt) { struct clk_factor *factor; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; if (!masks) { pr_err("%s: must pass a clk_factor_mask\n", __func__); diff --git a/drivers/clk/mmp/clk-mmp2.c b/drivers/clk/mmp/clk-mmp2.c index b2721ca..98bd73f 100644 --- a/drivers/clk/mmp/clk-mmp2.c +++ b/drivers/clk/mmp/clk-mmp2.c @@ -77,8 +77,8 @@ static const char *ccic_parent[] = {"pll1_2", "pll1_16", "vctcxo"}; void __init mmp2_clk_init(void) { - struct clk *clk; - struct clk *vctcxo; + struct clk_core *clk; + struct clk_core *vctcxo; void __iomem *mpmu_base; void __iomem *apmu_base; void __iomem *apbc_base; @@ -192,7 +192,7 @@ void __init mmp2_clk_init(void) mpmu_base + MPMU_UART_PLL, &uart_factor_masks, uart_factor_tbl, ARRAY_SIZE(uart_factor_tbl)); - clk_set_rate(clk, 14745600); + clk_provider_set_rate(clk, 14745600); clk_register_clkdev(clk, "uart_pll", NULL); clk = mmp_clk_register_apbc("twsi0", "vctcxo", @@ -251,7 +251,7 @@ void __init mmp2_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); - clk_set_parent(clk, vctcxo); + clk_provider_set_parent(clk, vctcxo); clk_register_clkdev(clk, "uart_mux.0", NULL); clk = mmp_clk_register_apbc("uart0", "uart0_mux", @@ -262,7 +262,7 @@ void __init mmp2_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); - clk_set_parent(clk, vctcxo); + clk_provider_set_parent(clk, vctcxo); clk_register_clkdev(clk, "uart_mux.1", NULL); clk = mmp_clk_register_apbc("uart1", "uart1_mux", @@ -273,7 +273,7 @@ void __init mmp2_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART2, 4, 3, 0, &clk_lock); - clk_set_parent(clk, vctcxo); + clk_provider_set_parent(clk, vctcxo); clk_register_clkdev(clk, "uart_mux.2", NULL); clk = mmp_clk_register_apbc("uart2", "uart2_mux", @@ -284,7 +284,7 @@ void __init mmp2_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART3, 4, 3, 0, &clk_lock); - clk_set_parent(clk, vctcxo); + clk_provider_set_parent(clk, vctcxo); clk_register_clkdev(clk, "uart_mux.3", NULL); clk = mmp_clk_register_apbc("uart3", "uart3_mux", diff --git a/drivers/clk/mmp/clk-pxa168.c b/drivers/clk/mmp/clk-pxa168.c index 014396b..e4f50ab 100644 --- a/drivers/clk/mmp/clk-pxa168.c +++ b/drivers/clk/mmp/clk-pxa168.c @@ -68,8 +68,8 @@ static const char *ccic_phy_parent[] = {"pll1_6", "pll1_12"}; void __init pxa168_clk_init(void) { - struct clk *clk; - struct clk *uart_pll; + struct clk_core *clk; + struct clk_core *uart_pll; void __iomem *mpmu_base; void __iomem *apmu_base; void __iomem *apbc_base; @@ -159,7 +159,7 @@ void __init pxa168_clk_init(void) mpmu_base + MPMU_UART_PLL, &uart_factor_masks, uart_factor_tbl, ARRAY_SIZE(uart_factor_tbl)); - clk_set_rate(uart_pll, 14745600); + clk_provider_set_rate(uart_pll, 14745600); clk_register_clkdev(uart_pll, "uart_pll", NULL); clk = mmp_clk_register_apbc("twsi0", "pll1_13_1_5", @@ -202,7 +202,7 @@ void __init pxa168_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.0", NULL); clk = mmp_clk_register_apbc("uart0", "uart0_mux", @@ -213,7 +213,7 @@ void __init pxa168_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.1", NULL); clk = mmp_clk_register_apbc("uart1", "uart1_mux", @@ -224,7 +224,7 @@ void __init pxa168_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART2, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.2", NULL); clk = mmp_clk_register_apbc("uart2", "uart2_mux", diff --git a/drivers/clk/mmp/clk-pxa910.c b/drivers/clk/mmp/clk-pxa910.c index 9efc6a4..b5c215e 100644 --- a/drivers/clk/mmp/clk-pxa910.c +++ b/drivers/clk/mmp/clk-pxa910.c @@ -66,8 +66,8 @@ static const char *ccic_phy_parent[] = {"pll1_6", "pll1_12"}; void __init pxa910_clk_init(void) { - struct clk *clk; - struct clk *uart_pll; + struct clk_core *clk; + struct clk_core *uart_pll; void __iomem *mpmu_base; void __iomem *apmu_base; void __iomem *apbcp_base; @@ -164,7 +164,7 @@ void __init pxa910_clk_init(void) mpmu_base + MPMU_UART_PLL, &uart_factor_masks, uart_factor_tbl, ARRAY_SIZE(uart_factor_tbl)); - clk_set_rate(uart_pll, 14745600); + clk_provider_set_rate(uart_pll, 14745600); clk_register_clkdev(uart_pll, "uart_pll", NULL); clk = mmp_clk_register_apbc("twsi0", "pll1_13_1_5", @@ -207,7 +207,7 @@ void __init pxa910_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.0", NULL); clk = mmp_clk_register_apbc("uart0", "uart0_mux", @@ -218,7 +218,7 @@ void __init pxa910_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.1", NULL); clk = mmp_clk_register_apbc("uart1", "uart1_mux", @@ -229,7 +229,7 @@ void __init pxa910_clk_init(void) ARRAY_SIZE(uart_parent), CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, apbcp_base + APBCP_UART2, 4, 3, 0, &clk_lock); - clk_set_parent(clk, uart_pll); + clk_provider_set_parent(clk, uart_pll); clk_register_clkdev(clk, "uart_mux.2", NULL); clk = mmp_clk_register_apbc("uart2", "uart2_mux", diff --git a/drivers/clk/mmp/clk.h b/drivers/clk/mmp/clk.h index ab86dd4..1477e61 100644 --- a/drivers/clk/mmp/clk.h +++ b/drivers/clk/mmp/clk.h @@ -20,15 +20,15 @@ struct clk_factor_tbl { unsigned int den; }; -extern struct clk *mmp_clk_register_pll2(const char *name, +extern struct clk_core *mmp_clk_register_pll2(const char *name, const char *parent_name, unsigned long flags); -extern struct clk *mmp_clk_register_apbc(const char *name, +extern struct clk_core *mmp_clk_register_apbc(const char *name, const char *parent_name, void __iomem *base, unsigned int delay, unsigned int apbc_flags, spinlock_t *lock); -extern struct clk *mmp_clk_register_apmu(const char *name, +extern struct clk_core *mmp_clk_register_apmu(const char *name, const char *parent_name, void __iomem *base, u32 enable_mask, spinlock_t *lock); -extern struct clk *mmp_clk_register_factor(const char *name, +extern struct clk_core *mmp_clk_register_factor(const char *name, const char *parent_name, unsigned long flags, void __iomem *base, struct clk_factor_masks *masks, struct clk_factor_tbl *ftbl, unsigned int ftbl_cnt); diff --git a/drivers/clk/mvebu/clk-corediv.c b/drivers/clk/mvebu/clk-corediv.c index d1e5863..1be15c4 100644 --- a/drivers/clk/mvebu/clk-corediv.c +++ b/drivers/clk/mvebu/clk-corediv.c @@ -238,7 +238,7 @@ mvebu_corediv_clk_init(struct device_node *node, { struct clk_init_data init; struct clk_corediv *corediv; - struct clk **clks; + struct clk_core **clks; void __iomem *base; const char *parent_name; const char *clk_name; @@ -253,7 +253,7 @@ mvebu_corediv_clk_init(struct device_node *node, clk_data.clk_num = soc_desc->ndescs; /* clks holds the clock array */ - clks = kcalloc(clk_data.clk_num, sizeof(struct clk *), + clks = kcalloc(clk_data.clk_num, sizeof(struct clk_core *), GFP_KERNEL); if (WARN_ON(!clks)) goto err_unmap; diff --git a/drivers/clk/mvebu/clk-cpu.c b/drivers/clk/mvebu/clk-cpu.c index 3821a88..59a40c7 100644 --- a/drivers/clk/mvebu/clk-cpu.c +++ b/drivers/clk/mvebu/clk-cpu.c @@ -40,7 +40,7 @@ struct cpu_clk { void __iomem *pmu_dfs; }; -static struct clk **clks; +static struct clk_core **clks; static struct clk_onecell_data clk_data; @@ -195,8 +195,8 @@ static void __init of_cpu_clk_setup(struct device_node *node) for_each_node_by_type(dn, "cpu") { struct clk_init_data init; - struct clk *clk; - struct clk *parent_clk; + struct clk_core *clk; + struct clk_core *parent_clk; char *clk_name = kzalloc(5, GFP_KERNEL); int cpu, err; @@ -208,7 +208,7 @@ static void __init of_cpu_clk_setup(struct device_node *node) goto bail_out; sprintf(clk_name, "cpu%d", cpu); - parent_clk = of_clk_get(node, 0); + parent_clk = of_clk_provider_get(node, 0); cpuclk[cpu].parent_name = __clk_get_name(parent_clk); cpuclk[cpu].clk_name = clk_name; diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index 8145c4e..f6e14f8 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -13,7 +13,6 @@ */ #include -#include #include #include #include @@ -43,7 +42,7 @@ void __init mvebu_coreclk_setup(struct device_node *np, /* Allocate struct for TCLK, cpu clk, and core ratio clocks */ clk_data.clk_num = 2 + desc->num_ratios; - clk_data.clks = kzalloc(clk_data.clk_num * sizeof(struct clk *), + clk_data.clks = kzalloc(clk_data.clk_num * sizeof(struct clk_core *), GFP_KERNEL); if (WARN_ON(!clk_data.clks)) { iounmap(base); @@ -93,13 +92,13 @@ DEFINE_SPINLOCK(ctrl_gating_lock); struct clk_gating_ctrl { spinlock_t *lock; - struct clk **gates; + struct clk_core **gates; int num_gates; }; #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw) -static struct clk *clk_gating_get_src( +static struct clk_core *clk_gating_get_src( struct of_phandle_args *clkspec, void *data) { struct clk_gating_ctrl *ctrl = (struct clk_gating_ctrl *)data; @@ -121,7 +120,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np, const struct clk_gating_soc_desc *desc) { struct clk_gating_ctrl *ctrl; - struct clk *clk; + struct clk_core *clk; void __iomem *base; const char *default_parent = NULL; int n; @@ -130,10 +129,10 @@ void __init mvebu_clk_gating_setup(struct device_node *np, if (WARN_ON(!base)) return; - clk = of_clk_get(np, 0); + clk = of_clk_provider_get(np, 0); if (!IS_ERR(clk)) { default_parent = __clk_get_name(clk); - clk_put(clk); + __clk_put(clk); } ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL); @@ -148,7 +147,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np, n++; ctrl->num_gates = n; - ctrl->gates = kzalloc(ctrl->num_gates * sizeof(struct clk *), + ctrl->gates = kzalloc(ctrl->num_gates * sizeof(struct clk_core *), GFP_KERNEL); if (WARN_ON(!ctrl->gates)) goto gates_out; diff --git a/drivers/clk/mvebu/kirkwood.c b/drivers/clk/mvebu/kirkwood.c index 99550f2..5d0978b 100644 --- a/drivers/clk/mvebu/kirkwood.c +++ b/drivers/clk/mvebu/kirkwood.c @@ -242,7 +242,7 @@ struct clk_muxing_soc_desc { struct clk_muxing_ctrl { spinlock_t *lock; - struct clk **muxes; + struct clk_core **muxes; int num_muxes; }; @@ -258,7 +258,7 @@ static const struct clk_muxing_soc_desc kirkwood_mux_desc[] __initconst = { #define to_clk_mux(_hw) container_of(_hw, struct clk_mux, hw) -static struct clk *clk_muxing_get_src( +static struct clk_core *clk_muxing_get_src( struct of_phandle_args *clkspec, void *data) { struct clk_muxing_ctrl *ctrl = (struct clk_muxing_ctrl *)data; @@ -299,7 +299,7 @@ static void __init kirkwood_clk_muxing_setup(struct device_node *np, n++; ctrl->num_muxes = n; - ctrl->muxes = kcalloc(ctrl->num_muxes, sizeof(struct clk *), + ctrl->muxes = kcalloc(ctrl->num_muxes, sizeof(struct clk_core *), GFP_KERNEL); if (WARN_ON(!ctrl->muxes)) goto muxes_out; diff --git a/drivers/clk/mxs/clk-div.c b/drivers/clk/mxs/clk-div.c index 90e1da9..73ca1e8 100644 --- a/drivers/clk/mxs/clk-div.c +++ b/drivers/clk/mxs/clk-div.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -74,11 +73,11 @@ static struct clk_ops clk_div_ops = { .set_rate = clk_div_set_rate, }; -struct clk *mxs_clk_div(const char *name, const char *parent_name, +struct clk_core *mxs_clk_div(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, u8 busy) { struct clk_div *div; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; div = kzalloc(sizeof(*div), GFP_KERNEL); diff --git a/drivers/clk/mxs/clk-frac.c b/drivers/clk/mxs/clk-frac.c index e6aa6b5..65cedf8 100644 --- a/drivers/clk/mxs/clk-frac.c +++ b/drivers/clk/mxs/clk-frac.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -108,11 +107,11 @@ static struct clk_ops clk_frac_ops = { .set_rate = clk_frac_set_rate, }; -struct clk *mxs_clk_frac(const char *name, const char *parent_name, +struct clk_core *mxs_clk_frac(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, u8 busy) { struct clk_frac *frac; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; frac = kzalloc(sizeof(*frac), GFP_KERNEL); diff --git a/drivers/clk/mxs/clk-imx23.c b/drivers/clk/mxs/clk-imx23.c index 9fc9359..43f2d31 100644 --- a/drivers/clk/mxs/clk-imx23.c +++ b/drivers/clk/mxs/clk-imx23.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -94,7 +93,7 @@ enum imx23_clk { clk_max }; -static struct clk *clks[clk_max]; +static struct clk_core *clks[clk_max]; static struct clk_onecell_data clk_data; static enum imx23_clk clks_init_on[] __initdata = { @@ -171,7 +170,7 @@ static void __init mx23_clocks_init(struct device_node *np) of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clks[clks_init_on[i]]); + clk_provider_prepare_enable(clks[clks_init_on[i]]); } CLK_OF_DECLARE(imx23_clkctrl, "fsl,imx23-clkctrl", mx23_clocks_init); diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index a6c3501..e6d70ac 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -148,7 +147,7 @@ enum imx28_clk { clk_max }; -static struct clk *clks[clk_max]; +static struct clk_core *clks[clk_max]; static struct clk_onecell_data clk_data; static enum imx28_clk clks_init_on[] __initdata = { @@ -250,6 +249,6 @@ static void __init mx28_clocks_init(struct device_node *np) clk_register_clkdev(clks[enet_out], NULL, "enet_out"); for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) - clk_prepare_enable(clks[clks_init_on[i]]); + clk_provider_prepare_enable(clks[clks_init_on[i]]); } CLK_OF_DECLARE(imx28_clkctrl, "fsl,imx28-clkctrl", mx28_clocks_init); diff --git a/drivers/clk/mxs/clk-pll.c b/drivers/clk/mxs/clk-pll.c index fadae41..e0f94ac 100644 --- a/drivers/clk/mxs/clk-pll.c +++ b/drivers/clk/mxs/clk-pll.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -86,11 +85,11 @@ static const struct clk_ops clk_pll_ops = { .recalc_rate = clk_pll_recalc_rate, }; -struct clk *mxs_clk_pll(const char *name, const char *parent_name, +struct clk_core *mxs_clk_pll(const char *name, const char *parent_name, void __iomem *base, u8 power, unsigned long rate) { struct clk_pll *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kzalloc(sizeof(*pll), GFP_KERNEL); diff --git a/drivers/clk/mxs/clk-ref.c b/drivers/clk/mxs/clk-ref.c index 4adeed6..af75c3f 100644 --- a/drivers/clk/mxs/clk-ref.c +++ b/drivers/clk/mxs/clk-ref.c @@ -9,7 +9,6 @@ * http://www.gnu.org/copyleft/gpl.html */ -#include #include #include #include @@ -125,11 +124,11 @@ static const struct clk_ops clk_ref_ops = { .set_rate = clk_ref_set_rate, }; -struct clk *mxs_clk_ref(const char *name, const char *parent_name, +struct clk_core *mxs_clk_ref(const char *name, const char *parent_name, void __iomem *reg, u8 idx) { struct clk_ref *ref; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; ref = kzalloc(sizeof(*ref), GFP_KERNEL); diff --git a/drivers/clk/mxs/clk-ssp.c b/drivers/clk/mxs/clk-ssp.c index af7bdbf..5f9b0c3 100644 --- a/drivers/clk/mxs/clk-ssp.c +++ b/drivers/clk/mxs/clk-ssp.c @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -30,7 +29,7 @@ void mxs_ssp_set_clk_rate(struct mxs_ssp *ssp, unsigned int rate) u32 clock_divide, clock_rate; u32 val; - ssp_clk = clk_get_rate(ssp->clk); + ssp_clk = clk_provider_get_rate(ssp->clk); for (clock_divide = 2; clock_divide <= 254; clock_divide += 2) { clock_rate = DIV_ROUND_UP(ssp_clk, rate * clock_divide); diff --git a/drivers/clk/mxs/clk.h b/drivers/clk/mxs/clk.h index ef10ad9..19b9dc3 100644 --- a/drivers/clk/mxs/clk.h +++ b/drivers/clk/mxs/clk.h @@ -12,7 +12,6 @@ #ifndef __MXS_CLK_H #define __MXS_CLK_H -#include #include #include @@ -23,24 +22,24 @@ extern spinlock_t mxs_lock; int mxs_clk_wait(void __iomem *reg, u8 shift); -struct clk *mxs_clk_pll(const char *name, const char *parent_name, +struct clk_core *mxs_clk_pll(const char *name, const char *parent_name, void __iomem *base, u8 power, unsigned long rate); -struct clk *mxs_clk_ref(const char *name, const char *parent_name, +struct clk_core *mxs_clk_ref(const char *name, const char *parent_name, void __iomem *reg, u8 idx); -struct clk *mxs_clk_div(const char *name, const char *parent_name, +struct clk_core *mxs_clk_div(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, u8 busy); -struct clk *mxs_clk_frac(const char *name, const char *parent_name, +struct clk_core *mxs_clk_frac(const char *name, const char *parent_name, void __iomem *reg, u8 shift, u8 width, u8 busy); -static inline struct clk *mxs_clk_fixed(const char *name, int rate) +static inline struct clk_core *mxs_clk_fixed(const char *name, int rate) { return clk_register_fixed_rate(NULL, name, NULL, CLK_IS_ROOT, rate); } -static inline struct clk *mxs_clk_gate(const char *name, +static inline struct clk_core *mxs_clk_gate(const char *name, const char *parent_name, void __iomem *reg, u8 shift) { return clk_register_gate(NULL, name, parent_name, CLK_SET_RATE_PARENT, @@ -48,7 +47,7 @@ static inline struct clk *mxs_clk_gate(const char *name, &mxs_lock); } -static inline struct clk *mxs_clk_mux(const char *name, void __iomem *reg, +static inline struct clk_core *mxs_clk_mux(const char *name, void __iomem *reg, u8 shift, u8 width, const char **parent_names, int num_parents) { return clk_register_mux(NULL, name, parent_names, num_parents, @@ -56,7 +55,7 @@ static inline struct clk *mxs_clk_mux(const char *name, void __iomem *reg, reg, shift, width, 0, &mxs_lock); } -static inline struct clk *mxs_clk_fixed_factor(const char *name, +static inline struct clk_core *mxs_clk_fixed_factor(const char *name, const char *parent_name, unsigned int mult, unsigned int div) { return clk_register_fixed_factor(NULL, name, parent_name, diff --git a/drivers/clk/qcom/clk-rcg.c b/drivers/clk/qcom/clk-rcg.c index b638c58..59f118c 100644 --- a/drivers/clk/qcom/clk-rcg.c +++ b/drivers/clk/qcom/clk-rcg.c @@ -375,7 +375,7 @@ struct freq_tbl *find_freq(const struct freq_tbl *f, unsigned long rate) static long _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { unsigned long clk_flags; @@ -402,7 +402,7 @@ static long _freq_tbl_determine_rate(struct clk_hw *hw, } static long clk_rcg_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg *rcg = to_clk_rcg(hw); @@ -410,7 +410,7 @@ static long clk_rcg_determine_rate(struct clk_hw *hw, unsigned long rate, } static long clk_dyn_rcg_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_dyn_rcg *rcg = to_clk_dyn_rcg(hw); @@ -418,7 +418,7 @@ static long clk_dyn_rcg_determine_rate(struct clk_hw *hw, unsigned long rate, } static long clk_rcg_bypass_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg *rcg = to_clk_rcg(hw); const struct freq_tbl *f = rcg->freq_tbl; diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c index cd185d5..6aac1ec 100644 --- a/drivers/clk/qcom/clk-rcg2.c +++ b/drivers/clk/qcom/clk-rcg2.c @@ -188,7 +188,7 @@ struct freq_tbl *find_freq(const struct freq_tbl *f, unsigned long rate) static long _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { unsigned long clk_flags; @@ -219,7 +219,7 @@ static long _freq_tbl_determine_rate(struct clk_hw *hw, } static long clk_rcg2_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg2 *rcg = to_clk_rcg2(hw); @@ -372,7 +372,7 @@ static int clk_edp_pixel_set_rate_and_parent(struct clk_hw *hw, } static long clk_edp_pixel_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg2 *rcg = to_clk_rcg2(hw); const struct freq_tbl *f = rcg->freq_tbl; @@ -423,7 +423,7 @@ const struct clk_ops clk_edp_pixel_ops = { EXPORT_SYMBOL_GPL(clk_edp_pixel_ops); static long clk_byte_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg2 *rcg = to_clk_rcg2(hw); const struct freq_tbl *f = rcg->freq_tbl; @@ -485,14 +485,14 @@ static const struct frac_entry frac_table_pixel[] = { }; static long clk_pixel_determine_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *p_rate, struct clk **p) + unsigned long *p_rate, struct clk_core **p) { struct clk_rcg2 *rcg = to_clk_rcg2(hw); unsigned long request, src_rate; int delta = 100000; const struct freq_tbl *f = rcg->freq_tbl; const struct frac_entry *frac = frac_table_pixel; - struct clk *parent = *p = clk_get_parent_by_index(hw->clk, f->src); + struct clk_core *parent = *p = clk_get_parent_by_index(hw->clk, f->src); for (; frac->num; frac++) { request = (rate * frac->den) / frac->num; @@ -519,7 +519,7 @@ static int clk_pixel_set_rate(struct clk_hw *hw, unsigned long rate, int delta = 100000; u32 mask = BIT(rcg->hid_width) - 1; u32 hid_div; - struct clk *parent = clk_get_parent_by_index(hw->clk, f.src); + struct clk_core *parent = clk_get_parent_by_index(hw->clk, f.src); for (; frac->num; frac++) { request = (rate * frac->den) / frac->num; diff --git a/drivers/clk/qcom/clk-regmap.c b/drivers/clk/qcom/clk-regmap.c index a58ba39..2a98040 100644 --- a/drivers/clk/qcom/clk-regmap.c +++ b/drivers/clk/qcom/clk-regmap.c @@ -101,7 +101,7 @@ EXPORT_SYMBOL_GPL(clk_disable_regmap); * clk_regmap struct via this function so that the regmap is initialized * and so that the clock is registered with the common clock framework. */ -struct clk *devm_clk_register_regmap(struct device *dev, +struct clk_core *devm_clk_register_regmap(struct device *dev, struct clk_regmap *rclk) { if (dev && dev_get_regmap(dev, NULL)) diff --git a/drivers/clk/qcom/clk-regmap.h b/drivers/clk/qcom/clk-regmap.h index 491a63d..89258cb 100644 --- a/drivers/clk/qcom/clk-regmap.h +++ b/drivers/clk/qcom/clk-regmap.h @@ -39,7 +39,7 @@ struct clk_regmap { int clk_is_enabled_regmap(struct clk_hw *hw); int clk_enable_regmap(struct clk_hw *hw); void clk_disable_regmap(struct clk_hw *hw); -struct clk * +struct clk_core * devm_clk_register_regmap(struct device *dev, struct clk_regmap *rclk); #endif diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c index eeb3eea..afd40ea 100644 --- a/drivers/clk/qcom/common.c +++ b/drivers/clk/qcom/common.c @@ -24,7 +24,7 @@ struct qcom_cc { struct qcom_reset_controller reset; struct clk_onecell_data data; - struct clk *clks[]; + struct clk_core *clks[]; }; struct regmap * @@ -48,9 +48,9 @@ int qcom_cc_really_probe(struct platform_device *pdev, { int i, ret; struct device *dev = &pdev->dev; - struct clk *clk; + struct clk_core *clk; struct clk_onecell_data *data; - struct clk **clks; + struct clk_core **clks; struct qcom_reset_controller *reset; struct qcom_cc *cc; size_t num_clks = desc->num_clks; diff --git a/drivers/clk/qcom/gcc-apq8084.c b/drivers/clk/qcom/gcc-apq8084.c index ee52eb1..27af0cd 100644 --- a/drivers/clk/qcom/gcc-apq8084.c +++ b/drivers/clk/qcom/gcc-apq8084.c @@ -3562,7 +3562,7 @@ MODULE_DEVICE_TABLE(of, gcc_apq8084_match_table); static int gcc_apq8084_probe(struct platform_device *pdev) { - struct clk *clk; + struct clk_core *clk; struct device *dev = &pdev->dev; /* Temporary until RPM clocks supported */ diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c index 4032e51..f31f095 100644 --- a/drivers/clk/qcom/gcc-ipq806x.c +++ b/drivers/clk/qcom/gcc-ipq806x.c @@ -2376,7 +2376,7 @@ MODULE_DEVICE_TABLE(of, gcc_ipq806x_match_table); static int gcc_ipq806x_probe(struct platform_device *pdev) { - struct clk *clk; + struct clk_core *clk; struct device *dev = &pdev->dev; /* Temporary until RPM clocks supported */ diff --git a/drivers/clk/qcom/gcc-msm8660.c b/drivers/clk/qcom/gcc-msm8660.c index 0c4b727..2d41fdb 100644 --- a/drivers/clk/qcom/gcc-msm8660.c +++ b/drivers/clk/qcom/gcc-msm8660.c @@ -2718,7 +2718,7 @@ MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table); static int gcc_msm8660_probe(struct platform_device *pdev) { - struct clk *clk; + struct clk_core *clk; struct device *dev = &pdev->dev; /* Temporary until RPM clocks supported */ diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c index 007534f..ed8f8f5 100644 --- a/drivers/clk/qcom/gcc-msm8960.c +++ b/drivers/clk/qcom/gcc-msm8960.c @@ -3488,7 +3488,7 @@ MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table); static int gcc_msm8960_probe(struct platform_device *pdev) { - struct clk *clk; + struct clk_core *clk; struct device *dev = &pdev->dev; const struct of_device_id *match; diff --git a/drivers/clk/qcom/gcc-msm8974.c b/drivers/clk/qcom/gcc-msm8974.c index 7af7c18..8326b1f 100644 --- a/drivers/clk/qcom/gcc-msm8974.c +++ b/drivers/clk/qcom/gcc-msm8974.c @@ -2699,7 +2699,7 @@ static void msm8974_pro_clock_override(void) static int gcc_msm8974_probe(struct platform_device *pdev) { - struct clk *clk; + struct clk_core *clk; struct device *dev = &pdev->dev; bool pro; const struct of_device_id *id; diff --git a/drivers/clk/qcom/mmcc-msm8960.c b/drivers/clk/qcom/mmcc-msm8960.c index 2e80a21..bb60d61 100644 --- a/drivers/clk/qcom/mmcc-msm8960.c +++ b/drivers/clk/qcom/mmcc-msm8960.c @@ -505,7 +505,7 @@ static int pix_rdi_set_parent(struct clk_hw *hw, u8 index) int ret = 0; u32 val; struct clk_pix_rdi *rdi = to_clk_pix_rdi(hw); - struct clk *clk = hw->clk; + struct clk_core *clk = hw->clk; int num_parents = __clk_get_num_parents(hw->clk); /* @@ -517,7 +517,7 @@ static int pix_rdi_set_parent(struct clk_hw *hw, u8 index) * needs to be on at what time. */ for (i = 0; i < num_parents; i++) { - ret = clk_prepare_enable(clk_get_parent_by_index(clk, i)); + ret = clk_provider_prepare_enable(clk_get_parent_by_index(clk, i)); if (ret) goto err; } @@ -546,7 +546,7 @@ static int pix_rdi_set_parent(struct clk_hw *hw, u8 index) err: for (i--; i >= 0; i--) - clk_disable_unprepare(clk_get_parent_by_index(clk, i)); + clk_provider_disable_unprepare(clk_get_parent_by_index(clk, i)); return ret; } diff --git a/drivers/clk/rockchip/clk-pll.c b/drivers/clk/rockchip/clk-pll.c index f2a1c7a..414bff2 100644 --- a/drivers/clk/rockchip/clk-pll.c +++ b/drivers/clk/rockchip/clk-pll.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include "clk.h" @@ -297,7 +296,7 @@ static const struct clk_ops rockchip_rk3066_pll_clk_ops = { * Common registering of pll clocks */ -struct clk *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, +struct clk_core *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, const char *name, const char **parent_names, u8 num_parents, void __iomem *base, int con_offset, int grf_lock_offset, int lock_shift, int mode_offset, int mode_shift, @@ -308,7 +307,7 @@ struct clk *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, struct clk_init_data init; struct rockchip_clk_pll *pll; struct clk_mux *pll_mux; - struct clk *pll_clk, *mux_clk; + struct clk_core *pll_clk, *mux_clk; char pll_name[20]; int ret; @@ -377,7 +376,7 @@ struct clk *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, goto err_pll; } - ret = clk_notifier_register(pll_clk, &pll->clk_nb); + ret = clk_provider_notifier_register(pll_clk, &pll->clk_nb); if (ret) { pr_err("%s: failed to register clock notifier for %s : %d\n", __func__, name, ret); @@ -417,7 +416,7 @@ struct clk *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, return mux_clk; err_mux: - ret = clk_notifier_unregister(pll_clk, &pll->clk_nb); + ret = clk_provider_notifier_unregister(pll_clk, &pll->clk_nb); if (ret) { pr_err("%s: could not unregister clock notifier in error path : %d\n", __func__, ret); diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c index 1892c66..ae4cf82 100644 --- a/drivers/clk/rockchip/clk-rk3188.c +++ b/drivers/clk/rockchip/clk-rk3188.c @@ -607,7 +607,7 @@ static const char *rk3188_critical_clocks[] __initconst = { static void __init rk3188_common_clk_init(struct device_node *np) { void __iomem *reg_base; - struct clk *clk; + struct clk_core *clk; reg_base = of_iomap(np, 0); if (!reg_base) { diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c index 43e0ad0..7f29295 100644 --- a/drivers/clk/rockchip/clk-rk3288.c +++ b/drivers/clk/rockchip/clk-rk3288.c @@ -688,7 +688,7 @@ static const char *rk3288_critical_clocks[] __initconst = { static void __init rk3288_clk_init(struct device_node *np) { void __iomem *reg_base; - struct clk *clk; + struct clk_core *clk; reg_base = of_iomap(np, 0); if (!reg_base) { diff --git a/drivers/clk/rockchip/clk-rockchip.c b/drivers/clk/rockchip/clk-rockchip.c index 4cf838d5..faa8dfa 100644 --- a/drivers/clk/rockchip/clk-rockchip.c +++ b/drivers/clk/rockchip/clk-rockchip.c @@ -54,7 +54,7 @@ static void __init rk2928_gate_clk_init(struct device_node *node) if (!clk_data) return; - clk_data->clks = kzalloc(qty * sizeof(struct clk *), GFP_KERNEL); + clk_data->clks = kzalloc(qty * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) { kfree(clk_data); return; diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c index cad52ab..a4518ba 100644 --- a/drivers/clk/rockchip/clk.c +++ b/drivers/clk/rockchip/clk.c @@ -21,7 +21,6 @@ */ #include -#include #include #include #include @@ -38,7 +37,7 @@ * * sometimes without one of those components. */ -static struct clk *rockchip_clk_register_branch(const char *name, +static struct clk_core *rockchip_clk_register_branch(const char *name, const char **parent_names, u8 num_parents, void __iomem *base, int muxdiv_offset, u8 mux_shift, u8 mux_width, u8 mux_flags, u8 div_shift, u8 div_width, u8 div_flags, @@ -46,7 +45,7 @@ static struct clk *rockchip_clk_register_branch(const char *name, u8 gate_shift, u8 gate_flags, unsigned long flags, spinlock_t *lock) { - struct clk *clk; + struct clk_core *clk; struct clk_mux *mux = NULL; struct clk_gate *gate = NULL; struct clk_divider *div = NULL; @@ -104,13 +103,13 @@ static struct clk *rockchip_clk_register_branch(const char *name, return clk; } -static struct clk *rockchip_clk_register_frac_branch(const char *name, +static struct clk_core *rockchip_clk_register_frac_branch(const char *name, const char **parent_names, u8 num_parents, void __iomem *base, int muxdiv_offset, u8 div_flags, int gate_offset, u8 gate_shift, u8 gate_flags, unsigned long flags, spinlock_t *lock) { - struct clk *clk; + struct clk_core *clk; struct clk_gate *gate = NULL; struct clk_fractional_divider *div = NULL; const struct clk_ops *div_ops = NULL, *gate_ops = NULL; @@ -153,7 +152,7 @@ static struct clk *rockchip_clk_register_frac_branch(const char *name, } static DEFINE_SPINLOCK(clk_lock); -static struct clk **clk_table; +static struct clk_core **clk_table; static void __iomem *reg_base; static struct clk_onecell_data clk_data; static struct device_node *cru_node; @@ -166,7 +165,7 @@ void __init rockchip_clk_init(struct device_node *np, void __iomem *base, cru_node = np; grf = ERR_PTR(-EPROBE_DEFER); - clk_table = kcalloc(nr_clks, sizeof(struct clk *), GFP_KERNEL); + clk_table = kcalloc(nr_clks, sizeof(struct clk_core *), GFP_KERNEL); if (!clk_table) pr_err("%s: could not allocate clock lookup table\n", __func__); @@ -182,7 +181,7 @@ struct regmap *rockchip_clk_get_grf(void) return grf; } -void rockchip_clk_add_lookup(struct clk *clk, unsigned int id) +void rockchip_clk_add_lookup(struct clk_core *clk, unsigned int id) { if (clk_table && id) clk_table[id] = clk; @@ -191,7 +190,7 @@ void rockchip_clk_add_lookup(struct clk *clk, unsigned int id) void __init rockchip_clk_register_plls(struct rockchip_pll_clock *list, unsigned int nr_pll, int grf_lock_offset) { - struct clk *clk; + struct clk_core *clk; int idx; for (idx = 0; idx < nr_pll; idx++, list++) { @@ -214,7 +213,7 @@ void __init rockchip_clk_register_branches( struct rockchip_clk_branch *list, unsigned int nr_clk) { - struct clk *clk = NULL; + struct clk_core *clk = NULL; unsigned int idx; unsigned long flags; @@ -304,10 +303,10 @@ void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks) /* Protect the clocks that needs to stay on */ for (i = 0; i < nclocks; i++) { - struct clk *clk = __clk_lookup(clocks[i]); + struct clk_core *clk = __clk_lookup(clocks[i]); if (clk) - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); } } diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h index 3965200..ac92bf9 100644 --- a/drivers/clk/rockchip/clk.h +++ b/drivers/clk/rockchip/clk.h @@ -24,7 +24,6 @@ #define CLK_ROCKCHIP_CLK_H #include -#include #include #define HIWORD_UPDATE(val, mask, shift) \ @@ -113,7 +112,7 @@ struct rockchip_pll_clock { .rate_table = _rtable, \ } -struct clk *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, +struct clk_core *rockchip_clk_register_pll(enum rockchip_pll_type pll_type, const char *name, const char **parent_names, u8 num_parents, void __iomem *base, int con_offset, int grf_lock_offset, int lock_shift, int reg_mode, int mode_shift, @@ -324,7 +323,7 @@ struct rockchip_clk_branch { void rockchip_clk_init(struct device_node *np, void __iomem *base, unsigned long nr_clks); struct regmap *rockchip_clk_get_grf(void); -void rockchip_clk_add_lookup(struct clk *clk, unsigned int id); +void rockchip_clk_add_lookup(struct clk_core *clk, unsigned int id); void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list, unsigned int nr_clk); void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list, diff --git a/drivers/clk/samsung/clk-exynos-audss.c b/drivers/clk/samsung/clk-exynos-audss.c index 13eae14c..f5639bf 100644 --- a/drivers/clk/samsung/clk-exynos-audss.c +++ b/drivers/clk/samsung/clk-exynos-audss.c @@ -26,7 +26,7 @@ enum exynos_audss_clk_type { }; static DEFINE_SPINLOCK(lock); -static struct clk **clk_table; +static struct clk_core **clk_table; static void __iomem *reg_base; static struct clk_onecell_data clk_data; @@ -83,7 +83,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev) const char *mout_audss_p[] = {"fin_pll", "fout_epll"}; const char *mout_i2s_p[] = {"mout_audss", "cdclk0", "sclk_audio0"}; const char *sclk_pcm_p = "sclk_pcm0"; - struct clk *pll_ref, *pll_in, *cdclk, *sclk_audio, *sclk_pcm_in; + struct clk_core *pll_ref, *pll_in, *cdclk, *sclk_audio, *sclk_pcm_in; const struct of_device_id *match; enum exynos_audss_clk_type variant; @@ -100,7 +100,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev) } clk_table = devm_kzalloc(&pdev->dev, - sizeof(struct clk *) * EXYNOS_AUDSS_MAX_CLKS, + sizeof(struct clk_core *) * EXYNOS_AUDSS_MAX_CLKS, GFP_KERNEL); if (!clk_table) return -ENOMEM; @@ -111,8 +111,8 @@ static int exynos_audss_clk_probe(struct platform_device *pdev) else clk_data.clk_num = EXYNOS_AUDSS_MAX_CLKS - 1; - pll_ref = devm_clk_get(&pdev->dev, "pll_ref"); - pll_in = devm_clk_get(&pdev->dev, "pll_in"); + pll_ref = devm_clk_provider_get(&pdev->dev, "pll_ref"); + pll_in = devm_clk_provider_get(&pdev->dev, "pll_in"); if (!IS_ERR(pll_ref)) mout_audss_p[0] = __clk_get_name(pll_ref); if (!IS_ERR(pll_in)) @@ -122,8 +122,8 @@ static int exynos_audss_clk_probe(struct platform_device *pdev) CLK_SET_RATE_NO_REPARENT, reg_base + ASS_CLK_SRC, 0, 1, 0, &lock); - cdclk = devm_clk_get(&pdev->dev, "cdclk"); - sclk_audio = devm_clk_get(&pdev->dev, "sclk_audio"); + cdclk = devm_clk_provider_get(&pdev->dev, "cdclk"); + sclk_audio = devm_clk_provider_get(&pdev->dev, "sclk_audio"); if (!IS_ERR(cdclk)) mout_i2s_p[1] = __clk_get_name(cdclk); if (!IS_ERR(sclk_audio)) @@ -161,7 +161,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev) "sclk_pcm", CLK_SET_RATE_PARENT, reg_base + ASS_CLK_GATE, 4, 0, &lock); - sclk_pcm_in = devm_clk_get(&pdev->dev, "sclk_pcm_in"); + sclk_pcm_in = devm_clk_provider_get(&pdev->dev, "sclk_pcm_in"); if (!IS_ERR(sclk_pcm_in)) sclk_pcm_p = __clk_get_name(sclk_pcm_in); clk_table[EXYNOS_SCLK_PCM] = clk_register_gate(NULL, "sclk_pcm", diff --git a/drivers/clk/samsung/clk-exynos-clkout.c b/drivers/clk/samsung/clk-exynos-clkout.c index 3a7cb25..0ad7dee 100644 --- a/drivers/clk/samsung/clk-exynos-clkout.c +++ b/drivers/clk/samsung/clk-exynos-clkout.c @@ -9,7 +9,6 @@ * Clock driver for Exynos clock output */ -#include #include #include #include @@ -30,7 +29,7 @@ struct exynos_clkout { struct clk_mux mux; spinlock_t slock; struct clk_onecell_data data; - struct clk *clk_table[EXYNOS_CLKOUT_NR_CLKS]; + struct clk_core *clk_table[EXYNOS_CLKOUT_NR_CLKS]; void __iomem *reg; u32 pmu_debug_save; }; @@ -57,7 +56,7 @@ static struct syscore_ops exynos_clkout_syscore_ops = { static void __init exynos_clkout_init(struct device_node *node, u32 mux_mask) { const char *parent_names[EXYNOS_CLKOUT_PARENTS]; - struct clk *parents[EXYNOS_CLKOUT_PARENTS]; + struct clk_core *parents[EXYNOS_CLKOUT_PARENTS]; int parent_count; int ret; int i; @@ -73,7 +72,7 @@ static void __init exynos_clkout_init(struct device_node *node, u32 mux_mask) char name[] = "clkoutXX"; snprintf(name, sizeof(name), "clkout%d", i); - parents[i] = of_clk_get_by_name(node, name); + parents[i] = of_clk_provider_get_by_name(node, name); if (IS_ERR(parents[i])) { parent_names[i] = "none"; continue; @@ -125,7 +124,7 @@ err_unmap: clks_put: for (i = 0; i < EXYNOS_CLKOUT_PARENTS; ++i) if (!IS_ERR(parents[i])) - clk_put(parents[i]); + __clk_put(parents[i]); free_clkout: kfree(clkout); diff --git a/drivers/clk/samsung/clk-exynos3250.c b/drivers/clk/samsung/clk-exynos3250.c index dc85f8e..5742e76 100644 --- a/drivers/clk/samsung/clk-exynos3250.c +++ b/drivers/clk/samsung/clk-exynos3250.c @@ -8,7 +8,6 @@ * Common Clock Framework support for Exynos3250 SoC. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index ac163d7..5d77da2 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c @@ -11,7 +11,6 @@ */ #include -#include #include #include #include @@ -1230,19 +1229,19 @@ static unsigned long exynos4_get_xom(void) static void __init exynos4_clk_register_finpll(struct samsung_clk_provider *ctx) { struct samsung_fixed_rate_clock fclk; - struct clk *clk; + struct clk_core *clk; unsigned long finpll_f = 24000000; char *parent_name; unsigned int xom = exynos4_get_xom(); parent_name = xom & 1 ? "xusbxti" : "xxti"; - clk = clk_get(NULL, parent_name); + clk = clk_provider_get(NULL, parent_name); if (IS_ERR(clk)) { pr_err("%s: failed to lookup parent clock %s, assuming " "fin_pll clock frequency is 24MHz\n", __func__, parent_name); } else { - finpll_f = clk_get_rate(clk); + finpll_f = clk_provider_get_rate(clk); } fclk.id = CLK_FIN_PLL; diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c index 70ec3d2..623e68f 100644 --- a/drivers/clk/samsung/clk-exynos5250.c +++ b/drivers/clk/samsung/clk-exynos5250.c @@ -11,7 +11,6 @@ */ #include -#include #include #include #include diff --git a/drivers/clk/samsung/clk-exynos5260.c b/drivers/clk/samsung/clk-exynos5260.c index ce3de97..5a3d623 100644 --- a/drivers/clk/samsung/clk-exynos5260.c +++ b/drivers/clk/samsung/clk-exynos5260.c @@ -9,7 +9,6 @@ * Common Clock Framework support for Exynos5260 SoC. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-exynos5410.c b/drivers/clk/samsung/clk-exynos5410.c index 231475b..546b32f 100644 --- a/drivers/clk/samsung/clk-exynos5410.c +++ b/drivers/clk/samsung/clk-exynos5410.c @@ -11,7 +11,6 @@ #include -#include #include #include #include diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c index 848d602..0229cc9 100644 --- a/drivers/clk/samsung/clk-exynos5420.c +++ b/drivers/clk/samsung/clk-exynos5420.c @@ -11,7 +11,6 @@ */ #include -#include #include #include #include diff --git a/drivers/clk/samsung/clk-exynos5440.c b/drivers/clk/samsung/clk-exynos5440.c index 00d1d00..8adeaa1 100644 --- a/drivers/clk/samsung/clk-exynos5440.c +++ b/drivers/clk/samsung/clk-exynos5440.c @@ -10,7 +10,6 @@ */ #include -#include #include #include #include diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c index b07fad2..aaf234a 100644 --- a/drivers/clk/samsung/clk-pll.c +++ b/drivers/clk/samsung/clk-pll.c @@ -910,12 +910,12 @@ static const struct clk_ops samsung_pll2550x_clk_ops = { .recalc_rate = samsung_pll2550x_recalc_rate, }; -struct clk * __init samsung_clk_register_pll2550x(const char *name, +struct clk_core * __init samsung_clk_register_pll2550x(const char *name, const char *pname, const void __iomem *reg_base, const unsigned long offset) { struct samsung_clk_pll2550x *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kzalloc(sizeof(*pll), GFP_KERNEL); @@ -1149,7 +1149,7 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx, void __iomem *base) { struct samsung_clk_pll *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; int ret, len; diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h index c0ed4d4..81af344 100644 --- a/drivers/clk/samsung/clk-pll.h +++ b/drivers/clk/samsung/clk-pll.h @@ -97,7 +97,7 @@ struct samsung_pll_rate_table { unsigned int vsel; }; -extern struct clk * __init samsung_clk_register_pll2550x(const char *name, +extern struct clk_core * __init samsung_clk_register_pll2550x(const char *name, const char *pname, const void __iomem *reg_base, const unsigned long offset); diff --git a/drivers/clk/samsung/clk-s3c2410-dclk.c b/drivers/clk/samsung/clk-s3c2410-dclk.c index 0449cc0..05354bd 100644 --- a/drivers/clk/samsung/clk-s3c2410-dclk.c +++ b/drivers/clk/samsung/clk-s3c2410-dclk.c @@ -87,12 +87,12 @@ const struct clk_ops s3c24xx_clkout_ops = { .determine_rate = __clk_mux_determine_rate, }; -struct clk *s3c24xx_register_clkout(struct device *dev, const char *name, +struct clk_core *s3c24xx_register_clkout(struct device *dev, const char *name, const char **parent_names, u8 num_parents, u8 shift, u32 mask) { struct s3c24xx_clkout *clkout; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* allocate the clkout */ @@ -237,7 +237,7 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev) { struct s3c24xx_dclk *s3c24xx_dclk; struct resource *mem; - struct clk **clk_table; + struct clk_core **clk_table; struct s3c24xx_dclk_drv_data *dclk_variant; int ret, i; @@ -251,7 +251,7 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev) spin_lock_init(&s3c24xx_dclk->dclk_lock); clk_table = devm_kzalloc(&pdev->dev, - sizeof(struct clk *) * DCLK_MAX_CLKS, + sizeof(struct clk_core *) * DCLK_MAX_CLKS, GFP_KERNEL); if (!clk_table) return -ENOMEM; @@ -329,21 +329,21 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev) s3c24xx_dclk->dclk1_div_change_nb.notifier_call = s3c24xx_dclk1_div_notify; - ret = clk_notifier_register(clk_table[DIV_DCLK0], - &s3c24xx_dclk->dclk0_div_change_nb); + ret = clk_provider_notifier_register(clk_table[DIV_DCLK0], + &s3c24xx_dclk->dclk0_div_change_nb); if (ret) goto err_clk_register; - ret = clk_notifier_register(clk_table[DIV_DCLK1], - &s3c24xx_dclk->dclk1_div_change_nb); + ret = clk_provider_notifier_register(clk_table[DIV_DCLK1], + &s3c24xx_dclk->dclk1_div_change_nb); if (ret) goto err_dclk_notify; return 0; err_dclk_notify: - clk_notifier_unregister(clk_table[DIV_DCLK0], - &s3c24xx_dclk->dclk0_div_change_nb); + clk_provider_notifier_unregister(clk_table[DIV_DCLK0], + &s3c24xx_dclk->dclk0_div_change_nb); err_clk_register: for (i = 0; i < DCLK_MAX_CLKS; i++) if (clk_table[i] && !IS_ERR(clk_table[i])) @@ -355,13 +355,13 @@ err_clk_register: static int s3c24xx_dclk_remove(struct platform_device *pdev) { struct s3c24xx_dclk *s3c24xx_dclk = platform_get_drvdata(pdev); - struct clk **clk_table = s3c24xx_dclk->clk_data.clks; + struct clk_core **clk_table = s3c24xx_dclk->clk_data.clks; int i; - clk_notifier_unregister(clk_table[DIV_DCLK1], - &s3c24xx_dclk->dclk1_div_change_nb); - clk_notifier_unregister(clk_table[DIV_DCLK0], - &s3c24xx_dclk->dclk0_div_change_nb); + clk_provider_notifier_unregister(clk_table[DIV_DCLK1], + &s3c24xx_dclk->dclk1_div_change_nb); + clk_provider_notifier_unregister(clk_table[DIV_DCLK0], + &s3c24xx_dclk->dclk0_div_change_nb); for (i = 0; i < DCLK_MAX_CLKS; i++) clk_unregister(clk_table[i]); diff --git a/drivers/clk/samsung/clk-s3c2410.c b/drivers/clk/samsung/clk-s3c2410.c index 5d2f034..af15156 100644 --- a/drivers/clk/samsung/clk-s3c2410.c +++ b/drivers/clk/samsung/clk-s3c2410.c @@ -8,7 +8,6 @@ * Common Clock Framework support for S3C2410 and following SoCs. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-s3c2412.c b/drivers/clk/samsung/clk-s3c2412.c index 2ceedaf..bb349fa 100644 --- a/drivers/clk/samsung/clk-s3c2412.c +++ b/drivers/clk/samsung/clk-s3c2412.c @@ -8,7 +8,6 @@ * Common Clock Framework support for S3C2412 and S3C2413. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-s3c2443.c b/drivers/clk/samsung/clk-s3c2443.c index 0c3c182..5819553 100644 --- a/drivers/clk/samsung/clk-s3c2443.c +++ b/drivers/clk/samsung/clk-s3c2443.c @@ -8,7 +8,6 @@ * Common Clock Framework support for S3C2443 and following SoCs. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-s3c64xx.c b/drivers/clk/samsung/clk-s3c64xx.c index 0f590e5..7dad675 100644 --- a/drivers/clk/samsung/clk-s3c64xx.c +++ b/drivers/clk/samsung/clk-s3c64xx.c @@ -8,7 +8,6 @@ * Common Clock Framework support for all S3C64xx SoCs. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk-s5pv210-audss.c b/drivers/clk/samsung/clk-s5pv210-audss.c index a8053b4..f7b77e5 100644 --- a/drivers/clk/samsung/clk-s5pv210-audss.c +++ b/drivers/clk/samsung/clk-s5pv210-audss.c @@ -24,7 +24,7 @@ #include static DEFINE_SPINLOCK(lock); -static struct clk **clk_table; +static struct clk_core **clk_table; static void __iomem *reg_base; static struct clk_onecell_data clk_data; @@ -71,7 +71,7 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev) const char *mout_audss_p[2]; const char *mout_i2s_p[3]; const char *hclk_p; - struct clk *hclk, *pll_ref, *pll_in, *cdclk, *sclk_audio; + struct clk_core *hclk, *pll_ref, *pll_in, *cdclk, *sclk_audio; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); reg_base = devm_ioremap_resource(&pdev->dev, res); @@ -81,7 +81,7 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev) } clk_table = devm_kzalloc(&pdev->dev, - sizeof(struct clk *) * AUDSS_MAX_CLKS, + sizeof(struct clk_core *) * AUDSS_MAX_CLKS, GFP_KERNEL); if (!clk_table) return -ENOMEM; @@ -89,27 +89,27 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev) clk_data.clks = clk_table; clk_data.clk_num = AUDSS_MAX_CLKS; - hclk = devm_clk_get(&pdev->dev, "hclk"); + hclk = devm_clk_provider_get(&pdev->dev, "hclk"); if (IS_ERR(hclk)) { dev_err(&pdev->dev, "failed to get hclk clock\n"); return PTR_ERR(hclk); } - pll_in = devm_clk_get(&pdev->dev, "fout_epll"); + pll_in = devm_clk_provider_get(&pdev->dev, "fout_epll"); if (IS_ERR(pll_in)) { dev_err(&pdev->dev, "failed to get fout_epll clock\n"); return PTR_ERR(pll_in); } - sclk_audio = devm_clk_get(&pdev->dev, "sclk_audio0"); + sclk_audio = devm_clk_provider_get(&pdev->dev, "sclk_audio0"); if (IS_ERR(sclk_audio)) { dev_err(&pdev->dev, "failed to get sclk_audio0 clock\n"); return PTR_ERR(sclk_audio); } /* iiscdclk0 is an optional external I2S codec clock */ - cdclk = devm_clk_get(&pdev->dev, "iiscdclk0"); - pll_ref = devm_clk_get(&pdev->dev, "xxti"); + cdclk = devm_clk_provider_get(&pdev->dev, "iiscdclk0"); + pll_ref = devm_clk_provider_get(&pdev->dev, "xxti"); if (!IS_ERR(pll_ref)) mout_audss_p[0] = __clk_get_name(pll_ref); diff --git a/drivers/clk/samsung/clk-s5pv210.c b/drivers/clk/samsung/clk-s5pv210.c index d270a20..517032f 100644 --- a/drivers/clk/samsung/clk-s5pv210.c +++ b/drivers/clk/samsung/clk-s5pv210.c @@ -11,7 +11,6 @@ * Common Clock Framework support for all S5PC110/S5PV210 SoCs. */ -#include #include #include #include diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index deab84d..68133fa 100644 --- a/drivers/clk/samsung/clk.c +++ b/drivers/clk/samsung/clk.c @@ -52,14 +52,14 @@ struct samsung_clk_provider *__init samsung_clk_init(struct device_node *np, void __iomem *base, unsigned long nr_clks) { struct samsung_clk_provider *ctx; - struct clk **clk_table; + struct clk_core **clk_table; int i; ctx = kzalloc(sizeof(struct samsung_clk_provider), GFP_KERNEL); if (!ctx) panic("could not allocate clock provider context.\n"); - clk_table = kcalloc(nr_clks, sizeof(struct clk *), GFP_KERNEL); + clk_table = kcalloc(nr_clks, sizeof(struct clk_core *), GFP_KERNEL); if (!clk_table) panic("could not allocate clock lookup table\n"); @@ -85,7 +85,7 @@ void __init samsung_clk_of_add_provider(struct device_node *np, } /* add a clock instance to the clock lookup table used for dt based lookup */ -void samsung_clk_add_lookup(struct samsung_clk_provider *ctx, struct clk *clk, +void samsung_clk_add_lookup(struct samsung_clk_provider *ctx, struct clk_core *clk, unsigned int id) { if (ctx->clk_data.clks && id) @@ -97,7 +97,7 @@ void __init samsung_clk_register_alias(struct samsung_clk_provider *ctx, struct samsung_clock_alias *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx, ret; if (!ctx->clk_data.clks) { @@ -130,7 +130,7 @@ void __init samsung_clk_register_alias(struct samsung_clk_provider *ctx, void __init samsung_clk_register_fixed_rate(struct samsung_clk_provider *ctx, struct samsung_fixed_rate_clock *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx, ret; for (idx = 0; idx < nr_clk; idx++, list++) { @@ -159,7 +159,7 @@ void __init samsung_clk_register_fixed_rate(struct samsung_clk_provider *ctx, void __init samsung_clk_register_fixed_factor(struct samsung_clk_provider *ctx, struct samsung_fixed_factor_clock *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx; for (idx = 0; idx < nr_clk; idx++, list++) { @@ -180,7 +180,7 @@ void __init samsung_clk_register_mux(struct samsung_clk_provider *ctx, struct samsung_mux_clock *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx, ret; for (idx = 0; idx < nr_clk; idx++, list++) { @@ -212,7 +212,7 @@ void __init samsung_clk_register_div(struct samsung_clk_provider *ctx, struct samsung_div_clock *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx, ret; for (idx = 0; idx < nr_clk; idx++, list++) { @@ -251,7 +251,7 @@ void __init samsung_clk_register_gate(struct samsung_clk_provider *ctx, struct samsung_gate_clock *list, unsigned int nr_clk) { - struct clk *clk; + struct clk_core *clk; unsigned int idx, ret; for (idx = 0; idx < nr_clk; idx++, list++) { @@ -303,7 +303,7 @@ void __init samsung_clk_of_register_fixed_ext(struct samsung_clk_provider *ctx, /* utility function to get the rate of a specified clock */ unsigned long _get_rate(const char *clk_name) { - struct clk *clk; + struct clk_core *clk; clk = __clk_lookup(clk_name); if (!clk) { @@ -311,5 +311,5 @@ unsigned long _get_rate(const char *clk_name) return 0; } - return clk_get_rate(clk); + return clk_provider_get_rate(clk); } diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h index 66ab36b..58b1215 100644 --- a/drivers/clk/samsung/clk.h +++ b/drivers/clk/samsung/clk.h @@ -13,7 +13,6 @@ #ifndef __SAMSUNG_CLK_H #define __SAMSUNG_CLK_H -#include #include #include #include @@ -336,7 +335,7 @@ extern void __init samsung_clk_of_register_fixed_ext( const struct of_device_id *clk_matches); extern void samsung_clk_add_lookup(struct samsung_clk_provider *ctx, - struct clk *clk, unsigned int id); + struct clk_core *clk, unsigned int id); extern void samsung_clk_register_alias(struct samsung_clk_provider *ctx, struct samsung_clock_alias *list, diff --git a/drivers/clk/shmobile/clk-div6.c b/drivers/clk/shmobile/clk-div6.c index f065f69..c6712fb 100644 --- a/drivers/clk/shmobile/clk-div6.c +++ b/drivers/clk/shmobile/clk-div6.c @@ -119,7 +119,7 @@ static void __init cpg_div6_clock_init(struct device_node *np) struct div6_clock *clock; const char *parent_name; const char *name; - struct clk *clk; + struct clk_core *clk; int ret; clock = kzalloc(sizeof(*clock), GFP_KERNEL); diff --git a/drivers/clk/shmobile/clk-emev2.c b/drivers/clk/shmobile/clk-emev2.c index 6c7c929..2e3a45b 100644 --- a/drivers/clk/shmobile/clk-emev2.c +++ b/drivers/clk/shmobile/clk-emev2.c @@ -71,7 +71,7 @@ static void __init emev2_smu_init(void) static void __init emev2_smu_clkdiv_init(struct device_node *np) { u32 reg[2]; - struct clk *clk; + struct clk_core *clk; const char *parent_name = of_clk_get_parent_name(np, 0); if (WARN_ON(of_property_read_u32_array(np, "reg", reg, 2))) return; @@ -89,7 +89,7 @@ CLK_OF_DECLARE(emev2_smu_clkdiv, "renesas,emev2-smu-clkdiv", static void __init emev2_smu_gclk_init(struct device_node *np) { u32 reg[2]; - struct clk *clk; + struct clk_core *clk; const char *parent_name = of_clk_get_parent_name(np, 0); if (WARN_ON(of_property_read_u32_array(np, "reg", reg, 2))) return; diff --git a/drivers/clk/shmobile/clk-mstp.c b/drivers/clk/shmobile/clk-mstp.c index 2d2fe77..2659676 100644 --- a/drivers/clk/shmobile/clk-mstp.c +++ b/drivers/clk/shmobile/clk-mstp.c @@ -121,13 +121,13 @@ static const struct clk_ops cpg_mstp_clock_ops = { .is_enabled = cpg_mstp_clock_is_enabled, }; -static struct clk * __init +static struct clk_core * __init cpg_mstp_clock_register(const char *name, const char *parent_name, unsigned int index, struct mstp_clock_group *group) { struct clk_init_data init; struct mstp_clock *clock; - struct clk *clk; + struct clk_core *clk; clock = kzalloc(sizeof(*clock), GFP_KERNEL); if (!clock) { @@ -157,7 +157,7 @@ static void __init cpg_mstp_clocks_init(struct device_node *np) { struct mstp_clock_group *group; const char *idxname; - struct clk **clks; + struct clk_core **clks; unsigned int i; group = kzalloc(sizeof(*group), GFP_KERNEL); diff --git a/drivers/clk/shmobile/clk-r8a7740.c b/drivers/clk/shmobile/clk-r8a7740.c index 1e2eaae..8889e6a 100644 --- a/drivers/clk/shmobile/clk-r8a7740.c +++ b/drivers/clk/shmobile/clk-r8a7740.c @@ -61,7 +61,7 @@ static const struct clk_div_table div4_div_table[] = { static u32 cpg_mode __initdata; -static struct clk * __init +static struct clk_core * __init r8a7740_cpg_register_clock(struct device_node *np, struct r8a7740_cpg *cpg, const char *name) { @@ -147,7 +147,7 @@ r8a7740_cpg_register_clock(struct device_node *np, struct r8a7740_cpg *cpg, static void __init r8a7740_cpg_clocks_init(struct device_node *np) { struct r8a7740_cpg *cpg; - struct clk **clks; + struct clk_core **clks; unsigned int i; int num_clks; @@ -180,7 +180,7 @@ static void __init r8a7740_cpg_clocks_init(struct device_node *np) for (i = 0; i < num_clks; ++i) { const char *name; - struct clk *clk; + struct clk_core *clk; of_property_read_string_index(np, "clock-output-names", i, &name); diff --git a/drivers/clk/shmobile/clk-r8a7779.c b/drivers/clk/shmobile/clk-r8a7779.c index 652ecac..96b51b1 100644 --- a/drivers/clk/shmobile/clk-r8a7779.c +++ b/drivers/clk/shmobile/clk-r8a7779.c @@ -90,7 +90,7 @@ static const unsigned int cpg_plla_mult[4] __initconst = { 42, 48, 56, 64 }; static u32 cpg_mode __initdata; -static struct clk * __init +static struct clk_core * __init r8a7779_cpg_register_clock(struct device_node *np, struct r8a7779_cpg *cpg, const struct cpg_clk_config *config, unsigned int plla_mult, const char *name) @@ -124,7 +124,7 @@ static void __init r8a7779_cpg_clocks_init(struct device_node *np) { const struct cpg_clk_config *config; struct r8a7779_cpg *cpg; - struct clk **clks; + struct clk_core **clks; unsigned int i, plla_mult; int num_clks; @@ -153,7 +153,7 @@ static void __init r8a7779_cpg_clocks_init(struct device_node *np) for (i = 0; i < num_clks; ++i) { const char *name; - struct clk *clk; + struct clk_core *clk; of_property_read_string_index(np, "clock-output-names", i, &name); diff --git a/drivers/clk/shmobile/clk-rcar-gen2.c b/drivers/clk/shmobile/clk-rcar-gen2.c index e996425..45a0712 100644 --- a/drivers/clk/shmobile/clk-rcar-gen2.c +++ b/drivers/clk/shmobile/clk-rcar-gen2.c @@ -133,12 +133,12 @@ static const struct clk_ops cpg_z_clk_ops = { .set_rate = cpg_z_clk_set_rate, }; -static struct clk * __init cpg_z_clk_register(struct rcar_gen2_cpg *cpg) +static struct clk_core * __init cpg_z_clk_register(struct rcar_gen2_cpg *cpg) { static const char *parent_name = "pll0"; struct clk_init_data init; struct cpg_z_clk *zclk; - struct clk *clk; + struct clk_core *clk; zclk = kzalloc(sizeof(*zclk), GFP_KERNEL); if (!zclk) @@ -213,7 +213,7 @@ static const struct clk_div_table cpg_sd01_div_table[] = { static u32 cpg_mode __initdata; -static struct clk * __init +static struct clk_core * __init rcar_gen2_cpg_register_clock(struct device_node *np, struct rcar_gen2_cpg *cpg, const struct cpg_pll_config *config, const char *name) @@ -280,7 +280,7 @@ static void __init rcar_gen2_cpg_clocks_init(struct device_node *np) { const struct cpg_pll_config *config; struct rcar_gen2_cpg *cpg; - struct clk **clks; + struct clk_core **clks; unsigned int i; int num_clks; @@ -313,7 +313,7 @@ static void __init rcar_gen2_cpg_clocks_init(struct device_node *np) for (i = 0; i < num_clks; ++i) { const char *name; - struct clk *clk; + struct clk_core *clk; of_property_read_string_index(np, "clock-output-names", i, &name); diff --git a/drivers/clk/shmobile/clk-rz.c b/drivers/clk/shmobile/clk-rz.c index 7e68e86..414e20e 100644 --- a/drivers/clk/shmobile/clk-rz.c +++ b/drivers/clk/shmobile/clk-rz.c @@ -28,7 +28,7 @@ struct rz_cpg { * Initialization */ -static struct clk * __init +static struct clk_core * __init rz_cpg_register_clock(struct device_node *np, struct rz_cpg *cpg, const char *name) { u32 val; @@ -67,7 +67,7 @@ rz_cpg_register_clock(struct device_node *np, struct rz_cpg *cpg, const char *na static void __init rz_cpg_clocks_init(struct device_node *np) { struct rz_cpg *cpg; - struct clk **clks; + struct clk_core **clks; unsigned i; int num_clks; @@ -86,7 +86,7 @@ static void __init rz_cpg_clocks_init(struct device_node *np) for (i = 0; i < num_clks; ++i) { const char *name; - struct clk *clk; + struct clk_core *clk; of_property_read_string_index(np, "clock-output-names", i, &name); diff --git a/drivers/clk/sirf/clk-atlas6.c b/drivers/clk/sirf/clk-atlas6.c index d63b76c..3b07a02 100644 --- a/drivers/clk/sirf/clk-atlas6.c +++ b/drivers/clk/sirf/clk-atlas6.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -113,7 +112,7 @@ static __initdata struct clk_hw *atlas6_clk_hw_array[maxclk] = { &clk_cphif.hw, }; -static struct clk *atlas6_clks[maxclk]; +static struct clk_core *atlas6_clks[maxclk]; static void __init atlas6_clk_init(struct device_node *np) { diff --git a/drivers/clk/sirf/clk-common.c b/drivers/clk/sirf/clk-common.c index 37af51c..05f5040 100644 --- a/drivers/clk/sirf/clk-common.c +++ b/drivers/clk/sirf/clk-common.c @@ -165,9 +165,9 @@ static long cpu_clk_round_rate(struct clk_hw *hw, unsigned long rate, * SiRF SoC has not cpu clock control, * So bypass to it's parent pll. */ - struct clk *parent_clk = clk_get_parent(hw->clk); - struct clk *pll_parent_clk = clk_get_parent(parent_clk); - unsigned long pll_parent_rate = clk_get_rate(pll_parent_clk); + struct clk_core *parent_clk = clk_provider_get_parent(hw->clk); + struct clk_core *pll_parent_clk = clk_provider_get_parent(parent_clk); + unsigned long pll_parent_rate = clk_provider_get_rate(pll_parent_clk); return pll_clk_round_rate(__clk_get_hw(parent_clk), rate, &pll_parent_rate); } @@ -178,7 +178,7 @@ static unsigned long cpu_clk_recalc_rate(struct clk_hw *hw, * SiRF SoC has not cpu clock control, * So return the parent pll rate. */ - struct clk *parent_clk = clk_get_parent(hw->clk); + struct clk_core *parent_clk = clk_provider_get_parent(hw->clk); return __clk_get_rate(parent_clk); } @@ -403,34 +403,34 @@ static int cpu_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { int ret1, ret2; - struct clk *cur_parent; + struct clk_core *cur_parent; - if (rate == clk_get_rate(clk_pll1.hw.clk)) { - ret1 = clk_set_parent(hw->clk, clk_pll1.hw.clk); + if (rate == clk_provider_get_rate(clk_pll1.hw.clk)) { + ret1 = clk_provider_set_parent(hw->clk, clk_pll1.hw.clk); return ret1; } - if (rate == clk_get_rate(clk_pll2.hw.clk)) { - ret1 = clk_set_parent(hw->clk, clk_pll2.hw.clk); + if (rate == clk_provider_get_rate(clk_pll2.hw.clk)) { + ret1 = clk_provider_set_parent(hw->clk, clk_pll2.hw.clk); return ret1; } - if (rate == clk_get_rate(clk_pll3.hw.clk)) { - ret1 = clk_set_parent(hw->clk, clk_pll3.hw.clk); + if (rate == clk_provider_get_rate(clk_pll3.hw.clk)) { + ret1 = clk_provider_set_parent(hw->clk, clk_pll3.hw.clk); return ret1; } - cur_parent = clk_get_parent(hw->clk); + cur_parent = clk_provider_get_parent(hw->clk); /* switch to tmp pll before setting parent clock's rate */ if (cur_parent == clk_pll1.hw.clk) { - ret1 = clk_set_parent(hw->clk, clk_pll2.hw.clk); + ret1 = clk_provider_set_parent(hw->clk, clk_pll2.hw.clk); BUG_ON(ret1); } - ret2 = clk_set_rate(clk_pll1.hw.clk, rate); + ret2 = clk_provider_set_rate(clk_pll1.hw.clk, rate); - ret1 = clk_set_parent(hw->clk, clk_pll1.hw.clk); + ret1 = clk_provider_set_parent(hw->clk, clk_pll1.hw.clk); return ret2 ? ret2 : ret1; } diff --git a/drivers/clk/sirf/clk-prima2.c b/drivers/clk/sirf/clk-prima2.c index 6968e2e..869bc8c 100644 --- a/drivers/clk/sirf/clk-prima2.c +++ b/drivers/clk/sirf/clk-prima2.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -112,7 +111,7 @@ static __initdata struct clk_hw *prima2_clk_hw_array[maxclk] = { &clk_cphif.hw, }; -static struct clk *prima2_clks[maxclk]; +static struct clk_core *prima2_clks[maxclk]; static void __init prima2_clk_init(struct device_node *np) { diff --git a/drivers/clk/socfpga/clk-gate.c b/drivers/clk/socfpga/clk-gate.c index dd3a78c..5d00dee 100644 --- a/drivers/clk/socfpga/clk-gate.c +++ b/drivers/clk/socfpga/clk-gate.c @@ -15,7 +15,6 @@ * Based from clk-highbank.c * */ -#include #include #include #include @@ -188,7 +187,7 @@ static void __init __socfpga_gate_init(struct device_node *node, u32 div_reg[3]; u32 clk_phase[2]; u32 fixed_div; - struct clk *clk; + struct clk_core *clk; struct socfpga_gate_clk *socfpga_clk; const char *clk_name = node->name; const char *parent_name[SOCFPGA_MAX_PARENTS]; diff --git a/drivers/clk/socfpga/clk-periph.c b/drivers/clk/socfpga/clk-periph.c index 46531c3..1bcb275 100644 --- a/drivers/clk/socfpga/clk-periph.c +++ b/drivers/clk/socfpga/clk-periph.c @@ -15,7 +15,6 @@ * Based from clk-highbank.c * */ -#include #include #include #include @@ -53,7 +52,7 @@ static __init void __socfpga_periph_init(struct device_node *node, const struct clk_ops *ops) { u32 reg; - struct clk *clk; + struct clk_core *clk; struct socfpga_periph_clk *periph_clk; const char *clk_name = node->name; const char *parent_name; diff --git a/drivers/clk/socfpga/clk-pll.c b/drivers/clk/socfpga/clk-pll.c index de6da95..ba7073f 100644 --- a/drivers/clk/socfpga/clk-pll.c +++ b/drivers/clk/socfpga/clk-pll.c @@ -15,7 +15,6 @@ * Based from clk-highbank.c * */ -#include #include #include #include @@ -81,11 +80,11 @@ static struct clk_ops clk_pll_ops = { .get_parent = clk_pll_get_parent, }; -static __init struct clk *__socfpga_pll_init(struct device_node *node, +static __init struct clk_core *__socfpga_pll_init(struct device_node *node, const struct clk_ops *ops) { u32 reg; - struct clk *clk; + struct clk_core *clk; struct socfpga_pll *pll_clk; const char *clk_name = node->name; const char *parent_name[SOCFPGA_MAX_PARENTS]; diff --git a/drivers/clk/spear/clk-aux-synth.c b/drivers/clk/spear/clk-aux-synth.c index bdfb442..18334c3 100644 --- a/drivers/clk/spear/clk-aux-synth.c +++ b/drivers/clk/spear/clk-aux-synth.c @@ -134,14 +134,14 @@ static struct clk_ops clk_aux_ops = { .set_rate = clk_aux_set_rate, }; -struct clk *clk_register_aux(const char *aux_name, const char *gate_name, +struct clk_core *clk_register_aux(const char *aux_name, const char *gate_name, const char *parent_name, unsigned long flags, void __iomem *reg, struct aux_clk_masks *masks, struct aux_rate_tbl *rtbl, - u8 rtbl_cnt, spinlock_t *lock, struct clk **gate_clk) + u8 rtbl_cnt, spinlock_t *lock, struct clk_core **gate_clk) { struct clk_aux *aux; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; if (!aux_name || !parent_name || !reg || !rtbl || !rtbl_cnt) { pr_err("Invalid arguments passed"); @@ -177,7 +177,7 @@ struct clk *clk_register_aux(const char *aux_name, const char *gate_name, goto free_aux; if (gate_name) { - struct clk *tgate_clk; + struct clk_core *tgate_clk; tgate_clk = clk_register_gate(NULL, gate_name, aux_name, CLK_SET_RATE_PARENT, reg, diff --git a/drivers/clk/spear/clk-frac-synth.c b/drivers/clk/spear/clk-frac-synth.c index dffd4ce..bce2c0e 100644 --- a/drivers/clk/spear/clk-frac-synth.c +++ b/drivers/clk/spear/clk-frac-synth.c @@ -122,13 +122,13 @@ static struct clk_ops clk_frac_ops = { .set_rate = clk_frac_set_rate, }; -struct clk *clk_register_frac(const char *name, const char *parent_name, +struct clk_core *clk_register_frac(const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, struct frac_rate_tbl *rtbl, u8 rtbl_cnt, spinlock_t *lock) { struct clk_init_data init; struct clk_frac *frac; - struct clk *clk; + struct clk_core *clk; if (!name || !parent_name || !reg || !rtbl || !rtbl_cnt) { pr_err("Invalid arguments passed"); diff --git a/drivers/clk/spear/clk-gpt-synth.c b/drivers/clk/spear/clk-gpt-synth.c index 1afc18c..f8e13f3 100644 --- a/drivers/clk/spear/clk-gpt-synth.c +++ b/drivers/clk/spear/clk-gpt-synth.c @@ -111,13 +111,13 @@ static struct clk_ops clk_gpt_ops = { .set_rate = clk_gpt_set_rate, }; -struct clk *clk_register_gpt(const char *name, const char *parent_name, unsigned +struct clk_core *clk_register_gpt(const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, struct gpt_rate_tbl *rtbl, u8 rtbl_cnt, spinlock_t *lock) { struct clk_init_data init; struct clk_gpt *gpt; - struct clk *clk; + struct clk_core *clk; if (!name || !parent_name || !reg || !rtbl || !rtbl_cnt) { pr_err("Invalid arguments passed"); diff --git a/drivers/clk/spear/clk-vco-pll.c b/drivers/clk/spear/clk-vco-pll.c index 1b9b65b..226f2ec 100644 --- a/drivers/clk/spear/clk-vco-pll.c +++ b/drivers/clk/spear/clk-vco-pll.c @@ -272,16 +272,16 @@ static struct clk_ops clk_vco_ops = { .set_rate = clk_vco_set_rate, }; -struct clk *clk_register_vco_pll(const char *vco_name, const char *pll_name, +struct clk_core *clk_register_vco_pll(const char *vco_name, const char *pll_name, const char *vco_gate_name, const char *parent_name, unsigned long flags, void __iomem *mode_reg, void __iomem *cfg_reg, struct pll_rate_tbl *rtbl, u8 rtbl_cnt, - spinlock_t *lock, struct clk **pll_clk, - struct clk **vco_gate_clk) + spinlock_t *lock, struct clk_core **pll_clk, + struct clk_core **vco_gate_clk) { struct clk_vco *vco; struct clk_pll *pll; - struct clk *vco_clk, *tpll_clk, *tvco_gate_clk; + struct clk_core *vco_clk, *tpll_clk, *tvco_gate_clk; struct clk_init_data vco_init, pll_init; const char **vco_parent_name; diff --git a/drivers/clk/spear/clk.h b/drivers/clk/spear/clk.h index 9317376..777322e 100644 --- a/drivers/clk/spear/clk.h +++ b/drivers/clk/spear/clk.h @@ -110,22 +110,22 @@ typedef unsigned long (*clk_calc_rate)(struct clk_hw *hw, unsigned long prate, int index); /* clk register routines */ -struct clk *clk_register_aux(const char *aux_name, const char *gate_name, +struct clk_core *clk_register_aux(const char *aux_name, const char *gate_name, const char *parent_name, unsigned long flags, void __iomem *reg, struct aux_clk_masks *masks, struct aux_rate_tbl *rtbl, - u8 rtbl_cnt, spinlock_t *lock, struct clk **gate_clk); -struct clk *clk_register_frac(const char *name, const char *parent_name, + u8 rtbl_cnt, spinlock_t *lock, struct clk_core **gate_clk); +struct clk_core *clk_register_frac(const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, struct frac_rate_tbl *rtbl, u8 rtbl_cnt, spinlock_t *lock); -struct clk *clk_register_gpt(const char *name, const char *parent_name, unsigned +struct clk_core *clk_register_gpt(const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, struct gpt_rate_tbl *rtbl, u8 rtbl_cnt, spinlock_t *lock); -struct clk *clk_register_vco_pll(const char *vco_name, const char *pll_name, +struct clk_core *clk_register_vco_pll(const char *vco_name, const char *pll_name, const char *vco_gate_name, const char *parent_name, unsigned long flags, void __iomem *mode_reg, void __iomem *cfg_reg, struct pll_rate_tbl *rtbl, u8 rtbl_cnt, - spinlock_t *lock, struct clk **pll_clk, - struct clk **vco_gate_clk); + spinlock_t *lock, struct clk_core **pll_clk, + struct clk_core **vco_gate_clk); long clk_round_rate_index(struct clk_hw *hw, unsigned long drate, unsigned long parent_rate, clk_calc_rate calc_rate, u8 rtbl_cnt, diff --git a/drivers/clk/spear/spear1310_clock.c b/drivers/clk/spear/spear1310_clock.c index 4daa597..58206e0 100644 --- a/drivers/clk/spear/spear1310_clock.c +++ b/drivers/clk/spear/spear1310_clock.c @@ -11,7 +11,6 @@ * warranty of any kind, whether express or implied. */ -#include #include #include #include @@ -385,7 +384,7 @@ static const char *tdm_parents[] = { "ras_pll3_clk", "gen_syn1_clk", }; void __init spear1310_clk_init(void __iomem *misc_base, void __iomem *ras_base) { - struct clk *clk, *clk1; + struct clk_core *clk, *clk1; clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, CLK_IS_ROOT, 32000); diff --git a/drivers/clk/spear/spear1340_clock.c b/drivers/clk/spear/spear1340_clock.c index 5a5c664..704301c 100644 --- a/drivers/clk/spear/spear1340_clock.c +++ b/drivers/clk/spear/spear1340_clock.c @@ -11,7 +11,6 @@ * warranty of any kind, whether express or implied. */ -#include #include #include #include @@ -442,7 +441,7 @@ static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco2div2_clk", void __init spear1340_clk_init(void __iomem *misc_base) { - struct clk *clk, *clk1; + struct clk_core *clk, *clk1; clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, CLK_IS_ROOT, 32000); diff --git a/drivers/clk/spear/spear3xx_clock.c b/drivers/clk/spear/spear3xx_clock.c index bb5f387..40d1b08 100644 --- a/drivers/clk/spear/spear3xx_clock.c +++ b/drivers/clk/spear/spear3xx_clock.c @@ -9,7 +9,6 @@ * warranty of any kind, whether express or implied. */ -#include #include #include #include @@ -140,7 +139,7 @@ static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none", #ifdef CONFIG_MACH_SPEAR300 static void __init spear300_clk_init(void) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_clk", 0, 1, 1); @@ -170,7 +169,7 @@ static inline void spear300_clk_init(void) { } #ifdef CONFIG_MACH_SPEAR310 static void __init spear310_clk_init(void) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_fixed_factor(NULL, "emi_clk", "ras_ahb_clk", 0, 1, 1); @@ -246,9 +245,9 @@ static const char *smii0_parents[] = { "smii_125m_pad", "ras_pll2_clk", static const char *uartx_parents[] = { "ras_syn1_gclk", "ras_apb_clk", }; static void __init spear320_clk_init(void __iomem *soc_config_base, - struct clk *ras_apb_clk) + struct clk_core *ras_apb_clk) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_fixed_rate(NULL, "smii_125m_pad_clk", NULL, CLK_IS_ROOT, 125000000); @@ -344,7 +343,7 @@ static void __init spear320_clk_init(void __iomem *soc_config_base, 0, &_lock); clk_register_clkdev(clk, NULL, "a3000000.serial"); /* Enforce ras_apb_clk */ - clk_set_parent(clk, ras_apb_clk); + clk_provider_set_parent(clk, ras_apb_clk); clk = clk_register_mux(NULL, "uart2_clk", uartx_parents, ARRAY_SIZE(uartx_parents), @@ -353,7 +352,7 @@ static void __init spear320_clk_init(void __iomem *soc_config_base, SPEAR320_UARTX_PCLK_MASK, 0, &_lock); clk_register_clkdev(clk, NULL, "a4000000.serial"); /* Enforce ras_apb_clk */ - clk_set_parent(clk, ras_apb_clk); + clk_provider_set_parent(clk, ras_apb_clk); clk = clk_register_mux(NULL, "uart3_clk", uartx_parents, ARRAY_SIZE(uartx_parents), @@ -384,12 +383,12 @@ static void __init spear320_clk_init(void __iomem *soc_config_base, clk_register_clkdev(clk, NULL, "60100000.serial"); } #else -static inline void spear320_clk_init(void __iomem *sb, struct clk *rc) { } +static inline void spear320_clk_init(void __iomem *sb, struct clk_core *rc) { } #endif void __init spear3xx_clk_init(void __iomem *misc_base, void __iomem *soc_config_base) { - struct clk *clk, *clk1, *ras_apb_clk; + struct clk_core *clk, *clk1, *ras_apb_clk; clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, CLK_IS_ROOT, 32000); diff --git a/drivers/clk/spear/spear6xx_clock.c b/drivers/clk/spear/spear6xx_clock.c index 4f649c9..364a8d3 100644 --- a/drivers/clk/spear/spear6xx_clock.c +++ b/drivers/clk/spear/spear6xx_clock.c @@ -9,7 +9,6 @@ * warranty of any kind, whether express or implied. */ -#include #include #include #include @@ -116,7 +115,7 @@ static struct gpt_rate_tbl gpt_rtbl[] = { void __init spear6xx_clk_init(void __iomem *misc_base) { - struct clk *clk, *clk1; + struct clk_core *clk, *clk1; clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, CLK_IS_ROOT, 32000); diff --git a/drivers/clk/st/clk-flexgen.c b/drivers/clk/st/clk-flexgen.c index 2282cef..699f7a1 100644 --- a/drivers/clk/st/clk-flexgen.c +++ b/drivers/clk/st/clk-flexgen.c @@ -163,12 +163,12 @@ static const struct clk_ops flexgen_ops = { .set_rate = flexgen_set_rate, }; -struct clk *clk_register_flexgen(const char *name, +struct clk_core *clk_register_flexgen(const char *name, const char **parent_names, u8 num_parents, void __iomem *reg, spinlock_t *lock, u32 idx, unsigned long flexgen_flags) { struct flexgen *fgxbar; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; u32 xbar_shift; void __iomem *xbar_reg, *fdiv_reg; @@ -223,8 +223,8 @@ struct clk *clk_register_flexgen(const char *name, else pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); return clk; } @@ -283,7 +283,7 @@ void __init st_of_flexgen_setup(struct device_node *np) goto err; } - clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk *), + clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) goto err; @@ -293,7 +293,7 @@ void __init st_of_flexgen_setup(struct device_node *np) goto err; for (i = 0; i < clk_data->clk_num; i++) { - struct clk *clk; + struct clk_core *clk; const char *clk_name; if (of_property_read_string_index(np, "clock-output-names", diff --git a/drivers/clk/st/clkgen-fsyn.c b/drivers/clk/st/clkgen-fsyn.c index af94ed8..ceda1f2 100644 --- a/drivers/clk/st/clkgen-fsyn.c +++ b/drivers/clk/st/clkgen-fsyn.c @@ -614,13 +614,13 @@ static const struct clk_ops st_quadfs_pll_c32_ops = { .set_rate = quadfs_pll_fs660c32_set_rate, }; -static struct clk * __init st_clk_register_quadfs_pll( +static struct clk_core * __init st_clk_register_quadfs_pll( const char *name, const char *parent_name, struct clkgen_quadfs_data *quadfs, void __iomem *reg, spinlock_t *lock) { struct st_clk_quadfs_pll *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* @@ -1018,13 +1018,13 @@ static const struct clk_ops st_quadfs_ops = { .recalc_rate = quadfs_recalc_rate, }; -static struct clk * __init st_clk_register_quadfs_fsynth( +static struct clk_core * __init st_clk_register_quadfs_fsynth( const char *name, const char *parent_name, struct clkgen_quadfs_data *quadfs, void __iomem *reg, u32 chan, spinlock_t *lock) { struct st_clk_quadfs_fsynth *fs; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* @@ -1102,7 +1102,7 @@ static void __init st_of_create_quadfs_fsynths( return; clk_data->clk_num = QUADFS_MAX_CHAN; - clk_data->clks = kzalloc(QUADFS_MAX_CHAN * sizeof(struct clk *), + clk_data->clks = kzalloc(QUADFS_MAX_CHAN * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) { @@ -1111,7 +1111,7 @@ static void __init st_of_create_quadfs_fsynths( } for (fschan = 0; fschan < QUADFS_MAX_CHAN; fschan++) { - struct clk *clk; + struct clk_core *clk; const char *clk_name; if (of_property_read_string_index(np, "clock-output-names", @@ -1136,8 +1136,8 @@ static void __init st_of_create_quadfs_fsynths( clk_data->clks[fschan] = clk; pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); } } @@ -1147,7 +1147,7 @@ static void __init st_of_create_quadfs_fsynths( static void __init st_of_quadfs_setup(struct device_node *np) { const struct of_device_id *match; - struct clk *clk; + struct clk_core *clk; const char *pll_name, *clk_parent_name; void __iomem *reg; spinlock_t *lock; @@ -1181,8 +1181,8 @@ static void __init st_of_quadfs_setup(struct device_node *np) else pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); st_of_create_quadfs_fsynths(np, pll_name, (struct clkgen_quadfs_data *)match->data, diff --git a/drivers/clk/st/clkgen-mux.c b/drivers/clk/st/clkgen-mux.c index 79dc40b..d2a951f 100644 --- a/drivers/clk/st/clkgen-mux.c +++ b/drivers/clk/st/clkgen-mux.c @@ -215,7 +215,7 @@ static const struct clk_ops clkgena_divmux_ops = { /** * clk_register_genamux - register a genamux clock with the clock framework */ -struct clk *clk_register_genamux(const char *name, +struct clk_core *clk_register_genamux(const char *name, const char **parent_names, u8 num_parents, void __iomem *reg, const struct clkgena_divmux_data *muxdata, @@ -227,7 +227,7 @@ struct clk *clk_register_genamux(const char *name, const int mux_width = 2; const int divider_width = 5; struct clkgena_divmux *genamux; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; int i; @@ -280,8 +280,8 @@ struct clk *clk_register_genamux(const char *name, pr_debug("%s: parent %s rate %lu\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + clk_provider_get_rate(clk)); err: return clk; } @@ -413,14 +413,14 @@ void __init st_of_clkgena_divmux_setup(struct device_node *np) goto err; clk_data->clk_num = data->num_outputs; - clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk *), + clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) goto err; for (i = 0; i < clk_data->clk_num; i++) { - struct clk *clk; + struct clk_core *clk; const char *clk_name; if (of_property_read_string_index(np, "clock-output-names", @@ -490,7 +490,7 @@ void __init st_of_clkgena_prediv_setup(struct device_node *np) const struct of_device_id *match; void __iomem *reg; const char *parent_name, *clk_name; - struct clk *clk; + struct clk_core *clk; struct clkgena_prediv_data *data; match = of_match_node(clkgena_prediv_of_match, np); @@ -522,8 +522,8 @@ void __init st_of_clkgena_prediv_setup(struct device_node *np) of_clk_add_provider(np, of_clk_src_simple_get, clk); pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); return; } @@ -625,7 +625,7 @@ static struct of_device_id mux_of_match[] = { void __init st_of_clkgen_mux_setup(struct device_node *np) { const struct of_device_id *match; - struct clk *clk; + struct clk_core *clk; void __iomem *reg; const char **parents; int num_parents; @@ -662,8 +662,8 @@ void __init st_of_clkgen_mux_setup(struct device_node *np) pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); of_clk_add_provider(np, of_clk_src_simple_get, clk); @@ -726,14 +726,14 @@ void __init st_of_clkgen_vcc_setup(struct device_node *np) goto err; clk_data->clk_num = VCC_MAX_CHANNELS; - clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk *), + clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) goto err; for (i = 0; i < clk_data->clk_num; i++) { - struct clk *clk; + struct clk_core *clk; const char *clk_name; struct clk_gate *gate; struct clk_divider *div; @@ -796,8 +796,8 @@ void __init st_of_clkgen_vcc_setup(struct device_node *np) pr_debug("%s: parent %s rate %u\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - (unsigned int)clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + (unsigned int)clk_provider_get_rate(clk)); clk_data->clks[i] = clk; } diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c index 29769d7..32bac02 100644 --- a/drivers/clk/st/clkgen-pll.c +++ b/drivers/clk/st/clkgen-pll.c @@ -390,13 +390,13 @@ static const struct clk_ops st_pll1200c32_ops = { .recalc_rate = recalc_stm_pll1200c32, }; -static struct clk * __init clkgen_pll_register(const char *parent_name, +static struct clk_core * __init clkgen_pll_register(const char *parent_name, struct clkgen_pll_data *pll_data, void __iomem *reg, const char *clk_name) { struct clkgen_pll *pll; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll = kzalloc(sizeof(*pll), GFP_KERNEL); @@ -422,16 +422,16 @@ static struct clk * __init clkgen_pll_register(const char *parent_name, pr_debug("%s: parent %s rate %lu\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + clk_provider_get_rate(clk)); return clk; } -static struct clk * __init clkgen_c65_lsdiv_register(const char *parent_name, +static struct clk_core * __init clkgen_c65_lsdiv_register(const char *parent_name, const char *clk_name) { - struct clk *clk; + struct clk_core *clk; clk = clk_register_fixed_factor(NULL, clk_name, parent_name, 0, 1, 2); if (IS_ERR(clk)) @@ -439,8 +439,8 @@ static struct clk * __init clkgen_c65_lsdiv_register(const char *parent_name, pr_debug("%s: parent %s rate %lu\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + clk_provider_get_rate(clk)); return clk; } @@ -484,7 +484,7 @@ static void __init clkgena_c65_pll_setup(struct device_node *np) return; clk_data->clk_num = num_pll_outputs; - clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk *), + clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) @@ -543,14 +543,14 @@ err: CLK_OF_DECLARE(clkgena_c65_plls, "st,clkgena-plls-c65", clkgena_c65_pll_setup); -static struct clk * __init clkgen_odf_register(const char *parent_name, +static struct clk_core * __init clkgen_odf_register(const char *parent_name, void * __iomem reg, struct clkgen_pll_data *pll_data, int odf, spinlock_t *odf_lock, const char *odf_name) { - struct clk *clk; + struct clk_core *clk; unsigned long flags; struct clk_gate *gate; struct clk_divider *div; @@ -588,8 +588,8 @@ static struct clk * __init clkgen_odf_register(const char *parent_name, pr_debug("%s: parent %s rate %lu\n", __clk_get_name(clk), - __clk_get_name(clk_get_parent(clk)), - clk_get_rate(clk)); + __clk_get_name(clk_provider_get_parent(clk)), + clk_provider_get_rate(clk)); return clk; } @@ -640,7 +640,7 @@ static struct of_device_id c32_pll_of_match[] = { static void __init clkgen_c32_pll_setup(struct device_node *np) { const struct of_device_id *match; - struct clk *clk; + struct clk_core *clk; const char *parent_name, *pll_name; void __iomem *pll_base; int num_odfs, odf; @@ -676,14 +676,14 @@ static void __init clkgen_c32_pll_setup(struct device_node *np) return; clk_data->clk_num = num_odfs; - clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk *), + clk_data->clks = kzalloc(clk_data->clk_num * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) goto err; for (odf = 0; odf < num_odfs; odf++) { - struct clk *clk; + struct clk_core *clk; const char *clk_name; if (of_property_read_string_index(np, "clock-output-names", @@ -723,7 +723,7 @@ static struct of_device_id c32_gpu_pll_of_match[] = { static void __init clkgengpu_c32_pll_setup(struct device_node *np) { const struct of_device_id *match; - struct clk *clk; + struct clk_core *clk; const char *parent_name; void __iomem *reg; const char *clk_name; diff --git a/drivers/clk/sunxi/clk-a10-hosc.c b/drivers/clk/sunxi/clk-a10-hosc.c index 0481d5d..c5e4c41 100644 --- a/drivers/clk/sunxi/clk-a10-hosc.c +++ b/drivers/clk/sunxi/clk-a10-hosc.c @@ -25,7 +25,7 @@ static DEFINE_SPINLOCK(hosc_lock); static void __init sun4i_osc_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; struct clk_fixed_rate *fixed; struct clk_gate *gate; const char *clk_name = node->name; diff --git a/drivers/clk/sunxi/clk-a20-gmac.c b/drivers/clk/sunxi/clk-a20-gmac.c index 5296fd6..63c7dd5 100644 --- a/drivers/clk/sunxi/clk-a20-gmac.c +++ b/drivers/clk/sunxi/clk-a20-gmac.c @@ -55,7 +55,7 @@ static DEFINE_SPINLOCK(gmac_lock); static void __init sun7i_a20_gmac_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; struct clk_mux *mux; struct clk_gate *gate; const char *clk_name = node->name; diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c index 2057c8a..bb2d4b2 100644 --- a/drivers/clk/sunxi/clk-factors.c +++ b/drivers/clk/sunxi/clk-factors.c @@ -79,9 +79,9 @@ static long clk_factors_round_rate(struct clk_hw *hw, unsigned long rate, static long clk_factors_determine_rate(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_p) + struct clk_core **best_parent_p) { - struct clk *clk = hw->clk, *parent, *best_parent = NULL; + struct clk_core *clk = hw->clk, *parent, *best_parent = NULL; int i, num_parents; unsigned long parent_rate, best = 0, child_rate, best_child_rate = 0; diff --git a/drivers/clk/sunxi/clk-sun6i-apb0-gates.c b/drivers/clk/sunxi/clk-sun6i-apb0-gates.c index e10d052..f29b06e 100644 --- a/drivers/clk/sunxi/clk-sun6i-apb0-gates.c +++ b/drivers/clk/sunxi/clk-sun6i-apb0-gates.c @@ -74,7 +74,7 @@ static int sun6i_a31_apb0_gates_clk_probe(struct platform_device *pdev) /* Worst-case size approximation and memory allocation */ ngates = find_last_bit(data->mask, SUN6I_APB0_GATES_MAX_SIZE); clk_data->clks = devm_kcalloc(&pdev->dev, (ngates + 1), - sizeof(struct clk *), GFP_KERNEL); + sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) return -ENOMEM; diff --git a/drivers/clk/sunxi/clk-sun6i-apb0.c b/drivers/clk/sunxi/clk-sun6i-apb0.c index 1fa2337..5e4649e 100644 --- a/drivers/clk/sunxi/clk-sun6i-apb0.c +++ b/drivers/clk/sunxi/clk-sun6i-apb0.c @@ -35,7 +35,7 @@ static int sun6i_a31_apb0_clk_probe(struct platform_device *pdev) const char *clk_parent; struct resource *r; void __iomem *reg; - struct clk *clk; + struct clk_core *clk; r = platform_get_resource(pdev, IORESOURCE_MEM, 0); reg = devm_ioremap_resource(&pdev->dev, r); diff --git a/drivers/clk/sunxi/clk-sun6i-ar100.c b/drivers/clk/sunxi/clk-sun6i-ar100.c index eca8ca0..984d5d0 100644 --- a/drivers/clk/sunxi/clk-sun6i-ar100.c +++ b/drivers/clk/sunxi/clk-sun6i-ar100.c @@ -46,7 +46,7 @@ static unsigned long ar100_recalc_rate(struct clk_hw *hw, static long ar100_determine_rate(struct clk_hw *hw, unsigned long rate, unsigned long *best_parent_rate, - struct clk **best_parent_clk) + struct clk_core **best_parent_clk) { int nparents = __clk_get_num_parents(hw->clk); long best_rate = -EINVAL; @@ -57,7 +57,7 @@ static long ar100_determine_rate(struct clk_hw *hw, unsigned long rate, for (i = 0; i < nparents; i++) { unsigned long parent_rate; unsigned long tmp_rate; - struct clk *parent; + struct clk_core *parent; unsigned long div; int shift; @@ -176,7 +176,7 @@ static int sun6i_a31_ar100_clk_probe(struct platform_device *pdev) struct clk_init_data init; struct ar100_clk *ar100; struct resource *r; - struct clk *clk; + struct clk_core *clk; int nparents; int i; diff --git a/drivers/clk/sunxi/clk-sun8i-apb0.c b/drivers/clk/sunxi/clk-sun8i-apb0.c index 1f5ba9b..fa308fd 100644 --- a/drivers/clk/sunxi/clk-sun8i-apb0.c +++ b/drivers/clk/sunxi/clk-sun8i-apb0.c @@ -26,7 +26,7 @@ static int sun8i_a23_apb0_clk_probe(struct platform_device *pdev) const char *clk_parent; struct resource *r; void __iomem *reg; - struct clk *clk; + struct clk_core *clk; r = platform_get_resource(pdev, IORESOURCE_MEM, 0); reg = devm_ioremap_resource(&pdev->dev, r); diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c index b654b7b..44c4470 100644 --- a/drivers/clk/sunxi/clk-sunxi.c +++ b/drivers/clk/sunxi/clk-sunxi.c @@ -403,7 +403,7 @@ static void sun7i_a20_get_out_factors(u32 *freq, u32 parent_rate, * clk_sunxi_mmc_phase_control() - configures MMC clock phase control */ -void clk_sunxi_mmc_phase_control(struct clk *clk, u8 sample, u8 output) +void clk_sunxi_mmc_phase_control(struct clk_core *clk, u8 sample, u8 output) { #define to_clk_composite(_hw) container_of(_hw, struct clk_composite, hw) #define to_clk_factors(_hw) container_of(_hw, struct clk_factors, hw) @@ -582,10 +582,10 @@ static const struct factors_data sun7i_a20_out_data __initconst = { .getter = sun7i_a20_get_out_factors, }; -static struct clk * __init sunxi_factors_clk_setup(struct device_node *node, +static struct clk_core * __init sunxi_factors_clk_setup(struct device_node *node, const struct factors_data *data) { - struct clk *clk; + struct clk_core *clk; struct clk_factors *factors; struct clk_gate *gate = NULL; struct clk_mux *mux = NULL; @@ -695,7 +695,7 @@ static const struct mux_data sun4i_apb1_mux_data __initconst = { static void __init sunxi_mux_clk_setup(struct device_node *node, struct mux_data *data) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; const char *parents[SUNXI_MAX_PARENTS]; void __iomem *reg; @@ -777,7 +777,7 @@ static const struct div_data sun6i_a31_apb2_div_data __initconst = { static void __init sunxi_divider_clk_setup(struct device_node *node, struct div_data *data) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; const char *clk_parent; void __iomem *reg; @@ -976,7 +976,7 @@ static void __init sunxi_gates_clk_setup(struct device_node *node, clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL); if (!clk_data) return; - clk_data->clks = kzalloc((qty+1) * sizeof(struct clk *), GFP_KERNEL); + clk_data->clks = kzalloc((qty+1) * sizeof(struct clk_core *), GFP_KERNEL); if (!clk_data->clks) { kfree(clk_data); return; @@ -1078,7 +1078,7 @@ static void __init sunxi_divs_clk_setup(struct device_node *node, struct clk_onecell_data *clk_data; const char *parent; const char *clk_name; - struct clk **clks, *pclk; + struct clk_core **clks, *pclk; struct clk_hw *gate_hw, *rate_hw; const struct clk_ops *rate_ops; struct clk_gate *gate = NULL; @@ -1291,10 +1291,10 @@ static void __init sunxi_init_clocks(const char *clocks[], int nclocks) /* Protect the clocks that needs to stay on */ for (i = 0; i < nclocks; i++) { - struct clk *clk = clk_get(NULL, clocks[i]); + struct clk_core *clk = clk_provider_get(NULL, clocks[i]); if (!IS_ERR(clk)) - clk_prepare_enable(clk); + clk_provider_prepare_enable(clk); } } diff --git a/drivers/clk/tegra/clk-audio-sync.c b/drivers/clk/tegra/clk-audio-sync.c index c0f7843..53c3488 100644 --- a/drivers/clk/tegra/clk-audio-sync.c +++ b/drivers/clk/tegra/clk-audio-sync.c @@ -54,12 +54,12 @@ const struct clk_ops tegra_clk_sync_source_ops = { .recalc_rate = clk_sync_source_recalc_rate, }; -struct clk *tegra_clk_register_sync_source(const char *name, +struct clk_core *tegra_clk_register_sync_source(const char *name, unsigned long rate, unsigned long max_rate) { struct tegra_clk_sync_source *sync; struct clk_init_data init; - struct clk *clk; + struct clk_core *clk; sync = kzalloc(sizeof(*sync), GFP_KERNEL); if (!sync) { diff --git a/drivers/clk/tegra/clk-divider.c b/drivers/clk/tegra/clk-divider.c index 290f9c1..c69a728 100644 --- a/drivers/clk/tegra/clk-divider.c +++ b/drivers/clk/tegra/clk-divider.c @@ -19,7 +19,6 @@ #include #include #include -#include #include "clk.h" @@ -147,13 +146,13 @@ const struct clk_ops tegra_clk_frac_div_ops = { .round_rate = clk_frac_div_round_rate, }; -struct clk *tegra_clk_register_divider(const char *name, +struct clk_core *tegra_clk_register_divider(const char *name, const char *parent_name, void __iomem *reg, unsigned long flags, u8 clk_divider_flags, u8 shift, u8 width, u8 frac_width, spinlock_t *lock) { struct tegra_clk_frac_div *divider; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; divider = kzalloc(sizeof(*divider), GFP_KERNEL); diff --git a/drivers/clk/tegra/clk-periph-gate.c b/drivers/clk/tegra/clk-periph-gate.c index 0aa8830..d59200f 100644 --- a/drivers/clk/tegra/clk-periph-gate.c +++ b/drivers/clk/tegra/clk-periph-gate.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include #include @@ -128,12 +127,12 @@ const struct clk_ops tegra_clk_periph_gate_ops = { .disable = clk_periph_disable, }; -struct clk *tegra_clk_register_periph_gate(const char *name, +struct clk_core *tegra_clk_register_periph_gate(const char *name, const char *parent_name, u8 gate_flags, void __iomem *clk_base, unsigned long flags, int clk_num, int *enable_refcnt) { struct tegra_clk_periph_gate *gate; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; struct tegra_clk_periph_regs *pregs; diff --git a/drivers/clk/tegra/clk-periph.c b/drivers/clk/tegra/clk-periph.c index 9e899c18..34a60fd 100644 --- a/drivers/clk/tegra/clk-periph.c +++ b/drivers/clk/tegra/clk-periph.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include #include @@ -138,13 +137,13 @@ static const struct clk_ops tegra_clk_periph_no_gate_ops = { .set_rate = clk_periph_set_rate, }; -static struct clk *_tegra_clk_register_periph(const char *name, +static struct clk_core *_tegra_clk_register_periph(const char *name, const char **parent_names, int num_parents, struct tegra_clk_periph *periph, void __iomem *clk_base, u32 offset, unsigned long flags) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; struct tegra_clk_periph_regs *bank; bool div = !(periph->gate.flags & TEGRA_PERIPH_NO_DIV); @@ -186,7 +185,7 @@ static struct clk *_tegra_clk_register_periph(const char *name, return clk; } -struct clk *tegra_clk_register_periph(const char *name, +struct clk_core *tegra_clk_register_periph(const char *name, const char **parent_names, int num_parents, struct tegra_clk_periph *periph, void __iomem *clk_base, u32 offset, unsigned long flags) @@ -195,7 +194,7 @@ struct clk *tegra_clk_register_periph(const char *name, periph, clk_base, offset, flags); } -struct clk *tegra_clk_register_periph_nodiv(const char *name, +struct clk_core *tegra_clk_register_periph_nodiv(const char *name, const char **parent_names, int num_parents, struct tegra_clk_periph *periph, void __iomem *clk_base, u32 offset) diff --git a/drivers/clk/tegra/clk-pll-out.c b/drivers/clk/tegra/clk-pll-out.c index 3598987..3adbc24 100644 --- a/drivers/clk/tegra/clk-pll-out.c +++ b/drivers/clk/tegra/clk-pll-out.c @@ -20,7 +20,6 @@ #include #include #include -#include #include "clk.h" @@ -87,13 +86,13 @@ const struct clk_ops tegra_clk_pll_out_ops = { .disable = clk_pll_out_disable, }; -struct clk *tegra_clk_register_pll_out(const char *name, +struct clk_core *tegra_clk_register_pll_out(const char *name, const char *parent_name, void __iomem *reg, u8 enb_bit_idx, u8 rst_bit_idx, unsigned long flags, u8 pll_out_flags, spinlock_t *lock) { struct tegra_clk_pll_out *pll_out; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; pll_out = kzalloc(sizeof(*pll_out), GFP_KERNEL); diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c index c7c6d8f..aa18eab 100644 --- a/drivers/clk/tegra/clk-pll.c +++ b/drivers/clk/tegra/clk-pll.c @@ -19,7 +19,6 @@ #include #include #include -#include #include "clk.h" @@ -729,7 +728,7 @@ static int clk_plle_training(struct tegra_clk_pll *pll) static int clk_plle_enable(struct clk_hw *hw) { struct tegra_clk_pll *pll = to_clk_pll(hw); - unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); + unsigned long input_rate = clk_provider_get_rate(clk_provider_get_parent(hw->clk)); struct tegra_clk_pll_freq_table sel; u32 val; int err; @@ -1033,7 +1032,7 @@ static int clk_pllm_set_rate(struct clk_hw *hw, unsigned long rate, state = clk_pll_is_enabled(hw); if (state) { - if (rate != clk_get_rate(hw->clk)) { + if (rate != clk_provider_get_rate(hw->clk)) { pr_err("%s: Cannot change active PLLM\n", __func__); ret = -EINVAL; goto out; @@ -1285,7 +1284,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw) u32 val; int ret; unsigned long flags = 0; - unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); + unsigned long input_rate = clk_provider_get_rate(clk_provider_get_parent(hw->clk)); if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate)) return -EINVAL; @@ -1430,7 +1429,7 @@ static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base, return pll; } -static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll, +static struct clk_core *_tegra_clk_register_pll(struct tegra_clk_pll *pll, const char *name, const char *parent_name, unsigned long flags, const struct clk_ops *ops) { @@ -1448,13 +1447,13 @@ static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll, return clk_register(NULL, &pll->hw); } -struct clk *tegra_clk_register_pll(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pll(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk; + struct clk_core *clk; pll_params->flags |= TEGRA_PLL_BYPASS; pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE; @@ -1479,13 +1478,13 @@ static struct div_nmp pll_e_nmp = { .divp_width = PLLE_BASE_DIVP_WIDTH, }; -struct clk *tegra_clk_register_plle(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_plle(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk; + struct clk_core *clk; pll_params->flags |= TEGRA_PLL_LOCK_MISC | TEGRA_PLL_BYPASS; pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE; @@ -1550,14 +1549,14 @@ static const struct clk_ops tegra_clk_plle_tegra114_ops = { }; -struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllxc(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk, *parent; + struct clk_core *clk, *parent; unsigned long parent_rate; int err; u32 val, val_iddq; @@ -1603,7 +1602,7 @@ struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name, return clk; } -struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllre(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, @@ -1611,7 +1610,7 @@ struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, { u32 val; struct tegra_clk_pll *pll; - struct clk *clk; + struct clk_core *clk; pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE | TEGRA_PLL_LOCK_MISC; @@ -1649,14 +1648,14 @@ struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, return clk; } -struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllm(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk, *parent; + struct clk_core *clk, *parent; unsigned long parent_rate; if (!pll_params->pdiv_tohw) @@ -1688,13 +1687,13 @@ struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name, return clk; } -struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllc(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { - struct clk *parent, *clk; + struct clk_core *parent, *clk; struct pdiv_map *p_tohw = pll_params->pdiv_tohw; struct tegra_clk_pll *pll; struct tegra_clk_pll_freq_table cfg; @@ -1762,14 +1761,14 @@ struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name, return clk; } -struct clk *tegra_clk_register_plle_tegra114(const char *name, +struct clk_core *tegra_clk_register_plle_tegra114(const char *name, const char *parent_name, void __iomem *clk_base, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk; + struct clk_core *clk; u32 val, val_aux; pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE; @@ -1812,13 +1811,13 @@ static const struct clk_ops tegra_clk_pllss_ops = { .set_rate = clk_pllxc_set_rate, }; -struct clk *tegra_clk_register_pllss(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllss(const char *name, const char *parent_name, void __iomem *clk_base, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock) { struct tegra_clk_pll *pll; - struct clk *clk, *parent; + struct clk_core *clk, *parent; struct tegra_clk_pll_freq_table cfg; unsigned long parent_rate; u32 val; diff --git a/drivers/clk/tegra/clk-super.c b/drivers/clk/tegra/clk-super.c index 2fd924d..0d11346 100644 --- a/drivers/clk/tegra/clk-super.c +++ b/drivers/clk/tegra/clk-super.c @@ -20,7 +20,6 @@ #include #include #include -#include #include "clk.h" @@ -127,13 +126,13 @@ const struct clk_ops tegra_clk_super_ops = { .set_parent = clk_super_set_parent, }; -struct clk *tegra_clk_register_super_mux(const char *name, +struct clk_core *tegra_clk_register_super_mux(const char *name, const char **parent_names, u8 num_parents, unsigned long flags, void __iomem *reg, u8 clk_super_flags, u8 width, u8 pllx_index, u8 div2_index, spinlock_t *lock) { struct tegra_clk_super_mux *super; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; super = kzalloc(sizeof(*super), GFP_KERNEL); diff --git a/drivers/clk/tegra/clk-tegra-audio.c b/drivers/clk/tegra/clk-tegra-audio.c index 5c38aab..038a22e 100644 --- a/drivers/clk/tegra/clk-tegra-audio.c +++ b/drivers/clk/tegra/clk-tegra-audio.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -128,8 +127,8 @@ void __init tegra_audio_clk_init(void __iomem *clk_base, void __iomem *pmc_base, struct tegra_clk *tegra_clks, struct tegra_clk_pll_params *pll_a_params) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; int i; /* PLLA */ diff --git a/drivers/clk/tegra/clk-tegra-fixed.c b/drivers/clk/tegra/clk-tegra-fixed.c index f3b7738..5ee486a 100644 --- a/drivers/clk/tegra/clk-tegra-fixed.c +++ b/drivers/clk/tegra/clk-tegra-fixed.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -36,8 +35,8 @@ int __init tegra_osc_clk_init(void __iomem *clk_base, unsigned long *osc_freq, unsigned long *pll_ref_freq) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; u32 val, pll_ref_div; unsigned osc_idx; @@ -81,8 +80,8 @@ int __init tegra_osc_clk_init(void __iomem *clk_base, void __init tegra_fixed_clk_init(struct tegra_clk *tegra_clks) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; /* clk_32k */ dt_clk = tegra_lookup_dt_id(tegra_clk_clk_32k, tegra_clks); diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c index 37f32c4..5e17ad4 100644 --- a/drivers/clk/tegra/clk-tegra-periph.c +++ b/drivers/clk/tegra/clk-tegra-periph.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -585,8 +584,8 @@ static void __init periph_clk_init(void __iomem *clk_base, struct tegra_clk *tegra_clks) { int i; - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; for (i = 0; i < ARRAY_SIZE(periph_clks); i++) { struct tegra_clk_periph_regs *bank; @@ -615,8 +614,8 @@ static void __init gate_clk_init(void __iomem *clk_base, struct tegra_clk *tegra_clks) { int i; - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; for (i = 0; i < ARRAY_SIZE(gate_clks); i++) { struct tegra_periph_init_data *data; @@ -640,8 +639,8 @@ static void __init init_pllp(void __iomem *clk_base, void __iomem *pmc_base, struct tegra_clk *tegra_clks, struct tegra_clk_pll_params *pll_params) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; int i; dt_clk = tegra_lookup_dt_id(tegra_clk_pll_p, tegra_clks); diff --git a/drivers/clk/tegra/clk-tegra-pmc.c b/drivers/clk/tegra/clk-tegra-pmc.c index 08b21c1..ddd39ca 100644 --- a/drivers/clk/tegra/clk-tegra-pmc.c +++ b/drivers/clk/tegra/clk-tegra-pmc.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -82,8 +81,8 @@ static struct pmc_clk_init_data pmc_clks[] = { void __init tegra_pmc_clk_init(void __iomem *pmc_base, struct tegra_clk *tegra_clks) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; int i; for (i = 0; i < ARRAY_SIZE(pmc_clks); i++) { diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c index feb3201..9d1cdaa 100644 --- a/drivers/clk/tegra/clk-tegra-super-gen4.c +++ b/drivers/clk/tegra/clk-tegra-super-gen4.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -53,8 +52,8 @@ static const char *cclk_lp_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m", static void __init tegra_sclk_init(void __iomem *clk_base, struct tegra_clk *tegra_clks) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; /* SCLK */ dt_clk = tegra_lookup_dt_id(tegra_clk_sclk, tegra_clks); @@ -99,8 +98,8 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base, struct tegra_clk *tegra_clks, struct tegra_clk_pll_params *params) { - struct clk *clk; - struct clk **dt_clk; + struct clk_core *clk; + struct clk_core **dt_clk; /* CCLKG */ dt_clk = tegra_lookup_dt_id(tegra_clk_cclk_g, tegra_clks); diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c index f760f31..00a2897 100644 --- a/drivers/clk/tegra/clk-tegra114.c +++ b/drivers/clk/tegra/clk-tegra114.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -936,14 +935,14 @@ static u32 mux_pllm_pllc2_c_c3_pllp_plla_idx[] = { [0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 6, }; -static struct clk **clks; +static struct clk_core **clks; static unsigned long osc_freq; static unsigned long pll_ref_freq; static int __init tegra114_osc_clk_init(void __iomem *clk_base) { - struct clk *clk; + struct clk_core *clk; u32 val, pll_ref_div; val = readl_relaxed(clk_base + OSC_CTRL); @@ -973,7 +972,7 @@ static int __init tegra114_osc_clk_init(void __iomem *clk_base) static void __init tegra114_fixed_clk_init(void __iomem *clk_base) { - struct clk *clk; + struct clk_core *clk; /* clk_32k */ clk = clk_register_fixed_rate(NULL, "clk_32k", NULL, CLK_IS_ROOT, @@ -1078,7 +1077,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base, void __iomem *pmc) { u32 val; - struct clk *clk; + struct clk_core *clk; /* PLLC */ clk = tegra_clk_register_pllxc("pll_c", "pll_ref", clk_base, @@ -1200,7 +1199,7 @@ static struct tegra_periph_init_data tegra_periph_clk_list[] = { static __init void tegra114_periph_clk_init(void __iomem *clk_base, void __iomem *pmc_base) { - struct clk *clk; + struct clk_core *clk; struct tegra_periph_init_data *data; int i; diff --git a/drivers/clk/tegra/clk-tegra124.c b/drivers/clk/tegra/clk-tegra124.c index 9525c68..bf481c8 100644 --- a/drivers/clk/tegra/clk-tegra124.c +++ b/drivers/clk/tegra/clk-tegra124.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -1017,7 +1016,7 @@ static struct tegra_devclk devclks[] __initdata = { { .dev_id = "timer", .dt_id = TEGRA124_CLK_TIMER }, }; -static struct clk **clks; +static struct clk_core **clks; static void tegra124_utmi_param_configure(void __iomem *clk_base) { @@ -1104,7 +1103,7 @@ static void tegra124_utmi_param_configure(void __iomem *clk_base) static __init void tegra124_periph_clk_init(void __iomem *clk_base, void __iomem *pmc_base) { - struct clk *clk; + struct clk_core *clk; /* xusb_ss_div2 */ clk = clk_register_fixed_factor(NULL, "xusb_ss_div2", "xusb_ss_src", 0, @@ -1148,7 +1147,7 @@ static void __init tegra124_pll_init(void __iomem *clk_base, void __iomem *pmc) { u32 val; - struct clk *clk; + struct clk_core *clk; /* PLLC */ clk = tegra_clk_register_pllxc("pll_c", "pll_ref", clk_base, diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c index dace2b1..6e7d5e2 100644 --- a/drivers/clk/tegra/clk-tegra20.c +++ b/drivers/clk/tegra/clk-tegra20.c @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -162,7 +161,7 @@ static void __iomem *pmc_base; _clk_num, _gate_flags, \ _clk_id) -static struct clk **clks; +static struct clk_core **clks; static struct tegra_clk_pll_freq_table pll_c_freq_table[] = { { 12000000, 600000000, 600, 12, 0, 8 }, @@ -633,7 +632,7 @@ static unsigned int tegra20_get_pll_ref_div(void) static void tegra20_pll_init(void) { - struct clk *clk; + struct clk_core *clk; /* PLLC */ clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, NULL, 0, @@ -713,7 +712,7 @@ static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4", static void tegra20_super_clk_init(void) { - struct clk *clk; + struct clk_core *clk; /* CCLK */ clk = tegra_clk_register_super_mux("cclk", cclk_parents, @@ -738,7 +737,7 @@ static const char *audio_parents[] = {"spdif_in", "i2s1", "i2s2", "unused", static void __init tegra20_audio_clk_init(void) { - struct clk *clk; + struct clk_core *clk; /* audio */ clk = clk_register_mux(NULL, "audio_mux", audio_parents, @@ -800,7 +799,7 @@ static struct tegra_periph_init_data tegra_periph_nodiv_clk_list[] = { static void __init tegra20_periph_clk_init(void) { struct tegra_periph_init_data *data; - struct clk *clk; + struct clk_core *clk; int i; /* ac97 */ @@ -871,7 +870,7 @@ static void __init tegra20_periph_clk_init(void) static void __init tegra20_osc_clk_init(void) { - struct clk *clk; + struct clk_core *clk; unsigned long input_freq; unsigned int pll_ref_div; diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c index 5bbacd0..1e9f733 100644 --- a/drivers/clk/tegra/clk-tegra30.c +++ b/drivers/clk/tegra/clk-tegra30.c @@ -16,7 +16,6 @@ #include #include -#include #include #include #include @@ -205,7 +204,7 @@ static DEFINE_SPINLOCK(pll_d_lock); _clk_num, _gate_flags, \ _clk_id) -static struct clk **clks; +static struct clk_core **clks; /* * Structure defining the fields for USB UTMI clocks Parameters. @@ -921,7 +920,7 @@ static const char *pll_e_parents[] = {"pll_ref", "pll_p"}; static void __init tegra30_pll_init(void) { - struct clk *clk; + struct clk_core *clk; /* PLLC */ clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, pmc_base, 0, @@ -1012,7 +1011,7 @@ static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4", static void __init tegra30_super_clk_init(void) { - struct clk *clk; + struct clk_core *clk; /* * Clock input to cclk_g divided from pll_p using @@ -1134,7 +1133,7 @@ static struct tegra_periph_init_data tegra_periph_nodiv_clk_list[] = { static void __init tegra30_periph_clk_init(void) { struct tegra_periph_init_data *data; - struct clk *clk; + struct clk_core *clk; int i; /* dsia */ diff --git a/drivers/clk/tegra/clk.c b/drivers/clk/tegra/clk.c index f87c609..d5963f6 100644 --- a/drivers/clk/tegra/clk.c +++ b/drivers/clk/tegra/clk.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include #include @@ -69,7 +68,7 @@ struct tegra_cpu_car_ops *tegra_cpu_car_ops = &dummy_car_ops; int *periph_clk_enb_refcnt; static int periph_banks; -static struct clk **clks; +static struct clk_core **clks; static int clk_num; static struct clk_onecell_data clk_data; @@ -165,7 +164,7 @@ struct tegra_clk_periph_regs *get_reg_bank(int clkid) } } -struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks) +struct clk_core ** __init tegra_clk_init(void __iomem *regs, int num, int banks) { clk_base = regs; @@ -179,7 +178,7 @@ struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks) periph_banks = banks; - clks = kzalloc(num * sizeof(struct clk *), GFP_KERNEL); + clks = kzalloc(num * sizeof(struct clk_core *), GFP_KERNEL); if (!clks) kfree(periph_clk_enb_refcnt); @@ -189,9 +188,9 @@ struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks) } void __init tegra_init_dup_clks(struct tegra_clk_duplicate *dup_list, - struct clk *clks[], int clk_max) + struct clk_core *clks[], int clk_max) { - struct clk *clk; + struct clk_core *clk; for (; dup_list->clk_id < clk_max; dup_list++) { clk = clks[dup_list->clk_id]; @@ -201,9 +200,9 @@ void __init tegra_init_dup_clks(struct tegra_clk_duplicate *dup_list, } void __init tegra_init_from_table(struct tegra_clk_init_table *tbl, - struct clk *clks[], int clk_max) + struct clk_core *clks[], int clk_max) { - struct clk *clk; + struct clk_core *clk; for (; tbl->clk_id < clk_max; tbl++) { clk = clks[tbl->clk_id]; @@ -211,8 +210,8 @@ void __init tegra_init_from_table(struct tegra_clk_init_table *tbl, return; if (tbl->parent_id < clk_max) { - struct clk *parent = clks[tbl->parent_id]; - if (clk_set_parent(clk, parent)) { + struct clk_core *parent = clks[tbl->parent_id]; + if (clk_provider_set_parent(clk, parent)) { pr_err("%s: Failed to set parent %s of %s\n", __func__, __clk_get_name(parent), __clk_get_name(clk)); @@ -221,7 +220,7 @@ void __init tegra_init_from_table(struct tegra_clk_init_table *tbl, } if (tbl->rate) - if (clk_set_rate(clk, tbl->rate)) { + if (clk_provider_set_rate(clk, tbl->rate)) { pr_err("%s: Failed to set rate %lu of %s\n", __func__, tbl->rate, __clk_get_name(clk)); @@ -229,7 +228,7 @@ void __init tegra_init_from_table(struct tegra_clk_init_table *tbl, } if (tbl->state) - if (clk_prepare_enable(clk)) { + if (clk_provider_prepare_enable(clk)) { pr_err("%s: Failed to enable %s\n", __func__, __clk_get_name(clk)); WARN_ON(1); @@ -286,7 +285,7 @@ void __init tegra_register_devclks(struct tegra_devclk *dev_clks, int num) } } -struct clk ** __init tegra_lookup_dt_id(int clk_id, +struct clk_core ** __init tegra_lookup_dt_id(int clk_id, struct tegra_clk *tegra_clk) { if (tegra_clk[clk_id].present) diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h index 16ec8d6..3093aa4 100644 --- a/drivers/clk/tegra/clk.h +++ b/drivers/clk/tegra/clk.h @@ -39,7 +39,7 @@ struct tegra_clk_sync_source { extern const struct clk_ops tegra_clk_sync_source_ops; extern int *periph_clk_enb_refcnt; -struct clk *tegra_clk_register_sync_source(const char *name, +struct clk_core *tegra_clk_register_sync_source(const char *name, unsigned long fixed_rate, unsigned long max_rate); /** @@ -82,7 +82,7 @@ struct tegra_clk_frac_div { #define TEGRA_DIVIDER_UART BIT(3) extern const struct clk_ops tegra_clk_frac_div_ops; -struct clk *tegra_clk_register_divider(const char *name, +struct clk_core *tegra_clk_register_divider(const char *name, const char *parent_name, void __iomem *reg, unsigned long flags, u8 clk_divider_flags, u8 shift, u8 width, u8 frac_width, spinlock_t *lock); @@ -258,47 +258,47 @@ struct tegra_clk_pll { extern const struct clk_ops tegra_clk_pll_ops; extern const struct clk_ops tegra_clk_plle_ops; -struct clk *tegra_clk_register_pll(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pll(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_plle(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_plle(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllxc(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllm(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllc(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllre(const char *name, const char *parent_name, void __iomem *clk_base, void __iomem *pmc, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock, unsigned long parent_rate); -struct clk *tegra_clk_register_plle_tegra114(const char *name, +struct clk_core *tegra_clk_register_plle_tegra114(const char *name, const char *parent_name, void __iomem *clk_base, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); -struct clk *tegra_clk_register_pllss(const char *name, const char *parent_name, +struct clk_core *tegra_clk_register_pllss(const char *name, const char *parent_name, void __iomem *clk_base, unsigned long flags, struct tegra_clk_pll_params *pll_params, spinlock_t *lock); @@ -325,7 +325,7 @@ struct tegra_clk_pll_out { #define to_clk_pll_out(_hw) container_of(_hw, struct tegra_clk_pll_out, hw) extern const struct clk_ops tegra_clk_pll_out_ops; -struct clk *tegra_clk_register_pll_out(const char *name, +struct clk_core *tegra_clk_register_pll_out(const char *name, const char *parent_name, void __iomem *reg, u8 enb_bit_idx, u8 rst_bit_idx, unsigned long flags, u8 pll_div_flags, spinlock_t *lock); @@ -394,7 +394,7 @@ struct tegra_clk_periph_gate { #define TEGRA_PERIPH_NO_GATE BIT(5) extern const struct clk_ops tegra_clk_periph_gate_ops; -struct clk *tegra_clk_register_periph_gate(const char *name, +struct clk_core *tegra_clk_register_periph_gate(const char *name, const char *parent_name, u8 gate_flags, void __iomem *clk_base, unsigned long flags, int clk_num, int *enable_refcnt); @@ -427,11 +427,11 @@ struct tegra_clk_periph { #define TEGRA_CLK_PERIPH_MAGIC 0x18221223 extern const struct clk_ops tegra_clk_periph_ops; -struct clk *tegra_clk_register_periph(const char *name, +struct clk_core *tegra_clk_register_periph(const char *name, const char **parent_names, int num_parents, struct tegra_clk_periph *periph, void __iomem *clk_base, u32 offset, unsigned long flags); -struct clk *tegra_clk_register_periph_nodiv(const char *name, +struct clk_core *tegra_clk_register_periph_nodiv(const char *name, const char **parent_names, int num_parents, struct tegra_clk_periph *periph, void __iomem *clk_base, u32 offset); @@ -540,7 +540,7 @@ struct tegra_clk_super_mux { #define TEGRA_DIVIDER_2 BIT(0) extern const struct clk_ops tegra_clk_super_ops; -struct clk *tegra_clk_register_super_mux(const char *name, +struct clk_core *tegra_clk_register_super_mux(const char *name, const char **parent_names, u8 num_parents, unsigned long flags, void __iomem *reg, u8 clk_super_flags, u8 width, u8 pllx_index, u8 div2_index, spinlock_t *lock); @@ -590,15 +590,15 @@ struct tegra_devclk { }; void tegra_init_from_table(struct tegra_clk_init_table *tbl, - struct clk *clks[], int clk_max); + struct clk_core *clks[], int clk_max); void tegra_init_dup_clks(struct tegra_clk_duplicate *dup_list, - struct clk *clks[], int clk_max); + struct clk_core *clks[], int clk_max); struct tegra_clk_periph_regs *get_reg_bank(int clkid); -struct clk **tegra_clk_init(void __iomem *clk_base, int num, int periph_banks); +struct clk_core **tegra_clk_init(void __iomem *clk_base, int num, int periph_banks); -struct clk **tegra_lookup_dt_id(int clk_id, struct tegra_clk *tegra_clk); +struct clk_core **tegra_lookup_dt_id(int clk_id, struct tegra_clk *tegra_clk); void tegra_add_of_provider(struct device_node *np); void tegra_register_devclks(struct tegra_devclk *dev_clks, int num); diff --git a/drivers/clk/ti/apll.c b/drivers/clk/ti/apll.c index 72d9727..a162c21 100644 --- a/drivers/clk/ti/apll.c +++ b/drivers/clk/ti/apll.c @@ -135,10 +135,10 @@ static void __init omap_clk_register_apll(struct clk_hw *hw, { struct clk_hw_omap *clk_hw = to_clk_hw_omap(hw); struct dpll_data *ad = clk_hw->dpll_data; - struct clk *clk; + struct clk_core *clk; - ad->clk_ref = of_clk_get(node, 0); - ad->clk_bypass = of_clk_get(node, 1); + ad->clk_ref = of_clk_provider_get(node, 0); + ad->clk_bypass = of_clk_provider_get(node, 1); if (IS_ERR(ad->clk_ref) || IS_ERR(ad->clk_bypass)) { pr_debug("clk-ref or clk-bypass for %s not ready, retry\n", @@ -332,7 +332,7 @@ static void __init of_omap2_apll_setup(struct device_node *node) struct dpll_data *ad = NULL; struct clk_hw_omap *clk_hw = NULL; struct clk_init_data *init = NULL; - struct clk *clk; + struct clk_core *clk; const char *parent_name; u32 val; diff --git a/drivers/clk/ti/clk-2xxx.c b/drivers/clk/ti/clk-2xxx.c index c808ab3..a48fe6f 100644 --- a/drivers/clk/ti/clk-2xxx.c +++ b/drivers/clk/ti/clk-2xxx.c @@ -237,10 +237,10 @@ static int __init omap2xxx_dt_clk_init(int soc_type) ARRAY_SIZE(enable_init_clks)); pr_info("Clocking rate (Crystal/DPLL/MPU): %ld.%01ld/%ld/%ld MHz\n", - (clk_get_rate(clk_get_sys(NULL, "sys_ck")) / 1000000), - (clk_get_rate(clk_get_sys(NULL, "sys_ck")) / 100000) % 10, - (clk_get_rate(clk_get_sys(NULL, "dpll_ck")) / 1000000), - (clk_get_rate(clk_get_sys(NULL, "mpu_ck")) / 1000000)); + (clk_provider_get_rate(clk_provider_get_sys(NULL, "sys_ck")) / 1000000), + (clk_provider_get_rate(clk_provider_get_sys(NULL, "sys_ck")) / 100000) % 10, + (clk_provider_get_rate(clk_provider_get_sys(NULL, "dpll_ck")) / 1000000), + (clk_provider_get_rate(clk_provider_get_sys(NULL, "mpu_ck")) / 1000000)); return 0; } diff --git a/drivers/clk/ti/clk-33xx.c b/drivers/clk/ti/clk-33xx.c index 028b337..0988f1e 100644 --- a/drivers/clk/ti/clk-33xx.c +++ b/drivers/clk/ti/clk-33xx.c @@ -121,7 +121,7 @@ static const char *enable_init_clks[] = { int __init am33xx_dt_clk_init(void) { - struct clk *clk1, *clk2; + struct clk_core *clk1, *clk2; ti_dt_clocks_register(am33xx_clks); @@ -139,12 +139,12 @@ int __init am33xx_dt_clk_init(void) * oscillator clock. */ - clk1 = clk_get_sys(NULL, "sys_clkin_ck"); - clk2 = clk_get_sys(NULL, "timer3_fck"); - clk_set_parent(clk2, clk1); + clk1 = clk_provider_get_sys(NULL, "sys_clkin_ck"); + clk2 = clk_provider_get_sys(NULL, "timer3_fck"); + clk_provider_set_parent(clk2, clk1); - clk2 = clk_get_sys(NULL, "timer6_fck"); - clk_set_parent(clk2, clk1); + clk2 = clk_provider_get_sys(NULL, "timer6_fck"); + clk_provider_set_parent(clk2, clk1); /* * The On-Chip 32K RC Osc clock is not an accurate clock-source as per * the design/spec, so as a result, for example, timer which supposed @@ -152,9 +152,9 @@ int __init am33xx_dt_clk_init(void) * not expected by any use-case, so change WDT1 clock source to PRCM * 32KHz clock. */ - clk1 = clk_get_sys(NULL, "wdt1_fck"); - clk2 = clk_get_sys(NULL, "clkdiv32k_ick"); - clk_set_parent(clk1, clk2); + clk1 = clk_provider_get_sys(NULL, "wdt1_fck"); + clk2 = clk_provider_get_sys(NULL, "clkdiv32k_ick"); + clk_provider_set_parent(clk1, clk2); return 0; } diff --git a/drivers/clk/ti/clk-3xxx.c b/drivers/clk/ti/clk-3xxx.c index 0d1750a..58ef20e 100644 --- a/drivers/clk/ti/clk-3xxx.c +++ b/drivers/clk/ti/clk-3xxx.c @@ -365,10 +365,10 @@ static int __init omap3xxx_dt_clk_init(int soc_type) ARRAY_SIZE(enable_init_clks)); pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n", - (clk_get_rate(clk_get_sys(NULL, "osc_sys_ck")) / 1000000), - (clk_get_rate(clk_get_sys(NULL, "osc_sys_ck")) / 100000) % 10, - (clk_get_rate(clk_get_sys(NULL, "core_ck")) / 1000000), - (clk_get_rate(clk_get_sys(NULL, "arm_fck")) / 1000000)); + (clk_provider_get_rate(clk_provider_get_sys(NULL, "osc_sys_ck")) / 1000000), + (clk_provider_get_rate(clk_provider_get_sys(NULL, "osc_sys_ck")) / 100000) % 10, + (clk_provider_get_rate(clk_provider_get_sys(NULL, "core_ck")) / 1000000), + (clk_provider_get_rate(clk_provider_get_sys(NULL, "arm_fck")) / 1000000)); if (soc_type != OMAP3_SOC_TI81XX && soc_type != OMAP3_SOC_OMAP3430_ES1) omap3_clk_lock_dpll5(); diff --git a/drivers/clk/ti/clk-43xx.c b/drivers/clk/ti/clk-43xx.c index 3795fce..1277452 100644 --- a/drivers/clk/ti/clk-43xx.c +++ b/drivers/clk/ti/clk-43xx.c @@ -116,7 +116,7 @@ static struct ti_dt_clk am43xx_clks[] = { int __init am43xx_dt_clk_init(void) { - struct clk *clk1, *clk2; + struct clk_core *clk1, *clk2; ti_dt_clocks_register(am43xx_clks); @@ -132,9 +132,9 @@ int __init am43xx_dt_clk_init(void) * By selecting dpll_core_m5_ck as the clocksource fixes this issue. * In AM335x dpll_core_m5_ck is the default clocksource. */ - clk1 = clk_get_sys(NULL, "cpsw_cpts_rft_clk"); - clk2 = clk_get_sys(NULL, "dpll_core_m5_ck"); - clk_set_parent(clk1, clk2); + clk1 = clk_provider_get_sys(NULL, "cpsw_cpts_rft_clk"); + clk2 = clk_provider_get_sys(NULL, "dpll_core_m5_ck"); + clk_provider_set_parent(clk1, clk2); return 0; } diff --git a/drivers/clk/ti/clk-44xx.c b/drivers/clk/ti/clk-44xx.c index 02517a8..1adc399 100644 --- a/drivers/clk/ti/clk-44xx.c +++ b/drivers/clk/ti/clk-44xx.c @@ -281,7 +281,7 @@ static struct ti_dt_clk omap44xx_clks[] = { int __init omap4xxx_dt_clk_init(void) { int rc; - struct clk *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll; + struct clk_core *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll; ti_dt_clocks_register(omap44xx_clks); @@ -291,8 +291,8 @@ int __init omap4xxx_dt_clk_init(void) * Lock USB DPLL on OMAP4 devices so that the L3INIT power * domain can transition to retention state when not in use. */ - usb_dpll = clk_get_sys(NULL, "dpll_usb_ck"); - rc = clk_set_rate(usb_dpll, OMAP4_DPLL_USB_DEFFREQ); + usb_dpll = clk_provider_get_sys(NULL, "dpll_usb_ck"); + rc = clk_provider_set_rate(usb_dpll, OMAP4_DPLL_USB_DEFFREQ); if (rc) pr_err("%s: failed to configure USB DPLL!\n", __func__); @@ -302,12 +302,12 @@ int __init omap4xxx_dt_clk_init(void) * locking the ABE DPLL on boot. * Lock the ABE DPLL in any case to avoid issues with audio. */ - abe_dpll_ref = clk_get_sys(NULL, "abe_dpll_refclk_mux_ck"); - sys_32k_ck = clk_get_sys(NULL, "sys_32k_ck"); - rc = clk_set_parent(abe_dpll_ref, sys_32k_ck); - abe_dpll = clk_get_sys(NULL, "dpll_abe_ck"); + abe_dpll_ref = clk_provider_get_sys(NULL, "abe_dpll_refclk_mux_ck"); + sys_32k_ck = clk_provider_get_sys(NULL, "sys_32k_ck"); + rc = clk_provider_set_parent(abe_dpll_ref, sys_32k_ck); + abe_dpll = clk_provider_get_sys(NULL, "dpll_abe_ck"); if (!rc) - rc = clk_set_rate(abe_dpll, OMAP4_DPLL_ABE_DEFFREQ); + rc = clk_provider_set_rate(abe_dpll, OMAP4_DPLL_ABE_DEFFREQ); if (rc) pr_err("%s: failed to configure ABE DPLL!\n", __func__); diff --git a/drivers/clk/ti/clk-54xx.c b/drivers/clk/ti/clk-54xx.c index 5e18399..5b603b5 100644 --- a/drivers/clk/ti/clk-54xx.c +++ b/drivers/clk/ti/clk-54xx.c @@ -225,34 +225,35 @@ static struct ti_dt_clk omap54xx_clks[] = { int __init omap5xxx_dt_clk_init(void) { int rc; - struct clk *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll; + struct clk_core *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll; ti_dt_clocks_register(omap54xx_clks); omap2_clk_disable_autoidle_all(); - abe_dpll_ref = clk_get_sys(NULL, "abe_dpll_clk_mux"); - sys_32k_ck = clk_get_sys(NULL, "sys_32k_ck"); - rc = clk_set_parent(abe_dpll_ref, sys_32k_ck); - abe_dpll = clk_get_sys(NULL, "dpll_abe_ck"); + abe_dpll_ref = clk_provider_get_sys(NULL, "abe_dpll_clk_mux"); + sys_32k_ck = clk_provider_get_sys(NULL, "sys_32k_ck"); + rc = clk_provider_set_parent(abe_dpll_ref, sys_32k_ck); + abe_dpll = clk_provider_get_sys(NULL, "dpll_abe_ck"); if (!rc) - rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ); + rc = clk_provider_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ); if (rc) pr_err("%s: failed to configure ABE DPLL!\n", __func__); - abe_dpll = clk_get_sys(NULL, "dpll_abe_m2x2_ck"); + abe_dpll = clk_provider_get_sys(NULL, "dpll_abe_m2x2_ck"); if (!rc) - rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ * 2); + rc = clk_provider_set_rate(abe_dpll, + OMAP5_DPLL_ABE_DEFFREQ * 2); if (rc) pr_err("%s: failed to configure ABE m2x2 DPLL!\n", __func__); - usb_dpll = clk_get_sys(NULL, "dpll_usb_ck"); - rc = clk_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ); + usb_dpll = clk_provider_get_sys(NULL, "dpll_usb_ck"); + rc = clk_provider_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ); if (rc) pr_err("%s: failed to configure USB DPLL!\n", __func__); - usb_dpll = clk_get_sys(NULL, "dpll_usb_m2_ck"); - rc = clk_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ/2); + usb_dpll = clk_provider_get_sys(NULL, "dpll_usb_m2_ck"); + rc = clk_provider_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ / 2); if (rc) pr_err("%s: failed to set USB_DPLL M2 OUT\n", __func__); diff --git a/drivers/clk/ti/clk-7xx.c b/drivers/clk/ti/clk-7xx.c index 62ac8f6..9dba0bb 100644 --- a/drivers/clk/ti/clk-7xx.c +++ b/drivers/clk/ti/clk-7xx.c @@ -307,39 +307,39 @@ static struct ti_dt_clk dra7xx_clks[] = { int __init dra7xx_dt_clk_init(void) { int rc; - struct clk *abe_dpll_mux, *sys_clkin2, *dpll_ck; + struct clk_core *abe_dpll_mux, *sys_clkin2, *dpll_ck; ti_dt_clocks_register(dra7xx_clks); omap2_clk_disable_autoidle_all(); - abe_dpll_mux = clk_get_sys(NULL, "abe_dpll_sys_clk_mux"); - sys_clkin2 = clk_get_sys(NULL, "sys_clkin2"); - dpll_ck = clk_get_sys(NULL, "dpll_abe_ck"); + abe_dpll_mux = clk_provider_get_sys(NULL, "abe_dpll_sys_clk_mux"); + sys_clkin2 = clk_provider_get_sys(NULL, "sys_clkin2"); + dpll_ck = clk_provider_get_sys(NULL, "dpll_abe_ck"); - rc = clk_set_parent(abe_dpll_mux, sys_clkin2); + rc = clk_provider_set_parent(abe_dpll_mux, sys_clkin2); if (!rc) - rc = clk_set_rate(dpll_ck, DRA7_DPLL_ABE_DEFFREQ); + rc = clk_provider_set_rate(dpll_ck, DRA7_DPLL_ABE_DEFFREQ); if (rc) pr_err("%s: failed to configure ABE DPLL!\n", __func__); - dpll_ck = clk_get_sys(NULL, "dpll_abe_m2x2_ck"); - rc = clk_set_rate(dpll_ck, DRA7_DPLL_ABE_DEFFREQ * 2); + dpll_ck = clk_provider_get_sys(NULL, "dpll_abe_m2x2_ck"); + rc = clk_provider_set_rate(dpll_ck, DRA7_DPLL_ABE_DEFFREQ * 2); if (rc) pr_err("%s: failed to configure ABE DPLL m2x2!\n", __func__); - dpll_ck = clk_get_sys(NULL, "dpll_gmac_ck"); - rc = clk_set_rate(dpll_ck, DRA7_DPLL_GMAC_DEFFREQ); + dpll_ck = clk_provider_get_sys(NULL, "dpll_gmac_ck"); + rc = clk_provider_set_rate(dpll_ck, DRA7_DPLL_GMAC_DEFFREQ); if (rc) pr_err("%s: failed to configure GMAC DPLL!\n", __func__); - dpll_ck = clk_get_sys(NULL, "dpll_usb_ck"); - rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ); + dpll_ck = clk_provider_get_sys(NULL, "dpll_usb_ck"); + rc = clk_provider_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ); if (rc) pr_err("%s: failed to configure USB DPLL!\n", __func__); - dpll_ck = clk_get_sys(NULL, "dpll_usb_m2_ck"); - rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ/2); + dpll_ck = clk_provider_get_sys(NULL, "dpll_usb_m2_ck"); + rc = clk_provider_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ / 2); if (rc) pr_err("%s: failed to set USB_DPLL M2 OUT\n", __func__); diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c index 4a65b41..029a0d3 100644 --- a/drivers/clk/ti/clk-dra7-atl.c +++ b/drivers/clk/ti/clk-dra7-atl.c @@ -40,7 +40,7 @@ struct dra7_atl_clock_info; struct dra7_atl_desc { - struct clk *clk; + struct clk_core *clk; struct clk_hw hw; struct dra7_atl_clock_info *cinfo; int id; @@ -165,7 +165,7 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node) struct dra7_atl_desc *clk_hw = NULL; struct clk_init_data init = { 0 }; const char **parent_names = NULL; - struct clk *clk; + struct clk_core *clk; clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL); if (!clk_hw) { @@ -233,7 +233,7 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev) char prop[5]; struct dra7_atl_desc *cdesc; struct of_phandle_args clkspec; - struct clk *clk; + struct clk_core *clk; int rc; rc = of_parse_phandle_with_args(node, "ti,provided-clocks", diff --git a/drivers/clk/ti/clk.c b/drivers/clk/ti/clk.c index b1a6f71..d88a70d0 100644 --- a/drivers/clk/ti/clk.c +++ b/drivers/clk/ti/clk.c @@ -41,7 +41,7 @@ void __init ti_dt_clocks_register(struct ti_dt_clk oclks[]) { struct ti_dt_clk *c; struct device_node *node; - struct clk *clk; + struct clk_core *clk; struct of_phandle_args clkspec; for (c = oclks; c->node_name != NULL; c++) { diff --git a/drivers/clk/ti/clockdomain.c b/drivers/clk/ti/clockdomain.c index f1e0038..6bc75d8 100644 --- a/drivers/clk/ti/clockdomain.c +++ b/drivers/clk/ti/clockdomain.c @@ -26,7 +26,7 @@ static void __init of_ti_clockdomain_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; struct clk_hw *clk_hw; const char *clkdm_name = node->name; int i; @@ -35,7 +35,7 @@ static void __init of_ti_clockdomain_setup(struct device_node *node) num_clks = of_count_phandle_with_args(node, "clocks", "#clock-cells"); for (i = 0; i < num_clks; i++) { - clk = of_clk_get(node, i); + clk = of_clk_provider_get(node, i); if (__clk_get_flags(clk) & CLK_IS_BASIC) { pr_warn("can't setup clkdm for basic clk %s\n", __clk_get_name(clk)); diff --git a/drivers/clk/ti/composite.c b/drivers/clk/ti/composite.c index 19d8980..2cbee34 100644 --- a/drivers/clk/ti/composite.c +++ b/drivers/clk/ti/composite.c @@ -119,7 +119,7 @@ static inline struct clk_hw *_get_hw(struct clk_hw_omap_comp *clk, int idx) static void __init ti_clk_register_composite(struct clk_hw *hw, struct device_node *node) { - struct clk *clk; + struct clk_core *clk; struct clk_hw_omap_comp *cclk = to_clk_hw_comp(hw); struct component_clk *comp; int num_parents = 0; diff --git a/drivers/clk/ti/divider.c b/drivers/clk/ti/divider.c index e6aa10d..1c41515 100644 --- a/drivers/clk/ti/divider.c +++ b/drivers/clk/ti/divider.c @@ -246,7 +246,7 @@ const struct clk_ops ti_clk_divider_ops = { .set_rate = ti_clk_divider_set_rate, }; -static struct clk *_register_divider(struct device *dev, const char *name, +static struct clk_core *_register_divider(struct device *dev, const char *name, const char *parent_name, unsigned long flags, void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, @@ -254,7 +254,7 @@ static struct clk *_register_divider(struct device *dev, const char *name, spinlock_t *lock) { struct clk_divider *div; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; if (clk_divider_flags & CLK_DIVIDER_HIWORD_MASK) { @@ -434,7 +434,7 @@ static int __init ti_clk_divider_populate(struct device_node *node, */ static void __init of_ti_divider_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; const char *parent_name; void __iomem *reg; u8 clk_divider_flags = 0; diff --git a/drivers/clk/ti/dpll.c b/drivers/clk/ti/dpll.c index 79791e1..e1f74cc 100644 --- a/drivers/clk/ti/dpll.c +++ b/drivers/clk/ti/dpll.c @@ -128,10 +128,10 @@ static void __init ti_clk_register_dpll(struct clk_hw *hw, { struct clk_hw_omap *clk_hw = to_clk_hw_omap(hw); struct dpll_data *dd = clk_hw->dpll_data; - struct clk *clk; + struct clk_core *clk; - dd->clk_ref = of_clk_get(node, 0); - dd->clk_bypass = of_clk_get(node, 1); + dd->clk_ref = of_clk_provider_get(node, 0); + dd->clk_bypass = of_clk_provider_get(node, 1); if (IS_ERR(dd->clk_ref) || IS_ERR(dd->clk_bypass)) { pr_debug("clk-ref or clk-bypass missing for %s, retry later\n", @@ -175,7 +175,7 @@ static void ti_clk_register_dpll_x2(struct device_node *node, const struct clk_ops *ops, const struct clk_hw_omap_ops *hw_ops) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init = { NULL }; struct clk_hw_omap *clk_hw; const char *name = node->name; diff --git a/drivers/clk/ti/fixed-factor.c b/drivers/clk/ti/fixed-factor.c index c2c8a28..2aa2701 100644 --- a/drivers/clk/ti/fixed-factor.c +++ b/drivers/clk/ti/fixed-factor.c @@ -33,7 +33,7 @@ */ static void __init of_ti_fixed_factor_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; const char *clk_name = node->name; const char *parent_name; u32 div, mult; diff --git a/drivers/clk/ti/gate.c b/drivers/clk/ti/gate.c index b326d27..dd1b813 100644 --- a/drivers/clk/ti/gate.c +++ b/drivers/clk/ti/gate.c @@ -94,7 +94,7 @@ static void __init _of_ti_gate_clk_setup(struct device_node *node, const struct clk_ops *ops, const struct clk_hw_omap_ops *hw_ops) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init = { NULL }; struct clk_hw_omap *clk_hw; const char *clk_name = node->name; diff --git a/drivers/clk/ti/interface.c b/drivers/clk/ti/interface.c index 9c3e8c4..e2f2bc0 100644 --- a/drivers/clk/ti/interface.c +++ b/drivers/clk/ti/interface.c @@ -34,7 +34,7 @@ static const struct clk_ops ti_interface_clk_ops = { static void __init _of_ti_interface_clk_setup(struct device_node *node, const struct clk_hw_omap_ops *ops) { - struct clk *clk; + struct clk_core *clk; struct clk_init_data init = { NULL }; struct clk_hw_omap *clk_hw; const char *parent_name; diff --git a/drivers/clk/ti/mux.c b/drivers/clk/ti/mux.c index e9d650e..7456198 100644 --- a/drivers/clk/ti/mux.c +++ b/drivers/clk/ti/mux.c @@ -104,14 +104,14 @@ const struct clk_ops ti_clk_mux_ops = { .determine_rate = __clk_mux_determine_rate, }; -static struct clk *_register_mux(struct device *dev, const char *name, +static struct clk_core *_register_mux(struct device *dev, const char *name, const char **parent_names, u8 num_parents, unsigned long flags, void __iomem *reg, u8 shift, u32 mask, u8 clk_mux_flags, u32 *table, spinlock_t *lock) { struct clk_mux *mux; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; /* allocate the mux */ @@ -152,7 +152,7 @@ static struct clk *_register_mux(struct device *dev, const char *name, */ static void of_mux_clk_setup(struct device_node *node) { - struct clk *clk; + struct clk_core *clk; void __iomem *reg; int num_parents; const char **parent_names; diff --git a/drivers/clk/ux500/abx500-clk.c b/drivers/clk/ux500/abx500-clk.c index e7bd62c..f27be78 100644 --- a/drivers/clk/ux500/abx500-clk.c +++ b/drivers/clk/ux500/abx500-clk.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -23,7 +22,7 @@ static int ab8500_reg_clks(struct device *dev) { int ret; - struct clk *clk; + struct clk_core *clk; const char *intclk_parents[] = {"ab8500_sysclk", "ulpclk"}; u16 intclk_reg_sel[] = {0 , AB8500_SYSULPCLKCTRL1}; diff --git a/drivers/clk/ux500/clk-prcc.c b/drivers/clk/ux500/clk-prcc.c index bd4769a..7eb055f 100644 --- a/drivers/clk/ux500/clk-prcc.c +++ b/drivers/clk/ux500/clk-prcc.c @@ -92,7 +92,7 @@ static struct clk_ops clk_prcc_kclk_ops = { .is_enabled = clk_prcc_is_enabled, }; -static struct clk *clk_reg_prcc(const char *name, +static struct clk_core *clk_reg_prcc(const char *name, const char *parent_name, resource_size_t phy_base, u32 cg_sel, @@ -101,7 +101,7 @@ static struct clk *clk_reg_prcc(const char *name, { struct clk_prcc *clk; struct clk_init_data clk_prcc_init; - struct clk *clk_reg; + struct clk_core *clk_reg; if (!name) { pr_err("clk_prcc: %s invalid arguments passed\n", __func__); @@ -142,7 +142,7 @@ free_clk: return ERR_PTR(-ENOMEM); } -struct clk *clk_reg_prcc_pclk(const char *name, +struct clk_core *clk_reg_prcc_pclk(const char *name, const char *parent_name, resource_size_t phy_base, u32 cg_sel, @@ -152,7 +152,7 @@ struct clk *clk_reg_prcc_pclk(const char *name, &clk_prcc_pclk_ops); } -struct clk *clk_reg_prcc_kclk(const char *name, +struct clk_core *clk_reg_prcc_kclk(const char *name, const char *parent_name, resource_size_t phy_base, u32 cg_sel, diff --git a/drivers/clk/ux500/clk-prcmu.c b/drivers/clk/ux500/clk-prcmu.c index e2d63bc..bac54c9 100644 --- a/drivers/clk/ux500/clk-prcmu.c +++ b/drivers/clk/ux500/clk-prcmu.c @@ -243,7 +243,7 @@ static struct clk_ops clk_prcmu_opp_volt_scalable_ops = { .set_rate = clk_prcmu_set_rate, }; -static struct clk *clk_reg_prcmu(const char *name, +static struct clk_core *clk_reg_prcmu(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, @@ -252,7 +252,7 @@ static struct clk *clk_reg_prcmu(const char *name, { struct clk_prcmu *clk; struct clk_init_data clk_prcmu_init; - struct clk *clk_reg; + struct clk_core *clk_reg; if (!name) { pr_err("clk_prcmu: %s invalid arguments passed\n", __func__); @@ -292,7 +292,7 @@ free_clk: return ERR_PTR(-ENOMEM); } -struct clk *clk_reg_prcmu_scalable(const char *name, +struct clk_core *clk_reg_prcmu_scalable(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, @@ -302,7 +302,7 @@ struct clk *clk_reg_prcmu_scalable(const char *name, &clk_prcmu_scalable_ops); } -struct clk *clk_reg_prcmu_gate(const char *name, +struct clk_core *clk_reg_prcmu_gate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags) @@ -311,7 +311,7 @@ struct clk *clk_reg_prcmu_gate(const char *name, &clk_prcmu_gate_ops); } -struct clk *clk_reg_prcmu_scalable_rate(const char *name, +struct clk_core *clk_reg_prcmu_scalable_rate(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, @@ -321,7 +321,7 @@ struct clk *clk_reg_prcmu_scalable_rate(const char *name, &clk_prcmu_scalable_rate_ops); } -struct clk *clk_reg_prcmu_rate(const char *name, +struct clk_core *clk_reg_prcmu_rate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags) @@ -330,7 +330,7 @@ struct clk *clk_reg_prcmu_rate(const char *name, &clk_prcmu_rate_ops); } -struct clk *clk_reg_prcmu_opp_gate(const char *name, +struct clk_core *clk_reg_prcmu_opp_gate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags) @@ -339,7 +339,7 @@ struct clk *clk_reg_prcmu_opp_gate(const char *name, &clk_prcmu_opp_gate_ops); } -struct clk *clk_reg_prcmu_opp_volt_scalable(const char *name, +struct clk_core *clk_reg_prcmu_opp_volt_scalable(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, diff --git a/drivers/clk/ux500/clk-sysctrl.c b/drivers/clk/ux500/clk-sysctrl.c index e364c9d..dc6608a 100644 --- a/drivers/clk/ux500/clk-sysctrl.c +++ b/drivers/clk/ux500/clk-sysctrl.c @@ -114,7 +114,7 @@ static struct clk_ops clk_sysctrl_set_parent_ops = { .get_parent = clk_sysctrl_get_parent, }; -static struct clk *clk_reg_sysctrl(struct device *dev, +static struct clk_core *clk_reg_sysctrl(struct device *dev, const char *name, const char **parent_names, u8 num_parents, @@ -128,7 +128,7 @@ static struct clk *clk_reg_sysctrl(struct device *dev, { struct clk_sysctrl *clk; struct clk_init_data clk_sysctrl_init; - struct clk *clk_reg; + struct clk_core *clk_reg; int i; if (!dev) @@ -176,7 +176,7 @@ static struct clk *clk_reg_sysctrl(struct device *dev, return clk_reg; } -struct clk *clk_reg_sysctrl_gate(struct device *dev, +struct clk_core *clk_reg_sysctrl_gate(struct device *dev, const char *name, const char *parent_name, u16 reg_sel, @@ -193,7 +193,7 @@ struct clk *clk_reg_sysctrl_gate(struct device *dev, flags, &clk_sysctrl_gate_ops); } -struct clk *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, +struct clk_core *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, const char *name, const char *parent_name, u16 reg_sel, @@ -212,7 +212,7 @@ struct clk *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, &clk_sysctrl_gate_fixed_rate_ops); } -struct clk *clk_reg_sysctrl_set_parent(struct device *dev, +struct clk_core *clk_reg_sysctrl_set_parent(struct device *dev, const char *name, const char **parent_names, u8 num_parents, diff --git a/drivers/clk/ux500/clk.h b/drivers/clk/ux500/clk.h index a2bb92d..acb50f8 100644 --- a/drivers/clk/ux500/clk.h +++ b/drivers/clk/ux500/clk.h @@ -10,56 +10,55 @@ #ifndef __UX500_CLK_H #define __UX500_CLK_H -#include #include #include -struct clk *clk_reg_prcc_pclk(const char *name, +struct clk_core *clk_reg_prcc_pclk(const char *name, const char *parent_name, resource_size_t phy_base, u32 cg_sel, unsigned long flags); -struct clk *clk_reg_prcc_kclk(const char *name, +struct clk_core *clk_reg_prcc_kclk(const char *name, const char *parent_name, resource_size_t phy_base, u32 cg_sel, unsigned long flags); -struct clk *clk_reg_prcmu_scalable(const char *name, +struct clk_core *clk_reg_prcmu_scalable(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, unsigned long flags); -struct clk *clk_reg_prcmu_gate(const char *name, +struct clk_core *clk_reg_prcmu_gate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags); -struct clk *clk_reg_prcmu_scalable_rate(const char *name, +struct clk_core *clk_reg_prcmu_scalable_rate(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, unsigned long flags); -struct clk *clk_reg_prcmu_rate(const char *name, +struct clk_core *clk_reg_prcmu_rate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags); -struct clk *clk_reg_prcmu_opp_gate(const char *name, +struct clk_core *clk_reg_prcmu_opp_gate(const char *name, const char *parent_name, u8 cg_sel, unsigned long flags); -struct clk *clk_reg_prcmu_opp_volt_scalable(const char *name, +struct clk_core *clk_reg_prcmu_opp_volt_scalable(const char *name, const char *parent_name, u8 cg_sel, unsigned long rate, unsigned long flags); -struct clk *clk_reg_sysctrl_gate(struct device *dev, +struct clk_core *clk_reg_sysctrl_gate(struct device *dev, const char *name, const char *parent_name, u16 reg_sel, @@ -68,7 +67,7 @@ struct clk *clk_reg_sysctrl_gate(struct device *dev, unsigned long enable_delay_us, unsigned long flags); -struct clk *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, +struct clk_core *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, const char *name, const char *parent_name, u16 reg_sel, @@ -78,7 +77,7 @@ struct clk *clk_reg_sysctrl_gate_fixed_rate(struct device *dev, unsigned long enable_delay_us, unsigned long flags); -struct clk *clk_reg_sysctrl_set_parent(struct device *dev, +struct clk_core *clk_reg_sysctrl_set_parent(struct device *dev, const char *name, const char **parent_names, u8 num_parents, diff --git a/drivers/clk/ux500/u8500_clk.c b/drivers/clk/ux500/u8500_clk.c index 80069c3..708589f 100644 --- a/drivers/clk/ux500/u8500_clk.c +++ b/drivers/clk/ux500/u8500_clk.c @@ -7,7 +7,6 @@ * License terms: GNU General Public License (GPL) version 2 */ -#include #include #include #include @@ -19,7 +18,7 @@ void u8500_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, { struct prcmu_fw_version *fw_version; const char *sgaclk_parent = NULL; - struct clk *clk; + struct clk_core *clk; /* Clock sources */ clk = clk_reg_prcmu_gate("soc0_pll", NULL, PRCMU_PLLSOC0, diff --git a/drivers/clk/ux500/u8500_of_clk.c b/drivers/clk/ux500/u8500_of_clk.c index 7b55ef8..61efb85 100644 --- a/drivers/clk/ux500/u8500_of_clk.c +++ b/drivers/clk/ux500/u8500_of_clk.c @@ -8,7 +8,6 @@ */ #include -#include #include #include #include @@ -18,9 +17,9 @@ #define PRCC_NUM_PERIPH_CLUSTERS 6 #define PRCC_PERIPHS_PER_CLUSTER 32 -static struct clk *prcmu_clk[PRCMU_NUM_CLKS]; -static struct clk *prcc_pclk[(PRCC_NUM_PERIPH_CLUSTERS + 1) * PRCC_PERIPHS_PER_CLUSTER]; -static struct clk *prcc_kclk[(PRCC_NUM_PERIPH_CLUSTERS + 1) * PRCC_PERIPHS_PER_CLUSTER]; +static struct clk_core *prcmu_clk[PRCMU_NUM_CLKS]; +static struct clk_core *prcc_pclk[(PRCC_NUM_PERIPH_CLUSTERS + 1) * PRCC_PERIPHS_PER_CLUSTER]; +static struct clk_core *prcc_kclk[(PRCC_NUM_PERIPH_CLUSTERS + 1) * PRCC_PERIPHS_PER_CLUSTER]; #define PRCC_SHOW(clk, base, bit) \ clk[(base * PRCC_PERIPHS_PER_CLUSTER) + bit] @@ -29,10 +28,10 @@ static struct clk *prcc_kclk[(PRCC_NUM_PERIPH_CLUSTERS + 1) * PRCC_PERIPHS_PER_C #define PRCC_KCLK_STORE(clk, base, bit) \ prcc_kclk[(base * PRCC_PERIPHS_PER_CLUSTER) + bit] = clk -static struct clk *ux500_twocell_get(struct of_phandle_args *clkspec, +static struct clk_core *ux500_twocell_get(struct of_phandle_args *clkspec, void *data) { - struct clk **clk_data = data; + struct clk_core **clk_data = data; unsigned int base, bit; if (clkspec->args_count != 2) @@ -61,7 +60,7 @@ void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, struct device_node *np = NULL; struct device_node *child = NULL; const char *sgaclk_parent = NULL; - struct clk *clk, *rtc_clk, *twd_clk; + struct clk_core *clk, *rtc_clk, *twd_clk; if (of_have_populated_dt()) np = of_find_matching_node(NULL, u8500_clk_of_match); diff --git a/drivers/clk/ux500/u8540_clk.c b/drivers/clk/ux500/u8540_clk.c index 20c8add..a508845 100644 --- a/drivers/clk/ux500/u8540_clk.c +++ b/drivers/clk/ux500/u8540_clk.c @@ -7,7 +7,6 @@ * License terms: GNU General Public License (GPL) version 2 */ -#include #include #include #include @@ -17,7 +16,7 @@ void u8540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, u32 clkrst5_base, u32 clkrst6_base) { - struct clk *clk; + struct clk_core *clk; /* Clock sources. */ /* Fixed ClockGen */ diff --git a/drivers/clk/ux500/u9540_clk.c b/drivers/clk/ux500/u9540_clk.c index 4479478..89055ae 100644 --- a/drivers/clk/ux500/u9540_clk.c +++ b/drivers/clk/ux500/u9540_clk.c @@ -7,7 +7,6 @@ * License terms: GNU General Public License (GPL) version 2 */ -#include #include #include #include diff --git a/drivers/clk/versatile/clk-icst.c b/drivers/clk/versatile/clk-icst.c index bc96f10..d5719e0 100644 --- a/drivers/clk/versatile/clk-icst.c +++ b/drivers/clk/versatile/clk-icst.c @@ -13,7 +13,6 @@ * ICST clock code from the ARM tree should probably be merged into this * file. */ -#include #include #include #include @@ -121,13 +120,13 @@ static const struct clk_ops icst_ops = { .set_rate = icst_set_rate, }; -struct clk *icst_clk_register(struct device *dev, +struct clk_core *icst_clk_register(struct device *dev, const struct clk_icst_desc *desc, const char *name, const char *parent_name, void __iomem *base) { - struct clk *clk; + struct clk_core *clk; struct clk_icst *icst; struct clk_init_data init; struct icst_params *pclone; diff --git a/drivers/clk/versatile/clk-icst.h b/drivers/clk/versatile/clk-icst.h index 04e6f0a..ede867b 100644 --- a/drivers/clk/versatile/clk-icst.h +++ b/drivers/clk/versatile/clk-icst.h @@ -13,7 +13,7 @@ struct clk_icst_desc { u32 lock_offset; }; -struct clk *icst_clk_register(struct device *dev, +struct clk_core *icst_clk_register(struct device *dev, const struct clk_icst_desc *desc, const char *name, const char *parent_name, diff --git a/drivers/clk/versatile/clk-impd1.c b/drivers/clk/versatile/clk-impd1.c index 1cc1330..46680db 100644 --- a/drivers/clk/versatile/clk-impd1.c +++ b/drivers/clk/versatile/clk-impd1.c @@ -7,7 +7,6 @@ * published by the Free Software Foundation. */ #include -#include #include #include #include @@ -21,18 +20,18 @@ struct impd1_clk { char *pclkname; - struct clk *pclk; + struct clk_core *pclk; char *vco1name; - struct clk *vco1clk; + struct clk_core *vco1clk; char *vco2name; - struct clk *vco2clk; - struct clk *mmciclk; + struct clk_core *vco2clk; + struct clk_core *mmciclk; char *uartname; - struct clk *uartclk; + struct clk_core *uartclk; char *spiname; - struct clk *spiclk; + struct clk_core *spiclk; char *scname; - struct clk *scclk; + struct clk_core *scclk; struct clk_lookup *clks[15]; }; @@ -87,8 +86,8 @@ static const struct clk_icst_desc impd1_icst2_desc = { void integrator_impd1_clk_init(void __iomem *base, unsigned int id) { struct impd1_clk *imc; - struct clk *clk; - struct clk *pclk; + struct clk_core *clk; + struct clk_core *pclk; int i; if (id > 3) { diff --git a/drivers/clk/versatile/clk-realview.c b/drivers/clk/versatile/clk-realview.c index c8b5231..524cba5 100644 --- a/drivers/clk/versatile/clk-realview.c +++ b/drivers/clk/versatile/clk-realview.c @@ -6,7 +6,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include #include #include #include @@ -50,7 +49,7 @@ static const struct clk_icst_desc __initdata realview_osc4_desc = { */ void __init realview_clk_init(void __iomem *sysbase, bool is_pb1176) { - struct clk *clk; + struct clk_core *clk; /* APB clock dummy */ clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL, CLK_IS_ROOT, 0); diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c index c6e86a9..9256d25 100644 --- a/drivers/clk/versatile/clk-sp810.c +++ b/drivers/clk/versatile/clk-sp810.c @@ -25,7 +25,7 @@ struct clk_sp810; struct clk_sp810_timerclken { struct clk_hw hw; - struct clk *clk; + struct clk_core *clk; struct clk_sp810 *sp810; int channel; }; @@ -36,8 +36,8 @@ struct clk_sp810 { void __iomem *base; spinlock_t lock; struct clk_sp810_timerclken timerclken[4]; - struct clk *refclk; - struct clk *timclk; + struct clk_core *refclk; + struct clk_core *timclk; }; static u8 clk_sp810_timerclken_get_parent(struct clk_hw *hw) @@ -79,29 +79,31 @@ static int clk_sp810_timerclken_prepare(struct clk_hw *hw) { struct clk_sp810_timerclken *timerclken = to_clk_sp810_timerclken(hw); struct clk_sp810 *sp810 = timerclken->sp810; - struct clk *old_parent = __clk_get_parent(hw->clk); - struct clk *new_parent; + struct clk_core *old_parent = __clk_get_parent(hw->clk); + struct clk_core *new_parent; if (!sp810->refclk) - sp810->refclk = of_clk_get(sp810->node, sp810->refclk_index); + sp810->refclk = of_clk_provider_get(sp810->node, + sp810->refclk_index); if (!sp810->timclk) - sp810->timclk = of_clk_get(sp810->node, sp810->timclk_index); + sp810->timclk = of_clk_provider_get(sp810->node, + sp810->timclk_index); if (WARN_ON(IS_ERR(sp810->refclk) || IS_ERR(sp810->timclk))) return -ENOENT; /* Select fastest parent */ - if (clk_get_rate(sp810->refclk) > clk_get_rate(sp810->timclk)) + if (clk_provider_get_rate(sp810->refclk) > clk_provider_get_rate(sp810->timclk)) new_parent = sp810->refclk; else new_parent = sp810->timclk; /* Switch the parent if necessary */ if (old_parent != new_parent) { - clk_prepare(new_parent); - clk_set_parent(hw->clk, new_parent); - clk_unprepare(old_parent); + clk_provider_prepare(new_parent); + clk_provider_set_parent(hw->clk, new_parent); + clk_provider_unprepare(old_parent); } return 0; @@ -112,8 +114,8 @@ static void clk_sp810_timerclken_unprepare(struct clk_hw *hw) struct clk_sp810_timerclken *timerclken = to_clk_sp810_timerclken(hw); struct clk_sp810 *sp810 = timerclken->sp810; - clk_put(sp810->timclk); - clk_put(sp810->refclk); + __clk_put(sp810->timclk); + __clk_put(sp810->refclk); } static const struct clk_ops clk_sp810_timerclken_ops = { @@ -123,7 +125,7 @@ static const struct clk_ops clk_sp810_timerclken_ops = { .set_parent = clk_sp810_timerclken_set_parent, }; -static struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec, +static struct clk_core *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec, void *data) { struct clk_sp810 *sp810 = data; diff --git a/drivers/clk/versatile/clk-versatile.c b/drivers/clk/versatile/clk-versatile.c index a76981e..1bdd542 100644 --- a/drivers/clk/versatile/clk-versatile.c +++ b/drivers/clk/versatile/clk-versatile.c @@ -8,7 +8,6 @@ * published by the Free Software Foundation. */ #include -#include #include #include #include @@ -60,7 +59,7 @@ static const struct clk_icst_desc versatile_auxosc_desc __initconst = { static void __init cm_osc_setup(struct device_node *np, const struct clk_icst_desc *desc) { - struct clk *clk = ERR_PTR(-EINVAL); + struct clk_core *clk = ERR_PTR(-EINVAL); const char *clk_name = np->name; const char *parent_name; diff --git a/drivers/clk/versatile/clk-vexpress-osc.c b/drivers/clk/versatile/clk-vexpress-osc.c index 529a59c..c9e175f 100644 --- a/drivers/clk/versatile/clk-vexpress-osc.c +++ b/drivers/clk/versatile/clk-vexpress-osc.c @@ -73,7 +73,7 @@ static int vexpress_osc_probe(struct platform_device *pdev) struct clk_lookup *cl = pdev->dev.platform_data; /* Non-DT lookup */ struct clk_init_data init; struct vexpress_osc *osc; - struct clk *clk; + struct clk_core *clk; u32 range[2]; osc = devm_kzalloc(&pdev->dev, sizeof(*osc), GFP_KERNEL); diff --git a/drivers/clk/versatile/clk-vexpress.c b/drivers/clk/versatile/clk-vexpress.c index 2d5e1b4..e77f3d5 100644 --- a/drivers/clk/versatile/clk-vexpress.c +++ b/drivers/clk/versatile/clk-vexpress.c @@ -17,7 +17,7 @@ #include #include -static struct clk *vexpress_sp810_timerclken[4]; +static struct clk_core *vexpress_sp810_timerclken[4]; static DEFINE_SPINLOCK(vexpress_sp810_lock); static void __init vexpress_sp810_init(void __iomem *base) @@ -54,7 +54,7 @@ static const char * const vexpress_clk_24mhz_periphs[] __initconst = { void __init vexpress_clk_init(void __iomem *sp810_base) { - struct clk *clk; + struct clk_core *clk; int i; clk = clk_register_fixed_rate(NULL, "dummy_apb_pclk", NULL, @@ -77,7 +77,7 @@ void __init vexpress_clk_init(void __iomem *sp810_base) vexpress_sp810_init(sp810_base); for (i = 0; i < ARRAY_SIZE(vexpress_sp810_timerclken); i++) - WARN_ON(clk_set_parent(vexpress_sp810_timerclken[i], clk)); + WARN_ON(clk_provider_set_parent(vexpress_sp810_timerclken[i], clk)); WARN_ON(clk_register_clkdev(vexpress_sp810_timerclken[0], "v2m-timer0", "sp804")); diff --git a/drivers/clk/x86/clk-lpt.c b/drivers/clk/x86/clk-lpt.c index 812f83f..fbb6807 100644 --- a/drivers/clk/x86/clk-lpt.c +++ b/drivers/clk/x86/clk-lpt.c @@ -10,7 +10,6 @@ * published by the Free Software Foundation. */ -#include #include #include #include @@ -21,7 +20,7 @@ static int lpt_clk_probe(struct platform_device *pdev) { struct lpss_clk_data *drvdata; - struct clk *clk; + struct clk_core *clk; drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); if (!drvdata) diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c index 246cf12..0efdd9a 100644 --- a/drivers/clk/zynq/clkc.c +++ b/drivers/clk/zynq/clkc.c @@ -67,8 +67,8 @@ enum zynq_clk { i2c0_aper, i2c1_aper, uart0_aper, uart1_aper, gpio_aper, lqspi_aper, smc_aper, swdt, dbg_trc, dbg_apb, clk_max}; -static struct clk *ps_clk; -static struct clk *clks[clk_max]; +static struct clk_core *ps_clk; +static struct clk_core *clks[clk_max]; static struct clk_onecell_data clk_data; static DEFINE_SPINLOCK(armpll_lock); @@ -108,7 +108,7 @@ static void __init zynq_clk_register_fclk(enum zynq_clk fclk, const char *clk_name, void __iomem *fclk_ctrl_reg, const char **parents, int enable) { - struct clk *clk; + struct clk_core *clk; u32 enable_reg; char *mux_name; char *div0_name; @@ -154,7 +154,7 @@ static void __init zynq_clk_register_fclk(enum zynq_clk fclk, 0, CLK_GATE_SET_TO_DISABLE, fclk_gate_lock); enable_reg = clk_readl(fclk_gate_reg) & 1; if (enable && !enable_reg) { - if (clk_prepare_enable(clks[fclk])) + if (clk_provider_prepare_enable(clks[fclk])) pr_warn("%s: FCLK%u enable failed\n", __func__, fclk - fclk0); } @@ -181,7 +181,7 @@ static void __init zynq_clk_register_periph_clk(enum zynq_clk clk0, const char *clk_name1, void __iomem *clk_ctrl, const char **parents, unsigned int two_gates) { - struct clk *clk; + struct clk_core *clk; char *mux_name; char *div_name; spinlock_t *lock; @@ -222,7 +222,7 @@ static void __init zynq_clk_setup(struct device_node *np) int i; u32 tmp; int ret; - struct clk *clk; + struct clk_core *clk; char *clk_name; unsigned int fclk_enable = 0; const char *clk_output_name[clk_max]; @@ -333,13 +333,13 @@ static void __init zynq_clk_setup(struct device_node *np) CLK_DIVIDER_ALLOW_ZERO, &ddrclk_lock); clks[ddr2x] = clk_register_gate(NULL, clk_output_name[ddr2x], "ddr2x_div", 0, SLCR_DDR_CLK_CTRL, 1, 0, &ddrclk_lock); - clk_prepare_enable(clks[ddr2x]); + clk_provider_prepare_enable(clks[ddr2x]); clk = clk_register_divider(NULL, "ddr3x_div", "ddrpll", 0, SLCR_DDR_CLK_CTRL, 20, 6, CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO, &ddrclk_lock); clks[ddr3x] = clk_register_gate(NULL, clk_output_name[ddr3x], "ddr3x_div", 0, SLCR_DDR_CLK_CTRL, 0, 0, &ddrclk_lock); - clk_prepare_enable(clks[ddr3x]); + clk_provider_prepare_enable(clks[ddr3x]); clk = clk_register_divider(NULL, "dci_div0", "ddrpll", 0, SLCR_DCI_CLK_CTRL, 8, 6, CLK_DIVIDER_ONE_BASED | @@ -351,7 +351,7 @@ static void __init zynq_clk_setup(struct device_node *np) clks[dci] = clk_register_gate(NULL, clk_output_name[dci], "dci_div1", CLK_SET_RATE_PARENT, SLCR_DCI_CLK_CTRL, 0, 0, &dciclk_lock); - clk_prepare_enable(clks[dci]); + clk_provider_prepare_enable(clks[dci]); /* Peripheral clocks */ for (i = fclk0; i <= fclk3; i++) { @@ -505,10 +505,10 @@ static void __init zynq_clk_setup(struct device_node *np) /* leave debug clocks in the state the bootloader set them up to */ tmp = clk_readl(SLCR_DBG_CLK_CTRL); if (tmp & DBG_CLK_CTRL_CLKACT_TRC) - if (clk_prepare_enable(clks[dbg_trc])) + if (clk_provider_prepare_enable(clks[dbg_trc])) pr_warn("%s: trace clk enable failed\n", __func__); if (tmp & DBG_CLK_CTRL_CPU_1XCLKACT) - if (clk_prepare_enable(clks[dbg_apb])) + if (clk_provider_prepare_enable(clks[dbg_apb])) pr_warn("%s: debug APB clk enable failed\n", __func__); /* One gated clock for all APER clocks. */ diff --git a/drivers/clk/zynq/pll.c b/drivers/clk/zynq/pll.c index cec9759..5176f65 100644 --- a/drivers/clk/zynq/pll.c +++ b/drivers/clk/zynq/pll.c @@ -193,12 +193,12 @@ static const struct clk_ops zynq_pll_ops = { * @lock Register lock * Returns handle to the registered clock. */ -struct clk *clk_register_zynq_pll(const char *name, const char *parent, +struct clk_core *clk_register_zynq_pll(const char *name, const char *parent, void __iomem *pll_ctrl, void __iomem *pll_status, u8 lock_index, spinlock_t *lock) { struct zynq_pll *pll; - struct clk *clk; + struct clk_core *clk; u32 reg; const char *parent_arr[1] = {parent}; unsigned long flags = 0; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c index 902d768..8e97702 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c @@ -15,7 +15,6 @@ * this program. If not, see . */ -#include #include #include "hdmi.h" @@ -24,7 +23,7 @@ struct hdmi_phy_8960 { struct hdmi_phy base; struct hdmi *hdmi; struct clk_hw pll_hw; - struct clk *pll; + struct clk_core *pll; unsigned long pixclk; }; #define to_hdmi_phy_8960(x) container_of(x, struct hdmi_phy_8960, base) diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c index 2620c48..2fdadd8 100644 --- a/drivers/media/platform/exynos4-is/media-dev.c +++ b/drivers/media/platform/exynos4-is/media-dev.c @@ -11,7 +11,6 @@ */ #include -#include #include #include #include @@ -215,7 +214,7 @@ static int __fimc_pipeline_open(struct exynos_media_pipeline *ep, /* Disable PXLASYNC clock if this pipeline includes FIMC-IS */ if (!IS_ERR(fmd->wbclk[CLK_IDX_WB_B]) && p->subdevs[IDX_IS_ISP]) { - ret = clk_prepare_enable(fmd->wbclk[CLK_IDX_WB_B]); + ret = clk_provider_prepare_enable(fmd->wbclk[CLK_IDX_WB_B]); if (ret < 0) return ret; } @@ -225,7 +224,7 @@ static int __fimc_pipeline_open(struct exynos_media_pipeline *ep, return 0; if (!IS_ERR(fmd->wbclk[CLK_IDX_WB_B]) && p->subdevs[IDX_IS_ISP]) - clk_disable_unprepare(fmd->wbclk[CLK_IDX_WB_B]); + clk_provider_disable_unprepare(fmd->wbclk[CLK_IDX_WB_B]); return ret; } @@ -254,7 +253,7 @@ static int __fimc_pipeline_close(struct exynos_media_pipeline *ep) /* Disable PXLASYNC clock if this pipeline includes FIMC-IS */ if (!IS_ERR(fmd->wbclk[CLK_IDX_WB_B]) && p->subdevs[IDX_IS_ISP]) - clk_disable_unprepare(fmd->wbclk[CLK_IDX_WB_B]); + clk_provider_disable_unprepare(fmd->wbclk[CLK_IDX_WB_B]); return ret == -ENXIO ? 0 : ret; } @@ -954,7 +953,7 @@ static void fimc_md_put_clocks(struct fimc_md *fmd) while (--i >= 0) { if (IS_ERR(fmd->camclk[i].clock)) continue; - clk_put(fmd->camclk[i].clock); + __clk_put(fmd->camclk[i].clock); fmd->camclk[i].clock = ERR_PTR(-EINVAL); } @@ -962,7 +961,7 @@ static void fimc_md_put_clocks(struct fimc_md *fmd) for (i = 0; i < FIMC_MAX_WBCLKS; i++) { if (IS_ERR(fmd->wbclk[i])) continue; - clk_put(fmd->wbclk[i]); + __clk_put(fmd->wbclk[i]); fmd->wbclk[i] = ERR_PTR(-EINVAL); } } @@ -971,7 +970,7 @@ static int fimc_md_get_clocks(struct fimc_md *fmd) { struct device *dev = &fmd->pdev->dev; char clk_name[32]; - struct clk *clock; + struct clk_core *clock; int i, ret = 0; for (i = 0; i < FIMC_MAX_CAMCLKS; i++) @@ -979,7 +978,7 @@ static int fimc_md_get_clocks(struct fimc_md *fmd) for (i = 0; i < FIMC_MAX_CAMCLKS; i++) { snprintf(clk_name, sizeof(clk_name), "sclk_cam%u", i); - clock = clk_get(dev, clk_name); + clock = clk_provider_get(dev, clk_name); if (IS_ERR(clock)) { dev_err(dev, "Failed to get clock: %s\n", clk_name); @@ -1001,7 +1000,7 @@ static int fimc_md_get_clocks(struct fimc_md *fmd) for (i = CLK_IDX_WB_B; i < FIMC_MAX_WBCLKS; i++) { snprintf(clk_name, sizeof(clk_name), "pxl_async%u", i); - clock = clk_get(dev, clk_name); + clock = clk_provider_get(dev, clk_name); if (IS_ERR(clock)) { v4l2_err(&fmd->v4l2_dev, "Failed to get clock: %s\n", clk_name); diff --git a/drivers/media/platform/exynos4-is/media-dev.h b/drivers/media/platform/exynos4-is/media-dev.h index 0321454..f24dac6 100644 --- a/drivers/media/platform/exynos4-is/media-dev.h +++ b/drivers/media/platform/exynos4-is/media-dev.h @@ -9,7 +9,6 @@ #ifndef FIMC_MDEVICE_H_ #define FIMC_MDEVICE_H_ -#include #include #include #include @@ -72,7 +71,7 @@ struct fimc_csis_info { }; struct fimc_camclk_info { - struct clk *clock; + struct clk_core *clock; int use_count; unsigned long frequency; }; @@ -124,7 +123,7 @@ struct fimc_md { struct fimc_sensor_info sensor[FIMC_MAX_SENSORS]; int num_sensors; struct fimc_camclk_info camclk[FIMC_MAX_CAMCLKS]; - struct clk *wbclk[FIMC_MAX_WBCLKS]; + struct clk_core *wbclk[FIMC_MAX_WBCLKS]; struct fimc_lite *fimc_lite[FIMC_LITE_MAX_DEVS]; struct fimc_dev *fimc[FIMC_MAX_DEVS]; struct fimc_is *fimc_is; @@ -141,7 +140,7 @@ struct fimc_md { } pinctl; struct cam_clk_provider { - struct clk *clks[FIMC_MAX_CAMCLKS]; + struct clk_core *clks[FIMC_MAX_CAMCLKS]; struct clk_onecell_data clk_data; struct device_node *of_node; struct cam_clk camclk[FIMC_MAX_CAMCLKS]; diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h index 2c314ee..5fcedd6 100644 --- a/drivers/media/platform/omap3isp/isp.h +++ b/drivers/media/platform/omap3isp/isp.h @@ -133,7 +133,7 @@ struct isp_xclk { struct isp_device *isp; struct clk_hw hw; struct clk_lookup *lookup; - struct clk *clk; + struct clk_core *clk; enum isp_xclk_id id; spinlock_t lock; /* Protects enabled and divider */ diff --git a/drivers/rtc/rtc-hym8563.c b/drivers/rtc/rtc-hym8563.c index b936bb4..ea21bd1 100644 --- a/drivers/rtc/rtc-hym8563.c +++ b/drivers/rtc/rtc-hym8563.c @@ -398,11 +398,11 @@ static const struct clk_ops hym8563_clkout_ops = { .set_rate = hym8563_clkout_set_rate, }; -static struct clk *hym8563_clkout_register_clk(struct hym8563 *hym8563) +static struct clk_core *hym8563_clkout_register_clk(struct hym8563 *hym8563) { struct i2c_client *client = hym8563->client; struct device_node *node = client->dev.of_node; - struct clk *clk; + struct clk_core *clk; struct clk_init_data init; int ret; diff --git a/drivers/spi/spi-pxa2xx-pci.c b/drivers/spi/spi-pxa2xx-pci.c index 536c863..f590e00 100644 --- a/drivers/spi/spi-pxa2xx-pci.c +++ b/drivers/spi/spi-pxa2xx-pci.c @@ -7,7 +7,6 @@ #include #include #include -#include #include enum { diff --git a/drivers/staging/imx-drm/imx-tve.c b/drivers/staging/imx-drm/imx-tve.c index 31fe7cf..4fcb4d8 100644 --- a/drivers/staging/imx-drm/imx-tve.c +++ b/drivers/staging/imx-drm/imx-tve.c @@ -18,7 +18,6 @@ * MA 02110-1301, USA. */ -#include #include #include #include @@ -121,10 +120,10 @@ struct imx_tve { struct regmap *regmap; struct regulator *dac_reg; struct i2c_adapter *ddc; - struct clk *clk; - struct clk *di_sel_clk; + struct clk_core *clk; + struct clk_core *di_sel_clk; struct clk_hw clk_hw_di; - struct clk *di_clk; + struct clk_core *di_clk; int vsync_pin; int hsync_pin; }; @@ -151,7 +150,7 @@ static void tve_enable(struct imx_tve *tve) if (!tve->enabled) { tve->enabled = true; - clk_prepare_enable(tve->clk); + clk_provider_prepare_enable(tve->clk); ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, TVE_IPU_CLK_EN | TVE_EN, TVE_IPU_CLK_EN | TVE_EN); @@ -178,7 +177,7 @@ static void tve_disable(struct imx_tve *tve) tve->enabled = false; ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, TVE_IPU_CLK_EN | TVE_EN, 0); - clk_disable_unprepare(tve->clk); + clk_provider_disable_unprepare(tve->clk); } } @@ -253,12 +252,12 @@ static int imx_tve_connector_mode_valid(struct drm_connector *connector, unsigned long rate; /* pixel clock with 2x oversampling */ - rate = clk_round_rate(tve->clk, 2000UL * mode->clock) / 2000; + rate = clk_provider_round_rate(tve->clk, 2000UL * mode->clock) / 2000; if (rate == mode->clock) return MODE_OK; /* pixel clock without oversampling */ - rate = clk_round_rate(tve->clk, 1000UL * mode->clock) / 1000; + rate = clk_provider_round_rate(tve->clk, 1000UL * mode->clock) / 1000; if (rate == mode->clock) return MODE_OK; @@ -327,13 +326,13 @@ static void imx_tve_encoder_mode_set(struct drm_encoder *encoder, * and enable 4x oversampling for lower resolutions */ rate = 2000UL * mode->clock; - clk_set_rate(tve->clk, rate); - rounded_rate = clk_get_rate(tve->clk); + clk_provider_set_rate(tve->clk, rate); + rounded_rate = clk_provider_get_rate(tve->clk); if (rounded_rate >= rate) div = 2; - clk_set_rate(tve->di_clk, rounded_rate / div); + clk_provider_set_rate(tve->di_clk, rounded_rate / div); - ret = clk_set_parent(tve->di_sel_clk, tve->di_clk); + ret = clk_provider_set_parent(tve->di_sel_clk, tve->di_clk); if (ret < 0) { dev_err(tve->dev, "failed to set di_sel parent to tve_di: %d\n", ret); @@ -645,7 +644,7 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) return ret; } - tve->clk = devm_clk_get(dev, "tve"); + tve->clk = devm_clk_provider_get(dev, "tve"); if (IS_ERR(tve->clk)) { dev_err(dev, "failed to get high speed tve clock: %ld\n", PTR_ERR(tve->clk)); @@ -653,7 +652,7 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) } /* this is the IPU DI clock input selector, can be parented to tve_di */ - tve->di_sel_clk = devm_clk_get(dev, "di_sel"); + tve->di_sel_clk = devm_clk_provider_get(dev, "di_sel"); if (IS_ERR(tve->di_sel_clk)) { dev_err(dev, "failed to get ipu di mux clock: %ld\n", PTR_ERR(tve->di_sel_clk)); diff --git a/include/asm-generic/clkdev.h b/include/asm-generic/clkdev.h index 90a32a6..4320225 100644 --- a/include/asm-generic/clkdev.h +++ b/include/asm-generic/clkdev.h @@ -15,10 +15,10 @@ #include -struct clk; +struct clk_core; -static inline int __clk_get(struct clk *clk) { return 1; } -static inline void __clk_put(struct clk *clk) { } +static inline int __clk_get(struct clk_core *clk) { return 1; } +static inline void __clk_put(struct clk_core *clk) { } static inline struct clk_lookup_alloc *__clkdev_alloc(size_t size) { diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h index e8d8a35..6b9e6b4 100644 --- a/include/linux/clk/ti.h +++ b/include/linux/clk/ti.h @@ -22,8 +22,8 @@ * @mult_div1_reg: register containing the DPLL M and N bitfields * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg - * @clk_bypass: struct clk pointer to the clock's bypass clock input - * @clk_ref: struct clk pointer to the clock's reference clock input + * @clk_bypass: struct clk_core pointer to the clock's bypass clock input + * @clk_ref: struct clk_core pointer to the clock's reference clock input * @control_reg: register containing the DPLL mode bitfield * @enable_mask: mask of the DPLL mode bitfield in @control_reg * @last_rounded_rate: cache of the last rate result of omap2_dpll_round_rate() @@ -68,8 +68,8 @@ struct dpll_data { void __iomem *mult_div1_reg; u32 mult_mask; u32 div1_mask; - struct clk *clk_bypass; - struct clk *clk_ref; + struct clk_core *clk_bypass; + struct clk_core *clk_ref; void __iomem *control_reg; u32 enable_mask; unsigned long last_rounded_rate; @@ -251,7 +251,7 @@ extern const struct clk_ops ti_clk_mux_ops; #define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw) -void omap2_init_clk_hw_omap_clocks(struct clk *clk); +void omap2_init_clk_hw_omap_clocks(struct clk_core *clk); int omap3_noncore_dpll_enable(struct clk_hw *hw); void omap3_noncore_dpll_disable(struct clk_hw *hw); int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, diff --git a/include/linux/clk/zynq.h b/include/linux/clk/zynq.h index a990a59..6c35291 100644 --- a/include/linux/clk/zynq.h +++ b/include/linux/clk/zynq.h @@ -25,7 +25,7 @@ void zynq_clock_init(void); -struct clk *clk_register_zynq_pll(const char *name, const char *parent, +struct clk_core *clk_register_zynq_pll(const char *name, const char *parent, void __iomem *pll_ctrl, void __iomem *pll_status, u8 lock_index, spinlock_t *lock); #endif diff --git a/include/linux/platform_data/si5351.h b/include/linux/platform_data/si5351.h index a947ab8..4b34c69 100644 --- a/include/linux/platform_data/si5351.h +++ b/include/linux/platform_data/si5351.h @@ -107,8 +107,8 @@ struct si5351_clkout_config { * @clkout: array of clkout configuration */ struct si5351_platform_data { - struct clk *clk_xtal; - struct clk *clk_clkin; + struct clk_core *clk_xtal; + struct clk_core *clk_clkin; enum si5351_pll_src pll_src[2]; struct si5351_clkout_config clkout[8]; }; diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c index 231d7e7..a24367d 100644 --- a/sound/soc/mxs/mxs-saif.c +++ b/sound/soc/mxs/mxs-saif.c @@ -682,11 +682,11 @@ static int mxs_saif_mclk_init(struct platform_device *pdev) { struct mxs_saif *saif = platform_get_drvdata(pdev); struct device_node *np = pdev->dev.of_node; - struct clk *clk; + struct clk_core *clk; int ret; clk = clk_register_divider(&pdev->dev, "mxs_saif_mclk", - __clk_get_name(saif->clk), 0, + clk_get_name(saif->clk), 0, saif->base + SAIF_CTRL, BP_SAIF_CTRL_BITCLK_MULT_RATE, 3, 0, NULL); -- 1.9.3