From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:44869) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFY97-0003b6-2J for qemu-devel@nongnu.org; Sun, 16 Oct 2011 17:21:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RFY94-0008Ju-TA for qemu-devel@nongnu.org; Sun, 16 Oct 2011 17:21:25 -0400 Received: from mail-yx0-f174.google.com ([209.85.213.174]:55576) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFY94-0008Jl-NB for qemu-devel@nongnu.org; Sun, 16 Oct 2011 17:21:22 -0400 Received: by yxp4 with SMTP id 4so3010206yxp.5 for ; Sun, 16 Oct 2011 14:21:22 -0700 (PDT) MIME-Version: 1.0 From: Blue Swirl Date: Sun, 16 Oct 2011 21:21:02 +0000 Message-ID: Content-Type: multipart/mixed; boundary=14dae9399c5d6e83b604af71126d Subject: [Qemu-devel] [PATCH v3 1/4] vga: make PCI devices optional List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel , Jan Kiszka --14dae9399c5d6e83b604af71126d Content-Type: text/plain; charset=UTF-8 Improve VGA selection logic, push check for device availabilty to vl.c. Make PCI VGA devices optional. Signed-off-by: Blue Swirl --- hw/cirrus_vga.c | 5 ----- hw/pc.c | 6 +----- hw/pc.h | 33 +++++++++++++++++++++++++++------ hw/pci.c | 18 ++++++++++++++++++ hw/pci.h | 4 ++++ hw/qdev.c | 5 +++++ hw/qdev.h | 1 + hw/vga-pci.c | 6 ------ vl.c | 33 +++++++++++++++++++++++++++------ 9 files changed, 83 insertions(+), 28 deletions(-) diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index c7e365b..a11444c 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -2955,11 +2955,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) return 0; } -void pci_cirrus_vga_init(PCIBus *bus) -{ - pci_create_simple(bus, -1, "cirrus-vga"); -} - static PCIDeviceInfo cirrus_vga_info = { .qdev.name = "cirrus-vga", .qdev.desc = "Cirrus CLGD 54xx VGA", diff --git a/hw/pc.c b/hw/pc.c index f0802b7..057eb9c 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1080,11 +1080,7 @@ void pc_vga_init(PCIBus *pci_bus) } } else if (vmsvga_enabled) { if (pci_bus) { - if (!pci_vmsvga_init(pci_bus)) { - fprintf(stderr, "Warning: vmware_vga not available," - " using standard VGA instead\n"); - pci_vga_init(pci_bus); - } + pci_vmsvga_init(pci_bus); } else { fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __FUNCTION__); } diff --git a/hw/pc.h b/hw/pc.h index b8ad9a3..6c951e8 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -9,6 +9,7 @@ #include "net.h" #include "memory.h" #include "ioapic.h" +#include "pci.h" /* PC-style peripherals (also used by other machines). */ @@ -203,26 +204,46 @@ enum vga_retrace_method { extern enum vga_retrace_method vga_retrace_method; -static inline int isa_vga_init(void) +static inline bool isa_vga_init(void) { ISADevice *dev; dev = isa_try_create("isa-vga"); if (!dev) { - fprintf(stderr, "Warning: isa-vga not available\n"); - return 0; + return false; } qdev_init_nofail(&dev->qdev); - return 1; + return true; +} + +/* vga-pci.c */ +static inline bool pci_vga_init(PCIBus *bus) +{ + PCIDevice *dev; + + dev = pci_try_create_simple(bus, -1, "VGA"); + if (!dev) { + return false; + } + return true; } -int pci_vga_init(PCIBus *bus); int isa_vga_mm_init(target_phys_addr_t vram_base, target_phys_addr_t ctrl_base, int it_shift, MemoryRegion *address_space); /* cirrus_vga.c */ -void pci_cirrus_vga_init(PCIBus *bus); +static inline bool pci_cirrus_vga_init(PCIBus *bus) +{ + PCIDevice *dev; + + dev = pci_try_create_simple(bus, -1, "cirrus-vga"); + if (!dev) { + return false; + } + return true; +} + void isa_cirrus_vga_init(MemoryRegion *address_space); /* ne2000.c */ diff --git a/hw/pci.c b/hw/pci.c index 749e8d8..46c01ac 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -1687,6 +1687,19 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, return dev; } +PCIDevice *pci_try_create_simple_multifunction(PCIBus *bus, int devfn, + bool multifunction, + const char *name) +{ + PCIDevice *dev = pci_try_create_multifunction(bus, devfn, multifunction, + name); + if (!dev) { + return NULL; + } + qdev_init_nofail(&dev->qdev); + return dev; +} + PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name) { return pci_create_multifunction(bus, devfn, false, name); @@ -1702,6 +1715,11 @@ PCIDevice *pci_try_create(PCIBus *bus, int devfn, const char *name) return pci_try_create_multifunction(bus, devfn, false, name); } +PCIDevice *pci_try_create_simple(PCIBus *bus, int devfn, const char *name) +{ + return pci_try_create_simple_multifunction(bus, devfn, false, name); +} + static int pci_find_space(PCIDevice *pdev, uint8_t size) { int config_size = pci_config_size(pdev); diff --git a/hw/pci.h b/hw/pci.h index 86a81c8..aa2e040 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -473,9 +473,13 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, PCIDevice *pci_try_create_multifunction(PCIBus *bus, int devfn, bool multifunction, const char *name); +PCIDevice *pci_try_create_simple_multifunction(PCIBus *bus, int devfn, + bool multifunction, + const char *name); PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name); PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name); PCIDevice *pci_try_create(PCIBus *bus, int devfn, const char *name); +PCIDevice *pci_try_create_simple(PCIBus *bus, int devfn, const char *name); static inline int pci_is_express(const PCIDevice *d) { diff --git a/hw/qdev.c b/hw/qdev.c index a223d41..dc0aa1c 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -80,6 +80,11 @@ static DeviceInfo *qdev_find_info(BusInfo *bus_info, const char *name) return NULL; } +bool qdev_exists(const char *name) +{ + return !!qdev_find_info(NULL, name); +} + static DeviceState *qdev_create_from_info(BusState *bus, DeviceInfo *info) { DeviceState *dev; diff --git a/hw/qdev.h b/hw/qdev.h index aa7ae36..a53ccb1 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -123,6 +123,7 @@ typedef struct GlobalProperty { DeviceState *qdev_create(BusState *bus, const char *name); DeviceState *qdev_try_create(BusState *bus, const char *name); +bool qdev_exists(const char *name); int qdev_device_help(QemuOpts *opts); DeviceState *qdev_device_add(QemuOpts *opts); int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT; diff --git a/hw/vga-pci.c b/hw/vga-pci.c index 14bfadb..68fddd9 100644 --- a/hw/vga-pci.c +++ b/hw/vga-pci.c @@ -70,12 +70,6 @@ static int pci_vga_initfn(PCIDevice *dev) return 0; } -int pci_vga_init(PCIBus *bus) -{ - pci_create_simple(bus, -1, "VGA"); - return 0; -} - static PCIDeviceInfo vga_info = { .qdev.name = "VGA", .qdev.size = sizeof(PCIVGAState), diff --git a/vl.c b/vl.c index 2dce3ae..15fb0d1 100644 --- a/vl.c +++ b/vl.c @@ -1654,11 +1654,26 @@ static void select_vgahw (const char *p) default_vga = 0; vga_interface_type = VGA_NONE; if (strstart(p, "std", &opts)) { - vga_interface_type = VGA_STD; + if (qdev_exists("VGA") || qdev_exists("isa-vga")) { + vga_interface_type = VGA_STD; + } else { + fprintf(stderr, "Error: standard VGA not available\n"); + exit(0); + } } else if (strstart(p, "cirrus", &opts)) { - vga_interface_type = VGA_CIRRUS; + if (qdev_exists("cirrus-vga") || qdev_exists("isa-cirrus-vga")) { + vga_interface_type = VGA_CIRRUS; + } else { + fprintf(stderr, "Error: Cirrus VGA not available\n"); + exit(0); + } } else if (strstart(p, "vmware", &opts)) { - vga_interface_type = VGA_VMWARE; + if (qdev_exists("vmware-svga")) { + vga_interface_type = VGA_VMWARE; + } else { + fprintf(stderr, "Error: VMWare SVGA not available\n"); + exit(0); + } } else if (strstart(p, "xenfb", &opts)) { vga_interface_type = VGA_XENFB; } else if (strstart(p, "qxl", &opts)) { @@ -2277,6 +2292,7 @@ int main(int argc, char **argv, char **envp) const char *loadvm = NULL; QEMUMachine *machine; const char *cpu_model; + const char *vga_model = NULL; const char *pid_file = NULL; const char *incoming = NULL; #ifdef CONFIG_VNC @@ -2694,7 +2710,7 @@ int main(int argc, char **argv, char **envp) rtc_utc = 0; break; case QEMU_OPTION_vga: - select_vgahw (optarg); + vga_model = optarg; break; case QEMU_OPTION_g: { @@ -3252,8 +3268,6 @@ int main(int argc, char **argv, char **envp) if (default_virtcon) add_device_config(DEV_VIRTCON, "vc:80Cx24C"); } - if (default_vga) - vga_interface_type = VGA_CIRRUS; socket_init(); @@ -3398,6 +3412,13 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_DEVICE); + /* must be after qdev registration but before machine init */ + if (vga_model) { + select_vgahw(vga_model); + } else if (default_vga) { + select_vgahw("cirrus"); + } + if (qemu_opts_foreach(qemu_find_opts("device"), device_help_func, NULL, 0) != 0) exit(0); -- 1.6.2.4 --14dae9399c5d6e83b604af71126d Content-Type: text/x-diff; charset=US-ASCII; name="0001-vga-make-PCI-devices-optional.patch" Content-Disposition: attachment; filename="0001-vga-make-PCI-devices-optional.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtujhba20 RnJvbSAxYTZlNGFmZmU0ZjI0MzY3Y2Q3OWNkZjhlYzY5MGQ3ZGRiNDY0MzIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlkOiA8MWE2ZTRhZmZlNGYyNDM2N2NkNzljZGY4ZWM2OTBk N2RkYjQ2NDMyMS4xMzE4ODAwMDE1LmdpdC5ibGF1d2lyYmVsQGdtYWlsLmNvbT4KRnJvbTogQmx1 ZSBTd2lybCA8YmxhdXdpcmJlbEBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjcgU2VwIDIwMTEgMTk6 MTU6NDIgKzAwMDAKU3ViamVjdDogW1BBVENIIDEvNF0gdmdhOiBtYWtlIFBDSSBkZXZpY2VzIG9w dGlvbmFsCgpJbXByb3ZlIFZHQSBzZWxlY3Rpb24gbG9naWMsIHB1c2ggY2hlY2sgZm9yIGRldmlj ZSBhdmFpbGFiaWx0eSB0byB2bC5jLgpNYWtlIFBDSSBWR0EgZGV2aWNlcyBvcHRpb25hbC4KClNp Z25lZC1vZmYtYnk6IEJsdWUgU3dpcmwgPGJsYXV3aXJiZWxAZ21haWwuY29tPgotLS0KIGh3L2Np cnJ1c192Z2EuYyB8ICAgIDUgLS0tLS0KIGh3L3BjLmMgICAgICAgICB8ICAgIDYgKy0tLS0tCiBo dy9wYy5oICAgICAgICAgfCAgIDMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQog aHcvcGNpLmMgICAgICAgIHwgICAxOCArKysrKysrKysrKysrKysrKysKIGh3L3BjaS5oICAgICAg ICB8ICAgIDQgKysrKwogaHcvcWRldi5jICAgICAgIHwgICAgNSArKysrKwogaHcvcWRldi5oICAg ICAgIHwgICAgMSArCiBody92Z2EtcGNpLmMgICAgfCAgICA2IC0tLS0tLQogdmwuYyAgICAgICAg ICAgIHwgICAzMyArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDkgZmlsZXMgY2hh bmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaHcv Y2lycnVzX3ZnYS5jIGIvaHcvY2lycnVzX3ZnYS5jCmluZGV4IGM3ZTM2NWIuLmExMTQ0NGMgMTAw NjQ0Ci0tLSBhL2h3L2NpcnJ1c192Z2EuYworKysgYi9ody9jaXJydXNfdmdhLmMKQEAgLTI5NTUs MTEgKzI5NTUsNiBAQCBzdGF0aWMgaW50IHBjaV9jaXJydXNfdmdhX2luaXRmbihQQ0lEZXZpY2Ug KmRldikKICAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgcGNpX2NpcnJ1c192Z2FfaW5pdChQQ0lC dXMgKmJ1cykKLXsKLSAgICBwY2lfY3JlYXRlX3NpbXBsZShidXMsIC0xLCAiY2lycnVzLXZnYSIp OwotfQotCiBzdGF0aWMgUENJRGV2aWNlSW5mbyBjaXJydXNfdmdhX2luZm8gPSB7CiAgICAgLnFk ZXYubmFtZSAgICA9ICJjaXJydXMtdmdhIiwKICAgICAucWRldi5kZXNjICAgID0gIkNpcnJ1cyBD TEdEIDU0eHggVkdBIiwKZGlmZiAtLWdpdCBhL2h3L3BjLmMgYi9ody9wYy5jCmluZGV4IGYwODAy YjcuLjA1N2ViOWMgMTAwNjQ0Ci0tLSBhL2h3L3BjLmMKKysrIGIvaHcvcGMuYwpAQCAtMTA4MCwx MSArMTA4MCw3IEBAIHZvaWQgcGNfdmdhX2luaXQoUENJQnVzICpwY2lfYnVzKQogICAgICAgICB9 CiAgICAgfSBlbHNlIGlmICh2bXN2Z2FfZW5hYmxlZCkgewogICAgICAgICBpZiAocGNpX2J1cykg ewotICAgICAgICAgICAgaWYgKCFwY2lfdm1zdmdhX2luaXQocGNpX2J1cykpIHsKLSAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IHZtd2FyZV92Z2Egbm90IGF2YWlsYWJs ZSwiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIHN0YW5kYXJkIFZHQSBpbnN0ZWFk XG4iKTsKLSAgICAgICAgICAgICAgICBwY2lfdmdhX2luaXQocGNpX2J1cyk7Ci0gICAgICAgICAg ICB9CisgICAgICAgICAgICBwY2lfdm1zdmdhX2luaXQocGNpX2J1cyk7CiAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB2bXdhcmVfdmdhOiBubyBQQ0kg YnVzXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ody9wYy5oIGIv aHcvcGMuaAppbmRleCBiOGFkOWEzLi42Yzk1MWU4IDEwMDY0NAotLS0gYS9ody9wYy5oCisrKyBi L2h3L3BjLmgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAibmV0LmgiCiAjaW5jbHVkZSAibWVt b3J5LmgiCiAjaW5jbHVkZSAiaW9hcGljLmgiCisjaW5jbHVkZSAicGNpLmgiCiAKIC8qIFBDLXN0 eWxlIHBlcmlwaGVyYWxzIChhbHNvIHVzZWQgYnkgb3RoZXIgbWFjaGluZXMpLiAgKi8KIApAQCAt MjAzLDI2ICsyMDQsNDYgQEAgZW51bSB2Z2FfcmV0cmFjZV9tZXRob2QgewogCiBleHRlcm4gZW51 bSB2Z2FfcmV0cmFjZV9tZXRob2QgdmdhX3JldHJhY2VfbWV0aG9kOwogCi1zdGF0aWMgaW5saW5l IGludCBpc2FfdmdhX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc2FfdmdhX2luaXQo dm9pZCkKIHsKICAgICBJU0FEZXZpY2UgKmRldjsKIAogICAgIGRldiA9IGlzYV90cnlfY3JlYXRl KCJpc2EtdmdhIik7CiAgICAgaWYgKCFkZXYpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJX YXJuaW5nOiBpc2EtdmdhIG5vdCBhdmFpbGFibGVcbiIpOwotICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBxZGV2X2luaXRfbm9mYWlsKCZkZXYtPnFk ZXYpOwotICAgIHJldHVybiAxOworICAgIHJldHVybiB0cnVlOworfQorCisvKiB2Z2EtcGNpLmMg Ki8KK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfdmdhX2luaXQoUENJQnVzICpidXMpCit7CisgICAg UENJRGV2aWNlICpkZXY7CisKKyAgICBkZXYgPSBwY2lfdHJ5X2NyZWF0ZV9zaW1wbGUoYnVzLCAt MSwgIlZHQSIpOworICAgIGlmICghZGV2KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9 CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBwY2lfdmdhX2luaXQoUENJQnVzICpidXMpOwog aW50IGlzYV92Z2FfbW1faW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgdnJhbV9iYXNlLAogICAgICAg ICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3QgY3RybF9iYXNlLCBpbnQgaXRfc2hpZnQs CiAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqYWRkcmVzc19zcGFjZSk7CiAKIC8q IGNpcnJ1c192Z2EuYyAqLwotdm9pZCBwY2lfY2lycnVzX3ZnYV9pbml0KFBDSUJ1cyAqYnVzKTsK K3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfY2lycnVzX3ZnYV9pbml0KFBDSUJ1cyAqYnVzKQorewor ICAgIFBDSURldmljZSAqZGV2OworCisgICAgZGV2ID0gcGNpX3RyeV9jcmVhdGVfc2ltcGxlKGJ1 cywgLTEsICJjaXJydXMtdmdhIik7CisgICAgaWYgKCFkZXYpIHsKKyAgICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBpc2FfY2lycnVzX3ZnYV9p bml0KE1lbW9yeVJlZ2lvbiAqYWRkcmVzc19zcGFjZSk7CiAKIC8qIG5lMjAwMC5jICovCmRpZmYg LS1naXQgYS9ody9wY2kuYyBiL2h3L3BjaS5jCmluZGV4IDc0OWU4ZDguLjQ2YzAxYWMgMTAwNjQ0 Ci0tLSBhL2h3L3BjaS5jCisrKyBiL2h3L3BjaS5jCkBAIC0xNjg3LDYgKzE2ODcsMTkgQEAgUENJ RGV2aWNlICpwY2lfY3JlYXRlX3NpbXBsZV9tdWx0aWZ1bmN0aW9uKFBDSUJ1cyAqYnVzLCBpbnQg ZGV2Zm4sCiAgICAgcmV0dXJuIGRldjsKIH0KIAorUENJRGV2aWNlICpwY2lfdHJ5X2NyZWF0ZV9z aW1wbGVfbXVsdGlmdW5jdGlvbihQQ0lCdXMgKmJ1cywgaW50IGRldmZuLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpZnVuY3Rpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUpCit7CisgICAgUENJRGV2aWNlICpkZXYgPSBwY2lfdHJ5X2NyZWF0ZV9tdWx0aWZ1bmN0 aW9uKGJ1cywgZGV2Zm4sIG11bHRpZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgIGlmICghZGV2KSB7CisgICAgICAg IHJldHVybiBOVUxMOworICAgIH0KKyAgICBxZGV2X2luaXRfbm9mYWlsKCZkZXYtPnFkZXYpOwor ICAgIHJldHVybiBkZXY7Cit9CisKIFBDSURldmljZSAqcGNpX2NyZWF0ZShQQ0lCdXMgKmJ1cywg aW50IGRldmZuLCBjb25zdCBjaGFyICpuYW1lKQogewogICAgIHJldHVybiBwY2lfY3JlYXRlX211 bHRpZnVuY3Rpb24oYnVzLCBkZXZmbiwgZmFsc2UsIG5hbWUpOwpAQCAtMTcwMiw2ICsxNzE1LDEx IEBAIFBDSURldmljZSAqcGNpX3RyeV9jcmVhdGUoUENJQnVzICpidXMsIGludCBkZXZmbiwgY29u c3QgY2hhciAqbmFtZSkKICAgICByZXR1cm4gcGNpX3RyeV9jcmVhdGVfbXVsdGlmdW5jdGlvbihi dXMsIGRldmZuLCBmYWxzZSwgbmFtZSk7CiB9CiAKK1BDSURldmljZSAqcGNpX3RyeV9jcmVhdGVf c2ltcGxlKFBDSUJ1cyAqYnVzLCBpbnQgZGV2Zm4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAg cmV0dXJuIHBjaV90cnlfY3JlYXRlX3NpbXBsZV9tdWx0aWZ1bmN0aW9uKGJ1cywgZGV2Zm4sIGZh bHNlLCBuYW1lKTsKK30KKwogc3RhdGljIGludCBwY2lfZmluZF9zcGFjZShQQ0lEZXZpY2UgKnBk ZXYsIHVpbnQ4X3Qgc2l6ZSkKIHsKICAgICBpbnQgY29uZmlnX3NpemUgPSBwY2lfY29uZmlnX3Np emUocGRldik7CmRpZmYgLS1naXQgYS9ody9wY2kuaCBiL2h3L3BjaS5oCmluZGV4IDg2YTgxYzgu LmFhMmUwNDAgMTAwNjQ0Ci0tLSBhL2h3L3BjaS5oCisrKyBiL2h3L3BjaS5oCkBAIC00NzMsOSAr NDczLDEzIEBAIFBDSURldmljZSAqcGNpX2NyZWF0ZV9zaW1wbGVfbXVsdGlmdW5jdGlvbihQQ0lC dXMgKmJ1cywgaW50IGRldmZuLAogUENJRGV2aWNlICpwY2lfdHJ5X2NyZWF0ZV9tdWx0aWZ1bmN0 aW9uKFBDSUJ1cyAqYnVzLCBpbnQgZGV2Zm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBtdWx0aWZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworUENJRGV2aWNlICpwY2lfdHJ5X2Ny ZWF0ZV9zaW1wbGVfbXVsdGlmdW5jdGlvbihQQ0lCdXMgKmJ1cywgaW50IGRldmZuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpZnVuY3Rp b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUpOwogUENJRGV2aWNlICpwY2lfY3JlYXRlKFBDSUJ1cyAqYnVzLCBpbnQgZGV2 Zm4sIGNvbnN0IGNoYXIgKm5hbWUpOwogUENJRGV2aWNlICpwY2lfY3JlYXRlX3NpbXBsZShQQ0lC dXMgKmJ1cywgaW50IGRldmZuLCBjb25zdCBjaGFyICpuYW1lKTsKIFBDSURldmljZSAqcGNpX3Ry eV9jcmVhdGUoUENJQnVzICpidXMsIGludCBkZXZmbiwgY29uc3QgY2hhciAqbmFtZSk7CitQQ0lE ZXZpY2UgKnBjaV90cnlfY3JlYXRlX3NpbXBsZShQQ0lCdXMgKmJ1cywgaW50IGRldmZuLCBjb25z dCBjaGFyICpuYW1lKTsKIAogc3RhdGljIGlubGluZSBpbnQgcGNpX2lzX2V4cHJlc3MoY29uc3Qg UENJRGV2aWNlICpkKQogewpkaWZmIC0tZ2l0IGEvaHcvcWRldi5jIGIvaHcvcWRldi5jCmluZGV4 IGEyMjNkNDEuLmRjMGFhMWMgMTAwNjQ0Ci0tLSBhL2h3L3FkZXYuYworKysgYi9ody9xZGV2LmMK QEAgLTgwLDYgKzgwLDExIEBAIHN0YXRpYyBEZXZpY2VJbmZvICpxZGV2X2ZpbmRfaW5mbyhCdXNJ bmZvICpidXNfaW5mbywgY29uc3QgY2hhciAqbmFtZSkKICAgICByZXR1cm4gTlVMTDsKIH0KIAor Ym9vbCBxZGV2X2V4aXN0cyhjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJldHVybiAhIXFkZXZf ZmluZF9pbmZvKE5VTEwsIG5hbWUpOworfQorCiBzdGF0aWMgRGV2aWNlU3RhdGUgKnFkZXZfY3Jl YXRlX2Zyb21faW5mbyhCdXNTdGF0ZSAqYnVzLCBEZXZpY2VJbmZvICppbmZvKQogewogICAgIERl dmljZVN0YXRlICpkZXY7CmRpZmYgLS1naXQgYS9ody9xZGV2LmggYi9ody9xZGV2LmgKaW5kZXgg YWE3YWUzNi4uYTUzY2NiMSAxMDA2NDQKLS0tIGEvaHcvcWRldi5oCisrKyBiL2h3L3FkZXYuaApA QCAtMTIzLDYgKzEyMyw3IEBAIHR5cGVkZWYgc3RydWN0IEdsb2JhbFByb3BlcnR5IHsKIAogRGV2 aWNlU3RhdGUgKnFkZXZfY3JlYXRlKEJ1c1N0YXRlICpidXMsIGNvbnN0IGNoYXIgKm5hbWUpOwog RGV2aWNlU3RhdGUgKnFkZXZfdHJ5X2NyZWF0ZShCdXNTdGF0ZSAqYnVzLCBjb25zdCBjaGFyICpu YW1lKTsKK2Jvb2wgcWRldl9leGlzdHMoY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgcWRldl9kZXZp Y2VfaGVscChRZW11T3B0cyAqb3B0cyk7CiBEZXZpY2VTdGF0ZSAqcWRldl9kZXZpY2VfYWRkKFFl bXVPcHRzICpvcHRzKTsKIGludCBxZGV2X2luaXQoRGV2aWNlU3RhdGUgKmRldikgUUVNVV9XQVJO X1VOVVNFRF9SRVNVTFQ7CmRpZmYgLS1naXQgYS9ody92Z2EtcGNpLmMgYi9ody92Z2EtcGNpLmMK aW5kZXggMTRiZmFkYi4uNjhmZGRkOSAxMDA2NDQKLS0tIGEvaHcvdmdhLXBjaS5jCisrKyBiL2h3 L3ZnYS1wY2kuYwpAQCAtNzAsMTIgKzcwLDYgQEAgc3RhdGljIGludCBwY2lfdmdhX2luaXRmbihQ Q0lEZXZpY2UgKmRldikKICAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBwY2lfdmdhX2luaXQoUENJ QnVzICpidXMpCi17Ci0gICAgcGNpX2NyZWF0ZV9zaW1wbGUoYnVzLCAtMSwgIlZHQSIpOwotICAg IHJldHVybiAwOwotfQotCiBzdGF0aWMgUENJRGV2aWNlSW5mbyB2Z2FfaW5mbyA9IHsKICAgICAu cWRldi5uYW1lICAgID0gIlZHQSIsCiAgICAgLnFkZXYuc2l6ZSAgICA9IHNpemVvZihQQ0lWR0FT dGF0ZSksCmRpZmYgLS1naXQgYS92bC5jIGIvdmwuYwppbmRleCAyZGNlM2FlLi4xNWZiMGQxIDEw MDY0NAotLS0gYS92bC5jCisrKyBiL3ZsLmMKQEAgLTE2NTQsMTEgKzE2NTQsMjYgQEAgc3RhdGlj IHZvaWQgc2VsZWN0X3ZnYWh3IChjb25zdCBjaGFyICpwKQogICAgIGRlZmF1bHRfdmdhID0gMDsK ICAgICB2Z2FfaW50ZXJmYWNlX3R5cGUgPSBWR0FfTk9ORTsKICAgICBpZiAoc3Ryc3RhcnQocCwg InN0ZCIsICZvcHRzKSkgewotICAgICAgICB2Z2FfaW50ZXJmYWNlX3R5cGUgPSBWR0FfU1REOwor ICAgICAgICBpZiAocWRldl9leGlzdHMoIlZHQSIpIHx8IHFkZXZfZXhpc3RzKCJpc2EtdmdhIikp IHsKKyAgICAgICAgICAgIHZnYV9pbnRlcmZhY2VfdHlwZSA9IFZHQV9TVEQ7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBzdGFuZGFyZCBWR0Eg bm90IGF2YWlsYWJsZVxuIik7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CiAgICAg fSBlbHNlIGlmIChzdHJzdGFydChwLCAiY2lycnVzIiwgJm9wdHMpKSB7Ci0gICAgICAgIHZnYV9p bnRlcmZhY2VfdHlwZSA9IFZHQV9DSVJSVVM7CisgICAgICAgIGlmIChxZGV2X2V4aXN0cygiY2ly cnVzLXZnYSIpIHx8IHFkZXZfZXhpc3RzKCJpc2EtY2lycnVzLXZnYSIpKSB7CisgICAgICAgICAg ICB2Z2FfaW50ZXJmYWNlX3R5cGUgPSBWR0FfQ0lSUlVTOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ2lycnVzIFZHQSBub3QgYXZhaWxhYmxl XG4iKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHN0 cnN0YXJ0KHAsICJ2bXdhcmUiLCAmb3B0cykpIHsKLSAgICAgICAgdmdhX2ludGVyZmFjZV90eXBl ID0gVkdBX1ZNV0FSRTsKKyAgICAgICAgaWYgKHFkZXZfZXhpc3RzKCJ2bXdhcmUtc3ZnYSIpKSB7 CisgICAgICAgICAgICB2Z2FfaW50ZXJmYWNlX3R5cGUgPSBWR0FfVk1XQVJFOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogVk1XYXJlIFNWR0Eg bm90IGF2YWlsYWJsZVxuIik7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CiAgICAg fSBlbHNlIGlmIChzdHJzdGFydChwLCAieGVuZmIiLCAmb3B0cykpIHsKICAgICAgICAgdmdhX2lu dGVyZmFjZV90eXBlID0gVkdBX1hFTkZCOwogICAgIH0gZWxzZSBpZiAoc3Ryc3RhcnQocCwgInF4 bCIsICZvcHRzKSkgewpAQCAtMjI3Nyw2ICsyMjkyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2LCBjaGFyICoqZW52cCkKICAgICBjb25zdCBjaGFyICpsb2Fkdm0gPSBOVUxMOwog ICAgIFFFTVVNYWNoaW5lICptYWNoaW5lOwogICAgIGNvbnN0IGNoYXIgKmNwdV9tb2RlbDsKKyAg ICBjb25zdCBjaGFyICp2Z2FfbW9kZWwgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKnBpZF9maWxl ID0gTlVMTDsKICAgICBjb25zdCBjaGFyICppbmNvbWluZyA9IE5VTEw7CiAjaWZkZWYgQ09ORklH X1ZOQwpAQCAtMjY5NCw3ICsyNzEwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 LCBjaGFyICoqZW52cCkKICAgICAgICAgICAgICAgICBydGNfdXRjID0gMDsKICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fdmdhOgotICAgICAgICAg ICAgICAgIHNlbGVjdF92Z2FodyAob3B0YXJnKTsKKyAgICAgICAgICAgICAgICB2Z2FfbW9kZWwg PSBvcHRhcmc7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFFFTVVf T1BUSU9OX2c6CiAgICAgICAgICAgICAgICAgewpAQCAtMzI1Miw4ICszMjY4LDYgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCkKICAgICAgICAgaWYgKGRlZmF1 bHRfdmlydGNvbikKICAgICAgICAgICAgIGFkZF9kZXZpY2VfY29uZmlnKERFVl9WSVJUQ09OLCAi dmM6ODBDeDI0QyIpOwogICAgIH0KLSAgICBpZiAoZGVmYXVsdF92Z2EpCi0gICAgICAgIHZnYV9p bnRlcmZhY2VfdHlwZSA9IFZHQV9DSVJSVVM7CiAKICAgICBzb2NrZXRfaW5pdCgpOwogCkBAIC0z Mzk4LDYgKzM0MTIsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoq ZW52cCkKIAogICAgIG1vZHVsZV9jYWxsX2luaXQoTU9EVUxFX0lOSVRfREVWSUNFKTsKIAorICAg IC8qIG11c3QgYmUgYWZ0ZXIgcWRldiByZWdpc3RyYXRpb24gYnV0IGJlZm9yZSBtYWNoaW5lIGlu aXQgKi8KKyAgICBpZiAodmdhX21vZGVsKSB7CisgICAgICAgIHNlbGVjdF92Z2Fodyh2Z2FfbW9k ZWwpOworICAgIH0gZWxzZSBpZiAoZGVmYXVsdF92Z2EpIHsKKyAgICAgICAgc2VsZWN0X3ZnYWh3 KCJjaXJydXMiKTsKKyAgICB9CisKICAgICBpZiAocWVtdV9vcHRzX2ZvcmVhY2gocWVtdV9maW5k X29wdHMoImRldmljZSIpLCBkZXZpY2VfaGVscF9mdW5jLCBOVUxMLCAwKSAhPSAwKQogICAgICAg ICBleGl0KDApOwogCi0tIAoxLjcuMi41Cgo= --14dae9399c5d6e83b604af71126d--