Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262599AbUCJNHb (ORCPT ); Wed, 10 Mar 2004 08:07:31 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262597AbUCJNHb (ORCPT ); Wed, 10 Mar 2004 08:07:31 -0500 Received: from [217.157.19.70] ([217.157.19.70]:39943 "EHLO jehova.dsm.dk") by vger.kernel.org with ESMTP id S262602AbUCJNHJ (ORCPT ); Wed, 10 Mar 2004 08:07:09 -0500 Date: Wed, 10 Mar 2004 13:07:06 +0000 (GMT) From: Thomas Horsten X-X-Sender: thomas@jehova.dsm.dk To: andre@linux-ide.org, , Subject: [PATCH] 2.4.x Linux Medley RAID Version 7 Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1646705133-405160930-1078924026=:32012" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 35260 Lines: 593 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1646705133-405160930-1078924026=:32012 Content-Type: TEXT/PLAIN; charset=US-ASCII I'll submit this again in the hope that it will be included. This patch adds generic support for Medley RAID0 ataraid. It has been used over the last 7 months by a large number of people, without any reports of problems that could be traced back to this patch. This latest version fixes a problem when compiling with pre-3.0 gcc. The patch supports the BIOS-assisted software RAID used, among others, by Silicon Image and CMD680 RAID PCI-cards and on-chip controllers. The patch has also been included in a number of custom kernels, including Debian's kernel-source-2.4.25. History and comments are available here: http://www.infowares.com/linux/ I am working on a RAID-detect utility for 2.6, that will run from initramfs or initrd and use the dm framework. More information on the above site. // Thomas ---1646705133-405160930-1078924026=:32012 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="medleyraid_v7_for_2.4.25.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="medleyraid_v7_for_2.4.25.patch" ZGlmZiAtdXJOIGxpbnV4LTIuNC4yNS9Eb2N1bWVudGF0aW9uL0NvbmZpZ3Vy ZS5oZWxwIGxpbnV4LTIuNC4yNS50aC1tZWRsZXkvRG9jdW1lbnRhdGlvbi9D b25maWd1cmUuaGVscA0KLS0tIGxpbnV4LTIuNC4yNS9Eb2N1bWVudGF0aW9u L0NvbmZpZ3VyZS5oZWxwCVdlZCBGZWIgMTggMTM6MzY6MzAgMjAwNA0KKysr IGxpbnV4LTIuNC4yNS50aC1tZWRsZXkvRG9jdW1lbnRhdGlvbi9Db25maWd1 cmUuaGVscAlXZWQgTWFyIDEwIDExOjA2OjA2IDIwMDQNCkBAIC0yMDg1LDYg KzIwODUsMzcgQEANCiAgIElmIHlvdSBjaG9vc2UgdG8gY29tcGlsZSB0aGlz IGFzIGEgbW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkDQogICBo cHRyYWlkLm8uDQogDQorQ01EL1NpbGljb24gSW1hZ2UgTWVkbGV5IFNvZnR3 YXJlIFJBSUQNCitDT05GSUdfQkxLX0RFVl9BVEFSQUlEX01FRExFWQ0KKyAg U2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFNpbGljb24gSW1hZ2UgMzExMiBT QVRBIFJBSUQgY29udHJvbGxlciwgYQ0KKyAgQ01ENjgwIGJhc2VkIGNvbnRy b2xsZXIsIG9yIGFub3RoZXIgSURFIFJBSUQgY29udHJvbGxlciB0aGF0IHVz ZXMNCisgIENNRCdzIE1lZGxleSBzb2Z0d2FyZSBSQUlELCBhbmQgd2FudCBM aW51eCB0byB1c2UgdGhlIHNvZnR3YXJlIFJBSUQNCisgIGZlYXR1cmUgb2Yg dGhpcyBjYXJkLiAgVGhpcyBkcml2ZXIgdXNlcyAvZGV2L2F0YXJhaWQvZFhw WSAoWCBhbmQgWQ0KKyAgbnVtYmVycykgYXMgZGV2aWNlIG5hbWVzLiBJdCBo YXMgYmVlbiByZXBvcnRlZCB0byB3b3JrIG9uIGEgbnVtYmVyDQorICBvZiBz eXN0ZW1zIHVzaW5nIHRoZSBNZWRsZXkgUkFJRC4NCisNCisgIFRoaXMgZHJp dmVyIG9ubHkgc3VwcG9ydHMgUkFJRDAgKHN0cmlwZWQpIG1vZGUsIHNvIGlm IHlvdSBhcmUgdXNpbmcNCisgIG1pcnJvcmluZyB0aGlzIHdpbGwgbm90IHdv cmsgZm9yIHlvdS4NCisNCisgIFlvdSBtYXkgd2FudCB0byB0cnkgdGhlIFNp bGljb24gSW1hZ2UgTWVkbGV5IFNvZnR3YXJlIFJBSUQgZHJpdmVyIGlmDQor ICB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHlvdS4NCisNCisgIElmIHlvdSBj aG9vc2UgdG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCB0aGUgbW9kdWxl IHdpbGwgYmUgY2FsbGVkDQorICBtZWRsZXkuby4NCisNCitTaWxpY29uIElt YWdlIE1lZGxleSBTb2Z0d2FyZSBSQUlEDQorQ09ORklHX0JMS19ERVZfQVRB UkFJRF9TSUkNCisgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBTaWxpY29u IEltYWdlIFNBVEFSYWlkIGNvbnRyb2xsZXINCisgIGFuZCB3YW50IGxpbnV4 IHRvIHVzZSB0aGUgc29mdHdhcmVyYWlkIGZlYXR1cmUgb2YgdGhpcyBjYXJk Lg0KKyAgVGhpcyBkcml2ZXIgdXNlcyAvZGV2L2F0YXJhaWQvZFhwWSAoWCBh bmQgWSBudW1iZXJzKSBhcyBkZXZpY2UNCisgIG5hbWVzLg0KKw0KKyAgVGhp cyBkcml2ZXIgaXMgbm90IHdvcmtpbmcgb24gYWxsIHN5c3RlbXMuIFBsZWFz ZSB0cnkgdGhlIE1lZGxleQ0KKyAgUkFJRCBkcml2ZXIgaW5zdGVhZCwgd2hp Y2ggaXMgYmFzZWQgb24gdGhlIHNwZWNpZmljYXRpb25zIGZyb20gQ01ELg0K Kw0KKyAgSWYgeW91IGNob29zZSB0byBjb21waWxlIHRoaXMgYXMgYSBtb2R1 bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQNCisgIHNpbHJhaWQuby4N CisNCiBTdXBwb3J0IGZvciBBY2VyIFBJQ0EgMSBjaGlwc2V0DQogQ09ORklH X0FDRVJfUElDQV82MQ0KICAgVGhpcyBpcyBhIG1hY2hpbmUgd2l0aCBhIFI0 NDAwIDEzMy8xNTAgTUh6IENQVS4gVG8gY29tcGlsZSBhIExpbnV4DQpkaWZm IC11ck4gbGludXgtMi40LjI1L2RyaXZlcnMvaWRlL0NvbmZpZy5pbiBsaW51 eC0yLjQuMjUudGgtbWVkbGV5L2RyaXZlcnMvaWRlL0NvbmZpZy5pbg0KLS0t IGxpbnV4LTIuNC4yNS9kcml2ZXJzL2lkZS9Db25maWcuaW4JV2VkIEZlYiAx OCAxMzozNjozMSAyMDA0DQorKysgbGludXgtMi40LjI1LnRoLW1lZGxleS9k cml2ZXJzL2lkZS9Db25maWcuaW4JV2VkIE1hciAxMCAxMTowNjowNyAyMDA0 DQpAQCAtMTkwLDYgKzE5MCw3IEBADQogZGVwX3RyaXN0YXRlICdTdXBwb3J0 IGZvciBJREUgUmFpZCBjb250cm9sbGVycyAoRVhQRVJJTUVOVEFMKScgQ09O RklHX0JMS19ERVZfQVRBUkFJRCAkQ09ORklHX0JMS19ERVZfSURFICRDT05G SUdfRVhQRVJJTUVOVEFMDQogZGVwX3RyaXN0YXRlICcgICBTdXBwb3J0IFBy b21pc2Ugc29mdHdhcmUgUkFJRCAoRmFzdHRyYWsodG0pKSAoRVhQRVJJTUVO VEFMKScgQ09ORklHX0JMS19ERVZfQVRBUkFJRF9QREMgJENPTkZJR19CTEtf REVWX0lERSAkQ09ORklHX0VYUEVSSU1FTlRBTCAkQ09ORklHX0JMS19ERVZf QVRBUkFJRA0KIGRlcF90cmlzdGF0ZSAnICAgSGlnaHBvaW50IDM3MCBzb2Z0 d2FyZSBSQUlEIChFWFBFUklNRU5UQUwpJyBDT05GSUdfQkxLX0RFVl9BVEFS QUlEX0hQVCAkQ09ORklHX0JMS19ERVZfSURFICRDT05GSUdfRVhQRVJJTUVO VEFMICRDT05GSUdfQkxLX0RFVl9BVEFSQUlEDQorZGVwX3RyaXN0YXRlICcg ICBDTUQvU2lsaWNvbiBJbWFnZSBNZWRsZXkgU29mdHdhcmUgUkFJRCAoRVhQ RVJJTUVOVEFMKScgQ09ORklHX0JMS19ERVZfQVRBUkFJRF9NRURMRVkgJENP TkZJR19CTEtfREVWX0lERSAkQ09ORklHX0VYUEVSSU1FTlRBTCAkQ09ORklH X0JMS19ERVZfQVRBUkFJRA0KIGRlcF90cmlzdGF0ZSAnICAgU2lsaWNvbiBJ bWFnZSBNZWRsZXkgc29mdHdhcmUgUkFJRCAoRVhQRVJJTUVOVEFMKScgQ09O RklHX0JMS19ERVZfQVRBUkFJRF9TSUkgJENPTkZJR19CTEtfREVWX0lERSAk Q09ORklHX0VYUEVSSU1FTlRBTCAkQ09ORklHX0JMS19ERVZfQVRBUkFJRA0K IA0KIGVuZG1lbnUNCmRpZmYgLXVyTiBsaW51eC0yLjQuMjUvZHJpdmVycy9p ZGUvcmFpZC9NYWtlZmlsZSBsaW51eC0yLjQuMjUudGgtbWVkbGV5L2RyaXZl cnMvaWRlL3JhaWQvTWFrZWZpbGUNCi0tLSBsaW51eC0yLjQuMjUvZHJpdmVy cy9pZGUvcmFpZC9NYWtlZmlsZQlGcmkgSnVuIDEzIDE1OjUxOjM0IDIwMDMN CisrKyBsaW51eC0yLjQuMjUudGgtbWVkbGV5L2RyaXZlcnMvaWRlL3JhaWQv TWFrZWZpbGUJV2VkIE1hciAxMCAxMTowNjowNyAyMDA0DQpAQCAtMTIsNiAr MTIsNyBAQA0KIG9iai0kKENPTkZJR19CTEtfREVWX0FUQVJBSUQpCQkrPSBh dGFyYWlkLm8NCiBvYmotJChDT05GSUdfQkxLX0RFVl9BVEFSQUlEX1BEQykJ Kz0gcGRjcmFpZC5vDQogb2JqLSQoQ09ORklHX0JMS19ERVZfQVRBUkFJRF9I UFQpCSs9IGhwdHJhaWQubw0KK29iai0kKENPTkZJR19CTEtfREVWX0FUQVJB SURfTUVETEVZKQkrPSBtZWRsZXkubw0KIG9iai0kKENPTkZJR19CTEtfREVW X0FUQVJBSURfU0lJKQkrPSBzaWxyYWlkLm8NCiANCiBFWFRSQV9DRkxBR1MJ Oj0gLUkuLi8NCmRpZmYgLXVyTiBsaW51eC0yLjQuMjUvZHJpdmVycy9pZGUv cmFpZC9tZWRsZXkuYyBsaW51eC0yLjQuMjUudGgtbWVkbGV5L2RyaXZlcnMv aWRlL3JhaWQvbWVkbGV5LmMNCi0tLSBsaW51eC0yLjQuMjUvZHJpdmVycy9p ZGUvcmFpZC9tZWRsZXkuYwlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzANCisr KyBsaW51eC0yLjQuMjUudGgtbWVkbGV5L2RyaXZlcnMvaWRlL3JhaWQvbWVk bGV5LmMJV2VkIE1hciAxMCAxMToyMTo1MCAyMDA0DQpAQCAtMCwwICsxLDcw NCBAQA0KKy8qDQorICogTUVETEVZIFNPRlRXQVJFIFJBSUQgRFJJVkVSIChT aWxpY29uIEltYWdlIDMxMTIgYW5kIG90aGVycykNCisgKg0KKyAqIENvcHly aWdodCAoQykgMjAwMyBUaG9tYXMgSG9yc3RlbiA8dGhvbWFzQGhvcnN0ZW4u Y29tPg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N CisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICog Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcJIFVTQQ0KKyAqIENvcHlyaWdodCAo QykgMjAwMyBUaG9tYXMgSG9yc3RlbiA8dGhvbWFzQGhvcnN0ZW4uY29tPg0K KyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorICoNCisgKiBUaGlzIGRyaXZl ciB1c2VzIHRoZSBBVEEgUkFJRCBkcml2ZXIgZnJhbWV3b3JrIGFuZCBpcyBi YXNlZCBvbg0KKyAqIGNvZGUgZnJvbSBBcmphbiB2YW4gZGUgVmVuJ3Mgc2ls cmFpZC5jIGFuZCBocHRyYWlkLmMuDQorICoNCisgKiBJdCBpcyBhIGRyaXZl ciBmb3IgdGhlIE1lZGxleSBzb2Z0d2FyZSBSQUlELCB3aGljaCBpcyB1c2Vk IGJ5DQorICogc29tZSBJREUgY29udHJvbGxlcnMsIGluY2x1ZGluZyB0aGUg U2lsaWNvbiBJbWFnZSAzMTEyIFNBVEENCisgKiBjb250cm9sbGVyIGZvdW5k IG9uYm9hcmQgbWFueSBtb2Rlcm4gbW90aGVyYm9hcmRzLCBhbmQgdGhlDQor ICogQ01ENjgwIHN0YW5kLWFsb25lIFBDSSBSQUlEIGNvbnRyb2xsZXIuDQor ICoNCisgKiBUaGUgYXV0aG9yIGhhcyBvbmx5IHRlc3RlZCB0aGlzIG9uIHRo ZSBTaWxpY29uIEltYWdlIFNpSTMxMTIuDQorICogSWYgeW91IGhhdmUgYW55 IGx1Y2sgdXNpbmcgbW9yZSB0aGFuIDIgZHJpdmVzLCBhbmQvb3IgbW9yZQ0K KyAqIHRoYW4gb25lIFJBSUQgc2V0LCBhbmQvb3IgYW55IG90aGVyIGNoaXAg dGhhbiB0aGUgU2lJMzExMiwNCisgKiBwbGVhc2UgbGV0IG1lIGtub3cgYnkg c2VuZGluZyBtZSBtYWlsIGF0IHRoZSBhYm92ZSBhZGRyZXNzLg0KKyAqDQor ICogQ3VycmVudGx5LCBvbmx5IHN0cmlwZWQgbW9kZSBpcyBzdXBwb3J0ZWQg Zm9yIHRoZXNlIFJBSURzLg0KKyAqDQorICogWW91IGFyZSB3ZWxjb21lIHRv IGNvbnRhY3QgbWUgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvcg0KKyAq IHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudC4NCisgKg0KKyAqIENoYW5n ZSBoaXN0b3J5Og0KKyAqDQorICogMjAwMzEwMTIgLSB0aG9tYXNAaG9yc3Rl bi5jb20NCisgKiAgIEFkZGVkIHN1cHBvcnQgZm9yIEJMS1JSUEFSVCBpb2N0 bCB0byByZS1yZWFkIHBhcnRpdGlvbiB0YWJsZQ0KKyAqIDIwMDMwODAxIC0g dGhvbWFzQGhvcnN0ZW4uY29tDQorICogICBGaXJzdCB0ZXN0IHJlbGVhc2UN CisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRl IDxsaW51eC9zY2hlZC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5o Pg0KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4NCisjaW5jbHVkZSA8bGlu dXgvYmxrcGcuaD4NCisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4NCisjaW5j bHVkZSA8bGludXgvaW9jdGwuaD4NCisNCisjaW5jbHVkZSA8bGludXgvaWRl Lmg+DQorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQorDQorI2luY2x1ZGUg ImF0YXJhaWQuaCINCisNCisvKg0KKyAqIFRoZXNlIG9wdGlvbnMgY2FuIGJl IHR1bmVkIGlmIHRoZSBuZWVkIHNob3VsZCBvY2N1ci4NCisgKg0KKyAqIEV2 ZW4gYmV0dGVyLCB0aGlzIGRyaXZlciBjb3VsZCBiZSBjaGFuZ2VkIHRvIGFs bG9jYXRlIHRoZSBzdHJ1Y3R1cmVzDQorICogZHluYW1pY2FsbHkuDQorICov DQorI2RlZmluZSBNQVhfRFJJVkVTX1BFUl9TRVQgOA0KKyNkZWZpbmUgTUFY X01FRExFWV9BUlJBWVMgNA0KKw0KKy8qDQorICogRGVmaW5lIHRoaXMgb25s eSBpZiB5b3UgYXJlIGRlYnVnZ2luZyB0aGUgZHJpdmVyLg0KKyAqLw0KKyNk ZWZpbmUgREVCVUdHSU5HX01FRExFWSAwDQorDQorI2lmIERFQlVHR0lOR19N RURMRVkNCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKSBwcmludGso Zm10LCAjI2FyZ3MpIA0KKyNlbHNlDQorI2RlZmluZSBkcHJpbnRrKGZtdCwg YXJncy4uLikNCisjZW5kaWYNCisNCisvKg0KKyAqIE1lZGxleSBSQUlEIG1l dGFkYXRhIHN0cnVjdHVyZS4NCisgKg0KKyAqIFRoZSBtZXRhZGF0YSBzdHJ1 Y3R1cmUgaXMgYmFzZWQgb24gdGhlIEFUQSBkcml2ZSBJRCBmcm9tIHRoZSBk cml2ZSBpdHNlbGYsDQorICogd2l0aCB0aGUgUkFJRCBpbmZvcm1hdGlvbiBp biB0aGUgdmVuZG9yIHNwZWNpZmljIHJlZ2lvbnMuDQorICoNCisgKiBXZSBk byBub3QgdXNlIGFsbCB0aGUgZmllbGRzLCBzaW5jZSB3ZSBvbmx5IHN1cHBv cnQgU3RyaXBlZCBTZXRzLg0KKyAqLw0KK3N0cnVjdCBtZWRsZXlfbWV0YWRh dGEgew0KKwl1OCAgIGRyaXZlaWQwWzQ2XTsNCisJdTggICBhc2NpaV92ZXJz aW9uWzhdOw0KKwl1OCAgIGRyaXZlaWQxWzUyXTsNCisJdTMyICB0b3RhbF9z ZWN0b3JzX2xvdzsNCisJdTMyICB0b3RhbF9zZWN0b3JzX2hpZ2g7DQorCXUx NiAgcmVzZXJ2ZWQwOw0KKwl1OCAgIGRyaXZlaWQyWzE0Ml07DQorCXUxNiAg cHJvZHVjdF9pZDsNCisJdTE2ICB2ZW5kb3JfaWQ7DQorCXUxNiAgbWlub3Jf dmVyOw0KKwl1MTYgIG1ham9yX3ZlcjsNCisJdTE2ICBjcmVhdGlvbl90aW1l c3RhbXBbM107DQorCXUxNiAgY2h1bmtfc2l6ZTsNCisJdTE2ICByZXNlcnZl ZDE7DQorCXU4ICAgZHJpdmVfbnVtYmVyOw0KKwl1OCAgIHJhaWRfdHlwZTsN CisJdTggICBkcml2ZXNfcGVyX3N0cmlwZWRfc2V0Ow0KKwl1OCAgIHN0cmlw ZWRfc2V0X251bWJlcjsNCisJdTggICBkcml2ZXNfcGVyX21pcnJvcmVkX3Nl dDsNCisJdTggICBtaXJyb3JlZF9zZXRfbnVtYmVyOw0KKwl1MzIgIHJlYnVp bGRfcHRyX2xvdzsNCisJdTMyICByZWJ1aWxkX3B0cl9oaWdoOw0KKwl1MzIg IGluY2FybmF0aW9uX25vOw0KKwl1OCAgIG1lbWJlcl9zdGF0dXM7DQorCXU4 ICAgbWlycm9yZWRfc2V0X3N0YXRlOw0KKwl1OCAgIHJlcG9ydGVkX2Rldmlj ZV9sb2NhdGlvbjsNCisJdTggICBtZW1iZXJfbG9jYXRpb247DQorCXU4ICAg YXV0b19yZWJ1aWxkOw0KKwl1OCAgIHJlc2VydmVkM1sxN107DQorCXUxNiAg Y2hlY2tzdW07DQorfTsNCisNCisvKg0KKyAqIFRoaXMgc3RydWN0IGhvbGRz IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIE1lZGxleSBhcnJheQ0KKyAqLw0K K3N0cnVjdCBtZWRsZXlfYXJyYXkgew0KKwl1OCAgICAgICBkcml2ZXM7DQor CXUxNiAgICAgIGNodW5rX3NpemU7DQorCXUzMiAgICAgIHNlY3RvcnNfcGVy X3JvdzsNCisJdTggICAgICAgY2h1bmtfc2l6ZV9sb2c7DQorCXUxNiAgICAg IHByZXNlbnQ7DQorCXUxNiAgICAgIHRpbWVzdGFtcFszXTsNCisJdTMyICAg ICAgc2VjdG9yczsNCisJaW50ICAgICAgcmVnaXN0ZXJlZDsNCisJYXRvbWlj X3QgdmFsaWQ7DQorCWludCAgICAgIGFjY2VzczsNCisNCisJa2Rldl90ICAg bWVtYmVyc1tNQVhfRFJJVkVTX1BFUl9TRVRdOw0KKwlzdHJ1Y3QgYmxvY2tf ZGV2aWNlICpiZGV2W01BWF9EUklWRVNfUEVSX1NFVF07DQorDQorfTsNCitz dGF0aWMgc3RydWN0IG1lZGxleV9hcnJheSByYWlkW01BWF9NRURMRVlfQVJS QVlTXTsNCisNCisvKg0KKyAqIEhlcmUgd2Uga2VlcCB0aGUgb2Zmc2V0IG9m IHRoZSBBVEFSQUlEIGRldmljZSBJRCdzIGNvbXBhcmVkIHRvIG91cg0KKyAq IG93biAodGhpcyB3aWxsIG5vcm1hbGx5IGJlIDAsIHVubGVzcyBhbm90aGVy IEFUQVJBSUQgZHJpdmVyIGhhcw0KKyAqIHJlZ2lzdGVyZWQgc29tZSBhcnJh eXMgYmVmb3JlIHVzKS4NCisgKi8NCitzdGF0aWMgaW50IG1lZGxleV9kZXZp ZF9vZmZzZXQ9MDsNCisNCisvKg0KKyAqIFRoaXMgaG9sZHMgdGhlIG51bWJl ciBvZiBkZXRlY3RlZCBhcnJheXMuDQorICovDQorc3RhdGljIGludCBtZWRs ZXlfYXJyYXlzPTA7DQorDQorLyoNCisgKiBXYWl0IHF1ZXVlIGZvciBvcGVu aW5nIGRldmljZSAodXNlZCB3aGVuIHJlLXJlYWRpbmcgcGFydGl0aW9uIHRh YmxlKQ0KKyAqLw0KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCht ZWRsZXlfd2FpdF9vcGVuKTsNCisNCisvKg0KKyAqIFRoZSBpbnRlcmZhY2Ug ZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGF0YXJhaWQgZnJhbWV3b3JrLg0KKyAq Lw0KK3N0YXRpYyBpbnQgbWVkbGV5X29wZW4oc3RydWN0IGlub2RlICogaW5v ZGUsIHN0cnVjdCBmaWxlICogZmlscCk7DQorc3RhdGljIGludCBtZWRsZXlf cmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBm aWxwKTsNCitzdGF0aWMgaW50IG1lZGxleV9pb2N0bChzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpOw0KK3N0YXRpYyBpbnQgbWVkbGV5X21ha2Vf cmVxdWVzdCAocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgcncsIHN0cnVjdCBi dWZmZXJfaGVhZCAqIGJoKTsNCisNCitzdGF0aWMgc3RydWN0IHJhaWRfZGV2 aWNlX29wZXJhdGlvbnMgbWVkbGV5X29wcyA9IHsNCisJb3BlbjoJCSBtZWRs ZXlfb3BlbiwNCisJcmVsZWFzZToJIG1lZGxleV9yZWxlYXNlLA0KKwlpb2N0 bDoJCSBtZWRsZXlfaW9jdGwsDQorCW1ha2VfcmVxdWVzdDoJIG1lZGxleV9t YWtlX3JlcXVlc3QNCit9Ow0KKw0KKy8qDQorICogVGhpcyBpcyB0aGUgbGlz dCBvZiBkZXZpY2VzIHRvIHByb2JlLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBr ZGV2X3QgcHJvYmVsaXN0W109IHsNCisJTUtERVYoSURFMF9NQUpPUiwgMCks DQorCU1LREVWKElERTBfTUFKT1IsIDY0KSwNCisJTUtERVYoSURFMV9NQUpP UiwgMCksDQorCU1LREVWKElERTFfTUFKT1IsIDY0KSwNCisJTUtERVYoSURF Ml9NQUpPUiwgMCksDQorCU1LREVWKElERTJfTUFKT1IsIDY0KSwNCisJTUtE RVYoSURFM19NQUpPUiwgMCksDQorCU1LREVWKElERTNfTUFKT1IsIDY0KSwN CisJTUtERVYoSURFNF9NQUpPUiwgMCksDQorCU1LREVWKElERTRfTUFKT1Is IDY0KSwNCisJTUtERVYoSURFNV9NQUpPUiwgMCksDQorCU1LREVWKElERTVf TUFKT1IsIDY0KSwNCisJTUtERVYoSURFNl9NQUpPUiwgMCksDQorCU1LREVW KElERTZfTUFKT1IsIDY0KSwNCisJTUtERVYoMCwwKQ0KK307DQorDQorLyoN CisgKiBIYW5kbGVyIGZvciBpb2N0bCBjYWxscyB0byB0aGUgdmlydHVhbCBk ZXZpY2UNCisgKi8NCitzdGF0aWMgaW50IG1lZGxleV9pb2N0bChzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50 IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpDQorew0KKwl1bnNpZ25lZCBpbnQg bWlub3I7DQorCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsNCisJaW50IGRldm1p bm9yID0gKGlub2RlLT5pX3JkZXYgPj4gU0hJRlQpJk1BSk9SX01BU0s7DQor CWludCBkZXZpY2UgPSBkZXZtaW5vci1tZWRsZXlfZGV2aWRfb2Zmc2V0Ow0K KwlpbnQgcGFydGl0aW9uOw0KKw0KKwlkcHJpbnRrKCJtZWRsZXlfaW9jdGxc biIpOw0KKw0KKwlpZiAoIWlub2RlIHx8ICFpbm9kZS0+aV9yZGV2KQ0KKwl7 DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwltaW5vciA9IE1JTk9S KGlub2RlLT5pX3JkZXYpPj5TSElGVDsNCisNCisJc3dpdGNoIChjbWQpIHsN CisNCisJY2FzZSBCTEtHRVRTSVpFOiAgIC8qIFJldHVybiBkZXZpY2Ugc2l6 ZSAqLw0KKwkJaWYgKCFhcmcpIHJldHVybiAtRUlOVkFMOw0KKwkJc2VjdG9y cyA9IGF0YXJhaWRfZ2VuZGlzay5wYXJ0W01JTk9SKGlub2RlLT5pX3JkZXYp XS5ucl9zZWN0czsNCisJCWRwcmludGsoIm1lZGxleV9pb2N0bDogQkxLR0VU U0laRVxuIik7DQorCQlpZiAoTUlOT1IoaW5vZGUtPmlfcmRldikmMTUpDQor CQkJcmV0dXJuIHB1dF91c2VyKHNlY3RvcnMsICh1bnNpZ25lZCBsb25nICop IGFyZyk7DQorCQlyZXR1cm4gcHV0X3VzZXIocmFpZFttaW5vci1tZWRsZXlf ZGV2aWRfb2Zmc2V0XS5zZWN0b3JzLCAodW5zaWduZWQgbG9uZyAqKSBhcmcp Ow0KKwkJYnJlYWs7DQorDQorCWNhc2UgSERJT19HRVRHRU86DQorCXsNCisJ CXN0cnVjdCBoZF9nZW9tZXRyeSAqbG9jID0gKHN0cnVjdCBoZF9nZW9tZXRy eSAqKSBhcmc7DQorCQl1bnNpZ25lZCBzaG9ydCBiaW9zX2N5bCA9ICh1bnNp Z25lZCBzaG9ydCkocmFpZFttaW5vcl0uc2VjdG9ycy8yNTUvNjMpOyAvKiB0 cnVuY2F0ZSAqLw0KKwkJCQ0KKwkJZHByaW50aygibWVkbGV5X2lvY3RsOiBI RElPX0dFVEdFT1xuIik7DQorCQlpZiAoIWxvYykgcmV0dXJuIC1FSU5WQUw7 DQorCQlpZiAocHV0X3VzZXIoMjU1LCAoYnl0ZSAqKSAmbG9jLT5oZWFkcykp IHJldHVybiAtRUZBVUxUOw0KKwkJaWYgKHB1dF91c2VyKDYzLCAoYnl0ZSAq KSAmbG9jLT5zZWN0b3JzKSkgcmV0dXJuIC1FRkFVTFQ7DQorCQlpZiAocHV0 X3VzZXIoYmlvc19jeWwsICh1bnNpZ25lZCBzaG9ydCAqKSAmbG9jLT5jeWxp bmRlcnMpKSByZXR1cm4gLUVGQVVMVDsNCisJCWlmIChwdXRfdXNlcigodW5z aWduZWQpYXRhcmFpZF9nZW5kaXNrLnBhcnRbTUlOT1IoaW5vZGUtPmlfcmRl dildLnN0YXJ0X3NlY3QsDQorCQkJICAgICAodW5zaWduZWQgbG9uZyAqKSAm bG9jLT5zdGFydCkpIHJldHVybiAtRUZBVUxUOw0KKwkJcmV0dXJuIDA7DQor CX0NCisNCisJY2FzZSBIRElPX0dFVEdFT19CSUc6DQorCXsNCisJCXN0cnVj dCBoZF9iaWdfZ2VvbWV0cnkgKmxvYyA9IChzdHJ1Y3QgaGRfYmlnX2dlb21l dHJ5ICopIGFyZzsNCisNCisJCWRwcmludGsoIm1lZGxleV9pb2N0bDogSERJ T19HRVRHRU9fQklHXG4iKTsNCisJCWlmICghbG9jKSByZXR1cm4gLUVJTlZB TDsNCisJCWlmIChwdXRfdXNlcigyNTUsIChieXRlICopICZsb2MtPmhlYWRz KSkgcmV0dXJuIC1FRkFVTFQ7DQorCQlpZiAocHV0X3VzZXIoNjMsIChieXRl ICopICZsb2MtPnNlY3RvcnMpKSByZXR1cm4gLUVGQVVMVDsNCisJCWlmIChw dXRfdXNlcihyYWlkW21pbm9yLW1lZGxleV9kZXZpZF9vZmZzZXRdLnNlY3Rv cnMvMjU1LzYzLCAodW5zaWduZWQgaW50ICopICZsb2MtPmN5bGluZGVycykp IHJldHVybiAtRUZBVUxUOw0KKwkJaWYgKHB1dF91c2VyKCh1bnNpZ25lZClh dGFyYWlkX2dlbmRpc2sucGFydFtNSU5PUihpbm9kZS0+aV9yZGV2KV0uc3Rh cnRfc2VjdCwNCisJCQkgICAgICh1bnNpZ25lZCBsb25nICopICZsb2MtPnN0 YXJ0KSkgcmV0dXJuIC1FRkFVTFQ7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0K KwljYXNlIEJMS1JPU0VUOg0KKwljYXNlIEJMS1JPR0VUOg0KKwljYXNlIEJM S1NTWkdFVDoNCisJCWRwcmludGsoIm1lZGxleV9pb2N0bDogQkxLKlxuIik7 DQorCQlyZXR1cm4gYmxrX2lvY3RsKGlub2RlLT5pX3JkZXYsIGNtZCwgYXJn KTsNCisNCisJY2FzZSBCTEtSUlBBUlQ6IC8qIFJlLXJlYWQgcGFydGl0aW9u IHRhYmxlcyAqLw0KKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSBy ZXR1cm4gLUVBQ0NFUzsNCisJCWlmIChtaW5vciE9MCkgcmV0dXJuIC1FSU5W QUw7DQorCQlpZiAoYXRvbWljX3JlYWQoJihyYWlkW2RldmljZV0udmFsaWQp KT09MCkgcmV0dXJuIC1FSU5WQUw7DQorDQorCQlhdG9taWNfc2V0KCYocmFp ZFtkZXZpY2VdLnZhbGlkKSwwKTsNCisJCWlmIChyYWlkW2RldmljZV0uYWNj ZXNzICE9IDEpDQorCQl7DQorCQkJYXRvbWljX3NldCgmKHJhaWRbZGV2aWNl XS52YWxpZCksMSk7DQorCQkJcmV0dXJuIC1FQlVTWTsNCisJCX0NCisNCisJ CWZvciAocGFydGl0aW9uID0gMTU7IHBhcnRpdGlvbiA+PSAwOyBwYXJ0aXRp b24tLSkgew0KKwkJCWludmFsaWRhdGVfZGV2aWNlKE1LREVWKEFUQVJBSURf TUFKT1IsIHBhcnRpdGlvbitkZXZtaW5vciksIDEpOw0KKwkJCWF0YXJhaWRf Z2VuZGlzay5wYXJ0W3BhcnRpdGlvbitkZXZtaW5vcl0uc3RhcnRfc2VjdCA9 IDA7DQorCQkJYXRhcmFpZF9nZW5kaXNrLnBhcnRbcGFydGl0aW9uK2Rldm1p bm9yXS5ucl9zZWN0cyA9IDA7DQorCQl9DQorCQlhdGFyYWlkX3JlZ2lzdGVy X2Rpc2soZGV2aWNlLHJhaWRbZGV2aWNlXS5zZWN0b3JzKTsNCisJCWF0b21p Y19zZXQoJihyYWlkW2RldmljZV0udmFsaWQpLDEpOw0KKwkJd2FrZV91cCgm bWVkbGV5X3dhaXRfb3Blbik7DQorCQlyZXR1cm4gMDsNCisNCisJZGVmYXVs dDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9Ow0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorLyoNCisgKiBIYW5kbGVyIHRvIG1hcCBhIHJlcXVlc3QgdG8g dGhlIHJlYWwgZGV2aWNlLg0KKyAqIElmIHRoZSByZXF1ZXN0IGNhbm5vdCBi ZSBtYWRlIGJlY2F1c2UgaXQgc3BhbnMgbXVsdGlwbGUgZGlza3MsDQorICog d2UgcmV0dXJuIC0xLCBvdGhlcndpc2Ugd2UgbW9kaWZ5IHRoZSByZXF1ZXN0 IGFuZCByZXR1cm4gMS4NCisgKi8NCitzdGF0aWMgaW50IG1lZGxleV9tYWtl X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgcncsIHN0cnVjdCBi dWZmZXJfaGVhZCAqIGJoKQ0KK3sNCisJdTggZGlzazsNCisJdTMyIHJzZWN0 ID0gYmgtPmJfcnNlY3RvcjsNCisJaW50IGRldmljZSA9ICgoYmgtPmJfcmRl diA+PiBTSElGVCkmTUFKT1JfTUFTSykgLSBtZWRsZXlfZGV2aWRfb2Zmc2V0 Ow0KKwlzdHJ1Y3QgbWVkbGV5X2FycmF5ICpyID0gcmFpZCtkZXZpY2U7DQor DQorCS8qIEFkZCB0aGUgcGFydGl0aW9uIG9mZnNldCAqLw0KKwlyc2VjdCA9 IHJzZWN0ICsgYXRhcmFpZF9nZW5kaXNrLnBhcnRbTUlOT1IoYmgtPmJfcmRl dildLnN0YXJ0X3NlY3Q7DQorDQorCWRwcmludGsoIm1lZGxleV9tYWtlX3Jl cXVlc3QsIHJzZWN0PSV1bFxuIixyc2VjdCk7DQorDQorCS8qIERldGVjdCBp ZiB0aGUgcmVxdWVzdCBjcm9zc2VzIGEgY2h1bmsgYmFycmllciAqLw0KKwlp ZiAoci0+Y2h1bmtfc2l6ZV9sb2cpDQorCXsNCisJCWlmICggKChyc2VjdCAm IChyLT5jaHVua19zaXplLTEpKSArIChiaC0+Yl9zaXplLzUxMikpID4gKDE8 PHItPmNodW5rX3NpemVfbG9nKSkNCisJCXsNCisJCQlyZXR1cm4gLTE7DQor CQl9DQorCX0gZWxzZSB7DQorCQlpZiAoKHJzZWN0L3ItPmNodW5rX3NpemUp ICE9ICgocnNlY3QrKGJoLT5iX3NpemUvNTEyKS0xKS9yLT5jaHVua19zaXpl KSkNCisJCXsNCisJCQlyZXR1cm4gLTE7DQorCQl9DQorCX0NCisNCisJLyoN CisJICogTWVkbGV5IGFycmF5cyBhcmUgc2ltcGxlIGVub3VnaCwgc2luY2Ug dGhlIHNtYWxsZXN0IGRpc2sgZGVjaWRlcyB0aGUNCisJICogbnVtYmVyIG9m IHNlY3RvcnMgdXNlZCBwZXIgZGlzay4gU28gdGhlcmUgaXMgbm8gbmVlZCBm b3IgdGhlIGN1dG9mZg0KKwkgKiBtYWdpYyBmb3VuZCBpbiBvdGhlciBkcml2 ZXJzIGxpa2UgaHB0cmFpZC4NCisJICovDQorCWlmIChyLT5jaHVua19zaXpl X2xvZykNCisJew0KKwkJLyogV2Ugc2F2ZSBzb21lIGV4cGVuc2l2ZSBvcGVy YXRpb25zICgxIGRpdiwgMSBtdWwsIDEgbW9kKSwgaWYgdGhlIGNodW5rDQor CQkgKiBzaXplIGlzIGEgcG93ZXIgb2YgMiwgd2hpY2ggaXMgdGhlIG5vcm1h bCBjYXNlLg0KKwkJICovDQorCQlkaXNrID0gKHJzZWN0ID4+IHItPmNodW5r X3NpemVfbG9nKSAlIHItPmRyaXZlczsNCisJCXJzZWN0ID0gKChyc2VjdCAv IHItPnNlY3RvcnNfcGVyX3JvdykgPDwgci0+Y2h1bmtfc2l6ZV9sb2cpICsg KHJzZWN0ICYgKHItPmNodW5rX3NpemUtMSkpOw0KKwl9DQorCWVsc2UNCisJ ew0KKwkJZGlzayA9IChyc2VjdCAvIHItPmNodW5rX3NpemUpICUgci0+ZHJp dmVzOw0KKwkJcnNlY3QgPSByc2VjdCAvIHItPnNlY3RvcnNfcGVyX3JvdyAq IHItPmNodW5rX3NpemUgKyByc2VjdCAlIHItPmNodW5rX3NpemU7DQorCX0N CisNCisJZHByaW50aygibWVkbGV5X21ha2VfcmVxdWVzdCA6LSksIGRpc2s9 JWQsIHJzZWN0PSV1bFxuIixkaXNrLHJzZWN0KTsNCisJYmgtPmJfcmRldiA9 IHItPm1lbWJlcnNbZGlza107DQorCWJoLT5iX3JzZWN0b3IgPSByc2VjdDsN CisJcmV0dXJuIDE7DQorfQ0KKw0KKy8qDQorICogRmluZCBvdXQgd2hpY2gg YXJyYXkgYSBkcml2ZSBiZWxvbmdzIHRvLCBhbmQgYWRkIGl0IHRvIHRoYXQg YXJyYXkuDQorICogSWYgaXQgaXMgbm90IGEgbWVtYmVyIG9mIGEgZGV0ZWN0 ZWQgYXJyYXksIGFkZCBhIG5ldyBhcnJheSBmb3IgaXQuDQorICovDQordm9p ZCBtZWRsZXlfYWRkX3JhaWRkcml2ZShrZGV2X3QgZGV2LCBzdHJ1Y3QgbWVk bGV5X21ldGFkYXRhICptZCkNCit7DQorCWludCBjOw0KKw0KKwlkcHJpbnRr KCJDYW5kaWRhdGUgZHJpdmUgJTAyeDolMDJ4IC0gZHJpdmUgJWQgb2YgJWQs IHN0cmlkZSAlZCwgc2VjdG9ycyAldWwgKCVkIE1CKVxuIiwNCisJICAgICAg IE1BSk9SKGRldiksTUlOT1IoZGV2KSxtZC0+ZHJpdmVfbnVtYmVyLG1kLT5k cml2ZXNfcGVyX3N0cmlwZWRfc2V0LG1kLT5jaHVua19zaXplLG1kLT50b3Rh bF9zZWN0b3JzX2xvdyxtZC0+dG90YWxfc2VjdG9yc19sb3cvMTAyNC8xMDI0 LzIpOw0KKw0KKwlmb3IgKGM9MDsgYzxtZWRsZXlfYXJyYXlzOyBjKyspDQor CXsNCisJCWlmICggKHJhaWRbY10udGltZXN0YW1wWzBdPT1tZC0+Y3JlYXRp b25fdGltZXN0YW1wWzBdKSAmJg0KKwkJICAgICAocmFpZFtjXS50aW1lc3Rh bXBbMV09PW1kLT5jcmVhdGlvbl90aW1lc3RhbXBbMV0pICYmDQorCQkgICAg IChyYWlkW2NdLnRpbWVzdGFtcFsyXT09bWQtPmNyZWF0aW9uX3RpbWVzdGFt cFsyXSkgJiYNCisJCSAgICAgKHJhaWRbY10uZHJpdmVzPT1tZC0+ZHJpdmVz X3Blcl9zdHJpcGVkX3NldCkgJiYNCisJCSAgICAgKHJhaWRbY10uY2h1bmtf c2l6ZT09bWQtPmNodW5rX3NpemUpICYmDQorCQkgICAgICgocmFpZFtjXS5w cmVzZW50ICYgKDE8PG1kLT5kcml2ZV9udW1iZXIpKSA9PSAwKSApDQorCQl7 DQorCQkJZHByaW50aygiRXhpc3RpbmcgYXJyYXkgJWRcbiIsIGMpOw0KKwkJ CXJhaWRbY10ucHJlc2VudCB8PSAoMSA8PCBtZC0+ZHJpdmVfbnVtYmVyKTsN CisJCQlyYWlkW2NdLm1lbWJlcnNbbWQtPmRyaXZlX251bWJlcl09ZGV2Ow0K KwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorCWlmIChjPT1tZWRsZXlfYXJyYXlz KQ0KKwl7DQorCQlkcHJpbnRrKCJOZXcgYXJyYXkgJWRcbiIsbWVkbGV5X2Fy cmF5cyk7DQorCQlpZiAobWVkbGV5X2FycmF5cz09TUFYX01FRExFWV9BUlJB WVMpDQorCQl7DQorCQkJcHJpbnRrKEtFUk5fRVJSICJNZWRsZXkgUkFJRDog VG9vIG1hbnkgUkFJRCBzZXRzIGRldGVjdGVkIC0geW91IGNhbiBjaGFuZ2Ug dGhlIG1heCBpbiB0aGUgZHJpdmVyLlxuIik7DQorCQl9DQorCQllbHNlDQor CQl7DQorCQkJcmFpZFtjXS50aW1lc3RhbXBbMF09bWQtPmNyZWF0aW9uX3Rp bWVzdGFtcFswXTsNCisJCQlyYWlkW2NdLnRpbWVzdGFtcFsxXT1tZC0+Y3Jl YXRpb25fdGltZXN0YW1wWzFdOw0KKwkJCXJhaWRbY10udGltZXN0YW1wWzJd PW1kLT5jcmVhdGlvbl90aW1lc3RhbXBbMl07DQorCQkJcmFpZFtjXS5kcml2 ZXM9bWQtPmRyaXZlc19wZXJfc3RyaXBlZF9zZXQ7DQorCQkJcmFpZFtjXS5j aHVua19zaXplPW1kLT5jaHVua19zaXplOw0KKwkJCXJhaWRbY10uc2VjdG9y c19wZXJfcm93PW1kLT5jaHVua19zaXplKm1kLT5kcml2ZXNfcGVyX3N0cmlw ZWRfc2V0Ow0KKwkJCQ0KKwkJCS8qIFNwZWVkdXAgaWYgY2h1bmsgc2l6ZSBp cyBhIHBvd2VyIG9mIDIgKi8NCisJCQlpZiAoICgocmFpZFtjXS5jaHVua19z aXplLTEpICYgKHJhaWRbY10uY2h1bmtfc2l6ZSkpID09IDApDQorCQkJew0K KwkJCQlyYWlkW2NdLmNodW5rX3NpemVfbG9nID0gZmZzKHJhaWRbY10uY2h1 bmtfc2l6ZSktMTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJcmFp ZFtjXS5jaHVua19zaXplX2xvZyA9IDA7DQorCQkJfQ0KKwkJCXJhaWRbY10u cHJlc2VudD0oMTw8bWQtPmRyaXZlX251bWJlcik7DQorCQkJcmFpZFtjXS5t ZW1iZXJzW21kLT5kcml2ZV9udW1iZXJdPWRldjsNCisJCQlpZiAobWQtPm1h am9yX3ZlciA9PSAxKQ0KKwkJCXsNCisJCQkJcmFpZFtjXS5zZWN0b3JzPSgo dTMyICopKG1kKSlbMjddOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJ CQlyYWlkW2NdLnNlY3RvcnM9bWQtPnRvdGFsX3NlY3RvcnNfbG93Ow0KKwkJ CX0NCisJCQltZWRsZXlfYXJyYXlzKys7DQorCQl9DQorCX0NCit9DQorDQor LyoNCisgKiBSZWFkIHRoZSBNZWRsZXkgbWV0YWRhdGEgZnJvbSBhIGRyaXZl Lg0KKyAqIFJldHVybnMgdGhlIGJoIGlmIGl0IHdhcyBmb3VuZCwgb3RoZXJ3 aXNlIE5VTEwuDQorICovDQorc3RydWN0IGJ1ZmZlcl9oZWFkICptZWRsZXlf Z2V0X21ldGFkYXRhKGtkZXZfdCBkZXYpDQorew0KKwlzdHJ1Y3QgYnVmZmVy X2hlYWQgKmJoID0gTlVMTDsNCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsN CisJdTMyIGxiYTsNCisJaW50IHBvczsNCisJc3RydWN0IG1lZGxleV9tZXRh ZGF0YSAqbWQ7DQorDQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJO RUxfVkVSU0lPTigyLDQsMjMpDQorCWlkZV9kcml2ZV90ICpkcnZpbmZvID0g aWRlX2luZm9fcHRyKGRldiwgMCk7DQorI2Vsc2UNCisJaWRlX2RyaXZlX3Qg KmRydmluZm8gPSBnZXRfaW5mb19wdHIoZGV2KTsNCisjZW5kaWYNCisJaWYg KChkcnZpbmZvPT1OVUxMKSB8fCBkcnZpbmZvLT5jYXBhY2l0eTwxKQ0KKwl7 DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlkcHJpbnRrKCJQcm9iaW5n ICUwMng6JTAyeFxuIixNQUpPUihkZXYpLE1JTk9SKGRldikpOw0KKwkvKiBJ ZiB0aGlzIGRyaXZlIGlzIG5vdCBvbiBhIFBDSSBjb250cm9sbGVyLCBpdCBp cyBub3QgTWVkbGV5IFJBSUQuIA0KKwkgKiBNZWRsZXkgbWF0Y2hlcyB0aGUg UENJIGRldmljZSBJRCB3aXRoIHRoZSBtZXRhZGF0YSB0byBjaGVjayBpZiBp dCBpcyB2YWxpZC4gKi8NCisJcGNpZGV2ID0gZHJ2aW5mby0+aHdpZj9kcnZp bmZvLT5od2lmLT5wY2lfZGV2Ok5VTEw7DQorCWlmICghcGNpZGV2KQ0KKwl7 DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwkvKg0KKwkgKiA0IGNvcGll cyBvZiB0aGUgbWV0YWRhdGEgZXhpc3QsIGluIHRoZSBmb2xsb3dpbmcgNCBz ZWN0b3JzOiANCisJICogbGFzdCwgbGFzdC0weDIwMCwgbGFzdC0weDQwMCwg bGFzdC0weDYwMC4NCisJICoNCisJICogV2UgbXVzdCB0cnkgZWFjaCBvZiB0 aGVzZSBpbiBvcmRlciwgdW50aWwgd2UgZmluZCB0aGUgbWV0YWRhdGEuDQor CSAqIEZJWE1FOiBUaGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGRy aXZlcyB3aXRoIDQ4LzY0LWJpdCBMQkEgYWRkcmVzc2luZywNCisJICogZXZl biB0aG91Z2ggdGhlIE1lZGxleSBSQUlEIHZlcnNpb24gMiBzdXBwb3J0cyB0 aGVzZS4NCisJICovDQorCWxiYT1kcnZpbmZvLT5jYXBhY2l0eS0xOw0KKwlm b3IgKHBvcz0wOyBwb3M8NDsgcG9zKyssbGJhLT0weDIwMCkNCisJew0KKwkJ YmggPSBicmVhZChkZXYsIGxiYSwgNTEyKTsNCisJCWlmICghYmgpDQorCQl7 DQorCQkJcHJpbnRrKEtFUk5fRVJSICJNZWRsZXkgUkFJRCAoJTAyeDolMDJ4 KTogRXJyb3IgcmVhZGluZyBtZXRhZGF0YSAobGJhPSVkKVxuIiwgTUFKT1Io ZGV2KSxNSU5PUihkZXYpLGxiYSk7DQorCQkJYnJlYWs7DQorCQl9DQorDQor CQkvKiBBIHZhbGlkIE1lZGxleSBSQUlEIGhhcyB0aGUgUENJIHZlbmRvci9k ZXZpY2UgSUQgb2YgaXRzIElERSBjb250cm9sbGVyLA0KKwkJICogYW5kIHRo ZSBjb3JyZWN0IGNoZWNrc3VtLiAqLw0KKwkJbWQgPSAodm9pZCAqKShiaC0+ Yl9kYXRhKTsNCisNCisJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBtZC0+dmVu ZG9yX2lkICYmIHBjaWRldi0+ZGV2aWNlID09IG1kLT5wcm9kdWN0X2lkKQ0K KwkJew0KKwkJCXUxNiBjaGVja3N1bT0wOw0KKwkJCXUxNiAqcCA9ICh2b2lk ICopKGJoLT5iX2RhdGEpOw0KKwkJCWludCBjOw0KKwkJCWZvciAoYz0wOyBj PDE2MDsgYysrKQ0KKwkJCXsNCisJCQkJY2hlY2tzdW0gKz0gKnArKzsNCisJ CQl9DQorCQkJZHByaW50aygiUHJvYmluZyAlMDJ4OiUwMnggY3N1bT0lZCwg bWFqb3JfdmVyPSVkXG4iLE1BSk9SKGRldiksTUlOT1IoZGV2KSxjaGVja3N1 bSxtZC0+bWFqb3JfdmVyKTsNCisJCQlpZiAoKChjaGVja3N1bSA9PSAweGZm ZmYpICYmIChtZC0+bWFqb3JfdmVyID09IDEpKSB8fCAoY2hlY2tzdW0gPT0g MCkpDQorCQkJew0KKwkJCQlkcHJpbnRrKCJQcm9iaW5nICUwMng6JTAyeCBW QUxJRFxuIixNQUpPUihkZXYpLE1JTk9SKGRldikpOw0KKwkJCQkvKiBGb3Vu ZCBhIHZhbGlkIGJsb2NrICovDQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0N CisJCS8qIFdhcyBub3QgYSB2YWxpZCBzdXBlcmJsb2NrICovDQorCQlpZiAo YmgpDQorCQl7DQorCQkJYnJlbHNlKGJoKTsNCisJCQliaD1OVUxMOw0KKwkJ fQ0KKwl9DQorCXJldHVybiBiaDsNCit9DQorDQorLyoNCisgKiBEZXRlcm1p bmUgaWYgdGhpcyBkcml2ZSBiZWxvbmdzIHRvIGEgTWVkbGV5IGFycmF5Lg0K KyAqLw0KK3N0YXRpYyB2b2lkIG1lZGxleV9wcm9iZV9kcml2ZShpbnQgbWFq b3IsIGludCBtaW5vcikNCit7DQorCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7 DQorCWtkZXZfdCBkZXYgPSBNS0RFVihtYWpvcixtaW5vcik7DQorCXN0cnVj dCBtZWRsZXlfbWV0YWRhdGEgKm1kOw0KKw0KKwliaD1tZWRsZXlfZ2V0X21l dGFkYXRhKGRldik7DQorCWlmICghYmgpDQorCQlyZXR1cm47DQorDQorCW1k ID0gKHZvaWQgKikoYmgtPmJfZGF0YSk7DQorDQorCWlmIChtZC0+cmFpZF90 eXBlICE9IDB4MCkNCisJew0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiTWVkbGV5 IFJBSUQgKCUwMng6JTAyeCk6IFNvcnJ5LCB0aGlzIGRyaXZlciBjdXJyZW50 bHkgb25seSBzdXBwb3J0cyBzdHJpcGVkIHNldHMgKFJBSUQgbGV2ZWwgMCku XG4iLA0KKwkJICAgICAgIG1ham9yLG1pbm9yKTsNCisJfQ0KKwllbHNlIGlm IChtZC0+bWFqb3JfdmVyID09IDIgJiYgbWQtPnRvdGFsX3NlY3RvcnNfaGln aCAhPSAwKQ0KKwl7DQorCQlwcmludGsoS0VSTl9FUlIgIk1lZGxleSBSQUlE ICglMDJ4OiUwMngpOiBTb3JyeSwgdGhlIGRyaXZlciBvbmx5IHN1cHBvcnRz IDMyIGJpdCBMQkEgZGlza3MgKGRpc2sgdG9vIGJpZykuXG4iLA0KKwkJICAg ICAgIG1ham9yLG1pbm9yKTsNCisJfQ0KKwllbHNlIGlmIChtZC0+bWFqb3Jf dmVyID4gMCAmJiBtZC0+bWFqb3JfdmVyID4gMikNCisJew0KKwkJcHJpbnRr KEtFUk5fSU5GTyAiTWVkbGV5IFJBSUQgKCUwMng6JTAyeCk6IFVuc3VwcG9y dGVkIHZlcnNpb24gKCVkLiVkKSAtIHRoaXMgZHJpdmVyIHN1cHBvcnRzIHZl cnNpb24gMS54IGFuZCAyLnhcbiIsDQorCQkgICAgICAgbWFqb3IsbWlub3Is bWQtPm1ham9yX3ZlcixtZC0+bWlub3JfdmVyKTsNCisJfQ0KKwllbHNlIGlm IChtZC0+ZHJpdmVzX3Blcl9zdHJpcGVkX3NldCA+IE1BWF9EUklWRVNfUEVS X1NFVCkNCisJew0KKwkJcHJpbnRrKEtFUk5fRVJSICJNZWRsZXkgUkFJRCAo JTAyeDolMDJ4KTogU3RyaXBlZCBzZXQgdG9vIGxhcmdlICglZCBkcml2ZXMp IC0gcGxlYXNlIHJlcG9ydCB0aGlzIGFuZCBjaGFuZ2UgbWF4IGluIGRyaXZl ci5cbiIsDQorCQkgICAgICAgbWFqb3IsbWlub3IsbWQtPmRyaXZlc19wZXJf c3RyaXBlZF9zZXQpOw0KKwl9DQorCWVsc2UgaWYgKChtZC0+ZHJpdmVfbnVt YmVyID4gbWQtPmRyaXZlc19wZXJfc3RyaXBlZF9zZXQpIHx8IA0KKwkgICAg ICAgICAobWQtPmRyaXZlc19wZXJfc3RyaXBlZF9zZXQ8MSkgfHwNCisJICAg ICAgICAgKG1kLT5jaHVua19zaXplIDwgMSkpDQorCXsNCisJCXByaW50ayhL RVJOX0VSUiAiTWVkbGV5IFJBSUQgKCUwMng6JTAyeCk6IE1ldGFkYXRhIGFw cGVhcnMgdG8gYmUgY29ycnVwdC5cbiIsDQorCQkgICAgICAgbWFqb3IsbWlu b3IpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogV2UgaGF2ZSBhIGdvb2Qg Y2FuZGlkYXRlLCBwdXQgaXQgaW4gdGhlIGNvcnJlY3QgYXJyYXkgKi8NCisJ CW1lZGxleV9hZGRfcmFpZGRyaXZlKGRldixtZCk7DQorCX0NCisNCisJaWYg KGJoKQ0KKwl7DQorCQlicmVsc2UoYmgpOw0KKwl9DQorfQ0KKw0KKy8qDQor ICogSW5pdGlhbGlzZSB0aGUgZHJpdmVyLg0KKyAqLw0KK3N0YXRpYyBfX2lu aXQgaW50IG1lZGxleV9pbml0KHZvaWQpDQorew0KKwlpbnQgYyxkOw0KKwlz dHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2Ow0KKwlzdHJ1Y3QgZ2VuZGlzayAq Z2Q7DQorCQ0KKwltZW1zZXQocmFpZCwgMCwgTUFYX01FRExFWV9BUlJBWVMq c2l6ZW9mKHN0cnVjdCBtZWRsZXlfYXJyYXkpKTsNCisNCisJLyogUHJvYmUg ZWFjaCBvZiB0aGUgZHJpdmVzIG9uIG91ciBsaXN0ICovDQorCWZvciAoYz0w OyBwcm9iZWxpc3RbY10gIT0gTUtERVYoMCwwKTsgYysrKQ0KKwl7DQorCQlt ZWRsZXlfcHJvYmVfZHJpdmUoTUFKT1IocHJvYmVsaXN0W2NdKSxNSU5PUihw cm9iZWxpc3RbY10pKTsNCisJfQ0KKw0KKwkvKiBDaGVjayBpZiB0aGUgZGV0 ZWN0ZWQgc2V0cyBhcmUgY29tcGxldGUgKi8NCisJZm9yIChjPTA7IGM8bWVk bGV5X2FycmF5czsgYysrKQ0KKwl7DQorCQlpZiAocmFpZFtjXS5wcmVzZW50 ICE9ICgxPDxyYWlkW2NdLmRyaXZlcyktMSkNCisJCXsNCisJCQlwcmludGso S0VSTl9FUlIgIk1lZGxleSBSQUlEOiBJbmNvbXBsZXRlIFJBSUQgc2V0IGRl bGV0ZWQgLSBkaXNrczoiKTsNCisJCQlmb3IgKGQ9MDsgYzxyYWlkW2NdLmRy aXZlczsgYysrKQ0KKwkJCXsNCisJCQkJaWYgKHJhaWRbY10ucHJlc2VudCAm ICgxPDxkKSkNCisJCQkJew0KKwkJCQkJcHJpbnRrKCIgJTAyeDolMDJ4Iiwg TUFKT1IocmFpZFtjXS5tZW1iZXJzW2RdKSwgTUlOT1IocmFpZFtjXS5tZW1i ZXJzW2RdKSk7DQorCQkJCX0NCisJCQl9DQorCQkJcHJpbnRrKCJcbiIpOw0K KwkJCS8qIERlbGV0ZSBpdCAqLw0KKwkJCWlmIChjKzE8bWVkbGV5X2FycmF5 cykgew0KKwkJCQltZW1tb3ZlKHJhaWQrYysxLHJhaWQrYywobWVkbGV5X2Fy cmF5cy1jLTEpKnNpemVvZihzdHJ1Y3QgbWVkbGV5X2FycmF5KSk7DQorCQkJ fQ0KKwkJCW1lZGxleV9hcnJheXMtLTsNCisJCX0NCisJfQ0KKw0KKwkvKiBS ZWdpc3RlciBhbnkgcmVtYWluaW5nIGFycmF5KHMpICovDQorCWZvciAoYz0w OyBjPG1lZGxleV9hcnJheXM7IGMrKykNCisJew0KKwkJaW50IGRldmljZT1h dGFyYWlkX2dldF9kZXZpY2UoJm1lZGxleV9vcHMpOw0KKwkJaWYgKGRldmlj ZTwwKSB7DQorCQkJcHJpbnRrKEtFUk5fRVJSICJNZWRsZXkgUkFJRDogQ291 bGQgbm90IGdldCBBVEFSQUlEIGRldmljZS5cbiIpOw0KKwkJCWJyZWFrOw0K KwkJfQ0KKwkJaWYgKGM9PTApDQorCQl7DQorCQkJLyogRmlyc3QgYXJyYXks IGNvbXB1dGUgb2Zmc2V0IHRvIG91ciBkZXZpY2UgSUQncyAqLw0KKwkJCW1l ZGxleV9kZXZpZF9vZmZzZXQ9ZGV2aWNlOw0KKwkJCWRwcmludGsoIk1lZGxl eV9kZXZpZF9vZmZzZXQ6ICVkXG4iLG1lZGxleV9kZXZpZF9vZmZzZXQpOw0K KwkJfQ0KKwkJZWxzZSBpZiAoZGV2aWNlLW1lZGxleV9kZXZpZF9vZmZzZXQg IT0gbWVkbGV5X2FycmF5cykNCisJCXsNCisJCQlwcmludGsoS0VSTl9FUlIg Ik1lZGxleSBSQUlEOiBBVEFSQUlEIGdhdmUgdXMgYW4gaWxsZWdhbCBkZXZp Y2UgSUQuXG4iKTsNCisJCQlhdGFyYWlkX3JlbGVhc2VfZGV2aWNlKGRldmlj ZSk7DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQlwcmludGsoS0VSTl9JTkZP ICJNZWRsZXkgUkFJRDogU3RyaXBlZCBzZXQgJWQgY29uc2lzdHMgb2YgJWQg ZGlza3MsIHRvdGFsICVkTUIgLSBkaXNrczoiLA0KKwkJICAgICAgIGMsIHJh aWRbY10uZHJpdmVzLHJhaWRbY10uc2VjdG9ycy8xMDI0LzEwMjQvMik7DQor CQlmb3IgKGQ9MDsgZDxyYWlkW2NdLmRyaXZlczsgZCsrKQ0KKwkJew0KKwkJ CXByaW50aygiICUwMng6JTAyeCIsIE1BSk9SKHJhaWRbY10ubWVtYmVyc1tk XSksIE1JTk9SKHJhaWRbY10ubWVtYmVyc1tkXSkpOw0KKwkJCQ0KKwkJCS8q IFRha2VuIGZyb20gaHB0cmFpZC5jLCB0aGlzIGlzIHN1cHBvc2VkDQorCQkJ ICogdG8gcHJldmVudCB0aGUgZGV2aWNlIGZyb20gZGlzYXBwZWFyaW5nDQor CQkJICogZnJvbSB1bmRlciB1cyAqLw0KKwkJCWJkZXYgPSBiZGdldChyYWlk W2NdLm1lbWJlcnNbZF0pOw0KKwkJCWlmIChiZGV2ICYmIGJsa2Rldl9nZXQo YmRldixGTU9ERV9SRUFEfEZNT0RFX1dSSVRFLDAsQkRFVl9SQVcpID09IDAp IHsNCisJCQkJcmFpZFtjXS5iZGV2W2RdID0gYmRldjsNCisJCQkJLyoNCisJ CQkJICogVGhpcyBpcyBzdXBwb3NlZCB0byBwcmV2ZW50IG90aGVycyBmcm9t IHN0ZWFsaW5nIG91cg0KKwkJCQkgKiB1bmRlcmx5aW5nIGRpc2tzIG5vdyBi bGFuayB0aGUgL3Byb2MvcGFydGl0aW9ucyB0YWJsZSBmb3IgDQorCQkJCSAq IHRoZSB3cm9uZyBwYXJ0aXRpb24gdGFibGUsIHNvIHRoYXQgc2NyaXB0cyBk b24ndA0KKwkJCQkgKiBhY2NpZGVudGFsbHkgbW91bnQgaXQgYW5kIGNyYXNo IHRoZSBrZXJuZWwNCisJCQkJICovDQorCQkJCS8qIFhYWDogdGhlIDAgaXMg YW4gdXR0ZXIgaGFjayAgLS1oY2ggKi8NCisJCQkJZ2Q9Z2V0X2dlbmRpc2so TUtERVYoTUFKT1IocmFpZFtjXS5tZW1iZXJzW2RdKSwgMCkpOw0KKwkJCQlp ZiAoZ2QhPU5VTEwpIHsNCisJCQkJCWlmIChnZC0+bWFqb3I9PU1BSk9SKHJh aWRbY10ubWVtYmVyc1tkXSkpIHsNCisJCQkJCQlpbnQgbWlub3I9TUlOT1Io cmFpZFtjXS5tZW1iZXJzW2RdKTsNCisJCQkJCQlpbnQgajsNCisJCQkJCQlm b3IgKGo9MSsobWlub3I8PGdkLT5taW5vcl9zaGlmdCk7DQorCQkJCQkJICAg ICBqPCgobWlub3IrMSk8PGdkLT5taW5vcl9zaGlmdCk7DQorCQkJCQkJICAg ICBqKyspIGdkLT5wYXJ0W2pdLm5yX3NlY3RzPTA7DQorCQkJCQl9DQorCQkJ CX0NCisJCQl9DQorCQkJcmFpZFtjXS5iZGV2W2RdID0gYmRldjsNCisJCX0N CisJCXByaW50aygiXG4iKTsNCisJCXJhaWRbY10ucmVnaXN0ZXJlZD0xOw0K KwkJYXRvbWljX3NldCgmKHJhaWRbY10udmFsaWQpLDEpOw0KKwkJYXRhcmFp ZF9yZWdpc3Rlcl9kaXNrKGMscmFpZFtjXS5zZWN0b3JzKTsNCisJfQ0KKw0K KwlpZiAobWVkbGV5X2FycmF5cyA+IDApDQorCXsNCisJCXByaW50ayhLRVJO X0lORk8gIk1lZGxleSBSQUlEOiAlZCBhY3RpdmUgUkFJRCBzZXQlc1xuIixt ZWRsZXlfYXJyYXlzLG1lZGxleV9hcnJheXM9PTE/IiI6InMiKTsNCisJCXJl dHVybiAwOw0KKwl9DQorDQorCXByaW50ayhLRVJOX0lORk8gIk1lZGxleSBS QUlEOiBObyB1c2FibGUgUkFJRCBzZXRzIGZvdW5kXG4iKTsNCisJcmV0dXJu IC1FTk9ERVY7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fZXhpdCBtZWRsZXlf ZXhpdCAodm9pZCkNCit7DQorCWludCBkZXZpY2UsZDsNCisJZm9yIChkZXZp Y2UgPSAwOyBkZXZpY2U8bWVkbGV5X2FycmF5czsgZGV2aWNlKyspIHsNCisJ CWZvciAoZD0wOyBkPHJhaWRbZGV2aWNlXS5kcml2ZXM7IGQrKykNCisJCXsN CisJCQlpZiAocmFpZFtkZXZpY2VdLmJkZXZbZF0pIHsNCisJCQkJYmxrZGV2 X3B1dChyYWlkW2RldmljZV0uYmRldltkXSwgQkRFVl9SQVcpOw0KKwkJCQly YWlkW2RldmljZV0uYmRldltkXT1OVUxMOw0KKwkJCX0NCisJCX0NCisJCWlm IChyYWlkW2RldmljZV0ucmVnaXN0ZXJlZCkgew0KKwkJCWF0YXJhaWRfcmVs ZWFzZV9kZXZpY2UoZGV2aWNlK21lZGxleV9kZXZpZF9vZmZzZXQpOw0KKwkJ CXJhaWRbZGV2aWNlXS5yZWdpc3RlcmVkPTA7DQorCQl9DQorCX0NCit9DQor DQorc3RhdGljIGludCBtZWRsZXlfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9k ZSwgc3RydWN0IGZpbGUgKiBmaWxwKSANCit7DQorCWludCBkZXZpY2UgPSAo KGlub2RlLT5pX3JkZXYgPj4gU0hJRlQpJk1BSk9SX01BU0spIC0gbWVkbGV5 X2RldmlkX29mZnNldDsNCisJZHByaW50aygibWVkbGV5X29wZW5cbiIpOw0K Kw0KKwlpZiAoZGV2aWNlIDwgbWVkbGV5X2FycmF5cykNCisJew0KKyAgICAg ICAgICAgICAgICB3aGlsZSAoIWF0b21pY19yZWFkKCYocmFpZFtkZXZpY2Vd LnZhbGlkKSkpDQorICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBfb24o Jm1lZGxleV93YWl0X29wZW4pOw0KKyAgICAgICAgICAgICAgICByYWlkW2Rl dmljZV0uYWNjZXNzKys7DQorCQlNT0RfSU5DX1VTRV9DT1VOVDsNCisgICAg ICAgICAgICAgICAgcmV0dXJuICgwKTsNCisgICAgICAgIH0NCisJcmV0dXJu IC1FTk9ERVY7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWVkbGV5X3JlbGVhc2Uo c3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkNCit7 CQ0KKwlpbnQgZGV2aWNlID0gKChpbm9kZS0+aV9yZGV2ID4+IFNISUZUKSZN QUpPUl9NQVNLKSAtIG1lZGxleV9kZXZpZF9vZmZzZXQ7DQorCWRwcmludGso Im1lZGxleV9yZWxlYXNlXG4iKTsNCisJcmFpZFtkZXZpY2VdLmFjY2Vzcy0t Ow0KKwlNT0RfREVDX1VTRV9DT1VOVDsNCisJcmV0dXJuIDA7DQorfQ0KKw0K K21vZHVsZV9pbml0KG1lZGxleV9pbml0KTsNCittb2R1bGVfZXhpdChtZWRs ZXlfZXhpdCk7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0K ---1646705133-405160930-1078924026=:32012-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/