From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Na4Pi-0004il-HB for qemu-devel@nongnu.org; Wed, 27 Jan 2010 04:42:18 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Na4Pd-0004ff-C7 for qemu-devel@nongnu.org; Wed, 27 Jan 2010 04:42:17 -0500 Received: from [199.232.76.173] (port=55521 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Na4Pd-0004fS-8j for qemu-devel@nongnu.org; Wed, 27 Jan 2010 04:42:13 -0500 Received: from mail-bw0-f212.google.com ([209.85.218.212]:59162) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Na4Pc-0000yb-Ej for qemu-devel@nongnu.org; Wed, 27 Jan 2010 04:42:13 -0500 Received: by bwz4 with SMTP id 4so4911100bwz.2 for ; Wed, 27 Jan 2010 01:42:07 -0800 (PST) MIME-Version: 1.0 Date: Wed, 27 Jan 2010 09:42:07 +0000 Message-ID: From: Stefan Hajnoczi Content-Type: multipart/mixed; boundary=0022154017a2382077047e22375d Subject: [Qemu-devel] [RFC] gPXE fw_cfg file interface support List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: gpxe Cc: qemu-devel@nongnu.org --0022154017a2382077047e22375d Content-Type: text/plain; charset=ISO-8859-1 This patch makes it possible for gPXE under QEMU/KVM to fetch files from the host using the fw_cfg file interface. This means gPXE in the guest can fetch an exposed file from the host without using networking. I believe this feature will be useful to management software so that network boot configuration can be managed alongside with the virtual machine configuration, not on a remote TFTP server. Any interest in this feature? I imagine libvirt could use this to set up iSCSI or other network boot settings. Images are fetched from the hypervisor using the fw_cfg interface provided by QEMU/KVM. The URI syntax is as follows: gPXE> imgfetch fw_cfg:genroms/static.gpxe where 'fw_cfg' is the new URI scheme this patch adds and 'genroms/static.gpxe' is the filename exported from QEMU/KVM via the fw_cfg interface. Note that the URI uses a single colon ':', not '://', since there is no hostname. Current QEMU/KVM builds can be (ab)used to expose arbitrary files like this: qemu -option-rom path/to/file [...] The file will appear as 'genroms/file'. Use the 'fw_cfg:genroms/file' URI to reference it in gPXE. The fw_cfg file interface is a recent addition to QEMU/KVM. You may need to build QEMU/KVM from source in order to get this feature. Note that this patch only adds the fw_cfg file interface mechanism, it does not automatically probe for a special file when gPXE starts. You will need to manually "chain fw_cfg:genroms/file". Any comments? Stefan --0022154017a2382077047e22375d Content-Type: text/x-diff; charset=US-ASCII; name="fw_cfg.patch" Content-Disposition: attachment; filename="fw_cfg.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4xxdj3a0 RnJvbSA1ODZiNzUwMmViZjNkY2ZlNWFiMzE1MDUyNDQ2YzZiMTBiYjI2MzdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAxNCBKYW4gMjAxMCAwODo1NTozOCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIFtm d19jZmddIFN1cHBvcnQgZmV0Y2hpbmcgZmlsZXMgZnJvbSBRRU1VIGZ3X2NmZwoKVGhpcyBwYXRj aCBhZGRzIHN1cHBvcnQgZm9yIGZldGNoaW5nIGZpbGVzIGZyb20gdGhlIFFFTVUgZndfY2ZnIGZp bGUKaW50ZXJmYWNlLCB3aGljaCBleHBvc2VzIGEgc2V0IG9mIGZpbGVzIG9uIHRoZSBob3N0IGlu dG8gdGhlIGd1ZXN0LgpWaXJ0dWFsIG1hY2hpbmUgbmV0Ym9vdCBjb25maWd1cmF0aW9uIGNhbiBi ZSBtYWludGFpbmVkIGJ5IGEgbWFuYWdlbWVudApsYXllciBvbiB0aGUgaG9zdC4gIFRoaXMgZmVh dHVyZSBtYWtlcyB2aXJ0dWFsIG1hY2hpbmUgZGVwbG95bWVudCB2aWEKZ1BYRSBtb3JlIGZsZXhp YmxlLgoKVVJJcyBhcmUgaW4gdGhlIGZvcm0gImZ3X2NmZzo8ZmlsZW5hbWU+Iiwgd2hlcmUgPGZp bGVuYW1lPiBpcyB0aGUgbmFtZQpvZiB0aGUgZmlsZSBleHBvc2VkIHZpYSBmd19jZmcuICBOb3Rl IHRoYXQgdGhlcmUgYXJlIG5vIGRvdWJsZSBzbGFzaGVzCmFmdGVyIHRoZSAiZndfY2ZnOiIuCgpT aWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQGdtYWlsLmNvbT4KLS0tCiBz cmMvYXJjaC9pMzg2L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9hcmNoL2kz ODYvZmlybXdhcmUvcWVtdS9md19jZmcuYyB8ICAzMDAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2FyY2gvaTM4Ni9pbmNsdWRlL2JpdHMvZXJyZmlsZS5oIHwgICAgMSAr CiBzcmMvY29uZmlnL2NvbmZpZy5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9jb25m aWcvZ2VuZXJhbC5oICAgICAgICAgICAgICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAz MDYgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YXJjaC9pMzg2L2Zpcm13YXJlL3FlbXUvZndfY2ZnLmMKCmRpZmYgLS1naXQgYS9zcmMvYXJjaC9p Mzg2L01ha2VmaWxlIGIvc3JjL2FyY2gvaTM4Ni9NYWtlZmlsZQppbmRleCBkZDhkYTgwLi42ZGRi ODZhIDEwMDY0NAotLS0gYS9zcmMvYXJjaC9pMzg2L01ha2VmaWxlCisrKyBiL3NyYy9hcmNoL2kz ODYvTWFrZWZpbGUKQEAgLTc1LDYgKzc1LDcgQEAgSVNPTElOVVhfQklOCT0gL3Vzci9saWIvc3lz bGludXgvaXNvbGludXguYmluCiAjCiBTUkNESVJTCQkrPSBhcmNoL2kzODYvY29yZSBhcmNoL2kz ODYvdHJhbnNpdGlvbnMgYXJjaC9pMzg2L3ByZWZpeAogU1JDRElSUwkJKz0gYXJjaC9pMzg2L2Zp cm13YXJlL3BjYmlvcworU1JDRElSUwkJKz0gYXJjaC9pMzg2L2Zpcm13YXJlL3FlbXUKIFNSQ0RJ UlMJCSs9IGFyY2gvaTM4Ni9pbWFnZQogU1JDRElSUwkJKz0gYXJjaC9pMzg2L2RyaXZlcnMKIFNS Q0RJUlMJCSs9IGFyY2gvaTM4Ni9kcml2ZXJzL25ldApkaWZmIC0tZ2l0IGEvc3JjL2FyY2gvaTM4 Ni9maXJtd2FyZS9xZW11L2Z3X2NmZy5jIGIvc3JjL2FyY2gvaTM4Ni9maXJtd2FyZS9xZW11L2Z3 X2NmZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjZlYmUKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYXJjaC9pMzg2L2Zpcm13YXJlL3FlbXUvZndfY2ZnLmMKQEAgLTAs MCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlZmFuIEhham5vY3ppIDxz dGVmYW5oYUBnbWFpbC5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUK KyAqIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAq IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFz cyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCitGSUxFX0xJQ0VOQ0UgKCBH UEwyX09SX0xBVEVSICk7CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu aD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisjaW5jbHVkZSA8 Z3B4ZS9pby5oPgorI2luY2x1ZGUgPGdweGUvdXJpLmg+CisjaW5jbHVkZSA8Z3B4ZS94ZmVyLmg+ CisjaW5jbHVkZSA8Z3B4ZS9vcGVuLmg+CisjaW5jbHVkZSA8Z3B4ZS9wcm9jZXNzLmg+CisKKy8q KiBAZmlsZQorICoKKyAqIFFFTVUgZmlybXdhcmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UKKyAq CisgKiBUaGUgUUVNVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBhbGxvd3MgYm9v dCBmaXJtd2FyZSBhY2Nlc3MgdG8KKyAqIGNvbmZpZ3VyYXRpb24ga2V5L3ZhbHVlIHBhaXJzIGlu IHRoZSBoeXBlcnZpc29yLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwYXNzCisgKiBib290IGNvbW1h bmRzIHdoZW4gc3RhcnRpbmcgYSB2aXJ0dWFsIG1hY2hpbmUuCisgKgorICovCisKKyNkZWZpbmUg RldfQ0ZHX0NUTAkJMHg1MTAJLyoqIGNvbnRyb2wgSS9PIHBvcnQgKi8KKyNkZWZpbmUgRldfQ0ZH X0RBVEEJCTB4NTExCS8qKiBkYXRhIEkvTyBwb3J0ICovCisjZGVmaW5lIEZXX0NGR19TSUdOQVRV UkUJMHgwMAkvKiogbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIEZXX0NGR19JRAkJMHgwMQkvKiog aW50ZXJmYWNlIHZlcnNpb24gKi8KKyNkZWZpbmUgRldfQ0ZHX0ZJTEVfRElSCQkweDE5CS8qKiBm aWxlIGxpc3RpbmcgKi8KKyNkZWZpbmUgRldfQ0ZHX05PX0tFWQkJMHhmZmZmCS8qKiBpbnZhbGlk IGtleSAqLworCisvKioKKyAqIEZpbGUgbWV0YWRhdGEsIHBhcnQgb2YgYSBkaXIgbGlzdGluZwor ICovCitzdHJ1Y3QgZndfY2ZnX2ZpbGUgeworCXVpbnQzMl90IHNpemU7CQkvKiogbGVuZ3RoIGlu IGJ5dGVzICovCisJdWludDE2X3Qgc2VsZWN0OwkvKioga2V5ICovCisJdWludDE2X3QgcmVzZXJ2 ZWQ7CisJY2hhciBuYW1lWzU2XTsJCS8qKiBmaWxlbmFtZSAqLworfTsKKworLyoqCisgKiBBIGZ3 X2NmZyByZXF1ZXN0CisgKgorICogUmVxdWVzdHMgY291bGQgYmUgcGVyZm9ybWVkIHN5bmNocm9u b3VzbHkgaW4gdGhlIG9wZW4oKSBmdW5jdGlvbiBidXQgdGhlCisgKiB4ZmVyIGludGVyZmFjZSBj aGFpbiBpcyBub3QgZnVsbHkgcGx1Z2dlZCBhdCB0aGF0IHBvaW50LiAgVGhlcmVmb3JlIGFuCisg KiBleHBsaWNpdCByZXF1ZXN0IHN0cnVjdCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gYSBzdGVwKCkg ZnVuY3Rpb24sIHdoaWNoCisgKiBwZXJmb3JtcyB0aGUgcmVxdWVzdCBsYXRlciB3aGVuIHRoZSBj YWxsZXJzIGhhdmUgcGx1Z2dlZCB0aGVpciB4ZmVyCisgKiBpbnRlcmZhY2VzLgorICovCitzdHJ1 Y3QgZndfY2ZnX3JlcXVlc3QgeworCS8qKiBSZWZlcmVuY2UgY291bnRlciAqLworCXN0cnVjdCBy ZWZjbnQgcmVmY250OworCS8qKiBEYXRhIHhmZXIgaW50ZXJmYWNlICovCisJc3RydWN0IHhmZXJf aW50ZXJmYWNlIHhmZXI7CisJLyoqIFVSSSBiZWluZyBmZXRjaGVkICovCisJc3RydWN0IHVyaSAq dXJpOworCS8qKiBGZXRjaCBwcm9jZXNzICovCisJc3RydWN0IHByb2Nlc3MgcHJvY2VzczsKK307 CisKKy8qKgorICogUmVhZCBhIGJ5dGVzdHJpbmcgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5CisgKgor ICogQHYga2V5CQlGV19DRkdfKiBrZXkKKyAqIEB2IGJ1ZgkJQnVmZmVyCisgKiBAdiBsZW4JCUJ1 ZmZlciBsZW5ndGggaW4gYnl0ZXMKKyAqCisgKiBJZiBrZXkgaXMgRldfQ0ZHX05PX0tFWSB0aGVu IGJ5dGVzIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjdXJyZW50IGtleS4KKyAqLworc3RhdGljIHZv aWQgZndfY2ZnX2dldF9ieXRlcyAoIHVpbnQxNl90IGtleSwgdm9pZCAqYnVmLCBzaXplX3QgbGVu ICkgeworCWNoYXIgKnA7CisKKwkvKiBTZWxlY3Qga2V5ICovCisJaWYgKCBrZXkgIT0gRldfQ0ZH X05PX0tFWSApCisJCW91dHcgKCBrZXksIEZXX0NGR19DVEwgKTsKKworCS8qIFJlYWQgdmFsdWUg Ki8KKwlmb3IgKCBwID0gYnVmOyBsZW4gPiAwOyBsZW4tLSwgcCsrICkKKwkJKnAgPSBpbmIgKCBG V19DRkdfREFUQSApOworfQorCisvKioKKyAqIFJlYWQgYSAzMi1iaXQgaW50ZWdlciBmb3IgYSBn aXZlbiBrZXkKKyAqCisgKiBAdiBrZXkJCUZXX0NGR18qIGtleQorICogQHJldCBpCQlJbnRlZ2Vy IHZhbHVlCisgKi8KK3N0YXRpYyB1aW50MzJfdCBmd19jZmdfZ2V0X2kzMiAoIHVpbnQxNl90IGtl eSApIHsKKwl1aW50MzJfdCBpOworCWZ3X2NmZ19nZXRfYnl0ZXMgKCBrZXksICZpLCBzaXplb2Yg KCBpICkgKTsKKwlyZXR1cm4gbGUzMl90b19jcHUgKCBpICk7Cit9CisKKy8qKgorICogUHJvYmUg Zm9yIHRoZSBmd19jZmcgaW50ZXJmYWNlCisgKgorICogQHJldCBwcmVzZW50CQkxIGlmIHByZXNl bnQsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZndfY2ZnX2RldGVjdCAoIHZvaWQgKSB7 CisJLyogQ2hlY2sgZm9yIGZ3X2NmZyBwcmVzZW5jZSAqLworCWNoYXIgc2lnbmF0dXJlWzRdOwor CWZ3X2NmZ19nZXRfYnl0ZXMgKCBGV19DRkdfU0lHTkFUVVJFLCBzaWduYXR1cmUsIHNpemVvZiAo IHNpZ25hdHVyZSApICk7CisJaWYgKCBtZW1jbXAgKCBzaWduYXR1cmUsICJRRU1VIiwgNCApICE9 IDAgKSB7CisJCURCRyAoICJGV19DRkcgc2lnbmF0dXJlIGNoZWNrIGZhaWxlZFxuIiApOworCQly ZXR1cm4gMDsKKwl9CisKKwkvKiBDaGVjayBpbnRlcmZhY2UgdmVyc2lvbiAqLworCWlmICggZndf Y2ZnX2dldF9pMzIgKCBGV19DRkdfSUQgKSAhPSAxICkgeworCQlEQkcgKCAiRldfQ0ZHIHVuc3Vw cG9ydGVkIHZlcnNpb25cbiIgKTsKKwkJcmV0dXJuIDA7CisJfQorCisJREJHICggIkZXX0NGRyBz dXBwb3J0IGRldGVjdGVkXG4iICk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogRmluZCB0aGUg a2V5IGZvciBhIGdpdmVuIGZpbGVuYW1lCisgKgorICogQHYgbmFtZQkJRmlsZW5hbWUKKyAqIEB2 IGZpbGUJCUZpbGUgcG9pbnRlcgorICogQHJldCByYwkJUmV0dXJuIHN0YXR1cyBjb2RlCisgKi8K K3N0YXRpYyBpbnQgZndfY2ZnX2ZpbmRfZmlsZSAoIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBm d19jZmdfZmlsZSAqZmlsZSApIHsKKwl1aW50MzJfdCBjb3VudCA9IGJlMzJfdG9fY3B1ICggZndf Y2ZnX2dldF9pMzIgKCBGV19DRkdfRklMRV9ESVIgKSApOworCURCRzIgKCAiRldfQ0ZHICVkIGZp bGVzOlxuIiwgY291bnQgKTsKKwl3aGlsZSAoIGNvdW50LS0gPiAwICkgeworCQlmd19jZmdfZ2V0 X2J5dGVzICggRldfQ0ZHX05PX0tFWSwgZmlsZSwgc2l6ZW9mICggKmZpbGUgKSApOworCQlmaWxl LT5zaXplCT0gYmUzMl90b19jcHUgKCBmaWxlLT5zaXplICk7CisJCWZpbGUtPnNlbGVjdAk9IGJl MTZfdG9fY3B1ICggZmlsZS0+c2VsZWN0ICk7CisJCURCRzIgKCAiRldfQ0ZHIFwiJXNcIiAlZCBi eXRlcyBrZXk9MHgleFxuIiwKKwkJICAgICAgIGZpbGUtPm5hbWUsIGZpbGUtPnNpemUsIGZpbGUt PnNlbGVjdCApOworCQlpZiAoIHN0cmNtcCAoIG5hbWUsIGZpbGUtPm5hbWUgKSA9PSAwICkKKwkJ CXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoqCisgKiBSZWFkIGEgZmls ZSBpbnRvIGEgdHJhbnNmZXIgaW50ZXJmYWNlCisgKgorICogQHYgZmlsZQkJRmlsZSBwb2ludGVy CisgKiBAdiB4ZmVyCQlUcmFuc2ZlciBpbnRlcmZhY2UKKyAqIEByZXQgcmMJCVJldHVybiBzdGF0 dXMgY29kZQorICovCitzdGF0aWMgaW50IGZ3X2NmZ19yZWFkX2ZpbGUgKCBzdHJ1Y3QgZndfY2Zn X2ZpbGUgKmZpbGUsIHN0cnVjdCB4ZmVyX2ludGVyZmFjZSAqeGZlciApIHsKKwlpbnQgcmMgPSAw OworCXNpemVfdCBsZW4gPSBmaWxlLT5zaXplOworCisJLyogVXNlIHNlZWsoKSB0byBub3RpZnkg cmVjaXBpZW50IG9mIGZpbGVzaXplICovCisJeGZlcl9zZWVrICggeGZlciwgbGVuLCBTRUVLX1NF VCApOworCXhmZXJfc2VlayAoIHhmZXIsIDAsIFNFRUtfU0VUICk7CisKKwkvKiBTZWxlY3QgZmls ZSBrZXkgKi8KKwlmd19jZmdfZ2V0X2J5dGVzICggZmlsZS0+c2VsZWN0LCBOVUxMLCAwICk7CisK Kwl3aGlsZSAoIHJjID09IDAgJiYgbGVuID4gMCApIHsKKwkJc2l6ZV90IHJlYWRfc2l6ZSA9IGxl biA+IDQwOTYgPyA0MDk2IDogbGVuOworCQlzdHJ1Y3QgaW9fYnVmZmVyICppb2J1ZiA9IHhmZXJf YWxsb2NfaW9iICggeGZlciwgcmVhZF9zaXplICk7CisJCWlmICggISBpb2J1ZiApCisJCQlyZXR1 cm4gLUVOT01FTTsKKworCQlmd19jZmdfZ2V0X2J5dGVzICggRldfQ0ZHX05PX0tFWSwgaW9iX3B1 dCAoIGlvYnVmLCByZWFkX3NpemUgKSwKKwkJCQkgICByZWFkX3NpemUgKTsKKwkJcmMgPSB4ZmVy X2RlbGl2ZXJfaW9iICggeGZlciwgaW9idWYgKTsKKwkJbGVuIC09IHJlYWRfc2l6ZTsKKwl9CisJ cmV0dXJuIHJjOworfQorCisvKioKKyAqIEZyZWUgZndfY2ZnIHJlcXVlc3QKKyAqCisgKiBAdiBy ZWZjbnQJCVJlZmVyZW5jZSBjb3VudGVyCisgKi8KK3N0YXRpYyB2b2lkIGZ3X2NmZ19mcmVlICgg c3RydWN0IHJlZmNudCAqcmVmY250ICkgeworCXN0cnVjdCBmd19jZmdfcmVxdWVzdCAqZndfY2Zn ID0KKwkJY29udGFpbmVyX29mICggcmVmY250LCBzdHJ1Y3QgZndfY2ZnX3JlcXVlc3QsIHJlZmNu dCApOworCisJREJHQzIgKCBmd19jZmcsICJGV19DRkcgJXAgZnJlZWRcbiIsIGZ3X2NmZyApOwor CisJdXJpX3B1dCAoIGZ3X2NmZy0+dXJpICk7CisJZnJlZSAoIGZ3X2NmZyApOworfQorCisvKioK KyAqIE1hcmsgZndfY2ZnIHJlcXVlc3QgYXMgY29tcGxldGUKKyAqCisgKiBAdiBmd19jZmcJCWZ3 X2NmZyByZXF1ZXN0CisgKi8KK3N0YXRpYyB2b2lkIGZ3X2NmZ19kb25lICggc3RydWN0IGZ3X2Nm Z19yZXF1ZXN0ICpmd19jZmcsIGludCByYyApIHsKKwkvKiBSZW1vdmUgcHJvY2VzcyAqLworCXBy b2Nlc3NfZGVsICggJmZ3X2NmZy0+cHJvY2VzcyApOworCisJLyogU2h1dCBkb3duIHhmZXIgaW50 ZXJmYWNlICovCisJeGZlcl9udWxsaWZ5ICggJmZ3X2NmZy0+eGZlciApOworCXhmZXJfY2xvc2Ug KCAmZndfY2ZnLT54ZmVyLCByYyApOworfQorCisvKioKKyAqIENsb3NlIGEgZndfY2ZnIHJlcXVl c3QKKyAqCisgKiBAdiB4ZmVyCQlUcmFuc2ZlciBpbnRlcmZhY2UKKyAqIEB2IHJjCQlSZXR1cm4g c3RhdHVzIGNvZGUKKyAqLworc3RhdGljIHZvaWQgZndfY2ZnX3hmZXJfY2xvc2UgKCBzdHJ1Y3Qg eGZlcl9pbnRlcmZhY2UgKnhmZXIsIGludCByYyApIHsKKwlzdHJ1Y3QgZndfY2ZnX3JlcXVlc3Qg KmZ3X2NmZyA9CisJCWNvbnRhaW5lcl9vZiAoIHhmZXIsIHN0cnVjdCBmd19jZmdfcmVxdWVzdCwg eGZlciApOworCisJREJHQyAoIGZ3X2NmZywgIkZXX0NGRyAlcCBjbG9zZWRcbiIsIGZ3X2NmZyAp OworCisJZndfY2ZnX2RvbmUgKCBmd19jZmcsIHJjICk7Cit9CisKKy8qKgorICogZndfY2ZnIHBy b2Nlc3MKKyAqCisgKiBAdiBwcm9jZXNzCQlQcm9jZXNzCisgKi8KK3N0YXRpYyB2b2lkIGZ3X2Nm Z19zdGVwICggc3RydWN0IHByb2Nlc3MgKnByb2Nlc3MgKSB7CisJc3RydWN0IGZ3X2NmZ19yZXF1 ZXN0ICpmd19jZmcgPQorCQljb250YWluZXJfb2YgKCBwcm9jZXNzLCBzdHJ1Y3QgZndfY2ZnX3Jl cXVlc3QsIHByb2Nlc3MgKTsKKwlzdHJ1Y3QgZndfY2ZnX2ZpbGUgZmlsZTsKKwlpbnQgcmM7CisK KwkvKiBPbmx5IGV4ZWN1dGUgb25jZSAqLworCXByb2Nlc3NfZGVsICggJmZ3X2NmZy0+cHJvY2Vz cyApOworCisJaWYgKCAoIHJjID0gZndfY2ZnX2ZpbmRfZmlsZSAoIGZ3X2NmZy0+dXJpLT5vcGFx dWUsICZmaWxlICkgKSA9PSAwICkKKwkJcmMgPSBmd19jZmdfcmVhZF9maWxlICggJmZpbGUsICZm d19jZmctPnhmZXIgKTsKKworCWZ3X2NmZ19kb25lICggZndfY2ZnLCByYyApOworfQorCisvKiog ZndfY2ZnIGRhdGEgdHJhbnNmZXIgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1 Y3QgeGZlcl9pbnRlcmZhY2Vfb3BlcmF0aW9ucyBmd19jZmdfeGZlcl9vcGVyYXRpb25zID0gewor CS5jbG9zZQkJPSBmd19jZmdfeGZlcl9jbG9zZSwKKwkudnJlZGlyZWN0CT0gaWdub3JlX3hmZXJf dnJlZGlyZWN0LAorCS53aW5kb3cJCT0gdW5saW1pdGVkX3hmZXJfd2luZG93LAorCS5hbGxvY19p b2IJPSBkZWZhdWx0X3hmZXJfYWxsb2NfaW9iLAorCS5kZWxpdmVyX2lvYgk9IHhmZXJfZGVsaXZl cl9hc19yYXcsCisJLmRlbGl2ZXJfcmF3CT0gaWdub3JlX3hmZXJfZGVsaXZlcl9yYXcsCit9Owor CisvKioKKyAqIE9wZW4gZndfY2ZnIFVSSQorICoKKyAqIEB2IHhmZXIJCURhdGEgdHJhbnNmZXIg aW50ZXJmYWNlCisgKiBAdiB1cmkJCVVSSQorICogQHJldCByYwkJUmV0dXJuIHN0YXR1cyBjb2Rl CisgKi8KK3N0YXRpYyBpbnQgZndfY2ZnX29wZW4gKCBzdHJ1Y3QgeGZlcl9pbnRlcmZhY2UgKnhm ZXIsIHN0cnVjdCB1cmkgKnVyaSApIHsKKwlzdHJ1Y3QgZndfY2ZnX3JlcXVlc3QgKmZ3X2NmZzsK KworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoICEgZndfY2ZnX2RldGVjdCgpICkKKwkJcmV0 dXJuIC1FTk9TWVM7CisJaWYgKCAhIHVyaS0+b3BhcXVlICkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwkvKiBBbGxvY2F0ZSBhbmQgcG9wdWxhdGUgc3RydWN0dXJlICovCisJZndfY2ZnID0gemFsbG9j ICggc2l6ZW9mICggKmZ3X2NmZyApICk7CisJaWYgKCAhIGZ3X2NmZyApCisJCXJldHVybiAtRU5P TUVNOworCWZ3X2NmZy0+cmVmY250LmZyZWUgPSBmd19jZmdfZnJlZTsKKwlmd19jZmctPnVyaSA9 IHVyaV9nZXQgKCB1cmkgKTsKKwl4ZmVyX2luaXQgKCAmZndfY2ZnLT54ZmVyLCAmZndfY2ZnX3hm ZXJfb3BlcmF0aW9ucywgJmZ3X2NmZy0+cmVmY250ICk7CisJcHJvY2Vzc19pbml0ICggJmZ3X2Nm Zy0+cHJvY2VzcywgZndfY2ZnX3N0ZXAsICZmd19jZmctPnJlZmNudCApOworCisJREJHQyAoIGZ3 X2NmZywgIkZXX0NGRyAlcCBmZXRjaGluZyAlc1xuIiwgZndfY2ZnLCB1cmktPm9wYXF1ZSApOwor CisJLyogQXR0YWNoIHRvIHBhcmVudCBpbnRlcmZhY2UsIG1vcnRhbGlzZSBzZWxmLCBhbmQgcmV0 dXJuICovCisJeGZlcl9wbHVnX3BsdWcgKCAmZndfY2ZnLT54ZmVyLCB4ZmVyICk7CisJcmVmX3B1 dCAoICZmd19jZmctPnJlZmNudCApOworCXJldHVybiAwOworfQorCisvKiogZndfY2ZnIFVSSSBv cGVuZXIgKi8KK3N0cnVjdCB1cmlfb3BlbmVyIGZ3X2NmZ191cmlfb3BlbmVyIF9fdXJpX29wZW5l ciA9IHsKKwkuc2NoZW1lCT0gImZ3X2NmZyIsCisJLm9wZW4JPSBmd19jZmdfb3BlbiwKK307CmRp ZmYgLS1naXQgYS9zcmMvYXJjaC9pMzg2L2luY2x1ZGUvYml0cy9lcnJmaWxlLmggYi9zcmMvYXJj aC9pMzg2L2luY2x1ZGUvYml0cy9lcnJmaWxlLmgKaW5kZXggMzJiOGEwOC4uODQ5Y2RjMCAxMDA2 NDQKLS0tIGEvc3JjL2FyY2gvaTM4Ni9pbmNsdWRlL2JpdHMvZXJyZmlsZS5oCisrKyBiL3NyYy9h cmNoL2kzODYvaW5jbHVkZS9iaXRzL2VycmZpbGUuaApAQCAtMTUsNiArMTUsNyBAQCBGSUxFX0xJ Q0VOQ0UgKCBHUEwyX09SX0xBVEVSICk7CiAjZGVmaW5lIEVSUkZJTEVfYmlvc2ludAkJKCBFUlJG SUxFX0FSQ0ggfCBFUlJGSUxFX0NPUkUgfCAweDAwMDQwMDAwICkKICNkZWZpbmUgRVJSRklMRV9p bnQxMwkJKCBFUlJGSUxFX0FSQ0ggfCBFUlJGSUxFX0NPUkUgfCAweDAwMDUwMDAwICkKICNkZWZp bmUgRVJSRklMRV9weGVwYXJlbnQJKCBFUlJGSUxFX0FSQ0ggfCBFUlJGSUxFX0NPUkUgfCAweDAw MDYwMDAwICkKKyNkZWZpbmUgRVJSRklMRV9md19jZmcJCSggRVJSRklMRV9BUkNIIHwgRVJSRklM RV9DT1JFIHwgMHgwMDA3MDAwMCApCiAKICNkZWZpbmUgRVJSRklMRV9ib290c2VjdG9yICAgICAo IEVSUkZJTEVfQVJDSCB8IEVSUkZJTEVfSU1BR0UgfCAweDAwMDAwMDAwICkKICNkZWZpbmUgRVJS RklMRV9iemltYWdlCSAgICAgICAoIEVSUkZJTEVfQVJDSCB8IEVSUkZJTEVfSU1BR0UgfCAweDAw MDEwMDAwICkKZGlmZiAtLWdpdCBhL3NyYy9jb25maWcvY29uZmlnLmMgYi9zcmMvY29uZmlnL2Nv bmZpZy5jCmluZGV4IDgyNTI0MDIuLjgwMjNlNDEgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWcvY29u ZmlnLmMKKysrIGIvc3JjL2NvbmZpZy9jb25maWcuYwpAQCAtMTI3LDYgKzEyNyw5IEBAIFJFUVVJ UkVfT0JKRUNUICggdGZ0bSApOwogI2lmZGVmIERPV05MT0FEX1BST1RPX1NMQU0KIFJFUVVJUkVf T0JKRUNUICggc2xhbSApOwogI2VuZGlmCisjaWZkZWYgRE9XTkxPQURfUFJPVE9fRldfQ0ZHCitS RVFVSVJFX09CSkVDVCAoIGZ3X2NmZyApOworI2VuZGlmCiAKIC8qCiAgKiBEcmFnIGluIGFsbCBy ZXF1ZXN0ZWQgU0FOIGJvb3QgcHJvdG9jb2xzCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL2dlbmVy YWwuaCBiL3NyYy9jb25maWcvZ2VuZXJhbC5oCmluZGV4IGY3MjFmNjEuLjNmZmY5ZWYgMTAwNjQ0 Ci0tLSBhL3NyYy9jb25maWcvZ2VuZXJhbC5oCisrKyBiL3NyYy9jb25maWcvZ2VuZXJhbC5oCkBA IC02MSw2ICs2MSw3IEBAIEZJTEVfTElDRU5DRSAoIEdQTDJfT1JfTEFURVIgKTsKICN1bmRlZglE T1dOTE9BRF9QUk9UT19URlRNCS8qIE11bHRpY2FzdCBUcml2aWFsIEZpbGUgVHJhbnNmZXIgUHJv dG9jb2wgKi8KICN1bmRlZglET1dOTE9BRF9QUk9UT19TTEFNCS8qIFNjYWxhYmxlIExvY2FsIEFy ZWEgTXVsdGljYXN0ICovCiAjdW5kZWYJRE9XTkxPQURfUFJPVE9fRlNQCS8qIEZTUD8gKi8KKyN1 bmRlZglET1dOTE9BRF9QUk9UT19GV19DRkcJLyogUUVNVSBmd19jZmcgZmlsZSBpbnRlcmZhY2Ug Ki8KIAogLyoKICAqIFNBTiBib290IHByb3RvY29scwotLSAKMS42LjUKCg== --0022154017a2382077047e22375d--