From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [RFC PATCH 25/49] ARM: new VGIC: Add GICv2 world switch backend Date: Fri, 9 Feb 2018 14:39:13 +0000 Message-ID: <20180209143937.28866-26-andre.przywara@linaro.org> References: <20180209143937.28866-1-andre.przywara@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ek9qY-0000pI-O7 for xen-devel@lists.xenproject.org; Fri, 09 Feb 2018 14:40:14 +0000 Received: by mail-wm0-x241.google.com with SMTP id b21so16707130wme.4 for ; Fri, 09 Feb 2018 06:40:12 -0800 (PST) In-Reply-To: <20180209143937.28866-1-andre.przywara@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Stefano Stabellini , Julien Grall , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org UHJvY2Vzc2luZyBtYWludGVuYW5jZSBpbnRlcnJ1cHRzIGFuZCBhY2Nlc3NpbmcgdGhlIGxpc3Qg cmVnaXN0ZXJzCmFyZSBkZXBlbmRlbnQgb24gdGhlIGhvc3QncyBHSUMgdmVyc2lvbi4KSW50cm9k dWNlIHZnaWMtdjIuYyB0byBjb250YWluIEdJQ3YyIHNwZWNpZmljIGZ1bmN0aW9ucy4KSW1wbGVt ZW50IHRoZSBHSUN2MiBzcGVjaWZpYyBjb2RlIGZvciBzeW5jaW5nIHRoZSBlbXVsYXRpb24gc3Rh dGUKaW50byB0aGUgVkdJQyByZWdpc3RlcnMuClRoaXMgYWxzbyBhZGRzIHRoZSBob29rIHRvIGxl dCBYZW4gc2V0dXAgdGhlIGhvc3QgR0lDIGFkZHJlc3Nlcy4KClRoaXMgaXMgYmFzZWQgb24gTGlu dXggY29tbWl0IDE0MGIwODZkZDE5Nywgd3JpdHRlbiBieSBNYXJjIFp5bmdpZXIuCgpTaWduZWQt b2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAbGluYXJvLm9yZz4KLS0tCiB4 ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLXYyLmMgfCAyNjEgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL2FybS92Z2ljL3ZnaWMuYyAgICB8ICAyMCAr KysrCiB4ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmggICAgfCAgIDggKysKIDMgZmlsZXMgY2hhbmdl ZCwgMjg5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdmdp Yy92Z2ljLXYyLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLXYyLmMgYi94 ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLXYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMTBmYzQ2N2ZmYQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL2FybS92Z2lj L3ZnaWMtdjIuYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwg MjAxNiBBUk0gTHRkLgorICogSW1wb3J0ZWQgZnJvbSBMaW51eCAoIm5ldyIgS1ZNIFZHSUMpIGFu ZCBoZWF2aWx5IGFkYXB0ZWQgdG8gWGVuLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2luY2x1ZGUgPGFzbS9hcm1fdmdpYy5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNs dWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vc2l6 ZXMuaD4KKworI2luY2x1ZGUgInZnaWMuaCIKKworI2RlZmluZSBHSUNIX0VMUlNSMCAgICAgICAg ICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgR0lDSF9FTFJTUjEgICAgICAgICAgICAgICAgICAg ICAweDM0CisjZGVmaW5lIEdJQ0hfTFIwICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKwor I2RlZmluZSBHSUNIX0xSX1ZJUlRVQUxJRCAgICAgICAgICAgICAgICgweDNmZiA8PCAwKQorI2Rl ZmluZSBHSUNIX0xSX1BIWVNJRF9DUFVJRF9TSElGVCAgICAgICgxMCkKKyNkZWZpbmUgR0lDSF9M Ul9QSFlTSURfQ1BVSUQgICAgICAgICAgICAoMHgzZmYgPDwgR0lDSF9MUl9QSFlTSURfQ1BVSURf U0hJRlQpCisjZGVmaW5lIEdJQ0hfTFJfUFJJT1JJVFlfU0hJRlQgICAgICAgICAgMjMKKyNkZWZp bmUgR0lDSF9MUl9TVEFURSAgICAgICAgICAgICAgICAgICAoMyA8PCAyOCkKKyNkZWZpbmUgR0lD SF9MUl9QRU5ESU5HX0JJVCAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgR0lDSF9MUl9B Q1RJVkVfQklUICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgR0lDSF9MUl9FT0kgICAg ICAgICAgICAgICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgR0lDSF9MUl9IVyAgICAgICAgICAg ICAgICAgICAgICAoMSA8PCAzMSkKKworc3RhdGljIHN0cnVjdCB7CisgICAgYm9vbCBlbmFibGVk OworICAgIHBhZGRyX3QgZGJhc2U7ICAgICAgICAgIC8qIERpc3RyaWJ1dG9yIGludGVyZmFjZSBh ZGRyZXNzICovCisgICAgcGFkZHJfdCBjYmFzZTsgICAgICAgICAgLyogQ1BVIGludGVyZmFjZSBh ZGRyZXNzICYgc2l6ZSAqLworICAgIHBhZGRyX3QgY3NpemU7CisgICAgcGFkZHJfdCB2YmFzZTsg ICAgICAgICAgLyogVmlydHVhbCBDUFUgaW50ZXJmYWNlIGFkZHJlc3MgKi8KKyAgICB2b2lkIF9f aW9tZW0gKmhiYXNlOyAgICAgICAgLyogSHlwZXJ2aXNvciBjb250cm9sIGludGVyZmFjZSAqLwor CisgICAgLyogT2Zmc2V0IHRvIGFkZCB0byBnZXQgYW4gOGtCIGNvbnRpZ3VvdXMgcmVnaW9uIGlm IEdJQyBpcyBhbGlhc2VkICovCisgICAgdWludDMyX3QgYWxpYXNlZF9vZmZzZXQ7Cit9IGdpY192 Ml9od19kYXRhOworCit2b2lkIHZnaWNfdjJfc2V0dXBfaHcocGFkZHJfdCBkYmFzZSwgcGFkZHJf dCBjYmFzZSwgcGFkZHJfdCBjc2l6ZSwKKyAgICAgICAgICAgICAgcGFkZHJfdCB2YmFzZSwgdm9p ZCBfX2lvbWVtICpoYmFzZSwKKyAgICAgICAgICAgICAgdWludDMyX3QgYWxpYXNlZF9vZmZzZXQp Cit7CisgICAgZ2ljX3YyX2h3X2RhdGEuZW5hYmxlZCA9IHRydWU7CisgICAgZ2ljX3YyX2h3X2Rh dGEuZGJhc2UgPSBkYmFzZTsKKyAgICBnaWNfdjJfaHdfZGF0YS5jYmFzZSA9IGNiYXNlOworICAg IGdpY192Ml9od19kYXRhLmNzaXplID0gY3NpemU7CisgICAgZ2ljX3YyX2h3X2RhdGEudmJhc2Ug PSB2YmFzZTsKKyAgICBnaWNfdjJfaHdfZGF0YS5oYmFzZSA9IGhiYXNlOworICAgIGdpY192Ml9o d19kYXRhLmFsaWFzZWRfb2Zmc2V0ID0gYWxpYXNlZF9vZmZzZXQ7Cit9CisKK3ZvaWQgdmdpY192 Ml9zZXRfdW5kZXJmbG93KHN0cnVjdCB2Y3B1ICp2Y3B1KQoreworICAgIGdpY19od19vcHMtPnVw ZGF0ZV9oY3Jfc3RhdHVzKEdJQ0hfSENSX1VJRSwgMSk7Cit9CisKKy8qCisgKiB0cmFuc2ZlciB0 aGUgY29udGVudCBvZiB0aGUgTFJzIGJhY2sgaW50byB0aGUgY29ycmVzcG9uZGluZyBhcF9saXN0 OgorICogLSBhY3RpdmUgYml0IGlzIHRyYW5zZmVycmVkIGFzIGlzCisgKiAtIHBlbmRpbmcgYml0 IGlzCisgKiAgIC0gdHJhbnNmZXJyZWQgYXMgaXMgaW4gY2FzZSBvZiBlZGdlIHNlbnNpdGl2ZSBJ UlFzCisgKiAgIC0gc2V0IHRvIHRoZSBsaW5lLWxldmVsIChyZXNhbXBsZSB0aW1lKSBmb3IgbGV2 ZWwgc2Vuc2l0aXZlIElSUXMKKyAqLwordm9pZCB2Z2ljX3YyX2ZvbGRfbHJfc3RhdGUoc3RydWN0 IHZjcHUgKnZjcHUpCit7CisgICAgc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZ2Y3B1LT5h cmNoLnZnaWNfY3B1OworICAgIHN0cnVjdCB2Z2ljX3YyX2NwdV9pZiAqY3B1aWYgPSAmdmdpY19j cHUtPnZnaWNfdjI7CisgICAgaW50IGxyOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAg ICBjcHVpZi0+dmdpY19oY3IgJj0gfkdJQ0hfSENSX1VJRTsKKworICAgIGZvciAoIGxyID0gMDsg bHIgPCB2Z2ljX2NwdS0+dXNlZF9scnM7IGxyKysgKQorICAgIHsKKyAgICAgICAgdTMyIHZhbCA9 IGNwdWlmLT52Z2ljX2xyW2xyXTsKKyAgICAgICAgdTMyIGludGlkID0gdmFsICYgR0lDSF9MUl9W SVJUVUFMSUQ7CisgICAgICAgIHN0cnVjdCB2Z2ljX2lycSAqaXJxOworCisgICAgICAgIGlycSA9 IHZnaWNfZ2V0X2lycSh2Y3B1LT5kb21haW4sIHZjcHUsIGludGlkKTsKKworICAgICAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmaXJxLT5pcnFfbG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIEFsd2F5 cyBwcmVzZXJ2ZSB0aGUgYWN0aXZlIGJpdCAqLworICAgICAgICBpcnEtPmFjdGl2ZSA9ICEhKHZh bCAmIEdJQ0hfTFJfQUNUSVZFX0JJVCk7CisKKyAgICAgICAgLyogRWRnZSBpcyB0aGUgb25seSBj YXNlIHdoZXJlIHdlIHByZXNlcnZlIHRoZSBwZW5kaW5nIGJpdCAqLworICAgICAgICBpZiAoIGly cS0+Y29uZmlnID09IFZHSUNfQ09ORklHX0VER0UgJiYgKHZhbCAmIEdJQ0hfTFJfUEVORElOR19C SVQpICkKKyAgICAgICAgeworICAgICAgICAgICAgaXJxLT5wZW5kaW5nX2xhdGNoID0gdHJ1ZTsK KworICAgICAgICAgICAgaWYgKCB2Z2ljX2lycV9pc19zZ2koaW50aWQpICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICB1MzIgY3B1aWQgPSB2YWwgJiBHSUNIX0xSX1BIWVNJRF9DUFVJ RDsKKworICAgICAgICAgICAgICAgIGNwdWlkID4+PSBHSUNIX0xSX1BIWVNJRF9DUFVJRF9TSElG VDsKKyAgICAgICAgICAgICAgICBpcnEtPnNvdXJjZSB8PSAoMSA8PCBjcHVpZCk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGlycS0+aHcgJiYgaXJxLT5jb25maWcg PT0gVkdJQ19DT05GSUdfTEVWRUwgJiYKKyAgICAgICAgICAgICh2YWwgJiBHSUNIX0xSX1BFTkRJ TkdfQklUKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlycS0+bGluZV9sZXZlbCA9IGdpY19y ZWFkX3BlbmRpbmdfc3RhdGUoaXJxLT5od2ludGlkKTsKKworICAgICAgICAgICAgaWYgKCAhaXJx LT5saW5lX2xldmVsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWNfc2V0X2FjdGl2 ZV9zdGF0ZShpcnEtPmh3aW50aWQsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaXJxLT5pcnFfbG9jaywgZmxhZ3MpOworICAgICAgICB2Z2ljX3B1 dF9pcnEodmNwdS0+ZG9tYWluLCBpcnEpOworICAgIH0KKworICAgIHZnaWNfY3B1LT51c2VkX2xy cyA9IDA7Cit9CisKKy8qCisgKiBQb3B1bGF0ZXMgdGhlIHBhcnRpY3VsYXIgTFIgd2l0aCB0aGUg c3RhdGUgb2YgYSBnaXZlbiBJUlE6CisgKiAtIGZvciBhbiBlZGdlIHNlbnNpdGl2ZSBJUlEgdGhl IHBlbmRpbmcgc3RhdGUgaXMgY2xlYXJlZCBpbiBzdHJ1Y3QgdmdpY19pcnEKKyAqIC0gZm9yIGEg bGV2ZWwgc2Vuc2l0aXZlIElSUSB0aGUgcGVuZGluZyBzdGF0ZSB2YWx1ZSBpcyB1bmNoYW5nZWQ7 CisgKiAgIGl0IGlzIGRpY3RhdGVkIGRpcmVjdGx5IGJ5IHRoZSBpbnB1dCBsZXZlbAorICoKKyAq IElmIEBpcnEgZGVzY3JpYmVzIGFuIFNHSSB3aXRoIG11bHRpcGxlIHNvdXJjZXMsIHdlIGNob29z ZSB0aGUKKyAqIGxvd2VzdC1udW1iZXJlZCBzb3VyY2UgVkNQVSBhbmQgY2xlYXIgdGhhdCBiaXQg aW4gdGhlIHNvdXJjZSBiaXRtYXAuCisgKgorICogVGhlIGlycV9sb2NrIG11c3QgYmUgaGVsZCBi eSB0aGUgY2FsbGVyLgorICovCit2b2lkIHZnaWNfdjJfcG9wdWxhdGVfbHIoc3RydWN0IHZjcHUg KnZjcHUsIHN0cnVjdCB2Z2ljX2lycSAqaXJxLCBpbnQgbHIpCit7CisgICAgdTMyIHZhbCA9IGly cS0+aW50aWQ7CisKKyAgICBpZiAoIGlycV9pc19wZW5kaW5nKGlycSkgKQorICAgIHsKKyAgICAg ICAgdmFsIHw9IEdJQ0hfTFJfUEVORElOR19CSVQ7CisKKyAgICAgICAgaWYgKCBpcnEtPmNvbmZp ZyA9PSBWR0lDX0NPTkZJR19FREdFICkKKyAgICAgICAgICAgIGlycS0+cGVuZGluZ19sYXRjaCA9 IGZhbHNlOworCisgICAgICAgIGlmICggdmdpY19pcnFfaXNfc2dpKGlycS0+aW50aWQpICkKKyAg ICAgICAgeworICAgICAgICAgICAgdTMyIHNyYyA9IGZmcyhpcnEtPnNvdXJjZSk7CisKKyAgICAg ICAgICAgIEJVR19PTighc3JjKTsKKyAgICAgICAgICAgIHZhbCB8PSAoc3JjIC0gMSkgPDwgR0lD SF9MUl9QSFlTSURfQ1BVSURfU0hJRlQ7CisgICAgICAgICAgICBpcnEtPnNvdXJjZSAmPSB+KDEg PDwgKHNyYyAtIDEpKTsKKyAgICAgICAgICAgIGlmICggaXJxLT5zb3VyY2UgKQorICAgICAgICAg ICAgICAgIGlycS0+cGVuZGluZ19sYXRjaCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBpZiAoIGlycS0+YWN0aXZlICkKKyAgICAgICAgdmFsIHw9IEdJQ0hfTFJfQUNUSVZFX0JJVDsK KworICAgIGlmICggaXJxLT5odyApCisgICAgeworICAgICAgICB2YWwgfD0gR0lDSF9MUl9IVzsK KyAgICAgICAgdmFsIHw9IGlycS0+aHdpbnRpZCA8PCBHSUNIX0xSX1BIWVNJRF9DUFVJRF9TSElG VDsKKyAgICAgICAgLyoKKyAgICAgICAgICogTmV2ZXIgc2V0IHBlbmRpbmcrYWN0aXZlIG9uIGEg SFcgaW50ZXJydXB0LCBhcyB0aGUKKyAgICAgICAgICogcGVuZGluZyBzdGF0ZSBpcyBrZXB0IGF0 IHRoZSBwaHlzaWNhbCBkaXN0cmlidXRvcgorICAgICAgICAgKiBsZXZlbC4KKyAgICAgICAgICov CisgICAgICAgIGlmICggaXJxLT5hY3RpdmUgJiYgaXJxX2lzX3BlbmRpbmcoaXJxKSApCisgICAg ICAgICAgICB2YWwgJj0gfkdJQ0hfTFJfUEVORElOR19CSVQ7CisgICAgfQorICAgIGVsc2UKKyAg ICB7CisgICAgICAgIGlmICggaXJxLT5jb25maWcgPT0gVkdJQ19DT05GSUdfTEVWRUwgKQorICAg ICAgICAgICAgdmFsIHw9IEdJQ0hfTFJfRU9JOworICAgIH0KKworICAgIC8qCisgICAgICogTGV2 ZWwtdHJpZ2dlcmVkIG1hcHBlZCBJUlFzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2Ugb25seSBvYnNl cnZlCisgICAgICogcmlzaW5nIGVkZ2VzIGFzIGlucHV0IHRvIHRoZSBWR0lDLiAgV2UgdGhlcmVm b3JlIGxvd2VyIHRoZSBsaW5lCisgICAgICogbGV2ZWwgaGVyZSwgc28gdGhhdCB3ZSBjYW4gdGFr ZSBuZXcgdmlydHVhbCBJUlFzLiAgU2VlCisgICAgICogdmdpY192Ml9mb2xkX2xyX3N0YXRlIGZv ciBtb3JlIGluZm8uCisgICAgICovCisgICAgaWYgKCBpcnEtPmh3ICYmIGlycS0+Y29uZmlnID09 IFZHSUNfQ09ORklHX0xFVkVMICYmCisgICAgICAgICh2YWwgJiBHSUNIX0xSX1BFTkRJTkdfQklU KSApCisgICAgICAgIGlycS0+bGluZV9sZXZlbCA9IGZhbHNlOworCisgICAgLyogVGhlIEdJQ3Yy IExSIG9ubHkgaG9sZHMgZml2ZSBiaXRzIG9mIHByaW9yaXR5LiAqLworICAgIHZhbCB8PSAoaXJx LT5wcmlvcml0eSA+PiAzKSA8PCBHSUNIX0xSX1BSSU9SSVRZX1NISUZUOworCisgICAgdmNwdS0+ YXJjaC52Z2ljX2NwdS52Z2ljX3YyLnZnaWNfbHJbbHJdID0gdmFsOworfQorCit2b2lkIHZnaWNf djJfY2xlYXJfbHIoc3RydWN0IHZjcHUgKnZjcHUsIGludCBscikKK3sKKyAgICB2Y3B1LT5hcmNo LnZnaWNfY3B1LnZnaWNfdjIudmdpY19scltscl0gPSAwOworfQorCitzdGF0aWMgdm9pZCBzYXZl X2xycyhzdHJ1Y3QgdmNwdSAqdmNwdSwgdm9pZCBfX2lvbWVtICpiYXNlKQoreworICAgIHN0cnVj dCB2Z2ljX3YyX2NwdV9pZiAqY3B1X2lmID0gJnZjcHUtPmFyY2gudmdpY19jcHUudmdpY192MjsK KyAgICB1NjQgdXNlZF9scnMgPSB2Y3B1LT5hcmNoLnZnaWNfY3B1LnVzZWRfbHJzOworICAgIHU2 NCBlbHJzcjsKKyAgICBpbnQgaTsKKworICAgIGVscnNyID0gcmVhZGxfcmVsYXhlZChiYXNlICsg R0lDSF9FTFJTUjApOworICAgIGlmICggdW5saWtlbHkodXNlZF9scnMgPiAzMikgKQorICAgICAg ICBlbHJzciB8PSAoKHU2NClyZWFkbF9yZWxheGVkKGJhc2UgKyBHSUNIX0VMUlNSMSkpIDw8IDMy OworCisgICAgZm9yICggaSA9IDA7IGkgPCB1c2VkX2xyczsgaSsrICkKKyAgICB7CisgICAgICAg IGlmICggZWxyc3IgJiAoMVVMIDw8IGkpICkKKyAgICAgICAgICAgIGNwdV9pZi0+dmdpY19scltp XSAmPSB+R0lDSF9MUl9TVEFURTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3B1X2lmLT52 Z2ljX2xyW2ldID0gcmVhZGxfcmVsYXhlZChiYXNlICsgR0lDSF9MUjAgKyAoaSAqIDQpKTsKKwor ICAgICAgICB3cml0ZWxfcmVsYXhlZCgwLCBiYXNlICsgR0lDSF9MUjAgKyAoaSAqIDQpKTsKKyAg ICB9Cit9CisKK3ZvaWQgdmdpY192Ml9zYXZlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KQorewor ICAgIHU2NCB1c2VkX2xycyA9IHZjcHUtPmFyY2gudmdpY19jcHUudXNlZF9scnM7CisKKyAgICBp ZiAoIHVzZWRfbHJzICkKKyAgICB7CisgICAgICAgIHNhdmVfbHJzKHZjcHUsIGdpY192Ml9od19k YXRhLmhiYXNlKTsKKyAgICAgICAgd3JpdGVsX3JlbGF4ZWQoMCwgZ2ljX3YyX2h3X2RhdGEuaGJh c2UgKyBHSUNIX0hDUik7CisgICAgfQorfQorCit2b2lkIHZnaWNfdjJfcmVzdG9yZV9zdGF0ZShz dHJ1Y3QgdmNwdSAqdmNwdSkKK3sKKyAgICBzdHJ1Y3QgdmdpY192Ml9jcHVfaWYgKmNwdV9pZiA9 ICZ2Y3B1LT5hcmNoLnZnaWNfY3B1LnZnaWNfdjI7CisgICAgdTY0IHVzZWRfbHJzID0gdmNwdS0+ YXJjaC52Z2ljX2NwdS51c2VkX2xyczsKKyAgICBpbnQgaTsKKworICAgIGlmICggdXNlZF9scnMg KQorICAgIHsKKyAgICAgICAgd3JpdGVsX3JlbGF4ZWQoY3B1X2lmLT52Z2ljX2hjciwKKyAgICAg ICAgICAgICAgICAgICAgICAgZ2ljX3YyX2h3X2RhdGEuaGJhc2UgKyBHSUNIX0hDUik7CisgICAg ICAgIGZvciAoIGkgPSAwOyBpIDwgdXNlZF9scnM7IGkrKyApCisgICAgICAgICAgICB3cml0ZWxf cmVsYXhlZChjcHVfaWYtPnZnaWNfbHJbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBn aWNfdjJfaHdfZGF0YS5oYmFzZSArIEdJQ0hfTFIwICsgKGkgKiA0KSk7CisgICAgfQorfQorCisv KgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNE IgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5k OgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmMgYi94ZW4vYXJjaC9h cm0vdmdpYy92Z2ljLmMKaW5kZXggYTFmNzcxMzBkNC4uZjRmMmEwNGE2MCAxMDA2NDQKLS0tIGEv eGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy5jCisrKyBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuYwpA QCAtNDg4LDYgKzQ4OCw3IEBAIHJldHJ5OgogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19mb2xk X2xyX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KQogeworICAgIHZnaWNfdjJfZm9sZF9scl9zdGF0 ZSh2Y3B1KTsKIH0KIAogLyogUmVxdWlyZXMgdGhlIGlycV9sb2NrIHRvIGJlIGhlbGQuICovCkBA IC00OTUsMTQgKzQ5NiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19wb3B1bGF0ZV9scihz dHJ1Y3QgdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB2Z2ljX2lycSAqaXJxLCBpbnQgbHIpCiB7CiAgICAgQVNTRVJUKHNwaW5faXNfbG9ja2Vk KCZpcnEtPmlycV9sb2NrKSk7CisKKyAgICB2Z2ljX3YyX3BvcHVsYXRlX2xyKHZjcHUsIGlycSwg bHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19jbGVhcl9scihzdHJ1Y3QgdmNwdSAq dmNwdSwgaW50IGxyKQogeworICAgIHZnaWNfdjJfY2xlYXJfbHIodmNwdSwgbHIpOwogfQogCiBz dGF0aWMgaW5saW5lIHZvaWQgdmdpY19zZXRfdW5kZXJmbG93KHN0cnVjdCB2Y3B1ICp2Y3B1KQog eworICAgIHZnaWNfdjJfc2V0X3VuZGVyZmxvdyh2Y3B1KTsKIH0KIAogLyogUmVxdWlyZXMgdGhl IGFwX2xpc3RfbG9jayB0byBiZSBoZWxkLiAqLwpAQCAtNTczLDYgKzU3OCwxMSBAQCBuZXh0Ogog ICAgICAgICB2Z2ljX2NsZWFyX2xyKHZjcHUsIGNvdW50KTsKIH0KIAorc3RhdGljIGlubGluZSB2 b2lkIHZnaWNfc2F2ZV9zdGF0ZShzdHJ1Y3QgdmNwdSAqdmNwdSkKK3sKKyAgICB2Z2ljX3YyX3Nh dmVfc3RhdGUodmNwdSk7Cit9CisKIC8qCiAgKiBnaWNfY2xlYXJfbHJzKCkgLSBVcGRhdGUgdGhl IFZHSUMgc3RhdGUgZnJvbSBoYXJkd2FyZSBhZnRlciBhIGd1ZXN0J3MgcnVuLgogICogQHZjcHU6 IHRoZSBWQ1BVLgpAQCAtNTkyLDExICs2MDIsMTggQEAgdm9pZCBnaWNfY2xlYXJfbHJzKHN0cnVj dCB2Y3B1ICp2Y3B1KQogICAgIGlmICggbGlzdF9lbXB0eSgmdmNwdS0+YXJjaC52Z2ljX2NwdS5h cF9saXN0X2hlYWQpICkKICAgICAgICAgcmV0dXJuOwogCisgICAgdmdpY19zYXZlX3N0YXRlKHZj cHUpOworCiAgICAgaWYgKCB2Z2ljX2NwdS0+dXNlZF9scnMgKQogICAgICAgICB2Z2ljX2ZvbGRf bHJfc3RhdGUodmNwdSk7CiAgICAgdmdpY19wcnVuZV9hcF9saXN0KHZjcHUpOwogfQogCitzdGF0 aWMgaW5saW5lIHZvaWQgdmdpY19yZXN0b3JlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KQorewor ICAgIHZnaWNfdjJfcmVzdG9yZV9zdGF0ZSh2Y3B1KTsKK30KKwogLyoKICAqIGdpY19pbmplY3Qo KSAtIGZsdXNoIHRoZSBlbXVsYXRpb24gc3RhdGUgaW50byB0aGUgaGFyZHdhcmUgb24gZ3Vlc3Qg ZW50cnkKICAqCkBAIC02MjUsNyArNjQyLDEwIEBAIHZvaWQgZ2ljX2luamVjdCh2b2lkKQogICAg IHNwaW5fbG9jaygmY3VycmVudC0+YXJjaC52Z2ljX2NwdS5hcF9saXN0X2xvY2spOwogICAgIHZn aWNfZmx1c2hfbHJfc3RhdGUoY3VycmVudCk7CiAgICAgc3Bpbl91bmxvY2soJmN1cnJlbnQtPmFy Y2gudmdpY19jcHUuYXBfbGlzdF9sb2NrKTsKKworICAgIHZnaWNfcmVzdG9yZV9zdGF0ZShjdXJy ZW50KTsKIH0KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuaCBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuaApp bmRleCA0N2ZjNThiODFlLi43NzFjYTZmMDQ2IDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vdmdp Yy92Z2ljLmgKKysrIGIveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy5oCkBAIC00MSw0ICs0MSwxMiBA QCBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19nZXRfaXJxX2tyZWYoc3RydWN0IHZnaWNfaXJxICpp cnEpCiAgICAgYXRvbWljX2luYygmaXJxLT5yZWZjb3VudCk7CiB9CiAKK3ZvaWQgdmdpY192Ml9m b2xkX2xyX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KTsKK3ZvaWQgdmdpY192Ml9wb3B1bGF0ZV9s cihzdHJ1Y3QgdmNwdSAqdmNwdSwgc3RydWN0IHZnaWNfaXJxICppcnEsIGludCBscik7Cit2b2lk IHZnaWNfdjJfY2xlYXJfbHIoc3RydWN0IHZjcHUgKnZjcHUsIGludCBscik7Cit2b2lkIHZnaWNf djJfc2V0X3VuZGVyZmxvdyhzdHJ1Y3QgdmNwdSAqdmNwdSk7CisKK3ZvaWQgdmdpY192Ml9zYXZl X3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KTsKK3ZvaWQgdmdpY192Ml9yZXN0b3JlX3N0YXRlKHN0 cnVjdCB2Y3B1ICp2Y3B1KTsKKwogI2VuZGlmCi0tIAoyLjE0LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn L21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs