From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54114) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fXQqX-0001VQ-UO for qemu-devel@nongnu.org; Mon, 25 Jun 2018 08:43:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fXQqU-0007lH-8y for qemu-devel@nongnu.org; Mon, 25 Jun 2018 08:43:53 -0400 Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Date: Mon, 25 Jun 2018 09:42:06 -0300 Message-Id: <20180625124238.25339-15-f4bug@amsat.org> In-Reply-To: <20180625124238.25339-1-f4bug@amsat.org> References: <20180625124238.25339-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH v5 14/46] hw/display: Use the IEC binary prefix definitions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Thomas Huth , Stefan Weil Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, qemu-trivial@nongnu.org, Gerd Hoffmann , "Michael S. Tsirkin" , Stefano Stabellini , Anthony Perard , Alistair Francis , "Edgar E. Iglesias" , "open list:X86" , "open list:Xilinx ZynqMP" It eases code review, unit is explicit. Patch generated using: $ git grep -E '(1024|2048|4096|8192|(<<|>>).?(10|20|30))' hw/ include/hw/ and modified manually. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Gerd Hoffmann Reviewed-by: Alistair Francis --- include/hw/display/xlnx_dp.h | 5 +++-- hw/display/bochs-display.c | 9 +++++---- hw/display/cirrus_vga.c | 10 +++++----- hw/display/g364fb.c | 4 ++-- hw/display/qxl.c | 30 ++++++++++++++---------------- hw/display/vga-isa-mm.c | 5 +++-- hw/display/vga.c | 5 +++-- hw/display/virtio-gpu.c | 4 ++-- hw/display/vmware_vga.c | 3 ++- hw/display/xenfb.c | 3 ++- 10 files changed, 41 insertions(+), 37 deletions(-) diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h index ee046a5fac..26b759cd44 100644 --- a/include/hw/display/xlnx_dp.h +++ b/include/hw/display/xlnx_dp.h @@ -29,14 +29,15 @@ #include "hw/display/dpcd.h" #include "hw/i2c/i2c-ddc.h" #include "qemu/fifo8.h" +#include "qemu/units.h" #include "hw/dma/xlnx_dpdma.h" #include "audio/audio.h" #ifndef XLNX_DP_H #define XLNX_DP_H -#define AUD_CHBUF_MAX_DEPTH 32768 -#define MAX_QEMU_BUFFER_SIZE 4096 +#define AUD_CHBUF_MAX_DEPTH (32 * KiB) +#define MAX_QEMU_BUFFER_SIZE (4 * KiB) #define DP_CORE_REG_ARRAY_SIZE (0x3AF >> 2) #define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2) diff --git a/hw/display/bochs-display.c b/hw/display/bochs-display.c index 1187d77576..5e0c1f1914 100644 --- a/hw/display/bochs-display.c +++ b/hw/display/bochs-display.c @@ -5,6 +5,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "hw/hw.h" #include "hw/pci/pci.h" #include "hw/display/bochs-vbe.h" @@ -70,7 +71,7 @@ static uint64_t bochs_display_vbe_read(void *ptr, hwaddr addr, case VBE_DISPI_INDEX_ID: return VBE_DISPI_ID5; case VBE_DISPI_INDEX_VIDEO_MEMORY_64K: - return s->vgamem / (64 * 1024); + return s->vgamem / (64 * KiB); } if (index >= ARRAY_SIZE(s->vbe_regs)) { @@ -258,10 +259,10 @@ static void bochs_display_realize(PCIDevice *dev, Error **errp) s->con = graphic_console_init(DEVICE(dev), 0, &bochs_display_gfx_ops, s); - if (s->vgamem < (4 * 1024 * 1024)) { + if (s->vgamem < 4 * MiB) { error_setg(errp, "bochs-display: video memory too small"); } - if (s->vgamem > (256 * 1024 * 1024)) { + if (s->vgamem > 256 * MiB) { error_setg(errp, "bochs-display: video memory too big"); } s->vgamem = pow2ceil(s->vgamem); @@ -323,7 +324,7 @@ static void bochs_display_exit(PCIDevice *dev) } static Property bochs_display_properties[] = { - DEFINE_PROP_SIZE("vgamem", BochsDisplayState, vgamem, 16 * 1024 * 1024), + DEFINE_PROP_SIZE("vgamem", BochsDisplayState, vgamem, 16 * MiB), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c index 138ae961b9..5e44f00f3f 100644 --- a/hw/display/cirrus_vga.c +++ b/hw/display/cirrus_vga.c @@ -27,6 +27,7 @@ * available at http://home.worldonline.dk/~finth/ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "qapi/error.h" #include "trace.h" #include "hw/hw.h" @@ -2218,7 +2219,7 @@ static inline void cirrus_cursor_compute_yrange(CirrusVGAState *s) uint32_t content; int y, y_min, y_max; - src = s->vga.vram_ptr + s->real_vram_size - 16 * 1024; + src = s->vga.vram_ptr + s->real_vram_size - 16 * KiB; if (s->vga.sr[0x12] & CIRRUS_CURSOR_LARGE) { src += (s->vga.sr[0x13] & 0x3c) * 256; y_min = 64; @@ -2347,7 +2348,7 @@ static void cirrus_cursor_draw_line(VGACommonState *s1, uint8_t *d1, int scr_y) return; } - src = s->vga.vram_ptr + s->real_vram_size - 16 * 1024; + src = s->vga.vram_ptr + s->real_vram_size - 16 * KiB; if (s->vga.sr[0x12] & CIRRUS_CURSOR_LARGE) { src += (s->vga.sr[0x13] & 0x3c) * 256; src += (scr_y - s->vga.hw_cursor_y) * 16; @@ -2995,8 +2996,7 @@ static void cirrus_init_common(CirrusVGAState *s, Object *owner, /* I/O handler for LFB */ memory_region_init_io(&s->cirrus_linear_io, owner, &cirrus_linear_io_ops, s, - "cirrus-linear-io", s->vga.vram_size_mb - * 1024 * 1024); + "cirrus-linear-io", s->vga.vram_size_mb * MiB); memory_region_set_flush_coalesced(&s->cirrus_linear_io); /* I/O handler for LFB */ @@ -3013,7 +3013,7 @@ static void cirrus_init_common(CirrusVGAState *s, Object *owner, memory_region_set_flush_coalesced(&s->cirrus_mmio_io); s->real_vram_size = - (s->device_id == CIRRUS_ID_CLGD5446) ? 4096 * 1024 : 2048 * 1024; + (s->device_id == CIRRUS_ID_CLGD5446) ? 4 * MiB : 2 * MiB; /* XXX: s->vga.vram_size must be a power of two */ s->cirrus_addr_mask = s->real_vram_size - 1; diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 3d75394e77..fbc2b2422d 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "hw/hw.h" #include "qemu/error-report.h" #include "ui/console.h" @@ -510,8 +511,7 @@ static void g364fb_sysbus_reset(DeviceState *d) } static Property g364fb_sysbus_properties[] = { - DEFINE_PROP_UINT32("vram_size", G364SysBusState, g364.vram_size, - 8 * 1024 * 1024), + DEFINE_PROP_UINT32("vram_size", G364SysBusState, g364.vram_size, 8 * MiB), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/display/qxl.c b/hw/display/qxl.c index a71714ccb4..b09a03997a 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -19,6 +19,7 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include #include "qapi/error.h" @@ -2012,11 +2013,11 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) if (qxl->vgamem_size_mb > 256) { qxl->vgamem_size_mb = 256; } - qxl->vgamem_size = qxl->vgamem_size_mb * 1024 * 1024; + qxl->vgamem_size = qxl->vgamem_size_mb * MiB; /* vga ram (bar 0, total) */ if (qxl->ram_size_mb != -1) { - qxl->vga.vram_size = qxl->ram_size_mb * 1024 * 1024; + qxl->vga.vram_size = qxl->ram_size_mb * MiB; } if (qxl->vga.vram_size < qxl->vgamem_size * 2) { qxl->vga.vram_size = qxl->vgamem_size * 2; @@ -2024,7 +2025,7 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) /* vram32 (surfaces, 32bit, bar 1) */ if (qxl->vram32_size_mb != -1) { - qxl->vram32_size = qxl->vram32_size_mb * 1024 * 1024; + qxl->vram32_size = qxl->vram32_size_mb * MiB; } if (qxl->vram32_size < 4096) { qxl->vram32_size = 4096; @@ -2032,7 +2033,7 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) /* vram (surfaces, 64bit, bar 4+5) */ if (qxl->vram_size_mb != -1) { - qxl->vram_size = (uint64_t)qxl->vram_size_mb * 1024 * 1024; + qxl->vram_size = (uint64_t)qxl->vram_size_mb * MiB; } if (qxl->vram_size < qxl->vram32_size) { qxl->vram_size = qxl->vram32_size; @@ -2134,13 +2135,12 @@ static void qxl_realize_common(PCIQXLDevice *qxl, Error **errp) } /* print pci bar details */ - dprint(qxl, 1, "ram/%s: %d MB [region 0]\n", - qxl->id == 0 ? "pri" : "sec", - qxl->vga.vram_size / (1024*1024)); - dprint(qxl, 1, "vram/32: %" PRIx64 "d MB [region 1]\n", - qxl->vram32_size / (1024*1024)); - dprint(qxl, 1, "vram/64: %" PRIx64 "d MB %s\n", - qxl->vram_size / (1024*1024), + dprint(qxl, 1, "ram/%s: %" PRId64 " MB [region 0]\n", + qxl->id == 0 ? "pri" : "sec", qxl->vga.vram_size / MiB); + dprint(qxl, 1, "vram/32: %" PRIx64 " MB [region 1]\n", + qxl->vram32_size / MiB); + dprint(qxl, 1, "vram/64: %" PRIx64 " MB %s\n", + qxl->vram_size / MiB, qxl->vram32_size < qxl->vram_size ? "[region 4]" : "[unmapped]"); qxl->ssd.qxl.base.sif = &qxl_interface.base; @@ -2167,7 +2167,7 @@ static void qxl_realize_primary(PCIDevice *dev, Error **errp) qxl->id = 0; qxl_init_ramsize(qxl); vga->vbe_size = qxl->vgamem_size; - vga->vram_size_mb = qxl->vga.vram_size >> 20; + vga->vram_size_mb = qxl->vga.vram_size / MiB; vga_common_init(vga, OBJECT(dev), true); vga_init(vga, OBJECT(dev), pci_address_space(dev), pci_address_space_io(dev), false); @@ -2391,10 +2391,8 @@ static VMStateDescription qxl_vmstate = { }; static Property qxl_properties[] = { - DEFINE_PROP_UINT32("ram_size", PCIQXLDevice, vga.vram_size, - 64 * 1024 * 1024), - DEFINE_PROP_UINT64("vram_size", PCIQXLDevice, vram32_size, - 64 * 1024 * 1024), + DEFINE_PROP_UINT32("ram_size", PCIQXLDevice, vga.vram_size, 64 * MiB), + DEFINE_PROP_UINT64("vram_size", PCIQXLDevice, vram32_size, 64 * MiB), DEFINE_PROP_UINT32("revision", PCIQXLDevice, revision, QXL_DEFAULT_REVISION), DEFINE_PROP_UINT32("debug", PCIQXLDevice, debug, 0), diff --git a/hw/display/vga-isa-mm.c b/hw/display/vga-isa-mm.c index e887b45651..bd58141117 100644 --- a/hw/display/vga-isa-mm.c +++ b/hw/display/vga-isa-mm.c @@ -22,12 +22,13 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "hw/hw.h" #include "hw/display/vga.h" #include "vga_int.h" #include "ui/pixel_ops.h" -#define VGA_RAM_SIZE (8192 * 1024) +#define VGA_RAM_SIZE (8 * MiB) typedef struct ISAVGAMMState { VGACommonState vga; @@ -130,7 +131,7 @@ int isa_vga_mm_init(hwaddr vram_base, s = g_malloc0(sizeof(*s)); - s->vga.vram_size_mb = VGA_RAM_SIZE >> 20; + s->vga.vram_size_mb = VGA_RAM_SIZE / MiB; vga_common_init(&s->vga, NULL, true); vga_mm_init(s, vram_base, ctrl_base, it_shift, address_space); diff --git a/hw/display/vga.c b/hw/display/vga.c index ed476e4e80..d7599182a8 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/display/vga.h" @@ -721,7 +722,7 @@ uint32_t vbe_ioport_read_data(void *opaque, uint32_t addr) val = s->vbe_regs[s->vbe_index]; } } else if (s->vbe_index == VBE_DISPI_INDEX_VIDEO_MEMORY_64K) { - val = s->vbe_size / (64 * 1024); + val = s->vbe_size / (64 * KiB); } else { val = 0; } @@ -2192,7 +2193,7 @@ void vga_common_init(VGACommonState *s, Object *obj, bool global_vmstate) s->vram_size_mb = uint_clamp(s->vram_size_mb, 1, 512); s->vram_size_mb = pow2ceil(s->vram_size_mb); - s->vram_size = s->vram_size_mb << 20; + s->vram_size = s->vram_size_mb * MiB; if (!s->vbe_size) { s->vbe_size = s->vram_size; diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 2dd3c3481a..71a00718e6 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -12,6 +12,7 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "qemu-common.h" #include "qemu/iov.h" #include "ui/console.h" @@ -1314,8 +1315,7 @@ static const VMStateDescription vmstate_virtio_gpu = { static Property virtio_gpu_properties[] = { DEFINE_PROP_UINT32("max_outputs", VirtIOGPU, conf.max_outputs, 1), - DEFINE_PROP_SIZE("max_hostmem", VirtIOGPU, conf.max_hostmem, - 256 * 1024 * 1024), + DEFINE_PROP_SIZE("max_hostmem", VirtIOGPU, conf.max_hostmem, 256 * MiB), #ifdef CONFIG_VIRGL DEFINE_PROP_BIT("virgl", VirtIOGPU, conf.flags, VIRTIO_GPU_FLAG_VIRGL_ENABLED, true), diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index bd3e8b3586..08deb08783 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/loader.h" @@ -565,7 +566,7 @@ static inline int vmsvga_fifo_length(struct vmsvga_state_s *s) s->fifo_next >= SVGA_FIFO_SIZE) { return 0; } - if (s->fifo_max < s->fifo_min + 10 * 1024) { + if (s->fifo_max < s->fifo_min + 10 * KiB) { return 0; } diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c index f5afcc0358..180d205021 100644 --- a/hw/display/xenfb.c +++ b/hw/display/xenfb.c @@ -25,6 +25,7 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "hw/hw.h" #include "ui/input.h" @@ -889,7 +890,7 @@ static int fb_initialise(struct XenDevice *xendev) return rc; fb_page = fb->c.page; - rc = xenfb_configure_fb(fb, videoram * 1024 * 1024U, + rc = xenfb_configure_fb(fb, videoram * MiB, fb_page->width, fb_page->height, fb_page->depth, fb_page->mem_length, 0, fb_page->line_length); if (rc != 0) -- 2.18.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 14/46] hw/display: Use the IEC binary prefix definitions Date: Mon, 25 Jun 2018 09:42:06 -0300 Message-ID: <20180625124238.25339-15-f4bug@amsat.org> References: <20180625124238.25339-1-f4bug@amsat.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.89) (envelope-from ) id 1fXQqW-0004vJ-4R for xen-devel@lists.xenproject.org; Mon, 25 Jun 2018 12:43:52 +0000 Received: by mail-qt0-x242.google.com with SMTP id x23-v6so1558664qto.7 for ; Mon, 25 Jun 2018 05:43:50 -0700 (PDT) In-Reply-To: <20180625124238.25339-1-f4bug@amsat.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Thomas Huth , Stefan Weil Cc: Stefano Stabellini , "Michael S. Tsirkin" , qemu-trivial@nongnu.org, Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, "open list:Xilinx ZynqMP" , Gerd Hoffmann , "open list:X86" , Anthony Perard , "Edgar E. Iglesias" List-Id: xen-devel@lists.xenproject.org SXQgZWFzZXMgY29kZSByZXZpZXcsIHVuaXQgaXMgZXhwbGljaXQuCgpQYXRjaCBnZW5lcmF0ZWQg dXNpbmc6CgogICQgZ2l0IGdyZXAgLUUgJygxMDI0fDIwNDh8NDA5Nnw4MTkyfCg8PHw+PikuPygx MHwyMHwzMCkpJyBody8gaW5jbHVkZS9ody8KCmFuZCBtb2RpZmllZCBtYW51YWxseS4KClNpZ25l ZC1vZmYtYnk6IFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIDxmNGJ1Z0BhbXNhdC5vcmc+ClJldmll d2VkLWJ5OiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IEFs aXN0YWlyIEZyYW5jaXMgPGFsaXN0YWlyLmZyYW5jaXNAd2RjLmNvbT4KLS0tCiBpbmNsdWRlL2h3 L2Rpc3BsYXkveGxueF9kcC5oIHwgIDUgKysrLS0KIGh3L2Rpc3BsYXkvYm9jaHMtZGlzcGxheS5j ICAgfCAgOSArKysrKy0tLS0KIGh3L2Rpc3BsYXkvY2lycnVzX3ZnYS5jICAgICAgfCAxMCArKysr Ky0tLS0tCiBody9kaXNwbGF5L2czNjRmYi5jICAgICAgICAgIHwgIDQgKystLQogaHcvZGlzcGxh eS9xeGwuYyAgICAgICAgICAgICB8IDMwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQog aHcvZGlzcGxheS92Z2EtaXNhLW1tLmMgICAgICB8ICA1ICsrKy0tCiBody9kaXNwbGF5L3ZnYS5j ICAgICAgICAgICAgIHwgIDUgKysrLS0KIGh3L2Rpc3BsYXkvdmlydGlvLWdwdS5jICAgICAgfCAg NCArKy0tCiBody9kaXNwbGF5L3Ztd2FyZV92Z2EuYyAgICAgIHwgIDMgKystCiBody9kaXNwbGF5 L3hlbmZiLmMgICAgICAgICAgIHwgIDMgKystCiAxMCBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRp b25zKCspLCAzNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L2Rpc3BsYXkv eGxueF9kcC5oIGIvaW5jbHVkZS9ody9kaXNwbGF5L3hsbnhfZHAuaAppbmRleCBlZTA0NmE1ZmFj Li4yNmI3NTljZDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2h3L2Rpc3BsYXkveGxueF9kcC5oCisr KyBiL2luY2x1ZGUvaHcvZGlzcGxheS94bG54X2RwLmgKQEAgLTI5LDE0ICsyOSwxNSBAQAogI2lu Y2x1ZGUgImh3L2Rpc3BsYXkvZHBjZC5oIgogI2luY2x1ZGUgImh3L2kyYy9pMmMtZGRjLmgiCiAj aW5jbHVkZSAicWVtdS9maWZvOC5oIgorI2luY2x1ZGUgInFlbXUvdW5pdHMuaCIKICNpbmNsdWRl ICJody9kbWEveGxueF9kcGRtYS5oIgogI2luY2x1ZGUgImF1ZGlvL2F1ZGlvLmgiCiAKICNpZm5k ZWYgWExOWF9EUF9ICiAjZGVmaW5lIFhMTlhfRFBfSAogCi0jZGVmaW5lIEFVRF9DSEJVRl9NQVhf REVQVEggICAgICAgICAgICAgICAgIDMyNzY4Ci0jZGVmaW5lIE1BWF9RRU1VX0JVRkZFUl9TSVpF ICAgICAgICAgICAgICAgIDQwOTYKKyNkZWZpbmUgQVVEX0NIQlVGX01BWF9ERVBUSCAgICAgICAg ICAgICAgICAgKDMyICogS2lCKQorI2RlZmluZSBNQVhfUUVNVV9CVUZGRVJfU0laRSAgICAgICAg ICAgICAgICAoNCAqIEtpQikKIAogI2RlZmluZSBEUF9DT1JFX1JFR19BUlJBWV9TSVpFICAgICAg ICAgICAgICAoMHgzQUYgPj4gMikKICNkZWZpbmUgRFBfQVZCVUZfUkVHX0FSUkFZX1NJWkUgICAg ICAgICAgICAgKDB4MjM4ID4+IDIpCmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L2JvY2hzLWRpc3Bs YXkuYyBiL2h3L2Rpc3BsYXkvYm9jaHMtZGlzcGxheS5jCmluZGV4IDExODdkNzc1NzYuLjVlMGMx ZjE5MTQgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkvYm9jaHMtZGlzcGxheS5jCisrKyBiL2h3L2Rp c3BsYXkvYm9jaHMtZGlzcGxheS5jCkBAIC01LDYgKzUsNyBAQAogICogU2VlIHRoZSBDT1BZSU5H IGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCiAgKi8KICNpbmNsdWRlICJxZW11L29z ZGVwLmgiCisjaW5jbHVkZSAicWVtdS91bml0cy5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5j bHVkZSAiaHcvcGNpL3BjaS5oIgogI2luY2x1ZGUgImh3L2Rpc3BsYXkvYm9jaHMtdmJlLmgiCkBA IC03MCw3ICs3MSw3IEBAIHN0YXRpYyB1aW50NjRfdCBib2Noc19kaXNwbGF5X3ZiZV9yZWFkKHZv aWQgKnB0ciwgaHdhZGRyIGFkZHIsCiAgICAgY2FzZSBWQkVfRElTUElfSU5ERVhfSUQ6CiAgICAg ICAgIHJldHVybiBWQkVfRElTUElfSUQ1OwogICAgIGNhc2UgVkJFX0RJU1BJX0lOREVYX1ZJREVP X01FTU9SWV82NEs6Ci0gICAgICAgIHJldHVybiBzLT52Z2FtZW0gLyAoNjQgKiAxMDI0KTsKKyAg ICAgICAgcmV0dXJuIHMtPnZnYW1lbSAvICg2NCAqIEtpQik7CiAgICAgfQogCiAgICAgaWYgKGlu ZGV4ID49IEFSUkFZX1NJWkUocy0+dmJlX3JlZ3MpKSB7CkBAIC0yNTgsMTAgKzI1OSwxMCBAQCBz dGF0aWMgdm9pZCBib2Noc19kaXNwbGF5X3JlYWxpemUoUENJRGV2aWNlICpkZXYsIEVycm9yICoq ZXJycCkKIAogICAgIHMtPmNvbiA9IGdyYXBoaWNfY29uc29sZV9pbml0KERFVklDRShkZXYpLCAw LCAmYm9jaHNfZGlzcGxheV9nZnhfb3BzLCBzKTsKIAotICAgIGlmIChzLT52Z2FtZW0gPCAoNCAq IDEwMjQgKiAxMDI0KSkgeworICAgIGlmIChzLT52Z2FtZW0gPCA0ICogTWlCKSB7CiAgICAgICAg IGVycm9yX3NldGcoZXJycCwgImJvY2hzLWRpc3BsYXk6IHZpZGVvIG1lbW9yeSB0b28gc21hbGwi KTsKICAgICB9Ci0gICAgaWYgKHMtPnZnYW1lbSA+ICgyNTYgKiAxMDI0ICogMTAyNCkpIHsKKyAg ICBpZiAocy0+dmdhbWVtID4gMjU2ICogTWlCKSB7CiAgICAgICAgIGVycm9yX3NldGcoZXJycCwg ImJvY2hzLWRpc3BsYXk6IHZpZGVvIG1lbW9yeSB0b28gYmlnIik7CiAgICAgfQogICAgIHMtPnZn YW1lbSA9IHBvdzJjZWlsKHMtPnZnYW1lbSk7CkBAIC0zMjMsNyArMzI0LDcgQEAgc3RhdGljIHZv aWQgYm9jaHNfZGlzcGxheV9leGl0KFBDSURldmljZSAqZGV2KQogfQogCiBzdGF0aWMgUHJvcGVy dHkgYm9jaHNfZGlzcGxheV9wcm9wZXJ0aWVzW10gPSB7Ci0gICAgREVGSU5FX1BST1BfU0laRSgi dmdhbWVtIiwgQm9jaHNEaXNwbGF5U3RhdGUsIHZnYW1lbSwgMTYgKiAxMDI0ICogMTAyNCksCisg ICAgREVGSU5FX1BST1BfU0laRSgidmdhbWVtIiwgQm9jaHNEaXNwbGF5U3RhdGUsIHZnYW1lbSwg MTYgKiBNaUIpLAogICAgIERFRklORV9QUk9QX0VORF9PRl9MSVNUKCksCiB9OwogCmRpZmYgLS1n aXQgYS9ody9kaXNwbGF5L2NpcnJ1c192Z2EuYyBiL2h3L2Rpc3BsYXkvY2lycnVzX3ZnYS5jCmlu ZGV4IDEzOGFlOTYxYjkuLjVlNDRmMDBmM2YgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkvY2lycnVz X3ZnYS5jCisrKyBiL2h3L2Rpc3BsYXkvY2lycnVzX3ZnYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAg KiAgIGF2YWlsYWJsZSBhdCBodHRwOi8vaG9tZS53b3JsZG9ubGluZS5kay9+ZmludGgvCiAgKi8K ICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS91bml0cy5oIgogI2luY2x1 ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogI2luY2x1ZGUgImh3L2h3Lmgi CkBAIC0yMjE4LDcgKzIyMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2lycnVzX2N1cnNvcl9j b21wdXRlX3lyYW5nZShDaXJydXNWR0FTdGF0ZSAqcykKICAgICB1aW50MzJfdCBjb250ZW50Owog ICAgIGludCB5LCB5X21pbiwgeV9tYXg7CiAKLSAgICBzcmMgPSBzLT52Z2EudnJhbV9wdHIgKyBz LT5yZWFsX3ZyYW1fc2l6ZSAtIDE2ICogMTAyNDsKKyAgICBzcmMgPSBzLT52Z2EudnJhbV9wdHIg KyBzLT5yZWFsX3ZyYW1fc2l6ZSAtIDE2ICogS2lCOwogICAgIGlmIChzLT52Z2Euc3JbMHgxMl0g JiBDSVJSVVNfQ1VSU09SX0xBUkdFKSB7CiAgICAgICAgIHNyYyArPSAocy0+dmdhLnNyWzB4MTNd ICYgMHgzYykgKiAyNTY7CiAgICAgICAgIHlfbWluID0gNjQ7CkBAIC0yMzQ3LDcgKzIzNDgsNyBA QCBzdGF0aWMgdm9pZCBjaXJydXNfY3Vyc29yX2RyYXdfbGluZShWR0FDb21tb25TdGF0ZSAqczEs IHVpbnQ4X3QgKmQxLCBpbnQgc2NyX3kpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBz cmMgPSBzLT52Z2EudnJhbV9wdHIgKyBzLT5yZWFsX3ZyYW1fc2l6ZSAtIDE2ICogMTAyNDsKKyAg ICBzcmMgPSBzLT52Z2EudnJhbV9wdHIgKyBzLT5yZWFsX3ZyYW1fc2l6ZSAtIDE2ICogS2lCOwog ICAgIGlmIChzLT52Z2Euc3JbMHgxMl0gJiBDSVJSVVNfQ1VSU09SX0xBUkdFKSB7CiAgICAgICAg IHNyYyArPSAocy0+dmdhLnNyWzB4MTNdICYgMHgzYykgKiAyNTY7CiAgICAgICAgIHNyYyArPSAo c2NyX3kgLSBzLT52Z2EuaHdfY3Vyc29yX3kpICogMTY7CkBAIC0yOTk1LDggKzI5OTYsNyBAQCBz dGF0aWMgdm9pZCBjaXJydXNfaW5pdF9jb21tb24oQ2lycnVzVkdBU3RhdGUgKnMsIE9iamVjdCAq b3duZXIsCiAKICAgICAvKiBJL08gaGFuZGxlciBmb3IgTEZCICovCiAgICAgbWVtb3J5X3JlZ2lv bl9pbml0X2lvKCZzLT5jaXJydXNfbGluZWFyX2lvLCBvd25lciwgJmNpcnJ1c19saW5lYXJfaW9f b3BzLCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiY2lycnVzLWxpbmVhci1pbyIsIHMt PnZnYS52cmFtX3NpemVfbWIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIDEwMjQgKiAxMDI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImNpcnJ1 cy1saW5lYXItaW8iLCBzLT52Z2EudnJhbV9zaXplX21iICogTWlCKTsKICAgICBtZW1vcnlfcmVn aW9uX3NldF9mbHVzaF9jb2FsZXNjZWQoJnMtPmNpcnJ1c19saW5lYXJfaW8pOwogCiAgICAgLyog SS9PIGhhbmRsZXIgZm9yIExGQiAqLwpAQCAtMzAxMyw3ICszMDEzLDcgQEAgc3RhdGljIHZvaWQg Y2lycnVzX2luaXRfY29tbW9uKENpcnJ1c1ZHQVN0YXRlICpzLCBPYmplY3QgKm93bmVyLAogICAg IG1lbW9yeV9yZWdpb25fc2V0X2ZsdXNoX2NvYWxlc2NlZCgmcy0+Y2lycnVzX21taW9faW8pOwog CiAgICAgcy0+cmVhbF92cmFtX3NpemUgPQotICAgICAgICAocy0+ZGV2aWNlX2lkID09IENJUlJV U19JRF9DTEdENTQ0NikgPyA0MDk2ICogMTAyNCA6IDIwNDggKiAxMDI0OworICAgICAgICAocy0+ ZGV2aWNlX2lkID09IENJUlJVU19JRF9DTEdENTQ0NikgPyA0ICogTWlCIDogMiAqIE1pQjsKIAog ICAgIC8qIFhYWDogcy0+dmdhLnZyYW1fc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvICovCiAg ICAgcy0+Y2lycnVzX2FkZHJfbWFzayA9IHMtPnJlYWxfdnJhbV9zaXplIC0gMTsKZGlmZiAtLWdp dCBhL2h3L2Rpc3BsYXkvZzM2NGZiLmMgYi9ody9kaXNwbGF5L2czNjRmYi5jCmluZGV4IDNkNzUz OTRlNzcuLmZiYzJiMjQyMmQgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkvZzM2NGZiLmMKKysrIGIv aHcvZGlzcGxheS9nMzY0ZmIuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS91bml0cy5oIgogI2luY2x1ZGUgImh3L2h3Lmgi CiAjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJ1aS9jb25zb2xlLmgi CkBAIC01MTAsOCArNTExLDcgQEAgc3RhdGljIHZvaWQgZzM2NGZiX3N5c2J1c19yZXNldChEZXZp Y2VTdGF0ZSAqZCkKIH0KIAogc3RhdGljIFByb3BlcnR5IGczNjRmYl9zeXNidXNfcHJvcGVydGll c1tdID0gewotICAgIERFRklORV9QUk9QX1VJTlQzMigidnJhbV9zaXplIiwgRzM2NFN5c0J1c1N0 YXRlLCBnMzY0LnZyYW1fc2l6ZSwKLSAgICA4ICogMTAyNCAqIDEwMjQpLAorICAgIERFRklORV9Q Uk9QX1VJTlQzMigidnJhbV9zaXplIiwgRzM2NFN5c0J1c1N0YXRlLCBnMzY0LnZyYW1fc2l6ZSwg OCAqIE1pQiksCiAgICAgREVGSU5FX1BST1BfRU5EX09GX0xJU1QoKSwKIH07CiAKZGlmZiAtLWdp dCBhL2h3L2Rpc3BsYXkvcXhsLmMgYi9ody9kaXNwbGF5L3F4bC5jCmluZGV4IGE3MTcxNGNjYjQu LmIwOWEwMzk5N2EgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkvcXhsLmMKKysrIGIvaHcvZGlzcGxh eS9xeGwuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgi CisjaW5jbHVkZSAicWVtdS91bml0cy5oIgogI2luY2x1ZGUgPHpsaWIuaD4KIAogI2luY2x1ZGUg InFhcGkvZXJyb3IuaCIKQEAgLTIwMTIsMTEgKzIwMTMsMTEgQEAgc3RhdGljIHZvaWQgcXhsX2lu aXRfcmFtc2l6ZShQQ0lRWExEZXZpY2UgKnF4bCkKICAgICBpZiAocXhsLT52Z2FtZW1fc2l6ZV9t YiA+IDI1NikgewogICAgICAgICBxeGwtPnZnYW1lbV9zaXplX21iID0gMjU2OwogICAgIH0KLSAg ICBxeGwtPnZnYW1lbV9zaXplID0gcXhsLT52Z2FtZW1fc2l6ZV9tYiAqIDEwMjQgKiAxMDI0Owor ICAgIHF4bC0+dmdhbWVtX3NpemUgPSBxeGwtPnZnYW1lbV9zaXplX21iICogTWlCOwogCiAgICAg LyogdmdhIHJhbSAoYmFyIDAsIHRvdGFsKSAqLwogICAgIGlmIChxeGwtPnJhbV9zaXplX21iICE9 IC0xKSB7Ci0gICAgICAgIHF4bC0+dmdhLnZyYW1fc2l6ZSA9IHF4bC0+cmFtX3NpemVfbWIgKiAx MDI0ICogMTAyNDsKKyAgICAgICAgcXhsLT52Z2EudnJhbV9zaXplID0gcXhsLT5yYW1fc2l6ZV9t YiAqIE1pQjsKICAgICB9CiAgICAgaWYgKHF4bC0+dmdhLnZyYW1fc2l6ZSA8IHF4bC0+dmdhbWVt X3NpemUgKiAyKSB7CiAgICAgICAgIHF4bC0+dmdhLnZyYW1fc2l6ZSA9IHF4bC0+dmdhbWVtX3Np emUgKiAyOwpAQCAtMjAyNCw3ICsyMDI1LDcgQEAgc3RhdGljIHZvaWQgcXhsX2luaXRfcmFtc2l6 ZShQQ0lRWExEZXZpY2UgKnF4bCkKIAogICAgIC8qIHZyYW0zMiAoc3VyZmFjZXMsIDMyYml0LCBi YXIgMSkgKi8KICAgICBpZiAocXhsLT52cmFtMzJfc2l6ZV9tYiAhPSAtMSkgewotICAgICAgICBx eGwtPnZyYW0zMl9zaXplID0gcXhsLT52cmFtMzJfc2l6ZV9tYiAqIDEwMjQgKiAxMDI0OworICAg ICAgICBxeGwtPnZyYW0zMl9zaXplID0gcXhsLT52cmFtMzJfc2l6ZV9tYiAqIE1pQjsKICAgICB9 CiAgICAgaWYgKHF4bC0+dnJhbTMyX3NpemUgPCA0MDk2KSB7CiAgICAgICAgIHF4bC0+dnJhbTMy X3NpemUgPSA0MDk2OwpAQCAtMjAzMiw3ICsyMDMzLDcgQEAgc3RhdGljIHZvaWQgcXhsX2luaXRf cmFtc2l6ZShQQ0lRWExEZXZpY2UgKnF4bCkKIAogICAgIC8qIHZyYW0gKHN1cmZhY2VzLCA2NGJp dCwgYmFyIDQrNSkgKi8KICAgICBpZiAocXhsLT52cmFtX3NpemVfbWIgIT0gLTEpIHsKLSAgICAg ICAgcXhsLT52cmFtX3NpemUgPSAodWludDY0X3QpcXhsLT52cmFtX3NpemVfbWIgKiAxMDI0ICog MTAyNDsKKyAgICAgICAgcXhsLT52cmFtX3NpemUgPSAodWludDY0X3QpcXhsLT52cmFtX3NpemVf bWIgKiBNaUI7CiAgICAgfQogICAgIGlmIChxeGwtPnZyYW1fc2l6ZSA8IHF4bC0+dnJhbTMyX3Np emUpIHsKICAgICAgICAgcXhsLT52cmFtX3NpemUgPSBxeGwtPnZyYW0zMl9zaXplOwpAQCAtMjEz NCwxMyArMjEzNSwxMiBAQCBzdGF0aWMgdm9pZCBxeGxfcmVhbGl6ZV9jb21tb24oUENJUVhMRGV2 aWNlICpxeGwsIEVycm9yICoqZXJycCkKICAgICB9CiAKICAgICAvKiBwcmludCBwY2kgYmFyIGRl dGFpbHMgKi8KLSAgICBkcHJpbnQocXhsLCAxLCAicmFtLyVzOiAlZCBNQiBbcmVnaW9uIDBdXG4i LAotICAgICAgICAgICBxeGwtPmlkID09IDAgPyAicHJpIiA6ICJzZWMiLAotICAgICAgICAgICBx eGwtPnZnYS52cmFtX3NpemUgLyAoMTAyNCoxMDI0KSk7Ci0gICAgZHByaW50KHF4bCwgMSwgInZy YW0vMzI6ICUiIFBSSXg2NCAiZCBNQiBbcmVnaW9uIDFdXG4iLAotICAgICAgICAgICBxeGwtPnZy YW0zMl9zaXplIC8gKDEwMjQqMTAyNCkpOwotICAgIGRwcmludChxeGwsIDEsICJ2cmFtLzY0OiAl IiBQUkl4NjQgImQgTUIgJXNcbiIsCi0gICAgICAgICAgIHF4bC0+dnJhbV9zaXplIC8gKDEwMjQq MTAyNCksCisgICAgZHByaW50KHF4bCwgMSwgInJhbS8lczogJSIgUFJJZDY0ICIgTUIgW3JlZ2lv biAwXVxuIiwKKyAgICAgICAgICAgcXhsLT5pZCA9PSAwID8gInByaSIgOiAic2VjIiwgcXhsLT52 Z2EudnJhbV9zaXplIC8gTWlCKTsKKyAgICBkcHJpbnQocXhsLCAxLCAidnJhbS8zMjogJSIgUFJJ eDY0ICIgTUIgW3JlZ2lvbiAxXVxuIiwKKyAgICAgICAgICAgcXhsLT52cmFtMzJfc2l6ZSAvIE1p Qik7CisgICAgZHByaW50KHF4bCwgMSwgInZyYW0vNjQ6ICUiIFBSSXg2NCAiIE1CICVzXG4iLAor ICAgICAgICAgICBxeGwtPnZyYW1fc2l6ZSAvIE1pQiwKICAgICAgICAgICAgcXhsLT52cmFtMzJf c2l6ZSA8IHF4bC0+dnJhbV9zaXplID8gIltyZWdpb24gNF0iIDogIlt1bm1hcHBlZF0iKTsKIAog ICAgIHF4bC0+c3NkLnF4bC5iYXNlLnNpZiA9ICZxeGxfaW50ZXJmYWNlLmJhc2U7CkBAIC0yMTY3 LDcgKzIxNjcsNyBAQCBzdGF0aWMgdm9pZCBxeGxfcmVhbGl6ZV9wcmltYXJ5KFBDSURldmljZSAq ZGV2LCBFcnJvciAqKmVycnApCiAgICAgcXhsLT5pZCA9IDA7CiAgICAgcXhsX2luaXRfcmFtc2l6 ZShxeGwpOwogICAgIHZnYS0+dmJlX3NpemUgPSBxeGwtPnZnYW1lbV9zaXplOwotICAgIHZnYS0+ dnJhbV9zaXplX21iID0gcXhsLT52Z2EudnJhbV9zaXplID4+IDIwOworICAgIHZnYS0+dnJhbV9z aXplX21iID0gcXhsLT52Z2EudnJhbV9zaXplIC8gTWlCOwogICAgIHZnYV9jb21tb25faW5pdCh2 Z2EsIE9CSkVDVChkZXYpLCB0cnVlKTsKICAgICB2Z2FfaW5pdCh2Z2EsIE9CSkVDVChkZXYpLAog ICAgICAgICAgICAgIHBjaV9hZGRyZXNzX3NwYWNlKGRldiksIHBjaV9hZGRyZXNzX3NwYWNlX2lv KGRldiksIGZhbHNlKTsKQEAgLTIzOTEsMTAgKzIzOTEsOCBAQCBzdGF0aWMgVk1TdGF0ZURlc2Ny aXB0aW9uIHF4bF92bXN0YXRlID0gewogfTsKIAogc3RhdGljIFByb3BlcnR5IHF4bF9wcm9wZXJ0 aWVzW10gPSB7Ci0gICAgICAgIERFRklORV9QUk9QX1VJTlQzMigicmFtX3NpemUiLCBQQ0lRWExE ZXZpY2UsIHZnYS52cmFtX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDEw MjQgKiAxMDI0KSwKLSAgICAgICAgREVGSU5FX1BST1BfVUlOVDY0KCJ2cmFtX3NpemUiLCBQQ0lR WExEZXZpY2UsIHZyYW0zMl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQgKiAx MDI0ICogMTAyNCksCisgICAgICAgIERFRklORV9QUk9QX1VJTlQzMigicmFtX3NpemUiLCBQQ0lR WExEZXZpY2UsIHZnYS52cmFtX3NpemUsIDY0ICogTWlCKSwKKyAgICAgICAgREVGSU5FX1BST1Bf VUlOVDY0KCJ2cmFtX3NpemUiLCBQQ0lRWExEZXZpY2UsIHZyYW0zMl9zaXplLCA2NCAqIE1pQiks CiAgICAgICAgIERFRklORV9QUk9QX1VJTlQzMigicmV2aXNpb24iLCBQQ0lRWExEZXZpY2UsIHJl dmlzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUVhMX0RFRkFVTFRfUkVWSVNJT04p LAogICAgICAgICBERUZJTkVfUFJPUF9VSU5UMzIoImRlYnVnIiwgUENJUVhMRGV2aWNlLCBkZWJ1 ZywgMCksCmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3ZnYS1pc2EtbW0uYyBiL2h3L2Rpc3BsYXkv dmdhLWlzYS1tbS5jCmluZGV4IGU4ODdiNDU2NTEuLmJkNTgxNDExMTcgMTAwNjQ0Ci0tLSBhL2h3 L2Rpc3BsYXkvdmdhLWlzYS1tbS5jCisrKyBiL2h3L2Rpc3BsYXkvdmdhLWlzYS1tbS5jCkBAIC0y MiwxMiArMjIsMTMgQEAKICAqIFRIRSBTT0ZUV0FSRS4KICAqLwogI2luY2x1ZGUgInFlbXUvb3Nk ZXAuaCIKKyNpbmNsdWRlICJxZW11L3VuaXRzLmgiCiAjaW5jbHVkZSAiaHcvaHcuaCIKICNpbmNs dWRlICJody9kaXNwbGF5L3ZnYS5oIgogI2luY2x1ZGUgInZnYV9pbnQuaCIKICNpbmNsdWRlICJ1 aS9waXhlbF9vcHMuaCIKIAotI2RlZmluZSBWR0FfUkFNX1NJWkUgKDgxOTIgKiAxMDI0KQorI2Rl ZmluZSBWR0FfUkFNX1NJWkUgKDggKiBNaUIpCiAKIHR5cGVkZWYgc3RydWN0IElTQVZHQU1NU3Rh dGUgewogICAgIFZHQUNvbW1vblN0YXRlIHZnYTsKQEAgLTEzMCw3ICsxMzEsNyBAQCBpbnQgaXNh X3ZnYV9tbV9pbml0KGh3YWRkciB2cmFtX2Jhc2UsCiAKICAgICBzID0gZ19tYWxsb2MwKHNpemVv ZigqcykpOwogCi0gICAgcy0+dmdhLnZyYW1fc2l6ZV9tYiA9IFZHQV9SQU1fU0laRSA+PiAyMDsK KyAgICBzLT52Z2EudnJhbV9zaXplX21iID0gVkdBX1JBTV9TSVpFIC8gTWlCOwogICAgIHZnYV9j b21tb25faW5pdCgmcy0+dmdhLCBOVUxMLCB0cnVlKTsKICAgICB2Z2FfbW1faW5pdChzLCB2cmFt X2Jhc2UsIGN0cmxfYmFzZSwgaXRfc2hpZnQsIGFkZHJlc3Nfc3BhY2UpOwogCmRpZmYgLS1naXQg YS9ody9kaXNwbGF5L3ZnYS5jIGIvaHcvZGlzcGxheS92Z2EuYwppbmRleCBlZDQ3NmU0ZTgwLi5k NzU5OTE4MmE4IDEwMDY0NAotLS0gYS9ody9kaXNwbGF5L3ZnYS5jCisrKyBiL2h3L2Rpc3BsYXkv dmdhLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqIFRIRSBTT0ZUV0FSRS4KICAqLwogI2luY2x1ZGUg InFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L3VuaXRzLmgiCiAjaW5jbHVkZSAicWFwaS9l cnJvci5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvZGlzcGxheS92Z2EuaCIK QEAgLTcyMSw3ICs3MjIsNyBAQCB1aW50MzJfdCB2YmVfaW9wb3J0X3JlYWRfZGF0YSh2b2lkICpv cGFxdWUsIHVpbnQzMl90IGFkZHIpCiAgICAgICAgICAgICB2YWwgPSBzLT52YmVfcmVnc1tzLT52 YmVfaW5kZXhdOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChzLT52YmVfaW5kZXggPT0gVkJF X0RJU1BJX0lOREVYX1ZJREVPX01FTU9SWV82NEspIHsKLSAgICAgICAgdmFsID0gcy0+dmJlX3Np emUgLyAoNjQgKiAxMDI0KTsKKyAgICAgICAgdmFsID0gcy0+dmJlX3NpemUgLyAoNjQgKiBLaUIp OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZhbCA9IDA7CiAgICAgfQpAQCAtMjE5Miw3ICsyMTkz LDcgQEAgdm9pZCB2Z2FfY29tbW9uX2luaXQoVkdBQ29tbW9uU3RhdGUgKnMsIE9iamVjdCAqb2Jq LCBib29sIGdsb2JhbF92bXN0YXRlKQogCiAgICAgcy0+dnJhbV9zaXplX21iID0gdWludF9jbGFt cChzLT52cmFtX3NpemVfbWIsIDEsIDUxMik7CiAgICAgcy0+dnJhbV9zaXplX21iID0gcG93MmNl aWwocy0+dnJhbV9zaXplX21iKTsKLSAgICBzLT52cmFtX3NpemUgPSBzLT52cmFtX3NpemVfbWIg PDwgMjA7CisgICAgcy0+dnJhbV9zaXplID0gcy0+dnJhbV9zaXplX21iICogTWlCOwogCiAgICAg aWYgKCFzLT52YmVfc2l6ZSkgewogICAgICAgICBzLT52YmVfc2l6ZSA9IHMtPnZyYW1fc2l6ZTsK ZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS5jIGIvaHcvZGlzcGxheS92aXJ0aW8t Z3B1LmMKaW5kZXggMmRkM2MzNDgxYS4uNzFhMDA3MThlNiAxMDA2NDQKLS0tIGEvaHcvZGlzcGxh eS92aXJ0aW8tZ3B1LmMKKysrIGIvaHcvZGlzcGxheS92aXJ0aW8tZ3B1LmMKQEAgLTEyLDYgKzEy LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvdW5p dHMuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgInFlbXUvaW92LmgiCiAj aW5jbHVkZSAidWkvY29uc29sZS5oIgpAQCAtMTMxNCw4ICsxMzE1LDcgQEAgc3RhdGljIGNvbnN0 IFZNU3RhdGVEZXNjcmlwdGlvbiB2bXN0YXRlX3ZpcnRpb19ncHUgPSB7CiAKIHN0YXRpYyBQcm9w ZXJ0eSB2aXJ0aW9fZ3B1X3Byb3BlcnRpZXNbXSA9IHsKICAgICBERUZJTkVfUFJPUF9VSU5UMzIo Im1heF9vdXRwdXRzIiwgVmlydElPR1BVLCBjb25mLm1heF9vdXRwdXRzLCAxKSwKLSAgICBERUZJ TkVfUFJPUF9TSVpFKCJtYXhfaG9zdG1lbSIsIFZpcnRJT0dQVSwgY29uZi5tYXhfaG9zdG1lbSwK LSAgICAgICAgICAgICAgICAgICAgIDI1NiAqIDEwMjQgKiAxMDI0KSwKKyAgICBERUZJTkVfUFJP UF9TSVpFKCJtYXhfaG9zdG1lbSIsIFZpcnRJT0dQVSwgY29uZi5tYXhfaG9zdG1lbSwgMjU2ICog TWlCKSwKICNpZmRlZiBDT05GSUdfVklSR0wKICAgICBERUZJTkVfUFJPUF9CSVQoInZpcmdsIiwg VmlydElPR1BVLCBjb25mLmZsYWdzLAogICAgICAgICAgICAgICAgICAgICBWSVJUSU9fR1BVX0ZM QUdfVklSR0xfRU5BQkxFRCwgdHJ1ZSksCmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3Ztd2FyZV92 Z2EuYyBiL2h3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jCmluZGV4IGJkM2U4YjM1ODYuLjA4ZGViMDg3 ODMgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jCisrKyBiL2h3L2Rpc3BsYXkv dm13YXJlX3ZnYS5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBUSEUgU09GVFdBUkUuCiAgKi8KICNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS91bml0cy5oIgogI2luY2x1ZGUg InFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJody9ody5oIgogI2luY2x1ZGUgImh3L2xvYWRlci5o IgpAQCAtNTY1LDcgKzU2Niw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtc3ZnYV9maWZvX2xlbmd0 aChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCiAgICAgICAgIHMtPmZpZm9fbmV4dCA+PSBTVkdB X0ZJRk9fU0laRSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHMtPmZpZm9f bWF4IDwgcy0+Zmlmb19taW4gKyAxMCAqIDEwMjQpIHsKKyAgICBpZiAocy0+Zmlmb19tYXggPCBz LT5maWZvX21pbiArIDEwICogS2lCKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApkaWZm IC0tZ2l0IGEvaHcvZGlzcGxheS94ZW5mYi5jIGIvaHcvZGlzcGxheS94ZW5mYi5jCmluZGV4IGY1 YWZjYzAzNTguLjE4MGQyMDUwMjEgMTAwNjQ0Ci0tLSBhL2h3L2Rpc3BsYXkveGVuZmIuYworKysg Yi9ody9kaXNwbGF5L3hlbmZiLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi cWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvdW5pdHMuaCIKIAogI2luY2x1ZGUgImh3L2h3 LmgiCiAjaW5jbHVkZSAidWkvaW5wdXQuaCIKQEAgLTg4OSw3ICs4OTAsNyBAQCBzdGF0aWMgaW50 IGZiX2luaXRpYWxpc2Uoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQogCXJldHVybiByYzsKIAog ICAgIGZiX3BhZ2UgPSBmYi0+Yy5wYWdlOwotICAgIHJjID0geGVuZmJfY29uZmlndXJlX2ZiKGZi LCB2aWRlb3JhbSAqIDEwMjQgKiAxMDI0VSwKKyAgICByYyA9IHhlbmZiX2NvbmZpZ3VyZV9mYihm YiwgdmlkZW9yYW0gKiBNaUIsCiAJCQkgICAgZmJfcGFnZS0+d2lkdGgsIGZiX3BhZ2UtPmhlaWdo dCwgZmJfcGFnZS0+ZGVwdGgsCiAJCQkgICAgZmJfcGFnZS0+bWVtX2xlbmd0aCwgMCwgZmJfcGFn ZS0+bGluZV9sZW5ndGgpOwogICAgIGlmIChyYyAhPSAwKQotLSAKMi4xOC4wCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==