From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932228AbVHPTFh (ORCPT ); Tue, 16 Aug 2005 15:05:37 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932284AbVHPTFh (ORCPT ); Tue, 16 Aug 2005 15:05:37 -0400 Received: from NS5.Sony.CO.JP ([137.153.0.45]:17646 "EHLO ns5.sony.co.jp") by vger.kernel.org with ESMTP id S932228AbVHPTFg (ORCPT ); Tue, 16 Aug 2005 15:05:36 -0400 Message-ID: <43023957.1020909@sm.sony.co.jp> Date: Wed, 17 Aug 2005 04:07:03 +0900 From: "Machida, Hiroyuki" User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) X-Accept-Language: ja, en-us, en MIME-Version: 1.0 To: linux-kernel@vger.kernel.org Subject: [PATCH] Posix file attribute support on VFAT (take #2) Content-Type: multipart/mixed; boundary="------------000000020609090007000905" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------000000020609090007000905 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit This is a take 2 of posix file attribute support on VFAT. I made a couple of changes from previous revision, according feedbacks on LKML. - clean up - restrict file attribute operations to prevent attribute lose at runtime. - added condition checking to special files like device files and symlink. I did not yet implement short symlik optimization, sugessted at from harvested.in.lkml@posting.7eggert.dyndns.org Main purpose of this patch is to build root file system with VFAT for smallembedded device. FAT is widely used for embedded device to exchange data, and also small embedded device has resource limitation. So it's very handy that VFAT has capability to built root fs, even that has restrictions. Details are described within a patch. I think this feature still needs improvemnts, however it is very helpful for most embedded developpers. This patch is against 2.6.12 kernel. -- Hiroyuki Machida machida@sm.sony.co.jp SSW Dept. HENC, Sony Corp. --------------000000020609090007000905 Content-Type: text/plain; name="vfat-posix-attr.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="vfat-posix-attr.patch" CiBUaGlzIHBhdGNoIGVuYWJsZXMgInBvc2l4X2F0dHIiIG9wdGlvbiBkZXNjcmliZWQgYXMg Zm9sbG93aW5nOwoKCQkgdmZhdCBwb3NpeCBhdHRyIG9wdGlvbiAicG9zaXhfYXR0ciIgCgoJ CQkJCU1vbiBBdWcgMTUgMjE6Mjk6NTQgSlNUIDIwMDUKIAoqIEZFQVRVUkVTCgogRm9sbG93 aW5nIGF0dHJpYnV0ZXMvbW9kZXMgYXJlIHN1cHBvcnRlZCBpbiBwb3NpeCBhdHRyaWJ1dGVh IG1hcHBpbmcKIGluIFZGQVQuCgogICAtIEZpbGVUeXBlCiAJVGhpcyBzdXBwb3J0cyBmb2xs b3dpbmcgc3BlY2lhbCBmaWxlcyBhbmQgaXQncyBhdHRyaWJ1dGVzOwogCQlzeW1ib2xpYyBs aW5rLAlibG9jayBkZXZpY2Ugbm9kZSwKIAkJY2hhciBkZXZpY2Ugbm9kZSwgZmlmbywJc29j a2V0CiAJUmVndWxhciBmaWxlcy9kaXJzIGFsc28gbWF5IGhhdmUgUE9TSVggYXR0cmlidXRl cy4KICAgLSBEZXZpY2VGaWxlCiAJTWFqb3IgYW5kIG1pbm9yIG51bWJlciB3b3VsZCBiZSBo ZWxkIGF0IGN0aW1lCiAJYW5kIGJvdGggdmFsdWVzIGFyZSBsaW1pdGVkICB0byAyNTUuCiAg IC0gT3duZXIncyBVc2VyIElEL0dyb3VwIElEIAogCVRoaXMgY2FuIGJlIHVzZWQgdG8gZGlz dGluZ3Vpc2ggcm9vdCBhbmQgb3RoZXJzLAogCWJlY2F1c2UgdGhpcyBoYXMganVzdCBvbmUg Yml0IHdpZHRoLiAKIAlWYWx1ZSBvZiBVSUQvR0lEIGZvciBub24tcm9vdCB1c2VyIHdpbGwg YmUgdGFrZW4gZnJvbSB1aWQvZ2lkIAogCW9wdGlvbiBvbiBtb3VudGluZy4gSWYgbm90aGlu ZyBpcyBzcGVjaWZpZWQsIHN5c3RlbSB1c2VzIAoJKHUxNiktMSBhcyBsYXN0IHJlc29ydC4g VGhhdCBtZWFucyBjaGFuZ2UtdWlkIG1heSBhZmZlY3Qgb24gZ2lkLgogICAtIFBlcm1pc3Np b24gZm9yIEdyb3VwL090aGVyIChyd3gpCiAJVGhvc2UgbW9kZXMgd2lsbCBiZSBrZXB0IGlu IGN0aW1lX2NzLgogCUFsc28gcGVybWlzc2lvbiBtb2RlcyBmb3IgIm90aGVycyIgd2lsbCBi ZQogCXNhbWUgYXMgImdyb3VwIiwgZHVlIHRvIGxhY2sgb2YgZmllbGRzLgoJVGhhdCBtZWFu cyBzZXQtZ3JvdXAtbW9kZSBtYXkgYWZmZWN0IG9uIG90aGVyLW1vZGUuCglPbiB0aGUgb3Ro ZXIgaGFuZCwgc2V0LW90aGVyLW1vZGUgaGFzIG5vIGFmZmVjdCB0byBncm91cC1tb2RlLgoJ CiAgIC0gUGVybWlzc2lvbiBmb3IgT3duZXIgKHJ3eCkKIAlUaGVzZSBtb2RlcyB3aWxsIGJl IG1hcHBlZCB0byBGQVQgYXR0cmlidXRlcy4KIAlKdXN0IHNhbWUgYXMgbWFwcGluZyB1bmRl ciBWRkFULgogICAtIE90aGVycwogCW5vIHN0aWNreSwgc2V0Z2lkIG5vciBzZXR1aWQgYml0 cyBhcmUgbm90IHN1cHBvcnRlZC4KIAoqIEFMR09SSVRITSBGT1IgTUFQUElORyBERUNJU0lP TgogICAtIFJlZ3VsYXIgZmlsZS9kaXIKIAlUbyBkaXN0aW5ndWlzaCByZWd1bGFyIGZpbGVz L2RpcnMsIGxvb2sgaWYgdGhpcyBmYXQgZGlyIAogCWVudHJ5IGRvZXNuJ3QgaGF2ZSBBVFRS X1NZUywgZmlyc3QuIElmIGl0IGRvZXNuJ3QgaGF2ZSAKIAlBVFRSX1NZUywgdGhlbiBjaGVj ayBpZiBUWVBFIGZpZWxkIChNU0IgM2JpdHMpIGluIGN0aW1lX2NzIAogCWlzIGVxdWFsIHRv IDcuIElmIHNvLCB0aGlzIHJlZ3VsYXIgZmlsZS9kaXIgaXMgY3JlYXRlZCBhbmQvb3IgCiAJ bW9kaWZpZWQgdW5kZXIgVkZBVCB3aXRoICJwb3NpeF9hdHRyIi4gQW5kIHBvc2l4IGF0dHJp YnV0ZSAKIAltYXBwaW5nIGNhbiBiZSB0YWtlIHBsYWNlLiBPdGhlcndpc2UsIGNvbnZlbnRp b25hbCBWRkFUIAogCWF0dHJpYnV0ZSBtYXBwaW5nIGlzIHVzZWQuCgogICAtIFNwZWNpYWwg ZmlsZQogCVRvIGRpc3Rpbmd1aXNoIHNwZWNpYWwgZmlsZXMsIGxvb2sgaWYgdGhpcyBmYXQg ZGlyIGVudHJ5IAogCWhhcyBBVFRSX1NZUywgZmlyc3QuIEFsc28gd2UgbmVlZCB0byBjaGVj ayBpdCBub3QgdG8gaGF2ZSAKCUFUVF9FWFQuCglJZiBpdCBoYXMgQVRUUl9TWVMsIHRoZW4g Y2hlY2sgMXN0LiBMU0IgYml0IGluIGN0aW1lX2NzLCAKCXJlZmVycmVkIGFzICJzcGVjaWFs IGZpbGUgZmxhZyIuCiAJSWYgc2V0LCAgdGhpcyBmaWxlIGlzIGNyZWF0ZWQgdW5kZXIgVkZB VCB3aXRoICJwb3NpeF9hdHRyIi4gCiAJTG9vayB1cCBUWVBFIGZpZWxkIHRvIGRlY2lkZSBz cGVjaWFsIGZpbGUgdHlwZS4KCiAJVGhpcyBzcGVjaWFsIGZpbGUgZGV0ZWN0aW9uIG1ldGhv ZCBoYXMgc29tZSBmbGF3IHRvIG1ha2UKIAlwb3RlbnRpYWwgY29uZnVzaW9uLiBFLmcuIHNv bWUgc3lzdGVtIGZpbGUgY3JlYXRlZCB1bmRlcgoJZG9zL3dpbiBtYXkgYmUgdHJlYXRlZCBh cyBzcGVjaWFsIGZpbGUuICBIb3dldmVyIGluIG1vc3QgY2FzZSwKCXVzZXIgZG9uJ3QgY3Jl YXRlIHN5c3RlbSBmaWxlIHVuZGVyIGRvcy93aW4uCglUbyByZWR1Y2UgcG9zc2libGl0eSBv ZiB0aGlzIGNvbmZ1c2lvbiwgc3lzdGVtIG1ha2VzCglzdXJlIHNwZWNpYWwgZmlsZXMgZXhj ZXB0IHN5bWxpbmsgaGF2ZSBzaXplIFpFUk8uCglGb3Igc3ltbGluaywgc3lzdGVtIGNoZWNr cyBpdCdzIHNpemUgbm90IHRvIGV4Y2VlZCBwYWdlIHNpemUgCglhbmQgUEFUSF9NQVguCgoq IEZBVCBESVIgRU5UUlkgRklFTERTCiAgIC0gY3RpbWVfY3MKIAkgICAgOGJpdCBieXRlCiAJ NyA2IDUgNCAzIDIgMSAwCiAJfD09PXwgfCB8IHwgfCB8CiAJVFlQRSAgfCB8IHwgfCArLSBz cGVjaWFsIGZpbGUgZmxhZyAodmFsaWQgaWYgQVRUUl9TWVMpCiAJICAgICAgfCB8IHwgKy0t LSBVc2VyL0dyb3VwIElEKHJvb3Qgb3Igb3RoZXJzKQogCSAgICAgIHwgfCArLS0tLS0gIWdy b3VwIFgKIAkgICAgICB8ICstLS0tLS0tICFncm91cCBXCiAJICAgICAgKy0tLS0tLS0tLSAh Z3JvdXAgUgogCiAJICBzcGVjaWFsIGZpbGUgZmxhZwogCQlJbmRpY2F0ZSB0aGlzIGVudHJ5 IGhhcyBwb3NpeCBhdHRyaWJ1dGUgbWFwcGluZy4KIAkJVGhpcyBmaWVsZCBpcyB2YWxpZCBm b3IgZmF0IGRpciBlbnRyeSwgd2hpY2ggCiAJCWhhdmUgQVRUUl9TWVMuCiAKIAkgIHNwZWNp YWwgZmlsZSBUWVBFCiAJCXZhbAl0eXBlIG9uIFZGUyh2YWwpCURlc2NyaXB0aW9uCiAJCS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkwIAko cGxhY2UgZm9sZGVyIGZvciBiYWNrd2FyZCBjb21wYXQpCiAJCTEgCURUX0xOSyAoMTApCQlz eW1ib2xpYyBsaW5rCiAJCTIJRFRfQkxLICg2KQkJYmxvY2sgZGV2CiAJCTMJRFRfQ0hSICg0 KQkJY2hhciBkZXYKIAkJNAlEVF9GSUZPICgxKQkJZmlmbwogCQk1CURUX1NPQ0sJKDEyKQkJ c29ja2V0CiAJCiAJCTcqKQkocmVzZXJ2ZWQgZm9yIERUX1JFRy9EVF9ESVIpIAogCiAJCSop VmFsdWUgNyBpcyByZXNlcnZlZCBmb3IgcmVndWxhciBmaWxlL2RpciAoRFRfUkVHL0RUX0RJ UikuCiAJCU5vcm1hbGx5IGN0aW1lX2NzIHdvdWxkIGhhdmUgMC0xOTkgdmFsdWUgdG8gc3Rh bmQgZm9yIAogCQl1cCB0byAyc2VjLiBUaGUgdmFsdWUgZm9yIERUX1JFRy9EVF9ESVIgaXMg c2VsZWN0ZWQgCiAJCXRvIGJlIG92ZXIgdGhpcyByYW5nZSB0byBkaXN0aW5ndWlzaCBpZiBm aWxlIHdhcyBjcmVhdGVkCiAJCXVuZGVyIFBPU0lYX0FUVFIgb3Igbm90LgoKICAgLSBhdHRy CiAJRkFUIGF0dHJpYnV0ZQkodmFsKQkJbWFwcGVkIGF0dHJpYnV0ZQogCS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUFUVFJfUk8JCTB4MDEg CQkhb3duZXIgVwogCUFUVFJfSElEREVOCTB4MDIJCSFvd25lciBSCiAJQVRUUl9TWVMJMHgw NAogCUFUVFJfVk9MVU1FCTB4MDgKIAlBVFRSX0RJUgkweDEwCQlESVIKIAlBVFRSX0FSQ0gJ MHgyMAkJIW93bmVyIFgKCiAgIC0gY3RpbWUKIAkJMTZiaXQgd29yZAogCWYgZSBkIGMgYiBh IDkgOCA3IDYgNSA0IDMgMiAxIDAKIAl8PT09PT09PT09PT09PXwgfC0tLS0tLS0tLS0tLS18 CiAJICBtYWpvcgkJICBtaW5vcgogCiogdmZhdC1wb3NpeF9hdHRyLnBhdGNoOgoKIGZzL2Zh dC9maWxlLmMgICAgICAgICAgICB8ICAgNTIgKysrKysrKysKIGZzL2ZhdC9pbm9kZS5jICAg ICAgICAgICB8ICAgMjcgKysrKwogZnMvdmZhdC9uYW1laS5jICAgICAgICAgIHwgIDI3MiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUv bGludXgvbXNkb3NfZnMuaCB8ICAyODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNjI5IGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCgpTaWduZWQtb2ZmLWJ5OiBIaXJveXVraSBNYWNoaWRhIDxtYWNo aWRhQHNtLnNvbnkuY28uanA+IGZvciBDRUxGCgotLS0gYWxwLTIuNi4xMi1wOC5vcmlnL2Zz L2ZhdC9maWxlLmMJMjAwNS0wOC0xMiAyMTozNTo1MS4wMDAwMDAwMDAgKzA5MDAKKysrIGFs cC0yLjYuMTItcDgvZnMvZmF0L2ZpbGUuYwkyMDA1LTA4LTEyIDIxOjM3OjM2LjAwMDAwMDAw MCArMDkwMApAQCAtMTYyLDYgKzE2Miw4IEBACiAJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNi aSA9IE1TRE9TX1NCKGRlbnRyeS0+ZF9zYik7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRl bnRyeS0+ZF9pbm9kZTsKIAlpbnQgbWFzaywgZXJyb3IgPSAwOworCWludCBweF91aWQgPSBz YmktPm9wdGlvbnMuZnNfdWlkID8gc2JpLT5vcHRpb25zLmZzX3VpZCA6ICh1MTYpLTE7CisJ aW50IHB4X2dpZCA9IHNiaS0+b3B0aW9ucy5mc19naWQgPyBzYmktPm9wdGlvbnMuZnNfZ2lk IDogKHUxNiktMTsKIAogCWxvY2tfa2VybmVsKCk7CiAKQEAgLTE3MywxMiArMTc1LDU2IEBA CiAJCX0KIAl9CiAKKwlpZiAoc2JpLT5vcHRpb25zLnBvc2l4X2F0dHIpIHsKKwkJaWYgKGF0 dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpIHsKKwkJCS8qIHJvb3QgY2FuIGNoYW5nZSB1aWQg dG8gYW55IHZhbHVlICovCisJCQlpZiAoY2FwYWJsZShDQVBfQ0hPV04pICYmIAorCQkJICAg IChhdHRyLT5pYV91aWQgJiYgYXR0ci0+aWFfdWlkICE9IHB4X3VpZCkpCisJCQkJYXR0ci0+ aWFfdWlkID0gcHhfdWlkOworCQkJLyogY2hhbmdlLXVpZCBhZmZlY3RzIGdpZCAqLworCQkJ YXR0ci0+aWFfdmFsaWQgfD0gQVRUUl9HSUQ7CisJCQlhdHRyLT5pYV9naWQgPSBhdHRyLT5p YV91aWQgPyBweF9naWQgOiAwOworCQl9IGVsc2UgeworCQkJLyogY2hvd24gc3lzY2FsbCBz ZXRzIGJvdGggdWlkIGFuZCBnaWQgKi8KKwkJCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJf R0lEKSB7CisJCQkJLyogcm9vdCBjYW4gY2hhbmdlIGdpZCB0byBhbnkgdmFsdWUgKi8KKwkJ CQlpZiAoY2FwYWJsZShDQVBfQ0hPV04pICYmIAorCQkJCSAgICAoYXR0ci0+aWFfZ2lkICYm IGF0dHItPmlhX2dpZCAhPSBweF9naWQpKQorCQkJCQlhdHRyLT5pYV9naWQgPSBweF9naWQ7 CisJCQkJLyogY2hhbmdlLWdpZCBhZmZlY3RzIHVpZCAqLworCQkJCWF0dHItPmlhX3ZhbGlk IHw9IEFUVFJfVUlEOworCQkJCWF0dHItPmlhX3VpZCA9IGF0dHItPmlhX2dpZCA/IHB4X3Vp ZCA6IDA7CisJCQl9CisJCX0KKwkJLyogY2hhbmdlLWdyb3VwLW1vZGUgYWZmZWN0cyBvbiBv dGhlcnMtbW9kZSAqLworCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpIHsgCisJ CQlpbnQgb3RoZXJzX21vZGUgPSAoYXR0ci0+aWFfbW9kZSAmIFNfSVJXWEcpID4+IDM7CisJ CQlhdHRyLT5pYV9tb2RlICY9ICB+U19JUldYTzsKKwkJCWF0dHItPmlhX21vZGUgfD0gIG90 aGVyc19tb2RlOworCQl9CisJfQorCiAJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUs IGF0dHIpOwogCWlmIChlcnJvcikgewogCQlpZiAoc2JpLT5vcHRpb25zLnF1aWV0KQogCQkJ ZXJyb3IgPSAwOwogCQlnb3RvIG91dDsKIAl9CisKKwlpZiAoc2JpLT5vcHRpb25zLnBvc2l4 X2F0dHIpIHsKKwkJaWYgKCgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYKKwkJICAg ICAgICgoYXR0ci0+aWFfdWlkKSAmJiAoYXR0ci0+aWFfdWlkICE9IHB4X3VpZCkpKSB8fAor CQkgICAgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEKSAmJgorCQkgICAgICAgKChhdHRy LT5pYV9naWQpICYmIChhdHRyLT5pYV9naWQgIT0gcHhfZ2lkKSkpIHx8CisJCSAgICAoKGF0 dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSAmJgorCQkgICAgIChhdHRyLT5pYV9tb2RlICYg flZGQVRfUE9TSVhfQVRUUl9WQUxJRF9NT0RFKSkpCisJCQllcnJvciA9IC1FUEVSTTsKKwkJ aWYgKCFlcnJvcikgIAorCQkJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsK KwkJaWYgKHNiaS0+b3B0aW9ucy5xdWlldCkKKwkJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7 CisJfQogCWlmICgoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpICYmCiAJICAgICAoYXR0 ci0+aWFfdWlkICE9IHNiaS0+b3B0aW9ucy5mc191aWQpKSB8fAogCSAgICAoKGF0dHItPmlh X3ZhbGlkICYgQVRUUl9HSUQpICYmCkBAIC0zMDYsMyArMzUyLDkgQEAKIAkudHJ1bmNhdGUJ PSBmYXRfdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBmYXRfbm90aWZ5X2NoYW5nZSwKIH07CisK K3N0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMg PSB7CisgICAgICAgLnJlYWRsaW5rICAgICAgID0gcGFnZV9yZWFkbGluaywKKyAgICAgICAu Zm9sbG93X2xpbmsgICAgPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAorICAgICAgIC5zZXRh dHRyICAgICAgICA9IGZhdF9ub3RpZnlfY2hhbmdlLAorfTsKSW5kZXg6IGFscC0yLjYuMTIt cDgvZnMvZmF0L2lub2RlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYWxwLTIuNi4xMi1wOC5vcmln L2ZzL2ZhdC9pbm9kZS5jCTIwMDUtMDgtMTIgMjE6MzU6NTEuMDAwMDAwMDAwICswOTAwCisr KyBhbHAtMi42LjEyLXA4L2ZzL2ZhdC9pbm9kZS5jCTIwMDUtMDgtMTUgMjA6NDg6MDIuMDAw MDAwMDAwICswOTAwCkBAIC0yNzQsNiArMjc0LDEwIEBACiAJCU1TRE9TX0koaW5vZGUpLT5p X2xvZ3N0YXJ0ID0gTVNET1NfSShpbm9kZSktPmlfc3RhcnQ7CiAJCWlub2RlLT5pX3NpemUg PSBsZTMyX3RvX2NwdShkZS0+c2l6ZSk7CiAJCWlub2RlLT5pX29wID0gJmZhdF9maWxlX2lu b2RlX29wZXJhdGlvbnM7CisJCWlmIChzYmktPm9wdGlvbnMucG9zaXhfYXR0cgorCQkJJiYg aXNfdmZhdF9wb3NpeF9zeW1saW5rKGlub2RlLCBkZSkpeworCQkJCWlub2RlLT5pX29wID0g JmZhdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCX0KIAkJaW5vZGUtPmlfZm9wID0g JmZhdF9maWxlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmZh dF9hb3BzOwogCQlNU0RPU19JKGlub2RlKS0+bW11X3ByaXZhdGUgPSBpbm9kZS0+aV9zaXpl OwpAQCAtNDk5LDggKzUwMywxMSBAQAogCWZhdF9kYXRlX3VuaXgyZG9zKGlub2RlLT5pX210 aW1lLnR2X3NlYywgJnJhd19lbnRyeS0+dGltZSwgJnJhd19lbnRyeS0+ZGF0ZSk7CiAJaWYg KHNiaS0+b3B0aW9ucy5pc3ZmYXQpIHsKIAkJZmF0X2RhdGVfdW5peDJkb3MoaW5vZGUtPmlf Y3RpbWUudHZfc2VjLCZyYXdfZW50cnktPmN0aW1lLCZyYXdfZW50cnktPmNkYXRlKTsKLQkJ cmF3X2VudHJ5LT5jdGltZV9jcyA9IChpbm9kZS0+aV9jdGltZS50dl9zZWMgJiAxKSAqIDEw MCArCi0JCQlpbm9kZS0+aV9jdGltZS50dl9uc2VjIC8gMTAwMDAwMDA7CisJCWlmIChzZXRf dmZhdF9wb3NpeF9hdHRyKHJhd19lbnRyeSwgaW5vZGUpID09IC0xKSB7CisJCQlyYXdfZW50 cnktPmN0aW1lX2NzIAorCQkJCT0gKGlub2RlLT5pX2N0aW1lLnR2X3NlYyAmIDEpICogMTAw ICsKKwkJCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyAvIDEwMDAwMDAwOworCQl9CiAJfQog CXNwaW5fdW5sb2NrKCZzYmktPmlub2RlX2hhc2hfbG9jayk7CiAJbWFya19idWZmZXJfZGly dHkoYmgpOwpAQCAtNzQyLDYgKzc0OSw4IEBACiAJCQlzZXFfcHV0cyhtLCAiLHVuaV94bGF0 ZSIpOwogCQlpZiAoIW9wdHMtPm51bXRhaWwpCiAJCQlzZXFfcHV0cyhtLCAiLG5vbnVtdGFp bCIpOworCQlpZiAob3B0cy0+cG9zaXhfYXR0cikKKwkJCXNlcV9wdXRzKG0sICIscG9zaXhf YXR0ciIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzU1LDYgKzc2NCw3IEBACiAJT3B0X2No YXJzZXQsIE9wdF9zaG9ydG5hbWVfbG93ZXIsIE9wdF9zaG9ydG5hbWVfd2luOTUsCiAJT3B0 X3Nob3J0bmFtZV93aW5udCwgT3B0X3Nob3J0bmFtZV9taXhlZCwgT3B0X3V0Zjhfbm8sIE9w dF91dGY4X3llcywKIAlPcHRfdW5pX3hsX25vLCBPcHRfdW5pX3hsX3llcywgT3B0X25vbnVt dGFpbF9ubywgT3B0X25vbnVtdGFpbF95ZXMsCisJT3B0X3Bvc2l4X2F0dHJfbm8sIE9wdF9w b3NpeF9hdHRyX3llcywKIAlPcHRfb2Jzb2xhdGUsIE9wdF9lcnIsCiB9OwogCkBAIC04MjMs NiArODMzLDEzIEBACiAJe09wdF9ub251bXRhaWxfeWVzLCAibm9udW10YWlsPXllcyJ9LAog CXtPcHRfbm9udW10YWlsX3llcywgIm5vbnVtdGFpbD10cnVlIn0sCiAJe09wdF9ub251bXRh aWxfeWVzLCAibm9udW10YWlsIn0sCisJe09wdF9wb3NpeF9hdHRyX25vLCAicG9zaXhfYXR0 cj0wIn0sCQkvKiAwIG9yIG5vIG9yIGZhbHNlICovCisJe09wdF9wb3NpeF9hdHRyX25vLCAi cG9zaXhfYXR0cj1ubyJ9LAorCXtPcHRfcG9zaXhfYXR0cl9ubywgInBvc2l4X2F0dHI9ZmFs c2UifSwKKwl7T3B0X3Bvc2l4X2F0dHJfeWVzLCAicG9zaXhfYXR0cj0xIn0sCS8qIGVtcHR5 IG9yIDEgb3IgeWVzIG9yIHRydWUgKi8KKwl7T3B0X3Bvc2l4X2F0dHJfeWVzLCAicG9zaXhf YXR0cj15ZXMifSwKKwl7T3B0X3Bvc2l4X2F0dHJfeWVzLCAicG9zaXhfYXR0cj10cnVlIn0s CisJe09wdF9wb3NpeF9hdHRyX3llcywgInBvc2l4X2F0dHIifSwKIAl7T3B0X2VyciwgTlVM TH0KIH07CiAKQEAgLTk4MCw2ICs5OTcsMTIgQEAKIAkJY2FzZSBPcHRfbm9udW10YWlsX3ll czoJCS8qIGVtcHR5IG9yIDEgb3IgeWVzIG9yIHRydWUgKi8KIAkJCW9wdHMtPm51bXRhaWwg PSAwOwkvKiBuZWdhdGVkIG9wdGlvbiAqLwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X3Bvc2l4 X2F0dHJfbm86CQkvKiAwIG9yIG5vIG9yIGZhbHNlICovCisJCQlvcHRzLT5wb3NpeF9hdHRy ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9wb3NpeF9hdHRyX3llczoJLyogZW1wdHkg b3IgMSBvciB5ZXMgb3IgdHJ1ZSAqLworCQkJb3B0cy0+cG9zaXhfYXR0ciA9IDE7CisJCQli cmVhazsKIAogCQkvKiBvYnNvbGV0ZSBtb3VudCBvcHRpb25zICovCiAJCWNhc2UgT3B0X29i c29sYXRlOgpJbmRleDogYWxwLTIuNi4xMi1wOC9mcy92ZmF0L25hbWVpLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gYWxwLTIuNi4xMi1wOC5vcmlnL2ZzL3ZmYXQvbmFtZWkuYwkyMDA1LTA4LTEy IDIxOjM1OjUxLjAwMDAwMDAwMCArMDkwMAorKysgYWxwLTIuNi4xMi1wOC9mcy92ZmF0L25h bWVpLmMJMjAwNS0wOC0xNSAyMToyOTowNS4zNTQxMzU4MzYgKzA5MDAKQEAgLTI0LDYgKzI0 LDE3MyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgv YnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisKKyNkZWZpbmUJR0VUX0lOT0RFX0ZJTEVfVFlQRSh4KQkoKCh4KS0+aV9t b2RlICYgU19JRk1UKSA+PiAxMikKKyNkZWZpbmUJR0VUX0lOT0RFX1VTRVJfSUQoeCkJKCh4 KS0+aV91aWQgPyAxIDogMCkKKyNkZWZpbmUJR0VUX0lOT0RFX0RSVl9NQUpPUih4KQkoKHgp LT5pX3JkZXYgPj4gTUlOT1JCSVRTKQorI2RlZmluZQlHRVRfSU5PREVfRFJWX01JTk9SKHgp CSgoeCktPmlfcmRldiAmIE1JTk9STUFTSykKKworc3RhdGljIHVuc2lnbmVkIHNob3J0ICBm aWxldHlwZV90YWJsZVtdID0geworCURUX1JFRywgLyogcGxhY2UgZm9sZGVyIGZvciBiYWNr d2FyZCBjb21wYXQgKi8KKwlEVF9MTkssCisJRFRfQkxLLAorCURUX0NIUiwKKwlEVF9GSUZP LAorCURUX1NPQ0ssCisJMAorfTsKKworLyoqCisgKiBpc192ZmF0X3Bvc2l4X3N5bWxpbmsg LSBjaGVjayBpZiBwb3NpeCBmaWxlIHR5cGUgZnJvbSBWRkFUIGRpciBpcyBzeW1saW5rCisg KgorICogUmV0dXJucworICoJICAgICAgICAwIC4uLiBpcyBub3Qgc3ltbGluayBvciBkb24n dCBoYXZlIHBvc2l4IGF0dHJpYnV0ZXMKKyAqCW90aGVyd2lzZSAuLi4gaXMgc3ltbGluawor ICovCitpbnQgaXNfdmZhdF9wb3NpeF9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAoKGRlbnRyeS0+YXR0ciAm IEFUVFJfU1lTKSAmJiBnZXRfcHhhdHRyX3NwZWNmKGRlbnRyeSkpIHsKKwkJaW50IHNpemUg PSBsZTE2X3RvX2NwdShkZW50cnktPnNpemUpOworCQlpZiAoKHNpemUgPD0gUEFUSF9NQVgp ICYmIChzaXplIDw9IFBBR0VfU0laRSkpCisJCQlyZXR1cm4gZmlsZXR5cGVfdGFibGVbZ2V0 X3B4YXR0cl9mdHlwZShkZW50cnkpXSA9PSBEVF9MTks7CisJfQorCXJldHVybiAwOworfQor CisvKgorICogZ2V0X3ZmYXRfcG9zaXhfYXR0ciAtIFJldHJpZXZlIHBvc2l4IGF0dHJpYnV0 ZXMgZnJvbSBWRkFUIGRpciBlbnRyeQorICoKKyAqIFJldHVybnMKKyAqCSAwIC4uLiBwb3Np eF9hdHRyIGFyZSBnZXQKKyAqCS0xIC4uLiBwb3NpeF9hdHRyIGFyZSBub3QgZ2V0CisgKi8K K3N0YXRpYyAKK2ludCBnZXRfdmZhdF9wb3NpeF9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgcHhfdWlkLCBweF9n aWQ7CisJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaTsKKwlpbnQgZnR5cGU7CisJaW50IHVt b2RlLCBnbW9kZSwgb21vZGU7CisKKwlpZiAoIShpbm9kZSAmJiBkZW50cnkpIHx8IElTX0VS Uihpbm9kZSkpIGdvdG8gbm90X2dldDsKKwlzYmkgPSBNU0RPU19TQihpbm9kZS0+aV9zYik7 CisJaWYgKCghc2JpLT5vcHRpb25zLnBvc2l4X2F0dHIpIHx8IChkZW50cnktPmF0dHIgPT0g QVRUUl9FWFQpIHx8IAorCSAgICAoZGVudHJ5LT5hdHRyICYgQVRUUl9WT0xVTUUpKSBnb3Rv IG5vdF9nZXQ7CisKKwkvKiBGaWxlIHR5cGUgOiAweEYwMDAgOiAxMiAqLworCWZ0eXBlID0g LTE7CisJaWYgKCEoZGVudHJ5LT5hdHRyICYgQVRUUl9TWVMpIHx8IChkZW50cnktPmF0dHIg JiBBVFRSX0RJUikpIHsKKwkJaWYgKGdldF9weGF0dHJfcmVnZihkZW50cnkpKQorCQkJZnR5 cGUgPSAoZGVudHJ5LT5hdHRyICYgQVRUUl9ESVIpID8gRFRfRElSIDogRFRfUkVHOworCX0g ZWxzZSBpZiAoZ2V0X3B4YXR0cl9zcGVjZihkZW50cnkpKSB7CisJCWludCBzaXplID0gbGUx Nl90b19jcHUoZGVudHJ5LT5zaXplKTsKKwkJZnR5cGUgPSBmaWxldHlwZV90YWJsZVtnZXRf cHhhdHRyX2Z0eXBlKGRlbnRyeSldOyAKKwkJaWYgKGZ0eXBlID09IERUX0xOSykgeworCQkJ aWYgKChzaXplID4gUEFUSF9NQVgpIHx8IChzaXplID4gUEFHRV9TSVpFKSkgZnR5cGUgPSAt MTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzaXplKSBmdHlwZSA9IC0xOworCQl9CisJfQorCWlm IChmdHlwZSA9PSAtMSkKKwkJZ290byBub3RfZ2V0OworCWlub2RlLT5pX21vZGUgPSBmdHlw ZSA8PCAxMjsKKwlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lOworCisJLyogVXNl ciAgOiAweDAxQzApIDogNiAqLworCS8qIEdyb3VwIDogMHgwMDM4KSA6IDMgKi8KKwkvKiBP dGhlciA6IDB4MDAwNyAqLworCXVtb2RlID0gKGdldF9weGF0dHJfdXIoZGVudHJ5KSA/IFNf SVJVU1IgOiAwKSB8CisJCShnZXRfcHhhdHRyX3V3KGRlbnRyeSkgPyBTX0lXVVNSIDogMCkg fAorCQkoZ2V0X3B4YXR0cl91eChkZW50cnkpID8gU19JWFVTUiA6IDApOworCWdtb2RlID0g KGdldF9weGF0dHJfZ3IoZGVudHJ5KSA/IFNfSVJHUlAgOiAwKSB8CisJCShnZXRfcHhhdHRy X2d3KGRlbnRyeSkgPyBTX0lXR1JQIDogMCkgfAorCQkoZ2V0X3B4YXR0cl9neChkZW50cnkp ID8gU19JWEdSUCA6IDApOworCW9tb2RlID0gZ21vZGUgPj4gMzsKKwlpbm9kZS0+aV9tb2Rl IHw9ICh1bW9kZSB8IGdtb2RlIHwgb21vZGUpOworCisJLyogVXNlciAmIEdyb3VwIElEICov CisJcHhfdWlkID0gc2JpLT5vcHRpb25zLmZzX3VpZCA/IHNiaS0+b3B0aW9ucy5mc191aWQg OiAodTE2KS0xOworCXB4X2dpZCA9IHNiaS0+b3B0aW9ucy5mc19naWQgPyBzYmktPm9wdGlv bnMuZnNfZ2lkIDogKHUxNiktMTsKKwlpbm9kZS0+aV91aWQgPSBnZXRfcHhhdHRyX3VpZChk ZW50cnkpID8gIHB4X3VpZCA6IDA7CisJaW5vZGUtPmlfZ2lkID0gZ2V0X3B4YXR0cl91aWQo ZGVudHJ5KSA/ICBweF9naWQgOiAwOworCisJLyogU3BlY2lhbCBmaWxlICovCisJaWYgKChm dHlwZT09RFRfQkxLKSB8fCAoZnR5cGU9PURUX0NIUikpIHsKKwkJaW5vZGUtPmlfcmRldiA9 ICgoZ2V0X3B4YXR0cl9tYWpvcihkZW50cnkpIDw8IE1JTk9SQklUUykgfCAKKwkJCQkgIGdl dF9weGF0dHJfbWlub3IoZGVudHJ5KSk7CisJCWlub2RlLT5pX21vZGUgJj0gflNfSUZNVDsK KwkJaW5vZGUtPmlfbW9kZSB8PSAoZnR5cGUgPT0gRFRfQkxLKSA/IFNfSUZCTEsgOiBTX0lG Q0hSOworCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2Rl LT5pX3JkZXYpOworCX0gZWxzZSBpZiAoKGZ0eXBlPT1EVF9GSUZPKSB8fCAoZnR5cGU9PURU X1NPQ0spKSB7CisJCWlub2RlLT5pX21vZGUgJj0gflNfSUZNVDsKKwkJaW5vZGUtPmlfbW9k ZSB8PSAoZnR5cGUgPT0gRFRfRklGTykgPyBTX0lGSUZPIDogU19JRlNPQ0s7CisJCWluaXRf c3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CisJ fQorCXJldHVybiAwOworbm90X2dldDoKKwlyZXR1cm4gLTE7CisKK30KKworLyoqCisgKiBz ZXRfdmZhdF9wb3NpeF9hdHRyIC0gc2V0IHBvc2l4IGF0dHJpYnV0ZXMgdG8gVkZBVCBkaXIg ZW50cnkKKyAqCisgKiBSZXR1cm5zCisgKgkgMCAuLi4gcG9zaXhfYXR0ciBhcmUgc2V0Cisg KgktMSAuLi4gcG9zaXhfYXR0ciBhcmUgbm90IHNldAorICovCitpbnQgc2V0X3ZmYXRfcG9z aXhfYXR0cihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAq aW5vZGUpCit7CisJaW50ICAgICBmdHlwZTsKKwlpbnQgICAgIGlmdHlwZTsKKwlpbnQJbW9k ZTsKKworCWlmICghKGlub2RlICYmIGRlbnRyeSkgfHwgSVNfRVJSKGlub2RlKSkgZ290byBu b3Rfc2V0OworCWlmICghTVNET1NfU0IoaW5vZGUtPmlfc2IpLT5vcHRpb25zLnBvc2l4X2F0 dHIpIGdvdG8gbm90X3NldDsKKworCS8qIEZpbGUgdHlwZSAqLworCWlmdHlwZSA9IEdFVF9J Tk9ERV9GSUxFX1RZUEUoaW5vZGUpOworCXN3aXRjaCAoaWZ0eXBlKSB7CisJY2FzZSBEVF9E SVI6CisJCWRlbnRyeS0+YXR0ciB8PSBBVFRSX0RJUjsKKwkJLyogZmFsbCB0aHJvdWdoICov CisJY2FzZSBEVF9SRUc6CisJCXNldF9weGF0dHJfcmVnZihkZW50cnksIDEpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlmb3IoZnR5cGU9MDsgZmlsZXR5cGVfdGFibGVbZnR5cGVdOyBm dHlwZSsrKXsKKwkJCWlmIChmaWxldHlwZV90YWJsZVtmdHlwZV0gPT0gaWZ0eXBlKSAKKwkJ CQlicmVhazsKKwkJfQorCQlpZiAoIWZpbGV0eXBlX3RhYmxlW2Z0eXBlXSkgZ290byBub3Rf c2V0OworCQkvKiBtYXJrIHBvc2l4IGF0dHIgZm9yIHNwZWNpYWwgZmlsZSAqLworCQlkZW50 cnktPmF0dHIgfD0gQVRUUl9TWVM7CisJCXNldF9weGF0dHJfc3BlY2YoZGVudHJ5LCAxKTsK KwkJc2V0X3B4YXR0cl9mdHlwZShkZW50cnksIGZ0eXBlKTsKKwkJYnJlYWs7CisJfQorCS8q IFBlcm1pc3Npb25zIGZvciBPd25lciAqLworCW1vZGUgPSBpbm9kZS0+aV9tb2RlOworCXNl dF9weGF0dHJfdXIoZGVudHJ5LCBtb2RlICYgU19JUlVTUik7CisJc2V0X3B4YXR0cl91dyhk ZW50cnksIG1vZGUgJiBTX0lXVVNSKTsKKwlzZXRfcHhhdHRyX3V4KGRlbnRyeSwgbW9kZSAm IFNfSVhVU1IpOworCS8qIFBlcm1pc3Npb25zIGZvciBHcm91cC9PdGhlcnMgKi8KKwlzZXRf cHhhdHRyX2dyKGRlbnRyeSwgbW9kZSAmIFNfSVJHUlApOworCXNldF9weGF0dHJfZ3coZGVu dHJ5LCBtb2RlICYgU19JV0dSUCk7CisJc2V0X3B4YXR0cl9neChkZW50cnksIG1vZGUgJiBT X0lYR1JQKTsKKwkvKiBVc2VyIElEICovCisJc2V0X3B4YXR0cl91aWQoZGVudHJ5LCBHRVRf SU5PREVfVVNFUl9JRChpbm9kZSkpOworCisJLyogRGVpdmNlIG51bWJlciAqLworCWlmICgo aWZ0eXBlPT1EVF9CTEspIHx8IChpZnR5cGU9PURUX0NIUikpIHsKKwkJc2V0X3B4YXR0cl9t YWpvcihkZW50cnksIEdFVF9JTk9ERV9EUlZfTUFKT1IoaW5vZGUpKTsKKwkJc2V0X3B4YXR0 cl9taW5vcihkZW50cnksIEdFVF9JTk9ERV9EUlZfTUlOT1IoaW5vZGUpKTsKKwl9CisJcmV0 dXJuIDA7Citub3Rfc2V0OgorCXJldHVybiAtMTsKK30KIAogc3RhdGljIGludCB2ZmF0X3Jl dmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkK IHsKQEAgLTcyMSw2ICs4ODgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlpbm9kZSA9IGZh dF9idWlsZF9pbm9kZShzYiwgc2luZm8uZGUsIHNpbmZvLmlfcG9zKTsKKwkodm9pZCkgZ2V0 X3ZmYXRfcG9zaXhfYXR0cihpbm9kZSwgc2luZm8uZGUpOwogCWJyZWxzZShzaW5mby5iaCk7 CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwpAQCAtNzc0LDYg Kzk0MiwxMCBAQAogCX0KIAlpbm9kZS0+aV92ZXJzaW9uKys7CiAJaW5vZGUtPmlfbXRpbWUg PSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gdHM7CisJaWYgKE1TRE9TX1NC KHNiKS0+b3B0aW9ucy5wb3NpeF9hdHRyKSAgeworCQlpbm9kZS0+aV9tb2RlID0JbW9kZSAm IFZGQVRfUE9TSVhfQVRUUl9WQUxJRF9NT0RFOworCQltYXJrX2lub2RlX2RpcnR5KGlub2Rl KTsKKwl9CiAJLyogdGltZXN0YW1wIGlzIGFscmVhZHkgd3JpdHRlbiwgc28gbWFya19pbm9k ZV9kaXJ0eSgpIGlzIHVubmVlZGVkLiAqLwogCiAJZGVudHJ5LT5kX3RpbWUgPSBkZW50cnkt PmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247CkBAIC04NjgsNiArMTA0MCwxMCBAQAog CWlub2RlLT5pX3ZlcnNpb24rKzsKIAlpbm9kZS0+aV9ubGluayA9IDI7CiAJaW5vZGUtPmlf bXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gdHM7CisJaWYgKE1T RE9TX1NCKHNiKS0+b3B0aW9ucy5wb3NpeF9hdHRyKSB7CisJCWlub2RlLT5pX21vZGUgPSAo U19JRkRJUiB8IChtb2RlICYgVkZBVF9QT1NJWF9BVFRSX1ZBTElEX01PREUpKTsKKwkJbWFy a19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQogCS8qIHRpbWVzdGFtcCBpcyBhbHJlYWR5IHdy aXR0ZW4sIHNvIG1hcmtfaW5vZGVfZGlydHkoKSBpcyB1bm5lZWRlZC4gKi8KIAogCWRlbnRy eS0+ZF90aW1lID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV92ZXJzaW9uOwpAQCAt MTAyMyw2ICsxMTk5LDEwMCBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMKK2ludCB2ZmF0 X3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29u c3QgY2hhciAqc3ltbmFtZSkKK3sKKwkvKiBiYXNlIDogdmZhdF9jcmVhdGUoKSAqLworCXN0 cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CisJc3RydWN0IGlub2RlICppbm9k ZSA9IE5VTEw7CisJc3RydWN0IGZhdF9zbG90X2luZm8gc2luZm87CisJc3RydWN0IHRpbWVz cGVjIHRzOworCWludCBlcnI7CisJaW50IGxlbjsKKworCWlmICghTVNET1NfU0Ioc2IpLT5v cHRpb25zLnBvc2l4X2F0dHIpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWxlbiA9IHN0 cmxlbiAoc3ltbmFtZSkgKyAxOworCWlmICgobGVuID4gUEFUSF9NQVgpIHx8IChsZW4gPiBQ QUdFX1NJWkUpKSB7CisJCXJldHVybiAtRU5BTUVUT09MT05HOworCX0KKworCWxvY2tfa2Vy bmVsKCk7CisKKwl0cyA9IENVUlJFTlRfVElNRV9TRUM7CisJZXJyID0gdmZhdF9hZGRfZW50 cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDAsIDAsICZ0cywgJnNpbmZvKTsKKwlpZiAoZXJy KQorCQlnb3RvIG91dDsKKwlkaXItPmlfdmVyc2lvbisrOworCisJaW5vZGUgPSBmYXRfYnVp bGRfaW5vZGUoc2IsIHNpbmZvLmRlLCBzaW5mby5pX3Bvcyk7CisJYnJlbHNlKHNpbmZvLmJo KTsKKwlpZiAoSVNfRVJSKGlub2RlKSl7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQln b3RvIG91dDsKKwl9CisJaW5vZGUtPmlfdmVyc2lvbisrOworCWlub2RlLT5pX21vZGUgPSAo U19JRkxOSyB8IDA3NzcpOworCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBp bm9kZS0+aV9jdGltZSA9IHRzOworCWlub2RlLT5pX29wID0gJmZhdF9zeW1saW5rX2lub2Rl X29wZXJhdGlvbnM7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKKwlkZW50cnktPmRf dGltZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfdmVyc2lvbjsKKwlkX2luc3Rh bnRpYXRlKGRlbnRyeSxpbm9kZSk7CisKKwllcnIgPSBwYWdlX3N5bWxpbmsoZGVudHJ5LT5k X2lub2RlLCBzeW1uYW1lLCBsZW4pOworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1 cm4gZXJyOworfQorCitzdGF0aWMKK2ludCB2ZmF0X21rbm9kKHN0cnVjdCBpbm9kZSAqZGly LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCByZGV2KQoreworCS8q IGJhc2UgOiB2ZmF0X2NyZWF0ZSgpICovCisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRp ci0+aV9zYjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlzdHJ1Y3QgZmF0X3Ns b3RfaW5mbyBzaW5mbzsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJaW50IGVycjsKKworCWlm ICghTVNET1NfU0Ioc2IpLT5vcHRpb25zLnBvc2l4X2F0dHIpCisJCXJldHVybiAtRU9QTk9U U1VQUDsKKworCWxvY2tfa2VybmVsKCk7CisKKwl0cyA9IENVUlJFTlRfVElNRV9TRUM7CisJ ZXJyID0gdmZhdF9hZGRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDAsIDAsICZ0cywg JnNpbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlkaXItPmlfdmVyc2lvbisrOwor CisJaW5vZGUgPSBmYXRfYnVpbGRfaW5vZGUoc2IsIHNpbmZvLmRlLCBzaW5mby5pX3Bvcyk7 CisJYnJlbHNlKHNpbmZvLmJoKTsKKwlpZiAoSVNfRVJSKGlub2RlKSl7CisJCWVyciA9IFBU Ul9FUlIoaW5vZGUpOworCQlnb3RvIG91dDsKKwl9CisJaW5vZGUtPmlfdmVyc2lvbisrOwor CisJaW5vZGUtPmlfbW9kZSA9CW1vZGUgJiBWRkFUX1BPU0lYX0FUVFJfVkFMSURfTU9ERTsK Kwlpbm9kZS0+aV9yZGV2ID0gcmRldjsKKworCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlf YXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRzOworCWluaXRfc3BlY2lhbF9pbm9kZShpbm9k ZSwgbW9kZSwgcmRldik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKKwlkZW50cnkt PmRfdGltZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfdmVyc2lvbjsKKwlkX2lu c3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCisJZXJyID0gMDsKKworb3V0OgorCXVubG9j a19rZXJuZWwoKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGlub2RlX29w ZXJhdGlvbnMgdmZhdF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuY3JlYXRlCQk9IHZm YXRfY3JlYXRlLAogCS5sb29rdXAJCT0gdmZhdF9sb29rdXAsCkBAIC0xMDMxLDYgKzEzMDEs OCBAQAogCS5ybWRpcgkJPSB2ZmF0X3JtZGlyLAogCS5yZW5hbWUJCT0gdmZhdF9yZW5hbWUs CiAJLnNldGF0dHIJPSBmYXRfbm90aWZ5X2NoYW5nZSwKKwkuc3ltbGluawk9IHZmYXRfc3lt bGluaywKKwkubWtub2QJCT0gdmZhdF9ta25vZCwKIH07CiAKIHN0YXRpYyBpbnQgdmZhdF9m aWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxl bnQpCkluZGV4OiBhbHAtMi42LjEyLXA4L2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBhbHAtMi42LjEyLXA4Lm9yaWcvaW5jbHVkZS9saW51eC9tc2Rvc19m cy5oCTIwMDUtMDgtMTIgMjE6MzU6NTEuMDAwMDAwMDAwICswOTAwCisrKyBhbHAtMi42LjEy LXA4L2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaAkyMDA1LTA4LTE1IDIwOjQ4OjAyLjAwMDAw MDAwMCArMDkwMApAQCAtMTk5LDYgKzE5OSw3IEBACiAJCSBzeXNfaW1tdXRhYmxlOjEsIC8q IHNldCA9IHN5c3RlbSBmaWxlcyBhcmUgaW1tdXRhYmxlICovCiAJCSBkb3RzT0s6MSwgICAg ICAgIC8qIHNldCA9IGhpZGRlbiBhbmQgc3lzdGVtIGZpbGVzIGFyZSBuYW1lZCAnLmZpbGVu YW1lJyAqLwogCQkgaXN2ZmF0OjEsICAgICAgICAvKiAwPW5vIHZmYXQgbG9uZyBmaWxlbmFt ZSBzdXBwb3J0LCAxPXZmYXQgc3VwcG9ydCAqLworCQkgcG9zaXhfYXR0cjoxLCAgICAgICAv KiAxPSBwb3NpeCBhdHRyaWJ1dGUgbWFwcGluZyBzdXBwb3J0ICovCiAJCSB1dGY4OjEsCSAg LyogVXNlIG9mIFVURjggY2hhcmFjdGVyIHNldCAoRGVmYXVsdCkgKi8KIAkJIHVuaWNvZGVf eGxhdGU6MSwgLyogY3JlYXRlIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIHVuaGFuZGxlZCBVbmlj b2RlICovCiAJCSBudW10YWlsOjEsICAgICAgIC8qIERvZXMgZmlyc3QgYWxpYXMgaGF2ZSBh IG51bWVyaWMgJ34xJyB0eXBlIHRhaWw/ICovCkBAIC0zODYsNiArMzg3LDcgQEAKIAkJCSAg ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3Qg aW5vZGVfb3BlcmF0aW9ucyBmYXRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0 cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiBl eHRlcm4gaW50IGZhdF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0 cnVjdCBpYXR0ciAqIGF0dHIpOwogZXh0ZXJuIHZvaWQgZmF0X3RydW5jYXRlKHN0cnVjdCBp bm9kZSAqaW5vZGUpOwogCkBAIC00MDcsNiArNDA5LDI4NCBAQAogZXh0ZXJuIHZvaWQgZmF0 X2RhdGVfdW5peDJkb3MoaW50IHVuaXhfZGF0ZSwgX19sZTE2ICp0aW1lLCBfX2xlMTYgKmRh dGUpOwogZXh0ZXJuIGludCBmYXRfc3luY19iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhz LCBpbnQgbnJfYmhzKTsKIAorLyoKKyAqIHZmYXQgcG9zaXggYXR0ciBvcHRpb24gInBvc2l4 X2F0dHIiIHN0dWZmcworICoKKyAqIEZFQVRVUkVTCisgKgkKKyAqIEZvbGxvd2luZyBhdHRy aWJ1dGVzL21vZGVzIGFyZSBzdXBwb3J0ZWQgaW4gcG9zaXggYXR0cmlidXRlYSBtYXBwaW5n CisgKiBpbiBWRkFULgorICoKKyAqICAgLSBGaWxlVHlwZQorICogCVRoaXMgc3VwcG9ydHMg Zm9sbG93aW5nIHNwZWNpYWwgZmlsZXMgYW5kIGl0J3MgYXR0cmlidXRlczsKKyAqIAkJc3lt Ym9saWMgbGluaywJYmxvY2sgZGV2aWNlIG5vZGUsCisgKiAJCWNoYXIgZGV2aWNlIG5vZGUs IGZpZm8sCXNvY2tldAorICogCVJlZ3VsYXIgZmlsZXMvZGlycyBhbHNvIG1heSBoYXZlIFBP U0lYIGF0dHJpYnV0ZXMuCisgKiAgIC0gRGV2aWNlRmlsZQorICogCU1ham9yIGFuZCBtaW5v ciBudW1iZXIgd291bGQgYmUgaGVsZCBhdCBjdGltZQorICogCWFuZCBib3RoIHZhbHVlcyBh cmUgbGltaXRlZCAgdG8gMjU1LgorICogICAtIE93bmVyJ3MgVXNlciBJRC9Hcm91cCBJRCAK KyAqIAlUaGlzIGNhbiBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHJvb3QgYW5kIG90aGVycywK KyAqIAliZWNhdXNlIHRoaXMgaGFzIGp1c3Qgb25lIGJpdCB3aWR0aC4gCisgKiAJVmFsdWUg b2YgVUlEL0dJRCBmb3Igbm9uLXJvb3QgdXNlciB3aWxsIGJlIHRha2VuIGZyb20gdWlkL2dp ZCAKKyAqIAlvcHRpb24gb24gbW91bnRpbmcuIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBz eXN0ZW0gdXNlcyAKKyAqCSh1MTYpLTEgYXMgbGFzdCByZXNvcnQuIFRoYXQgbWVhbnMgY2hh bmdlLXVpZCBtYXkgYWZmZWN0IG9uIGdpZC4KKyAqICAgLSBQZXJtaXNzaW9uIGZvciBHcm91 cC9PdGhlciAocnd4KQorICogCVRob3NlIG1vZGVzIHdpbGwgYmUga2VwdCBpbiBjdGltZV9j cy4KKyAqIAlBbHNvIHBlcm1pc3Npb24gbW9kZXMgZm9yICJvdGhlcnMiIHdpbGwgYmUKKyAq IAlzYW1lIGFzICJncm91cCIsIGR1ZSB0byBsYWNrIG9mIGZpZWxkcy4KKyAqCVRoYXQgbWVh bnMgc2V0LWdyb3VwLW1vZGUgbWF5IGFmZmVjdCBvbiBvdGhlci1tb2RlLgorICoJT24gdGhl IG90aGVyIGhhbmQsIHNldC1vdGhlci1tb2RlIGhhcyBubyBhZmZlY3QgdG8gZ3JvdXAtbW9k ZS4KKyAqCQorICogICAtIFBlcm1pc3Npb24gZm9yIE93bmVyIChyd3gpCisgKiAJVGhlc2Ug bW9kZXMgd2lsbCBiZSBtYXBwZWQgdG8gRkFUIGF0dHJpYnV0ZXMuCisgKiAJSnVzdCBzYW1l IGFzIG1hcHBpbmcgdW5kZXIgVkZBVC4KKyAqICAgLSBPdGhlcnMKKyAqIAlubyBzdGlja3ks IHNldGdpZCBub3Igc2V0dWlkIGJpdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKiAKKyAqQUxH T1JJVEhNIEZPUiBNQVBQSU5HIERFQ0lTSU9OCisgKiAgIC0gUmVndWxhciBmaWxlL2Rpcgor ICogCVRvIGRpc3Rpbmd1aXNoIHJlZ3VsYXIgZmlsZXMvZGlycywgbG9vayBpZiB0aGlzIGZh dCBkaXIgCisgKiAJZW50cnkgZG9lc24ndCBoYXZlIEFUVFJfU1lTLCBmaXJzdC4gSWYgaXQg ZG9lc24ndCBoYXZlIAorICogCUFUVFJfU1lTLCB0aGVuIGNoZWNrIGlmIFRZUEUgZmllbGQg KE1TQiAzYml0cykgaW4gY3RpbWVfY3MgCisgKiAJaXMgZXF1YWwgdG8gNy4gSWYgc28sIHRo aXMgcmVndWxhciBmaWxlL2RpciBpcyBjcmVhdGVkIGFuZC9vciAKKyAqIAltb2RpZmllZCB1 bmRlciBWRkFUIHdpdGggInBvc2l4X2F0dHIiLiBBbmQgcG9zaXggYXR0cmlidXRlIAorICog CW1hcHBpbmcgY2FuIGJlIHRha2UgcGxhY2UuIE90aGVyd2lzZSwgY29udmVudGlvbmFsIFZG QVQgCisgKiAJYXR0cmlidXRlIG1hcHBpbmcgaXMgdXNlZC4KKyAqCisgKiAgIC0gU3BlY2lh bCBmaWxlCisgKiAJVG8gZGlzdGluZ3Vpc2ggc3BlY2lhbCBmaWxlcywgbG9vayBpZiB0aGlz IGZhdCBkaXIgZW50cnkgCisgKiAJaGFzIEFUVFJfU1lTLCBmaXJzdC4gQWxzbyB3ZSBuZWVk IHRvIGNoZWNrIGl0IG5vdCB0byBoYXZlIAorICoJQVRUX0VYVC4KKyAqCUlmIGl0IGhhcyBB VFRSX1NZUywgdGhlbiBjaGVjayAxc3QuIExTQiBiaXQgaW4gY3RpbWVfY3MsIAorICoJcmVm ZXJyZWQgYXMgInNwZWNpYWwgZmlsZSBmbGFnIi4KKyAqIAlJZiBzZXQsICB0aGlzIGZpbGUg aXMgY3JlYXRlZCB1bmRlciBWRkFUIHdpdGggInBvc2l4X2F0dHIiLiAKKyAqIAlMb29rIHVw IFRZUEUgZmllbGQgdG8gZGVjaWRlIHNwZWNpYWwgZmlsZSB0eXBlLgorICoKKyAqIAlUaGlz IHNwZWNpYWwgZmlsZSBkZXRlY3Rpb24gbWV0aG9kIGhhcyBzb21lIGZsYXcgdG8gbWFrZQor ICogCXBvdGVudGlhbCBjb25mdXNpb24uIEUuZy4gc29tZSBzeXN0ZW0gZmlsZSBjcmVhdGVk IHVuZGVyCisgKglkb3Mvd2luIG1heSBiZSB0cmVhdGVkIGFzIHNwZWNpYWwgZmlsZS4gIEhv d2V2ZXIgaW4gbW9zdCBjYXNlLAorICoJdXNlciBkb24ndCBjcmVhdGUgc3lzdGVtIGZpbGUg dW5kZXIgZG9zL3dpbi4KKyAqCVRvIHJlZHVjZSBwb3NzaWJsaXR5IG9mIHRoaXMgY29uZnVz aW9uLCBzeXN0ZW0gbWFrZXMKKyAqCXN1cmUgc3BlY2lhbCBmaWxlcyBleGNlcHQgc3ltbGlu ayBoYXZlIHNpemUgWkVSTy4KKyAqCUZvciBzeW1saW5rLCBzeXN0ZW0gY2hlY2tzIGl0J3Mg c2l6ZSBub3QgdG8gZXhjZWVkIHBhZ2Ugc2l6ZSAKKyAqCWFuZCBQQVRIX01BWC4KKyAqCisg KkZBVCBESVIgRU5UUlkgRklFTERTCisgKgorICogICAtIGN0aW1lX2NzCisgKiAJICAgIDhi aXQgYnl0ZQorICogCTcgNiA1IDQgMyAyIDEgMAorICogCXw9PT18IHwgfCB8IHwgfAorICog CVRZUEUgIHwgfCB8IHwgKy0gc3BlY2lhbCBmaWxlIGZsYWcgKHZhbGlkIGlmIEFUVFJfU1lT KQorICogCSAgICAgIHwgfCB8ICstLS0gVXNlci9Hcm91cCBJRChyb290IG9yIG90aGVycykK KyAqIAkgICAgICB8IHwgKy0tLS0tICFncm91cCBYCisgKiAJICAgICAgfCArLS0tLS0tLSAh Z3JvdXAgVworICogCSAgICAgICstLS0tLS0tLS0gIWdyb3VwIFIKKyAqIAorICogCSAgc3Bl Y2lhbCBmaWxlIGZsYWcKKyAqIAkJSW5kaWNhdGUgdGhpcyBlbnRyeSBoYXMgcG9zaXggYXR0 cmlidXRlIG1hcHBpbmcuCisgKiAJCVRoaXMgZmllbGQgaXMgdmFsaWQgZm9yIGZhdCBkaXIg ZW50cnksIHdoaWNoIAorICogCQloYXZlIEFUVFJfU1lTLgorICogCisgKiAJICBzcGVjaWFs IGZpbGUgVFlQRQorICogCQl2YWwJdHlwZSBvbiBWRlModmFsKQlEZXNjcmlwdGlvbgorICog CQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq IAkJMCAJKHBsYWNlIGZvbGRlciBmb3IgYmFja3dhcmQgY29tcGF0KQorICogCQkxIAlEVF9M TksgKDEwKQkJc3ltYm9saWMgbGluaworICogCQkyCURUX0JMSyAoNikJCWJsb2NrIGRldgor ICogCQkzCURUX0NIUiAoNCkJCWNoYXIgZGV2CisgKiAJCTQJRFRfRklGTyAoMSkJCWZpZm8K KyAqIAkJNQlEVF9TT0NLCSgxMikJCXNvY2tldAorICogCQorICogCQk3KikJKHJlc2VydmVk IGZvciBEVF9SRUcvRFRfRElSKSAKKyAqIAorICogCQkqKVZhbHVlIDcgaXMgcmVzZXJ2ZWQg Zm9yIHJlZ3VsYXIgZmlsZS9kaXIgKERUX1JFRy9EVF9ESVIpLgorICogCQlOb3JtYWxseSBj dGltZV9jcyB3b3VsZCBoYXZlIDAtMTk5IHZhbHVlIHRvIHN0YW5kIGZvciAKKyAqIAkJdXAg dG8gMnNlYy4gVGhlIHZhbHVlIGZvciBEVF9SRUcvRFRfRElSIGlzIHNlbGVjdGVkIAorICog CQl0byBiZSBvdmVyIHRoaXMgcmFuZ2UgdG8gZGlzdGluZ3Vpc2ggaWYgZmlsZSB3YXMgY3Jl YXRlZAorICogCQl1bmRlciBQT1NJWF9BVFRSIG9yIG5vdC4KKyAqCisgKiAgIC0gYXR0cgor ICogCUZBVCBhdHRyaWJ1dGUJKHZhbCkJCW1hcHBlZCBhdHRyaWJ1dGUKKyAqIAktLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAlBVFRSX1JP CQkweDAxIAkJIW93bmVyIFcKKyAqIAlBVFRSX0hJRERFTgkweDAyCQkhb3duZXIgUgorICog CUFUVFJfU1lTCTB4MDQKKyAqIAlBVFRSX1ZPTFVNRQkweDA4CisgKiAJQVRUUl9ESVIJMHgx MAkJRElSCisgKiAJQVRUUl9BUkNICTB4MjAJCSFvd25lciBYCisgKgorICogICAtIGN0aW1l CisgKiAJCTE2Yml0IHdvcmQKKyAqIAlmIGUgZCBjIGIgYSA5IDggNyA2IDUgNCAzIDIgMSAw CisgKiAJfD09PT09PT09PT09PT18IHwtLS0tLS0tLS0tLS0tfAorICogCSAgbWFqb3IJCSAg bWlub3IKKyAqIAorICovCisKKyNkZWZpbmUgVkZBVF9QT1NJWF9BVFRSX1ZBTElEX01PREUJ KFNfSUZNVHxTX0lSV1hVfFNfSVJXWEd8U19JUldYTykKKworI2RlZmluZSBWRkFUX0NTX0ZN U0sJMHhlMAorI2RlZmluZSBWRkFUX0NTX0ZTRlQJNQorI2RlZmluZSBWRkFUX0NTX0ZSRUcJ MHhlMAorCisjZGVmaW5lIFZGQVRfQ1NfU1BDRgkweDAxCisjZGVmaW5lIFZGQVRfQ1NfVUlE CTB4MDIKKyNkZWZpbmUgVkZBVF9DU19OWEdSUAkweDA0CisjZGVmaW5lIFZGQVRfQ1NfTldH UlAJMHgwOAorI2RlZmluZSBWRkFUX0NTX05SR1JQCTB4MTAKKworLyogcmVndWxhciBmaWxl L2RpciBmbGFnICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfcHhhdHRyX3JlZ2Yoc3RydWN0 IG1zZG9zX2Rpcl9lbnRyeSAqZGUpCit7CisJcmV0dXJuIChkZS0+Y3RpbWVfY3MgJiBWRkFU X0NTX0ZNU0spID09IFZGQVRfQ1NfRlJFRzsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRf cHhhdHRyX3JlZ2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGludCB2YWwpCit7CisJ dmFsID0gdmFsID8gVkZBVF9DU19GTVNLIDogMDsKKwlkZS0+Y3RpbWVfY3MgPSAodmFsIHwg KGRlLT5jdGltZV9jcyAmICh+VkZBVF9DU19GTVNLKSkpOworfQorCisvKiBmaWxlIHR5cGUg Ki8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9weGF0dHJfZnR5cGUoc3RydWN0IG1zZG9zX2Rp cl9lbnRyeSAqZGUpCit7CisJcmV0dXJuICgoZGUtPmN0aW1lX2NzICYgVkZBVF9DU19GTVNL KSA+PiBWRkFUX0NTX0ZTRlQpOworfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9weGF0dHJf ZnR5cGUoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGludCB2YWwpCit7CisJdmFsID0g KHZhbCAgPDwgVkZBVF9DU19GU0ZUKSAmIFZGQVRfQ1NfRk1TSzsKKwlkZS0+Y3RpbWVfY3Mg PSAodmFsIHwgKGRlLT5jdGltZV9jcyAmICh+VkZBVF9DU19GTVNLKSkpOworfQorCisvKiBz cGVjaWFsIGZpbGUgZmxhZyAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X3B4YXR0cl9zcGVj ZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSkKK3sKKwlyZXR1cm4gZGUtPmN0aW1lX2Nz ICYgVkZBVF9DU19TUENGOworfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9weGF0dHJfc3Bl Y2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGludCB2YWwpCit7CisJdmFsID0gdmFs ID8gVkZBVF9DU19TUENGIDogMDsKKwlkZS0+Y3RpbWVfY3MgPSAodmFsIHwgKGRlLT5jdGlt ZV9jcyAmICh+VkZBVF9DU19TUENGKSkpOworfQorCisvKiB1c2VyIHIgKi8KK3N0YXRpYyBp bmxpbmUgaW50IGdldF9weGF0dHJfdXIoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUpCit7 CisJcmV0dXJuICEoZGUtPmF0dHIgJiBBVFRSX0hJRERFTik7Cit9CitzdGF0aWMgaW5saW5l IHZvaWQgc2V0X3B4YXR0cl91cihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgaW50IHZh bCkKK3sKKwl2YWwgPSB2YWwgPyAwIDogQVRUUl9ISURERU47CisJZGUtPmF0dHIgPSAodmFs IHwgKGRlLT5hdHRyICYgfkFUVFJfSElEREVOKSk7Cit9CisKKy8qIHVzZXIgdyAqLworc3Rh dGljIGlubGluZSBpbnQgZ2V0X3B4YXR0cl91dyhzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpk ZSkKK3sKKwlyZXR1cm4gIShkZS0+YXR0ciAmIEFUVFJfUk8pOworfQorc3RhdGljIGlubGlu ZSB2b2lkIHNldF9weGF0dHJfdXcoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGludCB2 YWwpCit7CisJdmFsID0gdmFsID8gMCA6IEFUVFJfUk87CisJZGUtPmF0dHIgPSAodmFsIHwg KGRlLT5hdHRyICYgfkFUVFJfUk8pKTsKK30KKworLyogdXNlciB4ICovCitzdGF0aWMgaW5s aW5lIGludCBnZXRfcHhhdHRyX3V4KHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKQorewor CXJldHVybiAhKGRlLT5hdHRyICYgQVRUUl9BUkNIKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9p ZCBzZXRfcHhhdHRyX3V4KHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBpbnQgdmFsKQor eworCXZhbCA9IHZhbCA/IDAgOiBBVFRSX0FSQ0g7CisJZGUtPmF0dHIgPSAodmFsIHwgKGRl LT5hdHRyICYgfkFUVFJfQVJDSCkpOworfQorCisvKiBncm91cCByICovCitzdGF0aWMgaW5s aW5lIGludCBnZXRfcHhhdHRyX2dyKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKQorewor CXJldHVybiAhKGRlLT5jdGltZV9jcyAmIFZGQVRfQ1NfTlJHUlApOworfQorc3RhdGljIGlu bGluZSB2b2lkIHNldF9weGF0dHJfZ3Ioc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGlu dCB2YWwpCit7CisJdmFsID0gdmFsID8gMCA6IFZGQVRfQ1NfTlJHUlA7CisJZGUtPmN0aW1l X2NzID0gKHZhbCB8IChkZS0+Y3RpbWVfY3MgJiAoflZGQVRfQ1NfTlJHUlApKSk7Cit9CisK Ky8qIGdyb3VwIHcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9weGF0dHJfZ3coc3RydWN0 IG1zZG9zX2Rpcl9lbnRyeSAqZGUpCit7CisJcmV0dXJuICEoZGUtPmN0aW1lX2NzICYgVkZB VF9DU19OV0dSUCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B4YXR0cl9ndyhzdHJ1 Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgaW50IHZhbCkKK3sKKwl2YWwgPSB2YWwgPyAwIDog VkZBVF9DU19OV0dSUDsKKwlkZS0+Y3RpbWVfY3MgPSAodmFsIHwgKGRlLT5jdGltZV9jcyAm ICh+VkZBVF9DU19OV0dSUCkpKTsKK30KKworLyogZ3JvdXAgeCAqLworc3RhdGljIGlubGlu ZSBpbnQgZ2V0X3B4YXR0cl9neChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSkKK3sKKwly ZXR1cm4gIShkZS0+Y3RpbWVfY3MgJiBWRkFUX0NTX05YR1JQKTsKK30KK3N0YXRpYyBpbmxp bmUgdm9pZCBzZXRfcHhhdHRyX2d4KHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBpbnQg dmFsKQoreworCXZhbCA9IHZhbCA/IDAgOiBWRkFUX0NTX05YR1JQOworCWRlLT5jdGltZV9j cyA9ICh2YWwgfCAoZGUtPmN0aW1lX2NzICYgKH5WRkFUX0NTX05YR1JQKSkpOworfQorCisv KiB1c2VyIGlkICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfcHhhdHRyX3VpZChzdHJ1Y3Qg bXNkb3NfZGlyX2VudHJ5ICpkZSkKK3sKKwlyZXR1cm4gKGRlLT5jdGltZV9jcyAmIFZGQVRf Q1NfVUlEKSAhPSAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9weGF0dHJfdWlkKHN0 cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBpbnQgdmFsKQoreworCXZhbCA9IHZhbCA/IFZG QVRfQ1NfVUlEIDogMDsKKwlkZS0+Y3RpbWVfY3MgPSAodmFsIHwgKGRlLT5jdGltZV9jcyAm ICh+VkZBVF9DU19VSUQpKSk7Cit9CisKKy8qIGRyaXZlciBtYWpvciBudW1iZXIgKi8KK3N0 YXRpYyBpbmxpbmUgaW50IGdldF9weGF0dHJfbWFqb3Ioc3RydWN0IG1zZG9zX2Rpcl9lbnRy eSAqZGUpCit7CisJcmV0dXJuICgobGUxNl90b19jcHUoZGUtPmN0aW1lKSAmIDB4ZmYwMCkg Pj4gOCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B4YXR0cl9tYWpvcihzdHJ1Y3Qg bXNkb3NfZGlyX2VudHJ5ICpkZSwgaW50IHZhbCkKK3sKKwl2YWwgPSAodmFsICYgMHhmZikg PDwgODsKKwlkZS0+Y3RpbWUgPSBjcHVfdG9fbGUxNigodmFsIHwgKGxlMTZfdG9fY3B1KGRl LT5jdGltZSkgJiAweDAwZmYpKSk7Cit9CisKKy8qIGRyaXZlciBtaW5vciBudW1iZXIgKi8K K3N0YXRpYyBpbmxpbmUgaW50IGdldF9weGF0dHJfbWlub3Ioc3RydWN0IG1zZG9zX2Rpcl9l bnRyeSAqZGUpCit7CisJcmV0dXJuIGxlMTZfdG9fY3B1KGRlLT5jdGltZSkgJiAweGZmOwor fQorc3RhdGljIGlubGluZSB2b2lkIHNldF9weGF0dHJfbWlub3Ioc3RydWN0IG1zZG9zX2Rp cl9lbnRyeSAqZGUsIGludCB2YWwpCit7CisJdmFsICY9IDB4ZmY7CisJZGUtPmN0aW1lID0g Y3B1X3RvX2xlMTYodmFsIHwgKGxlMTZfdG9fY3B1KGRlLT5jdGltZSkgJiAweGZmMDApKTsK K30KKworI2lmZGVmIENPTkZJR19WRkFUX0ZTCisvKiBmcy92ZmF0L25hbWVpLmMgKi8KK2V4 dGVybiBpbnQgaXNfdmZhdF9wb3NpeF9zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg bXNkb3NfZGlyX2VudHJ5ICopOworZXh0ZXJuIGludCBzZXRfdmZhdF9wb3NpeF9hdHRyKHN0 cnVjdCBtc2Rvc19kaXJfZW50cnkgKiwgc3RydWN0IGlub2RlICopOworI2Vsc2UgLyogQ09O RklHX1ZGQVRfRlMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IAoraXNfdmZhdF9wb3NpeF9zeW1s aW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKQor eworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgCitzZXRfdmZhdF9wb3Np eF9hdHRyKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2Rl KQoreworCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfVkZBVF9GUyAqLworCiAj ZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYK --------------000000020609090007000905--