From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 692D9C34056 for ; Wed, 19 Feb 2020 16:55:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 27FCD2464E for ; Wed, 19 Feb 2020 16:55:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="AM0G48AR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27FCD2464E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:56488 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j4Sd8-0003Ku-Ah for qemu-devel@archiver.kernel.org; Wed, 19 Feb 2020 11:55:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39104) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j4S3f-0001W4-L2 for qemu-devel@nongnu.org; Wed, 19 Feb 2020 11:18:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j4S3d-0004QV-M3 for qemu-devel@nongnu.org; Wed, 19 Feb 2020 11:18:43 -0500 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:24809 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j4S3d-0004QH-Fp for qemu-devel@nongnu.org; Wed, 19 Feb 2020 11:18:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582129121; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8PhGid55mGXBt3QR7+iEAUfsznHM9i37dSidt+A/ALk=; b=AM0G48ARtQgOssSiiOF8Y0vcyKbkMW8D+0cNF+RLG13LJuxqNCEHHy6o5B4qobdpQeW2Zv hk7C5SjCiZm3wZ44KuAh9LO3toW2m3wp4WSGHddt9+v2TCKz13ACxdA62dLE06XF+Z/MN/ 9KLfhaJIl2DRQXQ2Tb7TH/ZVqxmsbQg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-68-L6T8MO6bOrWJNOXAQQPg5g-1; Wed, 19 Feb 2020 11:18:36 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8C3CB8EDBC1; Wed, 19 Feb 2020 16:18:35 +0000 (UTC) Received: from t480s.redhat.com (ovpn-116-151.ams2.redhat.com [10.36.116.151]) by smtp.corp.redhat.com (Postfix) with ESMTP id C49D0857BF; Wed, 19 Feb 2020 16:18:22 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 03/13] numa: Teach ram block notifiers about resizeable ram blocks Date: Wed, 19 Feb 2020 17:17:15 +0100 Message-Id: <20200219161725.115218-4-david@redhat.com> In-Reply-To: <20200219161725.115218-1-david@redhat.com> References: <20200219161725.115218-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: L6T8MO6bOrWJNOXAQQPg5g-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , Eduardo Habkost , Juan Quintela , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Paul Durrant , Igor Mammedov , "Michael S. Tsirkin" , xen-devel@lists.xenproject.org, Anthony Perard , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Ram block notifiers are currently not aware of resizes. Especially to handle resizes during migration, but also to implement actually resizeable ram blocks (make everything between used_length and max_length inaccessible), we want to teach ram block notifiers about resizeable ram. Introduce the basic infrastructure but keep using max_size in the existing notifiers. Supply the max_size when adding and removing ram blocks. Also, notify on resizes. Acked-by: Paul Durrant Cc: Richard Henderson Cc: Paolo Bonzini Cc: "Dr. David Alan Gilbert" Cc: Eduardo Habkost Cc: Marcel Apfelbaum Cc: Stefano Stabellini Cc: Anthony Perard Cc: Paul Durrant Cc: "Michael S. Tsirkin" Cc: xen-devel@lists.xenproject.org Cc: Igor Mammedov Signed-off-by: David Hildenbrand --- exec.c | 13 +++++++++++-- hw/core/numa.c | 22 +++++++++++++++++----- hw/i386/xen/xen-mapcache.c | 7 ++++--- include/exec/ramlist.h | 13 +++++++++---- target/i386/hax-mem.c | 5 +++-- target/i386/sev.c | 18 ++++++++++-------- util/vfio-helpers.c | 17 +++++++++-------- 7 files changed, 63 insertions(+), 32 deletions(-) diff --git a/exec.c b/exec.c index dfd43d27c6..b75250e773 100644 --- a/exec.c +++ b/exec.c @@ -2129,6 +2129,8 @@ static int memory_try_enable_merging(void *addr, size= _t len) */ int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp) { + const ram_addr_t oldsize =3D block->used_length; + assert(block); =20 newsize =3D HOST_PAGE_ALIGN(newsize); @@ -2153,6 +2155,11 @@ int qemu_ram_resize(RAMBlock *block, ram_addr_t news= ize, Error **errp) return -EINVAL; } =20 + /* Notify before modifying the ram block and touching the bitmaps. */ + if (block->host) { + ram_block_notify_resize(block->host, oldsize, newsize); + } + cpu_physical_memory_clear_dirty_range(block->offset, block->used_lengt= h); block->used_length =3D newsize; cpu_physical_memory_set_dirty_range(block->offset, block->used_length, @@ -2312,7 +2319,8 @@ static void ram_block_add(RAMBlock *new_block, Error = **errp, bool shared) qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUG= EPAGE); /* MADV_DONTFORK is also needed by KVM in absence of synchronous M= MU */ qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DON= TFORK); - ram_block_notify_add(new_block->host, new_block->max_length); + ram_block_notify_add(new_block->host, new_block->used_length, + new_block->max_length); } } =20 @@ -2492,7 +2500,8 @@ void qemu_ram_free(RAMBlock *block) } =20 if (block->host) { - ram_block_notify_remove(block->host, block->max_length); + ram_block_notify_remove(block->host, block->used_length, + block->max_length); } =20 qemu_mutex_lock_ramlist(); diff --git a/hw/core/numa.c b/hw/core/numa.c index 6599c69e05..e28ad24fcd 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -902,11 +902,12 @@ void query_numa_node_mem(NumaNodeMem node_mem[], Mach= ineState *ms) static int ram_block_notify_add_single(RAMBlock *rb, void *opaque) { const ram_addr_t max_size =3D qemu_ram_get_max_length(rb); + const ram_addr_t size =3D qemu_ram_get_used_length(rb); void *host =3D qemu_ram_get_host_addr(rb); RAMBlockNotifier *notifier =3D opaque; =20 if (host) { - notifier->ram_block_added(notifier, host, max_size); + notifier->ram_block_added(notifier, host, size, max_size); } return 0; } @@ -923,20 +924,31 @@ void ram_block_notifier_remove(RAMBlockNotifier *n) QLIST_REMOVE(n, next); } =20 -void ram_block_notify_add(void *host, size_t size) +void ram_block_notify_add(void *host, size_t size, size_t max_size) { RAMBlockNotifier *notifier; =20 QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) { - notifier->ram_block_added(notifier, host, size); + notifier->ram_block_added(notifier, host, size, max_size); } } =20 -void ram_block_notify_remove(void *host, size_t size) +void ram_block_notify_remove(void *host, size_t size, size_t max_size) { RAMBlockNotifier *notifier; =20 QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) { - notifier->ram_block_removed(notifier, host, size); + notifier->ram_block_removed(notifier, host, size, max_size); + } +} + +void ram_block_notify_resize(void *host, size_t old_size, size_t new_size) +{ + RAMBlockNotifier *notifier; + + QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) { + if (notifier->ram_block_resized) { + notifier->ram_block_resized(notifier, host, old_size, new_size= ); + } } } diff --git a/hw/i386/xen/xen-mapcache.c b/hw/i386/xen/xen-mapcache.c index 5b120ed44b..d6dcea65d1 100644 --- a/hw/i386/xen/xen-mapcache.c +++ b/hw/i386/xen/xen-mapcache.c @@ -169,7 +169,8 @@ static void xen_remap_bucket(MapCacheEntry *entry, =20 if (entry->vaddr_base !=3D NULL) { if (!(entry->flags & XEN_MAPCACHE_ENTRY_DUMMY)) { - ram_block_notify_remove(entry->vaddr_base, entry->size); + ram_block_notify_remove(entry->vaddr_base, entry->size, + entry->size); } if (munmap(entry->vaddr_base, entry->size) !=3D 0) { perror("unmap fails"); @@ -211,7 +212,7 @@ static void xen_remap_bucket(MapCacheEntry *entry, } =20 if (!(entry->flags & XEN_MAPCACHE_ENTRY_DUMMY)) { - ram_block_notify_add(vaddr_base, size); + ram_block_notify_add(vaddr_base, size, size); } =20 entry->vaddr_base =3D vaddr_base; @@ -452,7 +453,7 @@ static void xen_invalidate_map_cache_entry_unlocked(uin= t8_t *buffer) } =20 pentry->next =3D entry->next; - ram_block_notify_remove(entry->vaddr_base, entry->size); + ram_block_notify_remove(entry->vaddr_base, entry->size, entry->size); if (munmap(entry->vaddr_base, entry->size) !=3D 0) { perror("unmap fails"); exit(-1); diff --git a/include/exec/ramlist.h b/include/exec/ramlist.h index bc4faa1b00..293c0ddabe 100644 --- a/include/exec/ramlist.h +++ b/include/exec/ramlist.h @@ -65,15 +65,20 @@ void qemu_mutex_lock_ramlist(void); void qemu_mutex_unlock_ramlist(void); =20 struct RAMBlockNotifier { - void (*ram_block_added)(RAMBlockNotifier *n, void *host, size_t size); - void (*ram_block_removed)(RAMBlockNotifier *n, void *host, size_t size= ); + void (*ram_block_added)(RAMBlockNotifier *n, void *host, size_t size, + size_t max_size); + void (*ram_block_removed)(RAMBlockNotifier *n, void *host, size_t size= , + size_t max_size); + void (*ram_block_resized)(RAMBlockNotifier *n, void *host, size_t old_= size, + size_t new_size); QLIST_ENTRY(RAMBlockNotifier) next; }; =20 void ram_block_notifier_add(RAMBlockNotifier *n); void ram_block_notifier_remove(RAMBlockNotifier *n); -void ram_block_notify_add(void *host, size_t size); -void ram_block_notify_remove(void *host, size_t size); +void ram_block_notify_add(void *host, size_t size, size_t max_size); +void ram_block_notify_remove(void *host, size_t size, size_t max_size); +void ram_block_notify_resize(void *host, size_t old_size, size_t new_size)= ; =20 void ram_block_dump(Monitor *mon); =20 diff --git a/target/i386/hax-mem.c b/target/i386/hax-mem.c index 6bb5a24917..454d7fb212 100644 --- a/target/i386/hax-mem.c +++ b/target/i386/hax-mem.c @@ -293,7 +293,8 @@ static MemoryListener hax_memory_listener =3D { .priority =3D 10, }; =20 -static void hax_ram_block_added(RAMBlockNotifier *n, void *host, size_t si= ze) +static void hax_ram_block_added(RAMBlockNotifier *n, void *host, size_t si= ze, + size_t max_size) { /* * We must register each RAM block with the HAXM kernel module, or @@ -304,7 +305,7 @@ static void hax_ram_block_added(RAMBlockNotifier *n, vo= id *host, size_t size) * host physical pages for the RAM block as part of this registration * process, hence the name hax_populate_ram(). */ - if (hax_populate_ram((uint64_t)(uintptr_t)host, size) < 0) { + if (hax_populate_ram((uint64_t)(uintptr_t)host, max_size) < 0) { fprintf(stderr, "HAX failed to populate RAM\n"); abort(); } diff --git a/target/i386/sev.c b/target/i386/sev.c index 024bb24e51..6b4cee24a2 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -129,7 +129,8 @@ sev_set_guest_state(SevState new_state) } =20 static void -sev_ram_block_added(RAMBlockNotifier *n, void *host, size_t size) +sev_ram_block_added(RAMBlockNotifier *n, void *host, size_t size, + size_t max_size) { int r; struct kvm_enc_region range; @@ -146,19 +147,20 @@ sev_ram_block_added(RAMBlockNotifier *n, void *host, = size_t size) } =20 range.addr =3D (__u64)(unsigned long)host; - range.size =3D size; + range.size =3D max_size; =20 - trace_kvm_memcrypt_register_region(host, size); + trace_kvm_memcrypt_register_region(host, max_size); r =3D kvm_vm_ioctl(kvm_state, KVM_MEMORY_ENCRYPT_REG_REGION, &range); if (r) { error_report("%s: failed to register region (%p+%#zx) error '%s'", - __func__, host, size, strerror(errno)); + __func__, host, max_size, strerror(errno)); exit(1); } } =20 static void -sev_ram_block_removed(RAMBlockNotifier *n, void *host, size_t size) +sev_ram_block_removed(RAMBlockNotifier *n, void *host, size_t size, + size_t max_size) { int r; struct kvm_enc_region range; @@ -175,13 +177,13 @@ sev_ram_block_removed(RAMBlockNotifier *n, void *host= , size_t size) } =20 range.addr =3D (__u64)(unsigned long)host; - range.size =3D size; + range.size =3D max_size; =20 - trace_kvm_memcrypt_unregister_region(host, size); + trace_kvm_memcrypt_unregister_region(host, max_size); r =3D kvm_vm_ioctl(kvm_state, KVM_MEMORY_ENCRYPT_UNREG_REGION, &range)= ; if (r) { error_report("%s: failed to unregister region (%p+%#zx)", - __func__, host, size); + __func__, host, max_size); } } =20 diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c index 71e02e7f35..61a0cf6e12 100644 --- a/util/vfio-helpers.c +++ b/util/vfio-helpers.c @@ -372,25 +372,26 @@ fail_container: return ret; } =20 -static void qemu_vfio_ram_block_added(RAMBlockNotifier *n, - void *host, size_t size) +static void qemu_vfio_ram_block_added(RAMBlockNotifier *n, void *host, + size_t size, size_t max_size) { QEMUVFIOState *s =3D container_of(n, QEMUVFIOState, ram_notifier); int ret; =20 - trace_qemu_vfio_ram_block_added(s, host, size); - ret =3D qemu_vfio_dma_map(s, host, size, false, NULL); + trace_qemu_vfio_ram_block_added(s, host, max_size); + ret =3D qemu_vfio_dma_map(s, host, max_size, false, NULL); if (ret) { - error_report("qemu_vfio_dma_map(%p, %zu) failed: %d", host, size, = ret); + error_report("qemu_vfio_dma_map(%p, %zu) failed: %d", host, + max_size, ret); } } =20 -static void qemu_vfio_ram_block_removed(RAMBlockNotifier *n, - void *host, size_t size) +static void qemu_vfio_ram_block_removed(RAMBlockNotifier *n, void *host, + size_t size, size_t max_size) { QEMUVFIOState *s =3D container_of(n, QEMUVFIOState, ram_notifier); if (host) { - trace_qemu_vfio_ram_block_removed(s, host, size); + trace_qemu_vfio_ram_block_removed(s, host, max_size); qemu_vfio_dma_unmap(s, host); } } --=20 2.24.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7F68C34053 for ; Wed, 19 Feb 2020 16:19:09 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9B7102464E for ; Wed, 19 Feb 2020 16:19:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="AM0G48AR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B7102464E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j4S3h-0000Pg-K7; Wed, 19 Feb 2020 16:18:45 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j4S3f-0000Pb-O6 for xen-devel@lists.xenproject.org; Wed, 19 Feb 2020 16:18:43 +0000 X-Inumbo-ID: 7d7a37d7-5333-11ea-83c6-12813bfff9fa Received: from us-smtp-1.mimecast.com (unknown [205.139.110.61]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 7d7a37d7-5333-11ea-83c6-12813bfff9fa; Wed, 19 Feb 2020 16:18:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582129121; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8PhGid55mGXBt3QR7+iEAUfsznHM9i37dSidt+A/ALk=; b=AM0G48ARtQgOssSiiOF8Y0vcyKbkMW8D+0cNF+RLG13LJuxqNCEHHy6o5B4qobdpQeW2Zv hk7C5SjCiZm3wZ44KuAh9LO3toW2m3wp4WSGHddt9+v2TCKz13ACxdA62dLE06XF+Z/MN/ 9KLfhaJIl2DRQXQ2Tb7TH/ZVqxmsbQg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-68-L6T8MO6bOrWJNOXAQQPg5g-1; Wed, 19 Feb 2020 11:18:36 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8C3CB8EDBC1; Wed, 19 Feb 2020 16:18:35 +0000 (UTC) Received: from t480s.redhat.com (ovpn-116-151.ams2.redhat.com [10.36.116.151]) by smtp.corp.redhat.com (Postfix) with ESMTP id C49D0857BF; Wed, 19 Feb 2020 16:18:22 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Date: Wed, 19 Feb 2020 17:17:15 +0100 Message-Id: <20200219161725.115218-4-david@redhat.com> In-Reply-To: <20200219161725.115218-1-david@redhat.com> References: <20200219161725.115218-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: L6T8MO6bOrWJNOXAQQPg5g-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [Xen-devel] [PATCH v1 03/13] numa: Teach ram block notifiers about resizeable ram blocks X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , Eduardo Habkost , Juan Quintela , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Paul Durrant , Igor Mammedov , "Michael S. Tsirkin" , Marcel Apfelbaum , xen-devel@lists.xenproject.org, Anthony Perard , Paolo Bonzini , Richard Henderson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" UmFtIGJsb2NrIG5vdGlmaWVycyBhcmUgY3VycmVudGx5IG5vdCBhd2FyZSBvZiByZXNpemVzLiBF c3BlY2lhbGx5IHRvCmhhbmRsZSByZXNpemVzIGR1cmluZyBtaWdyYXRpb24sIGJ1dCBhbHNvIHRv IGltcGxlbWVudCBhY3R1YWxseSByZXNpemVhYmxlCnJhbSBibG9ja3MgKG1ha2UgZXZlcnl0aGlu ZyBiZXR3ZWVuIHVzZWRfbGVuZ3RoIGFuZCBtYXhfbGVuZ3RoCmluYWNjZXNzaWJsZSksIHdlIHdh bnQgdG8gdGVhY2ggcmFtIGJsb2NrIG5vdGlmaWVycyBhYm91dCByZXNpemVhYmxlCnJhbS4KCklu dHJvZHVjZSB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgYnV0IGtlZXAgdXNpbmcgbWF4X3NpemUg aW4gdGhlCmV4aXN0aW5nIG5vdGlmaWVycy4gU3VwcGx5IHRoZSBtYXhfc2l6ZSB3aGVuIGFkZGlu ZyBhbmQgcmVtb3ZpbmcgcmFtCmJsb2Nrcy4gQWxzbywgbm90aWZ5IG9uIHJlc2l6ZXMuCgpBY2tl ZC1ieTogUGF1bCBEdXJyYW50IDxwYXVsQHhlbi5vcmc+CkNjOiBSaWNoYXJkIEhlbmRlcnNvbiA8 cnRoQHR3aWRkbGUubmV0PgpDYzogUGFvbG8gQm9uemluaSA8cGJvbnppbmlAcmVkaGF0LmNvbT4K Q2M6ICJEci4gRGF2aWQgQWxhbiBHaWxiZXJ0IiA8ZGdpbGJlcnRAcmVkaGF0LmNvbT4KQ2M6IEVk dWFyZG8gSGFia29zdCA8ZWhhYmtvc3RAcmVkaGF0LmNvbT4KQ2M6IE1hcmNlbCBBcGZlbGJhdW0g PG1hcmNlbC5hcGZlbGJhdW1AZ21haWwuY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3Rh YmVsbGluaUBrZXJuZWwub3JnPgpDYzogQW50aG9ueSBQZXJhcmQgPGFudGhvbnkucGVyYXJkQGNp dHJpeC5jb20+CkNjOiBQYXVsIER1cnJhbnQgPHBhdWxAeGVuLm9yZz4KQ2M6ICJNaWNoYWVsIFMu IFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpDYzogSWdvciBNYW1tZWRvdiA8aW1hbW1lZG9AcmVkaGF0LmNvbT4KU2lnbmVkLW9mZi1i eTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhdmlkQHJlZGhhdC5jb20+Ci0tLQogZXhlYy5jICAgICAg ICAgICAgICAgICAgICAgfCAxMyArKysrKysrKysrKy0tCiBody9jb3JlL251bWEuYyAgICAgICAg ICAgICB8IDIyICsrKysrKysrKysrKysrKysrLS0tLS0KIGh3L2kzODYveGVuL3hlbi1tYXBjYWNo ZS5jIHwgIDcgKysrKy0tLQogaW5jbHVkZS9leGVjL3JhbWxpc3QuaCAgICAgfCAxMyArKysrKysr KystLS0tCiB0YXJnZXQvaTM4Ni9oYXgtbWVtLmMgICAgICB8ICA1ICsrKy0tCiB0YXJnZXQvaTM4 Ni9zZXYuYyAgICAgICAgICB8IDE4ICsrKysrKysrKystLS0tLS0tLQogdXRpbC92ZmlvLWhlbHBl cnMuYyAgICAgICAgfCAxNyArKysrKysrKystLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA2MyBp bnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9leGVjLmMgYi9leGVj LmMKaW5kZXggZGZkNDNkMjdjNi4uYjc1MjUwZTc3MyAxMDA2NDQKLS0tIGEvZXhlYy5jCisrKyBi L2V4ZWMuYwpAQCAtMjEyOSw2ICsyMTI5LDggQEAgc3RhdGljIGludCBtZW1vcnlfdHJ5X2VuYWJs ZV9tZXJnaW5nKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pCiAgKi8KIGludCBxZW11X3JhbV9yZXNp emUoUkFNQmxvY2sgKmJsb2NrLCByYW1fYWRkcl90IG5ld3NpemUsIEVycm9yICoqZXJycCkKIHsK KyAgICBjb25zdCByYW1fYWRkcl90IG9sZHNpemUgPSBibG9jay0+dXNlZF9sZW5ndGg7CisKICAg ICBhc3NlcnQoYmxvY2spOwogCiAgICAgbmV3c2l6ZSA9IEhPU1RfUEFHRV9BTElHTihuZXdzaXpl KTsKQEAgLTIxNTMsNiArMjE1NSwxMSBAQCBpbnQgcWVtdV9yYW1fcmVzaXplKFJBTUJsb2NrICpi bG9jaywgcmFtX2FkZHJfdCBuZXdzaXplLCBFcnJvciAqKmVycnApCiAgICAgICAgIHJldHVybiAt RUlOVkFMOwogICAgIH0KIAorICAgIC8qIE5vdGlmeSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSByYW0g YmxvY2sgYW5kIHRvdWNoaW5nIHRoZSBiaXRtYXBzLiAqLworICAgIGlmIChibG9jay0+aG9zdCkg eworICAgICAgICByYW1fYmxvY2tfbm90aWZ5X3Jlc2l6ZShibG9jay0+aG9zdCwgb2xkc2l6ZSwg bmV3c2l6ZSk7CisgICAgfQorCiAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9jbGVhcl9kaXJ0eV9y YW5nZShibG9jay0+b2Zmc2V0LCBibG9jay0+dXNlZF9sZW5ndGgpOwogICAgIGJsb2NrLT51c2Vk X2xlbmd0aCA9IG5ld3NpemU7CiAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9zZXRfZGlydHlfcmFu Z2UoYmxvY2stPm9mZnNldCwgYmxvY2stPnVzZWRfbGVuZ3RoLApAQCAtMjMxMiw3ICsyMzE5LDgg QEAgc3RhdGljIHZvaWQgcmFtX2Jsb2NrX2FkZChSQU1CbG9jayAqbmV3X2Jsb2NrLCBFcnJvciAq KmVycnAsIGJvb2wgc2hhcmVkKQogICAgICAgICBxZW11X21hZHZpc2UobmV3X2Jsb2NrLT5ob3N0 LCBuZXdfYmxvY2stPm1heF9sZW5ndGgsIFFFTVVfTUFEVl9IVUdFUEFHRSk7CiAgICAgICAgIC8q IE1BRFZfRE9OVEZPUksgaXMgYWxzbyBuZWVkZWQgYnkgS1ZNIGluIGFic2VuY2Ugb2Ygc3luY2hy b25vdXMgTU1VICovCiAgICAgICAgIHFlbXVfbWFkdmlzZShuZXdfYmxvY2stPmhvc3QsIG5ld19i bG9jay0+bWF4X2xlbmd0aCwgUUVNVV9NQURWX0RPTlRGT1JLKTsKLSAgICAgICAgcmFtX2Jsb2Nr X25vdGlmeV9hZGQobmV3X2Jsb2NrLT5ob3N0LCBuZXdfYmxvY2stPm1heF9sZW5ndGgpOworICAg ICAgICByYW1fYmxvY2tfbm90aWZ5X2FkZChuZXdfYmxvY2stPmhvc3QsIG5ld19ibG9jay0+dXNl ZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19ibG9jay0+bWF4X2xl bmd0aCk7CiAgICAgfQogfQogCkBAIC0yNDkyLDcgKzI1MDAsOCBAQCB2b2lkIHFlbXVfcmFtX2Zy ZWUoUkFNQmxvY2sgKmJsb2NrKQogICAgIH0KIAogICAgIGlmIChibG9jay0+aG9zdCkgewotICAg ICAgICByYW1fYmxvY2tfbm90aWZ5X3JlbW92ZShibG9jay0+aG9zdCwgYmxvY2stPm1heF9sZW5n dGgpOworICAgICAgICByYW1fYmxvY2tfbm90aWZ5X3JlbW92ZShibG9jay0+aG9zdCwgYmxvY2st PnVzZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bWF4 X2xlbmd0aCk7CiAgICAgfQogCiAgICAgcWVtdV9tdXRleF9sb2NrX3JhbWxpc3QoKTsKZGlmZiAt LWdpdCBhL2h3L2NvcmUvbnVtYS5jIGIvaHcvY29yZS9udW1hLmMKaW5kZXggNjU5OWM2OWUwNS4u ZTI4YWQyNGZjZCAxMDA2NDQKLS0tIGEvaHcvY29yZS9udW1hLmMKKysrIGIvaHcvY29yZS9udW1h LmMKQEAgLTkwMiwxMSArOTAyLDEyIEBAIHZvaWQgcXVlcnlfbnVtYV9ub2RlX21lbShOdW1hTm9k ZU1lbSBub2RlX21lbVtdLCBNYWNoaW5lU3RhdGUgKm1zKQogc3RhdGljIGludCByYW1fYmxvY2tf bm90aWZ5X2FkZF9zaW5nbGUoUkFNQmxvY2sgKnJiLCB2b2lkICpvcGFxdWUpCiB7CiAgICAgY29u c3QgcmFtX2FkZHJfdCBtYXhfc2l6ZSA9IHFlbXVfcmFtX2dldF9tYXhfbGVuZ3RoKHJiKTsKKyAg ICBjb25zdCByYW1fYWRkcl90IHNpemUgPSBxZW11X3JhbV9nZXRfdXNlZF9sZW5ndGgocmIpOwog ICAgIHZvaWQgKmhvc3QgPSBxZW11X3JhbV9nZXRfaG9zdF9hZGRyKHJiKTsKICAgICBSQU1CbG9j a05vdGlmaWVyICpub3RpZmllciA9IG9wYXF1ZTsKIAogICAgIGlmIChob3N0KSB7Ci0gICAgICAg IG5vdGlmaWVyLT5yYW1fYmxvY2tfYWRkZWQobm90aWZpZXIsIGhvc3QsIG1heF9zaXplKTsKKyAg ICAgICAgbm90aWZpZXItPnJhbV9ibG9ja19hZGRlZChub3RpZmllciwgaG9zdCwgc2l6ZSwgbWF4 X3NpemUpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTkyMywyMCArOTI0LDMxIEBAIHZv aWQgcmFtX2Jsb2NrX25vdGlmaWVyX3JlbW92ZShSQU1CbG9ja05vdGlmaWVyICpuKQogICAgIFFM SVNUX1JFTU9WRShuLCBuZXh0KTsKIH0KIAotdm9pZCByYW1fYmxvY2tfbm90aWZ5X2FkZCh2b2lk ICpob3N0LCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmFtX2Jsb2NrX25vdGlmeV9hZGQodm9pZCAqaG9z dCwgc2l6ZV90IHNpemUsIHNpemVfdCBtYXhfc2l6ZSkKIHsKICAgICBSQU1CbG9ja05vdGlmaWVy ICpub3RpZmllcjsKIAogICAgIFFMSVNUX0ZPUkVBQ0gobm90aWZpZXIsICZyYW1fbGlzdC5yYW1i bG9ja19ub3RpZmllcnMsIG5leHQpIHsKLSAgICAgICAgbm90aWZpZXItPnJhbV9ibG9ja19hZGRl ZChub3RpZmllciwgaG9zdCwgc2l6ZSk7CisgICAgICAgIG5vdGlmaWVyLT5yYW1fYmxvY2tfYWRk ZWQobm90aWZpZXIsIGhvc3QsIHNpemUsIG1heF9zaXplKTsKICAgICB9CiB9CiAKLXZvaWQgcmFt X2Jsb2NrX25vdGlmeV9yZW1vdmUodm9pZCAqaG9zdCwgc2l6ZV90IHNpemUpCit2b2lkIHJhbV9i bG9ja19ub3RpZnlfcmVtb3ZlKHZvaWQgKmhvc3QsIHNpemVfdCBzaXplLCBzaXplX3QgbWF4X3Np emUpCiB7CiAgICAgUkFNQmxvY2tOb3RpZmllciAqbm90aWZpZXI7CiAKICAgICBRTElTVF9GT1JF QUNIKG5vdGlmaWVyLCAmcmFtX2xpc3QucmFtYmxvY2tfbm90aWZpZXJzLCBuZXh0KSB7Ci0gICAg ICAgIG5vdGlmaWVyLT5yYW1fYmxvY2tfcmVtb3ZlZChub3RpZmllciwgaG9zdCwgc2l6ZSk7Cisg ICAgICAgIG5vdGlmaWVyLT5yYW1fYmxvY2tfcmVtb3ZlZChub3RpZmllciwgaG9zdCwgc2l6ZSwg bWF4X3NpemUpOworICAgIH0KK30KKwordm9pZCByYW1fYmxvY2tfbm90aWZ5X3Jlc2l6ZSh2b2lk ICpob3N0LCBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICBSQU1CbG9j a05vdGlmaWVyICpub3RpZmllcjsKKworICAgIFFMSVNUX0ZPUkVBQ0gobm90aWZpZXIsICZyYW1f bGlzdC5yYW1ibG9ja19ub3RpZmllcnMsIG5leHQpIHsKKyAgICAgICAgaWYgKG5vdGlmaWVyLT5y YW1fYmxvY2tfcmVzaXplZCkgeworICAgICAgICAgICAgbm90aWZpZXItPnJhbV9ibG9ja19yZXNp emVkKG5vdGlmaWVyLCBob3N0LCBvbGRfc2l6ZSwgbmV3X3NpemUpOworICAgICAgICB9CiAgICAg fQogfQpkaWZmIC0tZ2l0IGEvaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMgYi9ody9pMzg2L3hl bi94ZW4tbWFwY2FjaGUuYwppbmRleCA1YjEyMGVkNDRiLi5kNmRjZWE2NWQxIDEwMDY0NAotLS0g YS9ody9pMzg2L3hlbi94ZW4tbWFwY2FjaGUuYworKysgYi9ody9pMzg2L3hlbi94ZW4tbWFwY2Fj aGUuYwpAQCAtMTY5LDcgKzE2OSw4IEBAIHN0YXRpYyB2b2lkIHhlbl9yZW1hcF9idWNrZXQoTWFw Q2FjaGVFbnRyeSAqZW50cnksCiAKICAgICBpZiAoZW50cnktPnZhZGRyX2Jhc2UgIT0gTlVMTCkg ewogICAgICAgICBpZiAoIShlbnRyeS0+ZmxhZ3MgJiBYRU5fTUFQQ0FDSEVfRU5UUllfRFVNTVkp KSB7Ci0gICAgICAgICAgICByYW1fYmxvY2tfbm90aWZ5X3JlbW92ZShlbnRyeS0+dmFkZHJfYmFz ZSwgZW50cnktPnNpemUpOworICAgICAgICAgICAgcmFtX2Jsb2NrX25vdGlmeV9yZW1vdmUoZW50 cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW50cnktPnNpemUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtdW5tYXAoZW50 cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKSAhPSAwKSB7CiAgICAgICAgICAgICBwZXJyb3Io InVubWFwIGZhaWxzIik7CkBAIC0yMTEsNyArMjEyLDcgQEAgc3RhdGljIHZvaWQgeGVuX3JlbWFw X2J1Y2tldChNYXBDYWNoZUVudHJ5ICplbnRyeSwKICAgICB9CiAKICAgICBpZiAoIShlbnRyeS0+ ZmxhZ3MgJiBYRU5fTUFQQ0FDSEVfRU5UUllfRFVNTVkpKSB7Ci0gICAgICAgIHJhbV9ibG9ja19u b3RpZnlfYWRkKHZhZGRyX2Jhc2UsIHNpemUpOworICAgICAgICByYW1fYmxvY2tfbm90aWZ5X2Fk ZCh2YWRkcl9iYXNlLCBzaXplLCBzaXplKTsKICAgICB9CiAKICAgICBlbnRyeS0+dmFkZHJfYmFz ZSA9IHZhZGRyX2Jhc2U7CkBAIC00NTIsNyArNDUzLDcgQEAgc3RhdGljIHZvaWQgeGVuX2ludmFs aWRhdGVfbWFwX2NhY2hlX2VudHJ5X3VubG9ja2VkKHVpbnQ4X3QgKmJ1ZmZlcikKICAgICB9CiAK ICAgICBwZW50cnktPm5leHQgPSBlbnRyeS0+bmV4dDsKLSAgICByYW1fYmxvY2tfbm90aWZ5X3Jl bW92ZShlbnRyeS0+dmFkZHJfYmFzZSwgZW50cnktPnNpemUpOworICAgIHJhbV9ibG9ja19ub3Rp ZnlfcmVtb3ZlKGVudHJ5LT52YWRkcl9iYXNlLCBlbnRyeS0+c2l6ZSwgZW50cnktPnNpemUpOwog ICAgIGlmIChtdW5tYXAoZW50cnktPnZhZGRyX2Jhc2UsIGVudHJ5LT5zaXplKSAhPSAwKSB7CiAg ICAgICAgIHBlcnJvcigidW5tYXAgZmFpbHMiKTsKICAgICAgICAgZXhpdCgtMSk7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2V4ZWMvcmFtbGlzdC5oIGIvaW5jbHVkZS9leGVjL3JhbWxpc3QuaAppbmRl eCBiYzRmYWExYjAwLi4yOTNjMGRkYWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2V4ZWMvcmFtbGlz dC5oCisrKyBiL2luY2x1ZGUvZXhlYy9yYW1saXN0LmgKQEAgLTY1LDE1ICs2NSwyMCBAQCB2b2lk IHFlbXVfbXV0ZXhfbG9ja19yYW1saXN0KHZvaWQpOwogdm9pZCBxZW11X211dGV4X3VubG9ja19y YW1saXN0KHZvaWQpOwogCiBzdHJ1Y3QgUkFNQmxvY2tOb3RpZmllciB7Ci0gICAgdm9pZCAoKnJh bV9ibG9ja19hZGRlZCkoUkFNQmxvY2tOb3RpZmllciAqbiwgdm9pZCAqaG9zdCwgc2l6ZV90IHNp emUpOwotICAgIHZvaWQgKCpyYW1fYmxvY2tfcmVtb3ZlZCkoUkFNQmxvY2tOb3RpZmllciAqbiwg dm9pZCAqaG9zdCwgc2l6ZV90IHNpemUpOworICAgIHZvaWQgKCpyYW1fYmxvY2tfYWRkZWQpKFJB TUJsb2NrTm90aWZpZXIgKm4sIHZvaWQgKmhvc3QsIHNpemVfdCBzaXplLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfc2l6ZSk7CisgICAgdm9pZCAoKnJhbV9ibG9ja19y ZW1vdmVkKShSQU1CbG9ja05vdGlmaWVyICpuLCB2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfc2l6ZSk7CisgICAgdm9pZCAo KnJhbV9ibG9ja19yZXNpemVkKShSQU1CbG9ja05vdGlmaWVyICpuLCB2b2lkICpob3N0LCBzaXpl X3Qgb2xkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3X3Np emUpOwogICAgIFFMSVNUX0VOVFJZKFJBTUJsb2NrTm90aWZpZXIpIG5leHQ7CiB9OwogCiB2b2lk IHJhbV9ibG9ja19ub3RpZmllcl9hZGQoUkFNQmxvY2tOb3RpZmllciAqbik7CiB2b2lkIHJhbV9i bG9ja19ub3RpZmllcl9yZW1vdmUoUkFNQmxvY2tOb3RpZmllciAqbik7Ci12b2lkIHJhbV9ibG9j a19ub3RpZnlfYWRkKHZvaWQgKmhvc3QsIHNpemVfdCBzaXplKTsKLXZvaWQgcmFtX2Jsb2NrX25v dGlmeV9yZW1vdmUodm9pZCAqaG9zdCwgc2l6ZV90IHNpemUpOwordm9pZCByYW1fYmxvY2tfbm90 aWZ5X2FkZCh2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG1heF9zaXplKTsKK3ZvaWQg cmFtX2Jsb2NrX25vdGlmeV9yZW1vdmUodm9pZCAqaG9zdCwgc2l6ZV90IHNpemUsIHNpemVfdCBt YXhfc2l6ZSk7Cit2b2lkIHJhbV9ibG9ja19ub3RpZnlfcmVzaXplKHZvaWQgKmhvc3QsIHNpemVf dCBvbGRfc2l6ZSwgc2l6ZV90IG5ld19zaXplKTsKIAogdm9pZCByYW1fYmxvY2tfZHVtcChNb25p dG9yICptb24pOwogCmRpZmYgLS1naXQgYS90YXJnZXQvaTM4Ni9oYXgtbWVtLmMgYi90YXJnZXQv aTM4Ni9oYXgtbWVtLmMKaW5kZXggNmJiNWEyNDkxNy4uNDU0ZDdmYjIxMiAxMDA2NDQKLS0tIGEv dGFyZ2V0L2kzODYvaGF4LW1lbS5jCisrKyBiL3RhcmdldC9pMzg2L2hheC1tZW0uYwpAQCAtMjkz LDcgKzI5Myw4IEBAIHN0YXRpYyBNZW1vcnlMaXN0ZW5lciBoYXhfbWVtb3J5X2xpc3RlbmVyID0g ewogICAgIC5wcmlvcml0eSA9IDEwLAogfTsKIAotc3RhdGljIHZvaWQgaGF4X3JhbV9ibG9ja19h ZGRlZChSQU1CbG9ja05vdGlmaWVyICpuLCB2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSkKK3N0YXRp YyB2b2lkIGhheF9yYW1fYmxvY2tfYWRkZWQoUkFNQmxvY2tOb3RpZmllciAqbiwgdm9pZCAqaG9z dCwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBt YXhfc2l6ZSkKIHsKICAgICAvKgogICAgICAqIFdlIG11c3QgcmVnaXN0ZXIgZWFjaCBSQU0gYmxv Y2sgd2l0aCB0aGUgSEFYTSBrZXJuZWwgbW9kdWxlLCBvcgpAQCAtMzA0LDcgKzMwNSw3IEBAIHN0 YXRpYyB2b2lkIGhheF9yYW1fYmxvY2tfYWRkZWQoUkFNQmxvY2tOb3RpZmllciAqbiwgdm9pZCAq aG9zdCwgc2l6ZV90IHNpemUpCiAgICAgICogaG9zdCBwaHlzaWNhbCBwYWdlcyBmb3IgdGhlIFJB TSBibG9jayBhcyBwYXJ0IG9mIHRoaXMgcmVnaXN0cmF0aW9uCiAgICAgICogcHJvY2VzcywgaGVu Y2UgdGhlIG5hbWUgaGF4X3BvcHVsYXRlX3JhbSgpLgogICAgICAqLwotICAgIGlmIChoYXhfcG9w dWxhdGVfcmFtKCh1aW50NjRfdCkodWludHB0cl90KWhvc3QsIHNpemUpIDwgMCkgeworICAgIGlm IChoYXhfcG9wdWxhdGVfcmFtKCh1aW50NjRfdCkodWludHB0cl90KWhvc3QsIG1heF9zaXplKSA8 IDApIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJIQVggZmFpbGVkIHRvIHBvcHVsYXRlIFJB TVxuIik7CiAgICAgICAgIGFib3J0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2kzODYv c2V2LmMgYi90YXJnZXQvaTM4Ni9zZXYuYwppbmRleCAwMjRiYjI0ZTUxLi42YjRjZWUyNGEyIDEw MDY0NAotLS0gYS90YXJnZXQvaTM4Ni9zZXYuYworKysgYi90YXJnZXQvaTM4Ni9zZXYuYwpAQCAt MTI5LDcgKzEyOSw4IEBAIHNldl9zZXRfZ3Vlc3Rfc3RhdGUoU2V2U3RhdGUgbmV3X3N0YXRlKQog fQogCiBzdGF0aWMgdm9pZAotc2V2X3JhbV9ibG9ja19hZGRlZChSQU1CbG9ja05vdGlmaWVyICpu LCB2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSkKK3Nldl9yYW1fYmxvY2tfYWRkZWQoUkFNQmxvY2tO b3RpZmllciAqbiwgdm9pZCAqaG9zdCwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAg IHNpemVfdCBtYXhfc2l6ZSkKIHsKICAgICBpbnQgcjsKICAgICBzdHJ1Y3Qga3ZtX2VuY19yZWdp b24gcmFuZ2U7CkBAIC0xNDYsMTkgKzE0NywyMCBAQCBzZXZfcmFtX2Jsb2NrX2FkZGVkKFJBTUJs b2NrTm90aWZpZXIgKm4sIHZvaWQgKmhvc3QsIHNpemVfdCBzaXplKQogICAgIH0KIAogICAgIHJh bmdlLmFkZHIgPSAoX191NjQpKHVuc2lnbmVkIGxvbmcpaG9zdDsKLSAgICByYW5nZS5zaXplID0g c2l6ZTsKKyAgICByYW5nZS5zaXplID0gbWF4X3NpemU7CiAKLSAgICB0cmFjZV9rdm1fbWVtY3J5 cHRfcmVnaXN0ZXJfcmVnaW9uKGhvc3QsIHNpemUpOworICAgIHRyYWNlX2t2bV9tZW1jcnlwdF9y ZWdpc3Rlcl9yZWdpb24oaG9zdCwgbWF4X3NpemUpOwogICAgIHIgPSBrdm1fdm1faW9jdGwoa3Zt X3N0YXRlLCBLVk1fTUVNT1JZX0VOQ1JZUFRfUkVHX1JFR0lPTiwgJnJhbmdlKTsKICAgICBpZiAo cikgewogICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgcmVnaW9u ICglcCslI3p4KSBlcnJvciAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBo b3N0LCBzaXplLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICAgX19mdW5j X18sIGhvc3QsIG1heF9zaXplLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgICBleGl0KDEpOwog ICAgIH0KIH0KIAogc3RhdGljIHZvaWQKLXNldl9yYW1fYmxvY2tfcmVtb3ZlZChSQU1CbG9ja05v dGlmaWVyICpuLCB2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSkKK3Nldl9yYW1fYmxvY2tfcmVtb3Zl ZChSQU1CbG9ja05vdGlmaWVyICpuLCB2b2lkICpob3N0LCBzaXplX3Qgc2l6ZSwKKyAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbWF4X3NpemUpCiB7CiAgICAgaW50IHI7CiAgICAgc3RydWN0 IGt2bV9lbmNfcmVnaW9uIHJhbmdlOwpAQCAtMTc1LDEzICsxNzcsMTMgQEAgc2V2X3JhbV9ibG9j a19yZW1vdmVkKFJBTUJsb2NrTm90aWZpZXIgKm4sIHZvaWQgKmhvc3QsIHNpemVfdCBzaXplKQog ICAgIH0KIAogICAgIHJhbmdlLmFkZHIgPSAoX191NjQpKHVuc2lnbmVkIGxvbmcpaG9zdDsKLSAg ICByYW5nZS5zaXplID0gc2l6ZTsKKyAgICByYW5nZS5zaXplID0gbWF4X3NpemU7CiAKLSAgICB0 cmFjZV9rdm1fbWVtY3J5cHRfdW5yZWdpc3Rlcl9yZWdpb24oaG9zdCwgc2l6ZSk7CisgICAgdHJh Y2Vfa3ZtX21lbWNyeXB0X3VucmVnaXN0ZXJfcmVnaW9uKGhvc3QsIG1heF9zaXplKTsKICAgICBy ID0ga3ZtX3ZtX2lvY3RsKGt2bV9zdGF0ZSwgS1ZNX01FTU9SWV9FTkNSWVBUX1VOUkVHX1JFR0lP TiwgJnJhbmdlKTsKICAgICBpZiAocikgewogICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBmYWls ZWQgdG8gdW5yZWdpc3RlciByZWdpb24gKCVwKyUjengpIiwKLSAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCBob3N0LCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBo b3N0LCBtYXhfc2l6ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS91dGlsL3ZmaW8taGVscGVy cy5jIGIvdXRpbC92ZmlvLWhlbHBlcnMuYwppbmRleCA3MWUwMmU3ZjM1Li42MWEwY2Y2ZTEyIDEw MDY0NAotLS0gYS91dGlsL3ZmaW8taGVscGVycy5jCisrKyBiL3V0aWwvdmZpby1oZWxwZXJzLmMK QEAgLTM3MiwyNSArMzcyLDI2IEBAIGZhaWxfY29udGFpbmVyOgogICAgIHJldHVybiByZXQ7CiB9 CiAKLXN0YXRpYyB2b2lkIHFlbXVfdmZpb19yYW1fYmxvY2tfYWRkZWQoUkFNQmxvY2tOb3RpZmll ciAqbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaG9zdCwg c2l6ZV90IHNpemUpCitzdGF0aWMgdm9pZCBxZW11X3ZmaW9fcmFtX2Jsb2NrX2FkZGVkKFJBTUJs b2NrTm90aWZpZXIgKm4sIHZvaWQgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgbWF4X3NpemUpCiB7CiAgICAgUUVNVVZGSU9T dGF0ZSAqcyA9IGNvbnRhaW5lcl9vZihuLCBRRU1VVkZJT1N0YXRlLCByYW1fbm90aWZpZXIpOwog ICAgIGludCByZXQ7CiAKLSAgICB0cmFjZV9xZW11X3ZmaW9fcmFtX2Jsb2NrX2FkZGVkKHMsIGhv c3QsIHNpemUpOwotICAgIHJldCA9IHFlbXVfdmZpb19kbWFfbWFwKHMsIGhvc3QsIHNpemUsIGZh bHNlLCBOVUxMKTsKKyAgICB0cmFjZV9xZW11X3ZmaW9fcmFtX2Jsb2NrX2FkZGVkKHMsIGhvc3Qs IG1heF9zaXplKTsKKyAgICByZXQgPSBxZW11X3ZmaW9fZG1hX21hcChzLCBob3N0LCBtYXhfc2l6 ZSwgZmFsc2UsIE5VTEwpOwogICAgIGlmIChyZXQpIHsKLSAgICAgICAgZXJyb3JfcmVwb3J0KCJx ZW11X3ZmaW9fZG1hX21hcCglcCwgJXp1KSBmYWlsZWQ6ICVkIiwgaG9zdCwgc2l6ZSwgcmV0KTsK KyAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11X3ZmaW9fZG1hX21hcCglcCwgJXp1KSBmYWlsZWQ6 ICVkIiwgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgIG1heF9zaXplLCByZXQpOwogICAgIH0K IH0KIAotc3RhdGljIHZvaWQgcWVtdV92ZmlvX3JhbV9ibG9ja19yZW1vdmVkKFJBTUJsb2NrTm90 aWZpZXIgKm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq aG9zdCwgc2l6ZV90IHNpemUpCitzdGF0aWMgdm9pZCBxZW11X3ZmaW9fcmFtX2Jsb2NrX3JlbW92 ZWQoUkFNQmxvY2tOb3RpZmllciAqbiwgdm9pZCAqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IG1heF9zaXplKQogewogICAg IFFFTVVWRklPU3RhdGUgKnMgPSBjb250YWluZXJfb2YobiwgUUVNVVZGSU9TdGF0ZSwgcmFtX25v dGlmaWVyKTsKICAgICBpZiAoaG9zdCkgewotICAgICAgICB0cmFjZV9xZW11X3ZmaW9fcmFtX2Js b2NrX3JlbW92ZWQocywgaG9zdCwgc2l6ZSk7CisgICAgICAgIHRyYWNlX3FlbXVfdmZpb19yYW1f YmxvY2tfcmVtb3ZlZChzLCBob3N0LCBtYXhfc2l6ZSk7CiAgICAgICAgIHFlbXVfdmZpb19kbWFf dW5tYXAocywgaG9zdCk7CiAgICAgfQogfQotLSAKMi4yNC4xCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==