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=-11.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 967E0C433E7 for ; Tue, 20 Oct 2020 06:13:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 32E85223C6 for ; Tue, 20 Oct 2020 06:13:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MzswtTp+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403764AbgJTGN3 (ORCPT ); Tue, 20 Oct 2020 02:13:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:38848 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391970AbgJTGN0 (ORCPT ); Tue, 20 Oct 2020 02:13:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603174403; 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=wAhzmxdGMaPH2K6G8brb+MS2EAJ7Xgyblnfd/oBjiTQ=; b=MzswtTp+8BcXqY0iQmu2EJQnHf6g2j6JFUNf0dQR8sJjW896eQ0x7KHubzaIJjoNJpQ9bc LzQUugqq4liox7/5McwP+t++AJeJ94Q/3x5APWV3V5M6dhH17JKgVsjDta+6Z8F8waCxtF OzVksag9frREy1jPbYJgOlDOLfMLl88= 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-408-n0i3K6bjMdWt8pKIgMOSHA-1; Tue, 20 Oct 2020 02:13:19 -0400 X-MC-Unique: n0i3K6bjMdWt8pKIgMOSHA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C3F0B57051; Tue, 20 Oct 2020 06:13:16 +0000 (UTC) Received: from [10.72.13.171] (ovpn-13-171.pek2.redhat.com [10.72.13.171]) by smtp.corp.redhat.com (Postfix) with ESMTP id EE2BD60BF3; Tue, 20 Oct 2020 06:13:07 +0000 (UTC) Subject: Re: [PATCH net v2] Revert "virtio-net: ethtool configurable RXCSUM" To: "Michael S. Tsirkin" , linux-kernel@vger.kernel.org Cc: Tonghao Zhang , Willem de Bruijn , kernel test robot , "David S. Miller" , Jakub Kicinski , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, bpf@vger.kernel.org References: <20201018103122.454967-1-mst@redhat.com> From: Jason Wang Message-ID: Date: Tue, 20 Oct 2020 14:13:06 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201018103122.454967-1-mst@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020/10/20 上午1:32, Michael S. Tsirkin wrote: > This reverts commit 3618ad2a7c0e78e4258386394d5d5f92a3dbccf8. > > When the device does not have a control vq (e.g. when using a > version of QEMU based on upstream v0.10 or older, or when specifying > ctrl_vq=off,ctrl_rx=off,ctrl_vlan=off,ctrl_rx_extra=off,ctrl_mac_addr=off > for the device on the QEMU command line), that commit causes a crash: > > [ 72.229171] kernel BUG at drivers/net/virtio_net.c:1667! > [ 72.230266] invalid opcode: 0000 [#1] PREEMPT SMP > [ 72.231172] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.9.0-rc8-02934-g3618ad2a7c0e7 #1 > [ 72.231172] EIP: virtnet_send_command+0x120/0x140 > [ 72.231172] Code: 00 0f 94 c0 8b 7d f0 65 33 3d 14 00 00 00 75 1c 8d 65 f4 5b 5e 5f 5d c3 66 90 be 01 00 00 00 e9 6e ff ff ff 8d b6 00 > +00 00 00 <0f> 0b e8 d9 bb 82 00 eb 17 8d b4 26 00 00 00 00 8d b4 26 00 00 00 > [ 72.231172] EAX: 0000000d EBX: f72895c0 ECX: 00000017 EDX: 00000011 > [ 72.231172] ESI: f7197800 EDI: ed69bd00 EBP: ed69bcf4 ESP: ed69bc98 > [ 72.231172] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00010246 > [ 72.231172] CR0: 80050033 CR2: 00000000 CR3: 02c84000 CR4: 000406f0 > [ 72.231172] Call Trace: > [ 72.231172] ? __virt_addr_valid+0x45/0x60 > [ 72.231172] ? ___cache_free+0x51f/0x760 > [ 72.231172] ? kobject_uevent_env+0xf4/0x560 > [ 72.231172] virtnet_set_guest_offloads+0x4d/0x80 > [ 72.231172] virtnet_set_features+0x85/0x120 > [ 72.231172] ? virtnet_set_guest_offloads+0x80/0x80 > [ 72.231172] __netdev_update_features+0x27a/0x8e0 > [ 72.231172] ? kobject_uevent+0xa/0x20 > [ 72.231172] ? netdev_register_kobject+0x12c/0x160 > [ 72.231172] register_netdevice+0x4fe/0x740 > [ 72.231172] register_netdev+0x1c/0x40 > [ 72.231172] virtnet_probe+0x728/0xb60 > [ 72.231172] ? _raw_spin_unlock+0x1d/0x40 > [ 72.231172] ? virtio_vdpa_get_status+0x1c/0x20 > [ 72.231172] virtio_dev_probe+0x1c6/0x271 > [ 72.231172] really_probe+0x195/0x2e0 > [ 72.231172] driver_probe_device+0x26/0x60 > [ 72.231172] device_driver_attach+0x49/0x60 > [ 72.231172] __driver_attach+0x46/0xc0 > [ 72.231172] ? device_driver_attach+0x60/0x60 > [ 72.231172] bus_add_driver+0x197/0x1c0 > [ 72.231172] driver_register+0x66/0xc0 > [ 72.231172] register_virtio_driver+0x1b/0x40 > [ 72.231172] virtio_net_driver_init+0x61/0x86 > [ 72.231172] ? veth_init+0x14/0x14 > [ 72.231172] do_one_initcall+0x76/0x2e4 > [ 72.231172] ? rdinit_setup+0x2a/0x2a > [ 72.231172] do_initcalls+0xb2/0xd5 > [ 72.231172] kernel_init_freeable+0x14f/0x179 > [ 72.231172] ? rest_init+0x100/0x100 > [ 72.231172] kernel_init+0xd/0xe0 > [ 72.231172] ret_from_fork+0x1c/0x30 > [ 72.231172] Modules linked in: > [ 72.269563] ---[ end trace a6ebc4afea0e6cb1 ]--- > > The reason is that virtnet_set_features now calls virtnet_set_guest_offloads > unconditionally, it used to only call it when there is something > to configure. > > If device does not have a control vq, everything breaks. > > Looking at this some more, I noticed that it's not really checking the > hardware too much. E.g. > > if ((dev->features ^ features) & NETIF_F_LRO) { > if (features & NETIF_F_LRO) > offloads |= GUEST_OFFLOAD_LRO_MASK & > vi->guest_offloads_capable; > else > offloads &= ~GUEST_OFFLOAD_LRO_MASK; > } > > and > > (1ULL << VIRTIO_NET_F_GUEST_TSO6) | \ > (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ > (1ULL << VIRTIO_NET_F_GUEST_UFO)) > > But there's no guarantee that e.g. VIRTIO_NET_F_GUEST_TSO6 is set. > > If it isn't command should not send it. > > Further > > static int virtnet_set_features(struct net_device *dev, > netdev_features_t features) > { > struct virtnet_info *vi = netdev_priv(dev); > u64 offloads = vi->guest_offloads; > > seems wrong since guest_offloads is zero initialized, I'm not sure I get here. Did you mean vi->guest_offloads? We initialize it during probe     for (i = 0; i < ARRAY_SIZE(guest_offloads); i++)         if (virtio_has_feature(vi->vdev, guest_offloads[i]))             set_bit(guest_offloads[i], &vi->guest_offloads); > it does not reflect the state after reset which comes from > the features. > > Revert the original commit for now. > > Cc: Tonghao Zhang > Cc: Willem de Bruijn > Fixes: 3618ad2a7c0e7 ("virtio-net: ethtool configurable RXCSUM") > Reported-by: kernel test robot > Signed-off-by: Michael S. Tsirkin > --- > > changes from v1: > - clarify how to reproduce the bug in the log > > > drivers/net/virtio_net.c | 50 +++++++++++----------------------------- > 1 file changed, 13 insertions(+), 37 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index d2d2c4a53cf2..21b71148c532 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -68,8 +68,6 @@ static const unsigned long guest_offloads[] = { > (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ > (1ULL << VIRTIO_NET_F_GUEST_UFO)) > > -#define GUEST_OFFLOAD_CSUM_MASK (1ULL << VIRTIO_NET_F_GUEST_CSUM) > - > struct virtnet_stat_desc { > char desc[ETH_GSTRING_LEN]; > size_t offset; > @@ -2524,48 +2522,29 @@ static int virtnet_get_phys_port_name(struct net_device *dev, char *buf, > return 0; > } > > -static netdev_features_t virtnet_fix_features(struct net_device *netdev, > - netdev_features_t features) > -{ > - /* If Rx checksum is disabled, LRO should also be disabled. */ > - if (!(features & NETIF_F_RXCSUM)) > - features &= ~NETIF_F_LRO; > - > - return features; > -} > - > static int virtnet_set_features(struct net_device *dev, > netdev_features_t features) > { > struct virtnet_info *vi = netdev_priv(dev); > - u64 offloads = vi->guest_offloads; > + u64 offloads; > int err; > > - /* Don't allow configuration while XDP is active. */ > - if (vi->xdp_queue_pairs) > - return -EBUSY; > - > if ((dev->features ^ features) & NETIF_F_LRO) { > + if (vi->xdp_queue_pairs) > + return -EBUSY; > + > if (features & NETIF_F_LRO) > - offloads |= GUEST_OFFLOAD_LRO_MASK & > - vi->guest_offloads_capable; > + offloads = vi->guest_offloads_capable; > else > - offloads &= ~GUEST_OFFLOAD_LRO_MASK; > + offloads = vi->guest_offloads_capable & > + ~GUEST_OFFLOAD_LRO_MASK; > + > + err = virtnet_set_guest_offloads(vi, offloads); > + if (err) > + return err; > + vi->guest_offloads = offloads; > } > > - if ((dev->features ^ features) & NETIF_F_RXCSUM) { > - if (features & NETIF_F_RXCSUM) > - offloads |= GUEST_OFFLOAD_CSUM_MASK & > - vi->guest_offloads_capable; > - else > - offloads &= ~GUEST_OFFLOAD_CSUM_MASK; > - } > - > - err = virtnet_set_guest_offloads(vi, offloads); > - if (err) > - return err; > - > - vi->guest_offloads = offloads; > return 0; > } > > @@ -2584,7 +2563,6 @@ static const struct net_device_ops virtnet_netdev = { > .ndo_features_check = passthru_features_check, > .ndo_get_phys_port_name = virtnet_get_phys_port_name, > .ndo_set_features = virtnet_set_features, > - .ndo_fix_features = virtnet_fix_features, > }; > > static void virtnet_config_changed_work(struct work_struct *work) > @@ -3035,10 +3013,8 @@ static int virtnet_probe(struct virtio_device *vdev) > if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO4) || > virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO6)) > dev->features |= NETIF_F_LRO; > - if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) { > - dev->hw_features |= NETIF_F_RXCSUM; > + if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) > dev->hw_features |= NETIF_F_LRO; > - } > > dev->vlan_features = dev->features; > 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=-11.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 6DDC6C43457 for ; Tue, 20 Oct 2020 06:13:39 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 B451F222C8 for ; Tue, 20 Oct 2020 06:13:38 +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="MzswtTp+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B451F222C8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 1E4172E194; Tue, 20 Oct 2020 06:13:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2FBE+u1U7fhJ; Tue, 20 Oct 2020 06:13:28 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 4CB422E199; Tue, 20 Oct 2020 06:13:28 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EACA2C0052; Tue, 20 Oct 2020 06:13:27 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 68A10C0051 for ; Tue, 20 Oct 2020 06:13:26 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 56DE98701E for ; Tue, 20 Oct 2020 06:13:26 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yYBqJWhxBUPG for ; Tue, 20 Oct 2020 06:13:24 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by whitealder.osuosl.org (Postfix) with ESMTPS id B077386EC7 for ; Tue, 20 Oct 2020 06:13:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603174403; 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=wAhzmxdGMaPH2K6G8brb+MS2EAJ7Xgyblnfd/oBjiTQ=; b=MzswtTp+8BcXqY0iQmu2EJQnHf6g2j6JFUNf0dQR8sJjW896eQ0x7KHubzaIJjoNJpQ9bc LzQUugqq4liox7/5McwP+t++AJeJ94Q/3x5APWV3V5M6dhH17JKgVsjDta+6Z8F8waCxtF OzVksag9frREy1jPbYJgOlDOLfMLl88= 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-408-n0i3K6bjMdWt8pKIgMOSHA-1; Tue, 20 Oct 2020 02:13:19 -0400 X-MC-Unique: n0i3K6bjMdWt8pKIgMOSHA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C3F0B57051; Tue, 20 Oct 2020 06:13:16 +0000 (UTC) Received: from [10.72.13.171] (ovpn-13-171.pek2.redhat.com [10.72.13.171]) by smtp.corp.redhat.com (Postfix) with ESMTP id EE2BD60BF3; Tue, 20 Oct 2020 06:13:07 +0000 (UTC) Subject: Re: [PATCH net v2] Revert "virtio-net: ethtool configurable RXCSUM" To: "Michael S. Tsirkin" , linux-kernel@vger.kernel.org References: <20201018103122.454967-1-mst@redhat.com> From: Jason Wang Message-ID: Date: Tue, 20 Oct 2020 14:13:06 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201018103122.454967-1-mst@redhat.com> Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Cc: Willem de Bruijn , kernel test robot , Daniel Borkmann , netdev@vger.kernel.org, bpf@vger.kernel.org, John Fastabend , Alexei Starovoitov , virtualization@lists.linux-foundation.org, Jakub Kicinski , "David S. Miller" , Jesper Dangaard Brouer X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" Ck9uIDIwMjAvMTAvMjAg5LiK5Y2IMTozMiwgTWljaGFlbCBTLiBUc2lya2luIHdyb3RlOgo+IFRo aXMgcmV2ZXJ0cyBjb21taXQgMzYxOGFkMmE3YzBlNzhlNDI1ODM4NjM5NGQ1ZDVmOTJhM2RiY2Nm OC4KPgo+IFdoZW4gdGhlIGRldmljZSBkb2VzIG5vdCBoYXZlIGEgY29udHJvbCB2cSAoZS5nLiB3 aGVuIHVzaW5nIGEKPiB2ZXJzaW9uIG9mIFFFTVUgYmFzZWQgb24gdXBzdHJlYW0gdjAuMTAgb3Ig b2xkZXIsIG9yIHdoZW4gc3BlY2lmeWluZwo+IGN0cmxfdnE9b2ZmLGN0cmxfcng9b2ZmLGN0cmxf dmxhbj1vZmYsY3RybF9yeF9leHRyYT1vZmYsY3RybF9tYWNfYWRkcj1vZmYKPiBmb3IgdGhlIGRl dmljZSBvbiB0aGUgUUVNVSBjb21tYW5kIGxpbmUpLCB0aGF0IGNvbW1pdCBjYXVzZXMgYSBjcmFz aDoKPgo+IFsgICA3Mi4yMjkxNzFdIGtlcm5lbCBCVUcgYXQgZHJpdmVycy9uZXQvdmlydGlvX25l dC5jOjE2NjchCj4gWyAgIDcyLjIzMDI2Nl0gaW52YWxpZCBvcGNvZGU6IDAwMDAgWyMxXSBQUkVF TVBUIFNNUAo+IFsgICA3Mi4yMzExNzJdIENQVTogMCBQSUQ6IDEgQ29tbTogc3dhcHBlci8wIE5v dCB0YWludGVkIDUuOS4wLXJjOC0wMjkzNC1nMzYxOGFkMmE3YzBlNyAjMQo+IFsgICA3Mi4yMzEx NzJdIEVJUDogdmlydG5ldF9zZW5kX2NvbW1hbmQrMHgxMjAvMHgxNDAKPiBbICAgNzIuMjMxMTcy XSBDb2RlOiAwMCAwZiA5NCBjMCA4YiA3ZCBmMCA2NSAzMyAzZCAxNCAwMCAwMCAwMCA3NSAxYyA4 ZCA2NSBmNCA1YiA1ZSA1ZiA1ZCBjMyA2NiA5MCBiZSAwMSAwMCAwMCAwMCBlOSA2ZSBmZiBmZiBm ZiA4ZCBiNiAwMAo+ICswMCAwMCAwMCA8MGY+IDBiIGU4IGQ5IGJiIDgyIDAwIGViIDE3IDhkIGI0 IDI2IDAwIDAwIDAwIDAwIDhkIGI0IDI2IDAwIDAwIDAwCj4gWyAgIDcyLjIzMTE3Ml0gRUFYOiAw MDAwMDAwZCBFQlg6IGY3Mjg5NWMwIEVDWDogMDAwMDAwMTcgRURYOiAwMDAwMDAxMQo+IFsgICA3 Mi4yMzExNzJdIEVTSTogZjcxOTc4MDAgRURJOiBlZDY5YmQwMCBFQlA6IGVkNjliY2Y0IEVTUDog ZWQ2OWJjOTgKPiBbICAgNzIuMjMxMTcyXSBEUzogMDA3YiBFUzogMDA3YiBGUzogMDBkOCBHUzog MDBlMCBTUzogMDA2OCBFRkxBR1M6IDAwMDEwMjQ2Cj4gWyAgIDcyLjIzMTE3Ml0gQ1IwOiA4MDA1 MDAzMyBDUjI6IDAwMDAwMDAwIENSMzogMDJjODQwMDAgQ1I0OiAwMDA0MDZmMAo+IFsgICA3Mi4y MzExNzJdIENhbGwgVHJhY2U6Cj4gWyAgIDcyLjIzMTE3Ml0gID8gX192aXJ0X2FkZHJfdmFsaWQr MHg0NS8weDYwCj4gWyAgIDcyLjIzMTE3Ml0gID8gX19fY2FjaGVfZnJlZSsweDUxZi8weDc2MAo+ IFsgICA3Mi4yMzExNzJdICA/IGtvYmplY3RfdWV2ZW50X2VudisweGY0LzB4NTYwCj4gWyAgIDcy LjIzMTE3Ml0gIHZpcnRuZXRfc2V0X2d1ZXN0X29mZmxvYWRzKzB4NGQvMHg4MAo+IFsgICA3Mi4y MzExNzJdICB2aXJ0bmV0X3NldF9mZWF0dXJlcysweDg1LzB4MTIwCj4gWyAgIDcyLjIzMTE3Ml0g ID8gdmlydG5ldF9zZXRfZ3Vlc3Rfb2ZmbG9hZHMrMHg4MC8weDgwCj4gWyAgIDcyLjIzMTE3Ml0g IF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcysweDI3YS8weDhlMAo+IFsgICA3Mi4yMzExNzJdICA/ IGtvYmplY3RfdWV2ZW50KzB4YS8weDIwCj4gWyAgIDcyLjIzMTE3Ml0gID8gbmV0ZGV2X3JlZ2lz dGVyX2tvYmplY3QrMHgxMmMvMHgxNjAKPiBbICAgNzIuMjMxMTcyXSAgcmVnaXN0ZXJfbmV0ZGV2 aWNlKzB4NGZlLzB4NzQwCj4gWyAgIDcyLjIzMTE3Ml0gIHJlZ2lzdGVyX25ldGRldisweDFjLzB4 NDAKPiBbICAgNzIuMjMxMTcyXSAgdmlydG5ldF9wcm9iZSsweDcyOC8weGI2MAo+IFsgICA3Mi4y MzExNzJdICA/IF9yYXdfc3Bpbl91bmxvY2srMHgxZC8weDQwCj4gWyAgIDcyLjIzMTE3Ml0gID8g dmlydGlvX3ZkcGFfZ2V0X3N0YXR1cysweDFjLzB4MjAKPiBbICAgNzIuMjMxMTcyXSAgdmlydGlv X2Rldl9wcm9iZSsweDFjNi8weDI3MQo+IFsgICA3Mi4yMzExNzJdICByZWFsbHlfcHJvYmUrMHgx OTUvMHgyZTAKPiBbICAgNzIuMjMxMTcyXSAgZHJpdmVyX3Byb2JlX2RldmljZSsweDI2LzB4NjAK PiBbICAgNzIuMjMxMTcyXSAgZGV2aWNlX2RyaXZlcl9hdHRhY2grMHg0OS8weDYwCj4gWyAgIDcy LjIzMTE3Ml0gIF9fZHJpdmVyX2F0dGFjaCsweDQ2LzB4YzAKPiBbICAgNzIuMjMxMTcyXSAgPyBk ZXZpY2VfZHJpdmVyX2F0dGFjaCsweDYwLzB4NjAKPiBbICAgNzIuMjMxMTcyXSAgYnVzX2FkZF9k cml2ZXIrMHgxOTcvMHgxYzAKPiBbICAgNzIuMjMxMTcyXSAgZHJpdmVyX3JlZ2lzdGVyKzB4NjYv MHhjMAo+IFsgICA3Mi4yMzExNzJdICByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKzB4MWIvMHg0MAo+ IFsgICA3Mi4yMzExNzJdICB2aXJ0aW9fbmV0X2RyaXZlcl9pbml0KzB4NjEvMHg4Ngo+IFsgICA3 Mi4yMzExNzJdICA/IHZldGhfaW5pdCsweDE0LzB4MTQKPiBbICAgNzIuMjMxMTcyXSAgZG9fb25l X2luaXRjYWxsKzB4NzYvMHgyZTQKPiBbICAgNzIuMjMxMTcyXSAgPyByZGluaXRfc2V0dXArMHgy YS8weDJhCj4gWyAgIDcyLjIzMTE3Ml0gIGRvX2luaXRjYWxscysweGIyLzB4ZDUKPiBbICAgNzIu MjMxMTcyXSAga2VybmVsX2luaXRfZnJlZWFibGUrMHgxNGYvMHgxNzkKPiBbICAgNzIuMjMxMTcy XSAgPyByZXN0X2luaXQrMHgxMDAvMHgxMDAKPiBbICAgNzIuMjMxMTcyXSAga2VybmVsX2luaXQr MHhkLzB4ZTAKPiBbICAgNzIuMjMxMTcyXSAgcmV0X2Zyb21fZm9yaysweDFjLzB4MzAKPiBbICAg NzIuMjMxMTcyXSBNb2R1bGVzIGxpbmtlZCBpbjoKPiBbICAgNzIuMjY5NTYzXSAtLS1bIGVuZCB0 cmFjZSBhNmViYzRhZmVhMGU2Y2IxIF0tLS0KPgo+IFRoZSByZWFzb24gaXMgdGhhdCB2aXJ0bmV0 X3NldF9mZWF0dXJlcyBub3cgY2FsbHMgdmlydG5ldF9zZXRfZ3Vlc3Rfb2ZmbG9hZHMKPiB1bmNv bmRpdGlvbmFsbHksIGl0IHVzZWQgdG8gb25seSBjYWxsIGl0IHdoZW4gdGhlcmUgaXMgc29tZXRo aW5nCj4gdG8gY29uZmlndXJlLgo+Cj4gSWYgZGV2aWNlIGRvZXMgbm90IGhhdmUgYSBjb250cm9s IHZxLCBldmVyeXRoaW5nIGJyZWFrcy4KPgo+IExvb2tpbmcgYXQgdGhpcyBzb21lIG1vcmUsIEkg bm90aWNlZCB0aGF0IGl0J3Mgbm90IHJlYWxseSBjaGVja2luZyB0aGUKPiBoYXJkd2FyZSB0b28g bXVjaC4gRS5nLgo+Cj4gICAgICAgICAgaWYgKChkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXMpICYg TkVUSUZfRl9MUk8pIHsKPiAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcyAmIE5FVElGX0Zf TFJPKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZsb2FkcyB8PSBHVUVTVF9PRkZMT0FE X0xST19NQVNLICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmktPmd1 ZXN0X29mZmxvYWRzX2NhcGFibGU7Cj4gICAgICAgICAgICAgICAgICBlbHNlCj4gICAgICAgICAg ICAgICAgICAgICAgICAgIG9mZmxvYWRzICY9IH5HVUVTVF9PRkZMT0FEX0xST19NQVNLOwo+ICAg ICAgICAgIH0KPgo+IGFuZAo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFV TEwgPDwgVklSVElPX05FVF9GX0dVRVNUX1RTTzYpIHwgXAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxVUxMIDw8IFZJUlRJT19ORVRfRl9HVUVTVF9FQ04pICB8IFwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfR1VFU1Rf VUZPKSkKPgo+IEJ1dCB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGUuZy4gVklSVElPX05FVF9G X0dVRVNUX1RTTzYgaXMgc2V0Lgo+Cj4gSWYgaXQgaXNuJ3QgY29tbWFuZCBzaG91bGQgbm90IHNl bmQgaXQuCj4KPiBGdXJ0aGVyCj4KPiBzdGF0aWMgaW50IHZpcnRuZXRfc2V0X2ZlYXR1cmVzKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCj4gewo+ICAgICAgICAgIHN0cnVjdCB2aXJ0bmV0 X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKPiAgICAgICAgICB1NjQgb2ZmbG9hZHMgPSB2 aS0+Z3Vlc3Rfb2ZmbG9hZHM7Cj4KPiBzZWVtcyB3cm9uZyBzaW5jZSBndWVzdF9vZmZsb2FkcyBp cyB6ZXJvIGluaXRpYWxpemVkLAoKCkknbSBub3Qgc3VyZSBJIGdldCBoZXJlLgoKRGlkIHlvdSBt ZWFuIHZpLT5ndWVzdF9vZmZsb2Fkcz8KCldlIGluaXRpYWxpemUgaXQgZHVyaW5nIHByb2JlCgog wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGd1ZXN0X29mZmxvYWRzKTsgaSsrKQog wqDCoMKgIMKgwqDCoCBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBndWVzdF9vZmZs b2Fkc1tpXSkpCiDCoMKgwqAgwqDCoMKgIMKgwqDCoCBzZXRfYml0KGd1ZXN0X29mZmxvYWRzW2ld LCAmdmktPmd1ZXN0X29mZmxvYWRzKTsKCgo+IGl0IGRvZXMgbm90IHJlZmxlY3QgdGhlIHN0YXRl IGFmdGVyIHJlc2V0IHdoaWNoIGNvbWVzIGZyb20KPiB0aGUgZmVhdHVyZXMuCj4KPiBSZXZlcnQg dGhlIG9yaWdpbmFsIGNvbW1pdCBmb3Igbm93Lgo+Cj4gQ2M6IFRvbmdoYW8gWmhhbmcgPHhpYW5n eGlhLm0ueXVlQGdtYWlsLmNvbT4KPiBDYzogV2lsbGVtIGRlIEJydWlqbiA8d2lsbGVtYkBnb29n bGUuY29tPgo+IEZpeGVzOiAzNjE4YWQyYTdjMGU3ICgidmlydGlvLW5ldDogZXRodG9vbCBjb25m aWd1cmFibGUgUlhDU1VNIikKPiBSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBp bnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0 LmNvbT4KPiAtLS0KPgo+IGNoYW5nZXMgZnJvbSB2MToKPiAJLSBjbGFyaWZ5IGhvdyB0byByZXBy b2R1Y2UgdGhlIGJ1ZyBpbiB0aGUgbG9nCj4KPgo+ICAgZHJpdmVycy9uZXQvdmlydGlvX25ldC5j IHwgNTAgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgMSBmaWxl IGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ IGluZGV4IGQyZDJjNGE1M2NmMi4uMjFiNzExNDhjNTMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv bmV0L3ZpcnRpb19uZXQuYwo+ICsrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+IEBAIC02 OCw4ICs2OCw2IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGd1ZXN0X29mZmxvYWRzW10g PSB7Cj4gICAJCQkJKDFVTEwgPDwgVklSVElPX05FVF9GX0dVRVNUX0VDTikgIHwgXAo+ICAgCQkJ CSgxVUxMIDw8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pKQo+ICAgCj4gLSNkZWZpbmUgR1VFU1Rf T0ZGTE9BRF9DU1VNX01BU0sgKDFVTEwgPDwgVklSVElPX05FVF9GX0dVRVNUX0NTVU0pCj4gLQo+ ICAgc3RydWN0IHZpcnRuZXRfc3RhdF9kZXNjIHsKPiAgIAljaGFyIGRlc2NbRVRIX0dTVFJJTkdf TEVOXTsKPiAgIAlzaXplX3Qgb2Zmc2V0Owo+IEBAIC0yNTI0LDQ4ICsyNTIyLDI5IEBAIHN0YXRp YyBpbnQgdmlydG5ldF9nZXRfcGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg Y2hhciAqYnVmLAo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBuZXRkZXZfZmVh dHVyZXNfdCB2aXJ0bmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAo+ IC0JCQkJCSAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQo+IC17Cj4gLQkvKiBJZiBS eCBjaGVja3N1bSBpcyBkaXNhYmxlZCwgTFJPIHNob3VsZCBhbHNvIGJlIGRpc2FibGVkLiAqLwo+ IC0JaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCj4gLQkJZmVhdHVyZXMgJj0gfk5F VElGX0ZfTFJPOwo+IC0KPiAtCXJldHVybiBmZWF0dXJlczsKPiAtfQo+IC0KPiAgIHN0YXRpYyBp bnQgdmlydG5ldF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKPiAgIAkJCQlu ZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKPiAgIHsKPiAgIAlzdHJ1Y3QgdmlydG5ldF9pbmZv ICp2aSA9IG5ldGRldl9wcml2KGRldik7Cj4gLQl1NjQgb2ZmbG9hZHMgPSB2aS0+Z3Vlc3Rfb2Zm bG9hZHM7Cj4gKwl1NjQgb2ZmbG9hZHM7Cj4gICAJaW50IGVycjsKPiAgIAo+IC0JLyogRG9uJ3Qg YWxsb3cgY29uZmlndXJhdGlvbiB3aGlsZSBYRFAgaXMgYWN0aXZlLiAqLwo+IC0JaWYgKHZpLT54 ZHBfcXVldWVfcGFpcnMpCj4gLQkJcmV0dXJuIC1FQlVTWTsKPiAtCj4gICAJaWYgKChkZXYtPmZl YXR1cmVzIF4gZmVhdHVyZXMpICYgTkVUSUZfRl9MUk8pIHsKPiArCQlpZiAodmktPnhkcF9xdWV1 ZV9wYWlycykKPiArCQkJcmV0dXJuIC1FQlVTWTsKPiArCj4gICAJCWlmIChmZWF0dXJlcyAmIE5F VElGX0ZfTFJPKQo+IC0JCQlvZmZsb2FkcyB8PSBHVUVTVF9PRkZMT0FEX0xST19NQVNLICYKPiAt CQkJCSAgICB2aS0+Z3Vlc3Rfb2ZmbG9hZHNfY2FwYWJsZTsKPiArCQkJb2ZmbG9hZHMgPSB2aS0+ Z3Vlc3Rfb2ZmbG9hZHNfY2FwYWJsZTsKPiAgIAkJZWxzZQo+IC0JCQlvZmZsb2FkcyAmPSB+R1VF U1RfT0ZGTE9BRF9MUk9fTUFTSzsKPiArCQkJb2ZmbG9hZHMgPSB2aS0+Z3Vlc3Rfb2ZmbG9hZHNf Y2FwYWJsZSAmCj4gKwkJCQkgICB+R1VFU1RfT0ZGTE9BRF9MUk9fTUFTSzsKPiArCj4gKwkJZXJy ID0gdmlydG5ldF9zZXRfZ3Vlc3Rfb2ZmbG9hZHModmksIG9mZmxvYWRzKTsKPiArCQlpZiAoZXJy KQo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCXZpLT5ndWVzdF9vZmZsb2FkcyA9IG9mZmxvYWRzOwo+ ICAgCX0KPiAgIAo+IC0JaWYgKChkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXMpICYgTkVUSUZfRl9S WENTVU0pIHsKPiAtCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKPiAtCQkJb2ZmbG9h ZHMgfD0gR1VFU1RfT0ZGTE9BRF9DU1VNX01BU0sgJgo+IC0JCQkJICAgIHZpLT5ndWVzdF9vZmZs b2Fkc19jYXBhYmxlOwo+IC0JCWVsc2UKPiAtCQkJb2ZmbG9hZHMgJj0gfkdVRVNUX09GRkxPQURf Q1NVTV9NQVNLOwo+IC0JfQo+IC0KPiAtCWVyciA9IHZpcnRuZXRfc2V0X2d1ZXN0X29mZmxvYWRz KHZpLCBvZmZsb2Fkcyk7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBlcnI7Cj4gLQo+IC0Jdmkt Pmd1ZXN0X29mZmxvYWRzID0gb2ZmbG9hZHM7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiBA QCAtMjU4NCw3ICsyNTYzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2 aXJ0bmV0X25ldGRldiA9IHsKPiAgIAkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gcGFzc3RocnVfZmVh dHVyZXNfY2hlY2ssCj4gICAJLm5kb19nZXRfcGh5c19wb3J0X25hbWUJPSB2aXJ0bmV0X2dldF9w aHlzX3BvcnRfbmFtZSwKPiAgIAkubmRvX3NldF9mZWF0dXJlcwk9IHZpcnRuZXRfc2V0X2ZlYXR1 cmVzLAo+IC0JLm5kb19maXhfZmVhdHVyZXMJPSB2aXJ0bmV0X2ZpeF9mZWF0dXJlcywKPiAgIH07 Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHZpcnRuZXRfY29uZmlnX2NoYW5nZWRfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4gQEAgLTMwMzUsMTAgKzMwMTMsOCBAQCBzdGF0aWMgaW50IHZp cnRuZXRfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gICAJaWYgKHZpcnRpb19o YXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNCkgfHwKPiAgIAkgICAgdmly dGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9HVUVTVF9UU082KSkKPiAgIAkJZGV2 LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKPiAtCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRl diwgVklSVElPX05FVF9GX0NUUkxfR1VFU1RfT0ZGTE9BRFMpKSB7Cj4gLQkJZGV2LT5od19mZWF0 dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKPiArCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwg VklSVElPX05FVF9GX0NUUkxfR1VFU1RfT0ZGTE9BRFMpKQo+ICAgCQlkZXYtPmh3X2ZlYXR1cmVz IHw9IE5FVElGX0ZfTFJPOwo+IC0JfQo+ICAgCj4gICAJZGV2LT52bGFuX2ZlYXR1cmVzID0gZGV2 LT5mZWF0dXJlczsKPiAgIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3Rz LmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9t YWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u