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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 2543AC43460 for ; Mon, 12 Apr 2021 09:07:25 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 B1323613C3 for ; Mon, 12 Apr 2021 09:07:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B1323613C3 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 smtp1.osuosl.org (Postfix) with ESMTP id 6AC2083870; Mon, 12 Apr 2021 09:07:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pHRnf0SeL2BF; Mon, 12 Apr 2021 09:07:22 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTP id 4DE9F838CC; Mon, 12 Apr 2021 09:07:22 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2235BC000C; Mon, 12 Apr 2021 09:07:22 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 558E8C000A for ; Mon, 12 Apr 2021 09:07:21 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 3711F838CC for ; Mon, 12 Apr 2021 09:07:21 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fInKiOL_5up2 for ; Mon, 12 Apr 2021 09:07:19 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id A32A083870 for ; Mon, 12 Apr 2021 09:07:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1618218438; 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=AiXpa0oASZwRhvw6y5GnL0ZgWv2QxGq5lcY8I/mGNHI=; b=XZezJovVWdigsRGmps+GBR1NYVeuU/WnYwgqtJ6zywv51LeIyNgmkRWJlf4ywM6tEXqGNa 86rj8ObIAMYi7clKUsVgRpFfSmBPIknMifug5g8p5vhXltYzzXqx5I7WboO0OTM4oyqD7j 6j5UYG/CgJtcU7bOBKiM1PjgVBYuwHg= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-444-xUBzrw2xNHCHHTRUdoUCrw-1; Mon, 12 Apr 2021 05:07:16 -0400 X-MC-Unique: xUBzrw2xNHCHHTRUdoUCrw-1 Received: by mail-wr1-f69.google.com with SMTP id w1so2663807wrm.13 for ; Mon, 12 Apr 2021 02:07:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=AiXpa0oASZwRhvw6y5GnL0ZgWv2QxGq5lcY8I/mGNHI=; b=lWqJPxCkrYkE95wftjnzsuMHqu33tVOjbHWdh32ohgC6V3zU9IscvjOmKvXdlkUcFa d8t5B12X3U4YQ3GCcqYMnq86DMUqaCkvijbp94yQvnsf26Tst9kEdoaVLG77enib27Em +unk0HxT73l1U2yIv1+f29QXIuXPmu7G07lDR3KwAxiBSY+pQGnmjY5/ObTo9KVtgaPg WFbI1GPJn2GDubDD17pIPalj9JJPVwL9TyvW8Nj97JsOiO8Cs85JzGa6kkxkTOdiz5lM 6sOPtJZxEbqGfSwsfLgCSWJTE5qORMHNiMK2M5Jvw/fgYiWkatsLrorWmLjeTmLF3QWM 7AKQ== X-Gm-Message-State: AOAM530JJwHlAn1/0eID4YUYHR/6soTLPkveY/haIztH6ZyM2IFrasYA nu6H//5ZXENlyXeZEwa9RkGQj1KY9x55CYo/rYS2HcQ357ZBRv72HkzxPueWLUNqa62TpZky0VU R7wGnsxls6Y60YGhvn4RKn5VVFq9vund1pnQ5umLHag== X-Received: by 2002:adf:d1e8:: with SMTP id g8mr29764526wrd.175.1618218435416; Mon, 12 Apr 2021 02:07:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwEpjOFxkabsuoxqCs9minNXPd2aSkk1nHyc2ILc5/XTRsDFVaCB27nqKfVCJAx03XzFBYvwg== X-Received: by 2002:adf:d1e8:: with SMTP id g8mr29764487wrd.175.1618218435059; Mon, 12 Apr 2021 02:07:15 -0700 (PDT) Received: from redhat.com ([2a10:8006:2281:0:1994:c627:9eac:1825]) by smtp.gmail.com with ESMTPSA id z15sm16504028wrw.38.2021.04.12.02.07.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Apr 2021 02:07:14 -0700 (PDT) Date: Mon, 12 Apr 2021 05:07:11 -0400 From: "Michael S. Tsirkin" To: Max Gurtovoy Subject: Re: [PATCH v2 1/3] virtio: update reset callback to return status Message-ID: <20210412050311-mutt-send-email-mst@kernel.org> References: <20210408081109.56537-1-mgurtovoy@nvidia.com> <16fa0e31-a305-3b41-b0d3-ad76aa00177b@redhat.com> <1f134102-4ccb-57e3-858d-3922d851ce8a@nvidia.com> <103ae6fe-1ffc-90a3-09cd-bcbbcbb8eee7@nvidia.com> <7d4599c5-348e-5ca1-8eb6-577d65dc4688@redhat.com> <96742dde-edba-0329-c9c2-b3ac3b28cf1d@nvidia.com> MIME-Version: 1.0 In-Reply-To: <96742dde-edba-0329-c9c2-b3ac3b28cf1d@nvidia.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mst@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline Cc: kvm@vger.kernel.org, cohuck@redhat.com, virtualization@lists.linux-foundation.org, nitzanc@nvidia.com, oren@nvidia.com 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gU3VuLCBBcHIgMTEsIDIwMjEgYXQgMTI6NTA6MjJQTSArMDMwMCwgTWF4IEd1cnRvdm95IHdy b3RlOgo+IAo+IE9uIDQvOS8yMDIxIDg6MjIgQU0sIEphc29uIFdhbmcgd3JvdGU6Cj4gPiAKPiA+ IOWcqCAyMDIxLzQvOCDkuIvljYgxMDoyNCwgTWF4IEd1cnRvdm95IOWGmemBkzoKPiA+ID4gCj4g PiA+IE9uIDQvOC8yMDIxIDQ6MTQgUE0sIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+ID4gCj4gPiA+ ID4g5ZyoIDIwMjEvNC84IOS4i+WNiDU6NTYsIE1heCBHdXJ0b3ZveSDlhpnpgZM6Cj4gPiA+ID4g PiAKPiA+ID4gPiA+IE9uIDQvOC8yMDIxIDExOjU4IEFNLCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4g5ZyoIDIwMjEvNC84IOS4i+WNiDQ6MTEsIE1heCBHdXJ0b3Zv eSDlhpnpgZM6Cj4gPiA+ID4gPiA+ID4gVGhlIHJlc2V0IGRldmljZSBvcGVyYXRpb24sIHVzdWFs bHkgaXMgYW4gb3BlcmF0aW9uCj4gPiA+ID4gPiA+ID4gdGhhdCBtaWdodCBmYWlsIGZyb20KPiA+ ID4gPiA+ID4gPiB2YXJpb3VzIHJlYXNvbnMuIEZvciBleGFtcGxlLCB0aGUgY29udHJvbGxlciBt aWdodAo+ID4gPiA+ID4gPiA+IGJlIGluIGEgYmFkIHN0YXRlIGFuZAo+ID4gPiA+ID4gPiA+IGNh bid0IGFuc3dlciB0byBhbnkgcmVxdWVzdC4gVXN1YWxseSwgdGhlIHBhcmF2aXJ0IFNXIGJhc2Vk IHZpcnRpbwo+ID4gPiA+ID4gPiA+IGRldmljZXMgYWx3YXlzIHN1Y2NlZWQgaW4gcmVzZXQgb3Bl cmF0aW9uIGJ1dCB0aGlzCj4gPiA+ID4gPiA+ID4gaXMgbm90IHRoZSBjYXNlIGZvcgo+ID4gPiA+ ID4gPiA+IEhXIGJhc2VkIHZpcnRpbyBkZXZpY2VzLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g Cj4gPiA+ID4gPiA+IEkgd291bGQgbGlrZSB0byBrbm93IHVuZGVyIHdoYXQgY29uZGl0aW9uIHRo YXQgdGhlIHJlc2V0Cj4gPiA+ID4gPiA+IG9wZXJhdGlvbiBtYXkgZmFpbCAoZXhjZXB0IGZvciB0 aGUgY2FzZSBvZiBhIGJ1Z2cKPiA+ID4gPiA+ID4gZ3Vlc3QpLgo+ID4gPiA+ID4gCj4gPiA+ID4g PiBUaGUgY29udHJvbGxlciBtaWdodCBub3QgYmUgcmVhZHkgb3Igc3R1Y2suIFRoaXMgaXMgYSBy ZWFsCj4gPiA+ID4gPiB1c2UgY2FzZSBmb3IgbWFueSBQQ0kgZGV2aWNlcy4KPiA+ID4gPiA+IAo+ ID4gPiA+ID4gRm9yIHJlYWwgZGV2aWNlcyB0aGUgRlcgbWlnaHQgYmUgaW4gYSBiYWQgc3RhdGUg YW5kIGl0IGNhbgo+ID4gPiA+ID4gaGFwcGVuIGFsc28gZm9yIHBhcmF2aXJ0IGRldmljZSBpZiB5 b3UgaGF2ZSBhIGJ1ZyBpbiB0aGUKPiA+ID4gPiA+IGNvbnRyb2xsZXIgY29kZSBvciBpZiB5b3Ug ZW50ZXJlZCBzb21lIGVycm9yIGZsb3cgKE91dCBvZgo+ID4gPiA+ID4gbWVtb3J5KS4KPiA+ID4g PiA+IAo+ID4gPiA+ID4gWW91IGRvbid0IHdhbnQgdG8gYmUgc3R1Y2sgYmVjYXVzZSBvZiBvbmUg YmFkIGRldmljZS4KPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiBTbyB0aGUgYnVnZ3kgZHJpdmVy IGNhbiBkYW1hZ2UgdGhlIGhvc3QgdGhyb3VnaCB2YXJpb3VzIHdheXMsCj4gPiA+ID4gSSdtIG5v dCBzdXJlIGRvaW5nIHN1Y2ggd29ya2Fyb3VuZCBpcyB3b3J0aHdoaWxlLgo+ID4gPiAKPiA+ID4g ZG8geW91IG1lYW4gZGV2aWNlID8KPiA+IAo+ID4gCj4gPiBZZXMuCj4gPiAKPiA+IAo+ID4gPiAK PiA+ID4gc29tZXRpbWVzIHlvdSBuZWVkIHRvIHJlcGxhY2UgZGV2aWNlIEZXIGFuZCBpdCB3aWxs IHdvcmsuCj4gPiA+IAo+ID4gPiBJIGRvbid0IHRoaW5rIGl0J3MgYSB3b3JrYXJvdW5kLiBPdGhl ciBwcm90b2NvbHMsIHN1Y2ggYXMgTlZNZSwKPiA+ID4gc29sdmVkIHRoaXMgaW4gdGhlIHNwZWNp ZmljYXRpb24uCj4gPiA+IAo+ID4gPiBQQ0kgY29uZmlnIHNwYWNlIGFuZCBQQ0kgY29udHJvbGxl ciBhcmUgc29tZXRpbWVzIDIgZGlmZmVyZW50Cj4gPiA+IGNvbXBvbmVudHMgYW5kIHNvbWV0aW1l cyB0aGUgY29udHJvbGxlciBpcyBub3QgYWN0aXZlLCBhbHRob3VnaCB0aGUKPiA+ID4gZGV2aWNl IGlzIHBsdWdnZWQgYW5kIHNlZW4gYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCj4gPiAKPiA+IAo+ID4g U28gSSB0aGluayB3ZSBuZWVkIHBhdGNoIHRvIHNwZWMgdG8gc2VlIGlmIGl0IHdvcmtzIGZpcnN0 Lgo+IAo+IFdlIGNhbid0IGxlYXZlIHRoZSBkcml2ZXIgdG8gbG9vcCBmb3JldmVyIHdpdGhvdXQg YWxsb3dpbmcgbmV4dCAiZ29vZCIKPiB2aXJ0aW8gZGV2aWNlcyB0byBwcm9iZS4KPiAKPiBXZSBj YW4gaW4gcGFyYWxsZWwgbG9vayBmb3Igc3BlYyBmaXhlcyBidXQgZm9yIG5vdyB3ZSBtdXN0IGZp eCB0aGUgZHJpdmVyLgoKSSdkIGxpa2UgdG8gbmFycm93IHRoZSBjYXNlIHRob3VnaC4gdGhlIHBy b3BlciB0aGluZwp3b3VsZCBwcm9iYWJseSBiZSBmb3IgZGV2aWNlIHRvIGNsZWFyIHRoZSBzdGF0 dXMuClByb3ZpZGVkIGl0IGVudGVyZWQgc29tZSBzdGF0ZSB3aGVyZSBpdCBjYW4gbm90IGRvIGl0 IC0KaXMgdGhlcmUgYW55dGhpbmcgc3BlY2lhbCBhYm91dAp0aGUgZGV2aWNlIHN0YXRlIHRoYXQg KmNhbiogYmUgZGV0ZWN0ZWQ/CklmIHllcyB3aGF0IGlzIGl0PwoKCj4gVGhlIGZpeCBjYW4gYmUg dXNpbmcgdGhlIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGluIHRoaXMgc2VyaWVzIG9yIGFkZGluZyBh bgo+IGFzeW5jIHByb2JpbmcgbWVjaGFuaXNtLgoKV2hhdCB3b3VsZCB0aGF0IGJlPwoKPiBJbiBi b3RoIHNvbHV0aW9ucywgd2UgY2FuJ3QgYWxsb3cgbG9vcGluZyBmb3JldmVyLgoKTXVsdGlwbGUg bWludXRlIGRvd250aW1lIGlzbid0IG11Y2ggYmV0dGVyIGVpdGhlci4gSSdkIGxpa2UgYQptdWNo IHNob3J0ZXIgdGltZXIgb3IgZXZlbiBubyB0aW1lciBhdCBhbGwsIGluc3RlYWQKdmVyaWZ5aW5n IHRoYXQgZGV2aWNlIGlzIGFsaXZlIGV2ZXJ5IFggaXRlcmF0aW9ucy4KCj4gPiAKPiA+IAo+ID4g PiAKPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gTm90ZSB0aGF0IHRoaXMgZHJpdmVyIGhhcyBiZWVu IHVzZWQgZm9yIHJlYWwgaGFyZHdhcmUgUENJCj4gPiA+ID4gZGV2aWNlcyBmb3IgbWFueSB5ZWFy cy4gV2UgZG9uJ3QgcmVjZWl2ZSBhbnkgcmVwb3J0IG9mIHRoaXMKPiA+ID4gPiBiZWZvcmUuCj4g PiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhpcyBjb21taXQgaXMgYWxzbyBh IHByZXBhcmF0aW9uIGZvciBhZGRpbmcgYSB0aW1lb3V0IG1lY2hhbmlzbSBmb3IKPiA+ID4gPiA+ ID4gPiByZXNldHRpbmcgdmlydGlvIGRldmljZXMuCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gU2lnbmVkLW9mZi1ieTogTWF4IEd1cnRvdm95IDxtZ3VydG92b3lAbnZpZGlhLmNvbT4KPiA+ ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBjaGFuZ2VzIGZyb20g djE6Cj4gPiA+ID4gPiA+ID4gwqAgLSB1cGRhdGUgdmlydGlvX2Njdy5jIChDb3JuZWxpYSkKPiA+ ID4gPiA+ID4gPiDCoCAtIHVwZGF0ZSB2aXJ0aW9fdW1sLmMKPiA+ID4gPiA+ID4gPiDCoCAtIHVw ZGF0ZSBtbHhiZi10bWZpZm8uYwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ IE5vdGUgdGhhdCB2aXJ0aW8gZHJpdmVyIG1heSBjYWxsIHJlc2V0LCBzbyB5b3UgcHJvYmFibHkK PiA+ID4gPiA+ID4gbmVlZCB0byBjb252ZXJ0IHRoZW0uCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkn bSBzdXJlIEkgdW5kZXJzdGFuZC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gQ29udmVydCB0byB3aGF0 ID8KPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiBDb252ZXJ0IHRvIGRlYWwgd2l0aCB0aGUgcG9z c2libGUgcmVzdCBmYWlsdXJlLiBFLmcgaW4KPiA+ID4gPiB2aXJ0YmxrX2ZyZWV6ZSgpIHdlIGhh ZDoKPiA+ID4gPiAKPiA+ID4gPiBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplKHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+IHsKPiA+ID4gPiDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg dmlydGlvX2JsayAqdmJsayA9IHZkZXYtPnByaXY7Cj4gPiA+ID4gCj4gPiA+ID4gwqDCoMKgwqDC oMKgwqAgLyogRW5zdXJlIHdlIGRvbid0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqLwo+ ID4gPiA+IMKgwqDCoMKgwqDCoMKgIHZkZXYtPmNvbmZpZy0+cmVzZXQodmRldik7Cj4gPiA+ID4g Li4uCj4gPiA+ID4gCj4gPiA+ID4gV2UgbmVlZCBmYWlsIHRoZSBmcmVlemUgaGVyZS4KPiA+ID4g Cj4gPiA+IAo+ID4gPiBBZ3JlZS4KPiA+ID4gCj4gPiA+IAo+ID4gPiA+IAo+ID4gPiA+IEFub3Ro ZXIgZXhhbXBsZSBpcyB0aGUgZHJpdmVyIHJlbW92ZSB3aGljaCBpcyBub3QgZXhwZWN0ZWQgdG8g YmUKPiA+ID4gPiBmYWlsLiBBIGxvdCBvZiB2aXJ0aW8gZHJpdmVycyB0cmllcyB0byBjYWxsIHJl c2V0IHRoZXJlLiBJJ20gbm90Cj4gPiA+ID4gc3VyZSBob3cgaGFyZCB0byBkZWFsIHdpdGggdGhl IGZhaWx1cmUgaW4gdGhlIHBhdGggb2YgcmVtb3ZlCj4gPiA+ID4gKGUuZyBfX2RldmljZV9yZWxl YXNlX2RyaXZlciB0ZW5kcyB0byBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZgo+ID4gPiA+IGJ1 cy0+cmVtb3ZlKCkuKQo+ID4gPiAKPiA+ID4gSSB0aGluayBpdCBjYW4gc3RheSBhcy1pcyBhbmQg aWdub3JlIHRoZSAtPnJlc2V0IHJldHVybiB2YWx1ZSBhbmQKPiA+ID4gY29udGludWUgZnJlZSB0 aGUgb3RoZXIgcmVzb3VyY2VzIHRvIGF2b2lkIGxlYWthZ2UuCj4gPiAKPiA+IAo+ID4gVGhlIHBy b2JsZW0gaXMgdGhhdCBpdCdzIHVuY2xlYXIgdGhhdCB3aGF0IGtpbmQgb2YgYmVoYXZpb3VyIHdv dWxkIHRoZQo+ID4gZGV2aWNlIGRvLCBlLmcgY2FuIGl0IHN0aWxsIHNlbmQgaW50ZXJydXB0cz8K PiA+IAo+ID4gVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIGZvcm1hbGl6ZSB0aGUgYmFodmlvdXIgZmly c3QgaWYgbmVjZXNzYXJ5Lgo+ID4gCj4gPiBUaGFua3MKPiA+IAo+ID4gCj4gPiA+IAo+ID4gPiAK PiA+ID4gPiAKPiA+ID4gPiBUaGFua3MKPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiA+IAo+ID4g PiA+ID4gVGhhbmtzLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBUaGFua3MK PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IC0t LQo+ID4gPiA+ID4gPiA+IMKgIGFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfMKgIDQgKysrLQo+ID4gPiA+ID4gPiA+IMKgIGRyaXZlcnMvcGxhdGZv cm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgfMKgIDQgKysrLQo+ID4gPiA+ID4gPiA+IMKgIGRy aXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jwqDCoCB8wqAgNCArKystCj4gPiA+ ID4gPiA+ID4gwqAgZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmPCoMKgwqDCoMKgwqDC oMKgIHzCoCA5ICsrKysrKy0tLQo+ID4gPiA+ID4gPiA+IMKgIGRyaXZlcnMvdmlydGlvL3ZpcnRp by5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDIyCj4gPiA+ID4gPiA+ID4g KysrKysrKysrKysrKysrLS0tLS0tLQo+ID4gPiA+ID4gPiA+IMKgIGRyaXZlcnMvdmlydGlvL3Zp cnRpb19tbWlvLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDMgKystCj4gPiA+ID4gPiA+ ID4gwqAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY8KgwqDCoMKgwqDCoCB8wqAg NCArKystCj4gPiA+ID4gPiA+ID4gwqAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4u Y8KgwqDCoMKgwqDCoCB8wqAgMyArKy0KPiA+ID4gPiA+ID4gPiDCoCBkcml2ZXJzL3ZpcnRpby92 aXJ0aW9fdmRwYS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA0ICsrKy0KPiA+ID4gPiA+ ID4gPiDCoCBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgIDUgKysrLS0KPiA+ID4gPiA+ID4gPiDCoCAxMCBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNl cnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwo+ID4gPiA+ID4gPiA+IGIv YXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwo+ID4gPiA+ID4gPiA+IGluZGV4IDkxZGRmNzRj YTg4OC4uYjZlNjYyNjVlZDMyIDEwMDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvdW0vZHJp dmVycy92aXJ0aW9fdW1sLmMKPiA+ID4gPiA+ID4gPiArKysgYi9hcmNoL3VtL2RyaXZlcnMvdmly dGlvX3VtbC5jCj4gPiA+ID4gPiA+ID4gQEAgLTgyNywxMSArODI3LDEzIEBAIHN0YXRpYyB2b2lk Cj4gPiA+ID4gPiA+ID4gdnVfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwg dTggc3RhdHVzKQo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgdnVfZGV2LT5zdGF0dXMgPSBzdGF0 dXM7Cj4gPiA+ID4gPiA+ID4gwqAgfQo+ID4gPiA+ID4gPiA+IMKgIC1zdGF0aWMgdm9pZCB2dV9y ZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiArc3RhdGljIGlu dCB2dV9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiDCoCB7 Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCBzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2Rl diA9IHRvX3ZpcnRpb191bWxfZGV2aWNlKHZkZXYpOwo+ID4gPiA+ID4gPiA+IMKgIMKgwqDCoMKg wqAgdnVfZGV2LT5zdGF0dXMgPSAwOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArwqDC oMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCDCoCBzdGF0 aWMgdm9pZCB2dV9kZWxfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiA+ID4gPiA+ID4gZGlm ZiAtLWdpdAo+ID4gPiA+ID4gPiA+IGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10 bWZpZm8uYwo+ID4gPiA+ID4gPiA+IGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10 bWZpZm8uYwo+ID4gPiA+ID4gPiA+IGluZGV4IGJiYzRlNzFhMTZmZi4uYzE5MmI4YWM1ZDllIDEw MDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYt dG1maWZvLmMKPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21s eGJmLXRtZmlmby5jCj4gPiA+ID4gPiA+ID4gQEAgLTk4MCwxMSArOTgwLDEzIEBAIHN0YXRpYyB2 b2lkCj4gPiA+ID4gPiA+ID4gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzKHN0cnVjdCB2 aXJ0aW9fZGV2aWNlCj4gPiA+ID4gPiA+ID4gKnZkZXYsCj4gPiA+ID4gPiA+ID4gwqAgfQo+ID4g PiA+ID4gPiA+IMKgIMKgIC8qIFJlc2V0IHRoZSBkZXZpY2UuIE5vdCBtdWNoIGhlcmUgZm9yIG5v dy4gKi8KPiA+ID4gPiA+ID4gPiAtc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNl dChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiArc3RhdGljIGludCBt bHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4g PiA+ID4gPiA+IMKgIHsKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIHN0cnVjdCBtbHhiZl90bWZp Zm9fdmRldiAqdG1fdmRldiA9Cj4gPiA+ID4gPiA+ID4gbWx4YmZfdmRldl90b190bWZpZm8odmRl dik7Cj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCB0bV92ZGV2LT5zdGF0dXMgPSAwOwo+ID4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCDCoCAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3Vy YXRpb24gZmllbGQuICovCj4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3Rl cHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCj4gPiA+ID4gPiA+ID4gYi9kcml2ZXJzL3JlbW90ZXBy b2MvcmVtb3RlcHJvY192aXJ0aW8uYwo+ID4gPiA+ID4gPiA+IGluZGV4IDBjYzYxN2Y3NjA2OC4u Y2E5NTczYzYyYzNkIDEwMDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvcmVtb3RlcHJv Yy9yZW1vdGVwcm9jX3ZpcnRpby5jCj4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9yZW1vdGVw cm9jL3JlbW90ZXByb2NfdmlydGlvLmMKPiA+ID4gPiA+ID4gPiBAQCAtMTkxLDcgKzE5MSw3IEBA IHN0YXRpYyB2b2lkCj4gPiA+ID4gPiA+ID4gcnByb2NfdmlydGlvX3NldF9zdGF0dXMoc3RydWN0 IHZpcnRpb19kZXZpY2UgKnZkZXYsCj4gPiA+ID4gPiA+ID4gdTggc3RhdHVzKQo+ID4gPiA+ID4g PiA+IMKgwqDCoMKgwqAgZGV2X2RiZygmdmRldi0+ZGV2LCAic3RhdHVzOiAlZFxuIiwgc3RhdHVz KTsKPiA+ID4gPiA+ID4gPiDCoCB9Cj4gPiA+ID4gPiA+ID4gwqAgLXN0YXRpYyB2b2lkIHJwcm9j X3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiAr c3RhdGljIGludCBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYp Cj4gPiA+ID4gPiA+ID4gwqAgewo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgc3RydWN0IHJwcm9j X3ZkZXYgKnJ2ZGV2ID0gdmRldl90b19ydmRldih2ZGV2KTsKPiA+ID4gPiA+ID4gPiDCoMKgwqDC oMKgIHN0cnVjdCBmd19yc2NfdmRldiAqcnNjOwo+ID4gPiA+ID4gPiA+IEBAIC0yMDAsNiArMjAw LDggQEAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4gPiBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0 IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCByc2MtPnN0 YXR1cyA9IDA7Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCBkZXZfZGJnKCZ2ZGV2LT5kZXYsICJy ZXNldCAhXG4iKTsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4g MDsKPiA+ID4gPiA+ID4gPiDCoCB9Cj4gPiA+ID4gPiA+ID4gwqAgwqAgLyogcHJvdmlkZSB0aGUg dmRldiBmZWF0dXJlcyBhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUgKi8KPiA+ID4gPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKPiA+ID4g PiA+ID4gPiBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCj4gPiA+ID4gPiA+ID4g aW5kZXggNTRlNjg2ZGNhNmRlLi41MmIzMjU1NWU3NDYgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gLS0t IGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKPiA+ID4gPiA+ID4gPiArKysgYi9k cml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYwo+ID4gPiA+ID4gPiA+IEBAIC03MzIsMTQg KzczMiwxNSBAQCBzdGF0aWMgaW50Cj4gPiA+ID4gPiA+ID4gdmlydGlvX2Njd19maW5kX3Zxcyhz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwKPiA+ID4gPiA+ID4gPiB1bnNpZ25lZCBudnFzLAo+ ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gPiDCoCB9Cj4g PiA+ID4gPiA+ID4gwqAgLXN0YXRpYyB2b2lkIHZpcnRpb19jY3dfcmVzZXQoc3RydWN0IHZpcnRp b19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdmlydGlvX2Njd19yZXNl dChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiDCoCB7Cj4gPiA+ID4g PiA+ID4gwqDCoMKgwqDCoCBzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNf ZGV2aWNlKHZkZXYpOwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgc3RydWN0IGNjdzEgKmNjdzsK PiA+ID4gPiA+ID4gPiArwqDCoMKgIGludCByZXQ7Cj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDC oCBjY3cgPSBjY3dfZGV2aWNlX2RtYV96YWxsb2ModmNkZXYtPmNkZXYsIHNpemVvZigqY2N3KSk7 Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCBpZiAoIWNjdykKPiA+ID4gPiA+ID4gPiAtwqDCoMKg wqDCoMKgwqAgcmV0dXJuOwo+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVO T01FTTsKPiA+ID4gPiA+ID4gPiDCoCDCoMKgwqDCoMKgIC8qIFplcm8gc3RhdHVzIGJpdHMuICov Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCB2Y2Rldi0+ZG1hX2FyZWEtPnN0YXR1cyA9IDA7Cj4g PiA+ID4gPiA+ID4gQEAgLTc0OSw4ICs3NTAsMTAgQEAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4g PiB2aXJ0aW9fY2N3X3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4g PiA+IMKgwqDCoMKgwqAgY2N3LT5mbGFncyA9IDA7Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCBj Y3ctPmNvdW50ID0gMDsKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIGNjdy0+Y2RhID0gMDsKPiA+ ID4gPiA+ID4gPiAtwqDCoMKgIGNjd19pb19oZWxwZXIodmNkZXYsIGNjdywgVklSVElPX0NDV19E T0lOR19SRVNFVCk7Cj4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXQgPSBjY3dfaW9faGVscGVyKHZj ZGV2LCBjY3csIFZJUlRJT19DQ1dfRE9JTkdfUkVTRVQpOwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKg wqAgY2N3X2RldmljZV9kbWFfZnJlZSh2Y2Rldi0+Y2RldiwgY2N3LCBzaXplb2YoKmNjdykpOwo+ ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJldHVybiByZXQ7Cj4gPiA+ID4g PiA+ID4gwqAgfQo+ID4gPiA+ID4gPiA+IMKgIMKgIHN0YXRpYyB1NjQgdmlydGlvX2Njd19nZXRf ZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMK PiA+ID4gPiA+ID4gPiBpbmRleCA0YjE1YzAwYzBhMGEuLmRkYmZkNWI1ZjNiZCAxMDA2NDQKPiA+ ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwo+ID4gPiA+ID4gPiA+ICsr KyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCj4gPiA+ID4gPiA+ID4gQEAgLTMzOCw3ICszMzgs NyBAQCBpbnQKPiA+ID4gPiA+ID4gPiByZWdpc3Rlcl92aXJ0aW9fZGV2aWNlKHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICpkZXYpCj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCAvKiBBc3NpZ24gYSB1bmlx dWUgZGV2aWNlIGluZGV4IGFuZCBoZW5jZSBuYW1lLiAqLwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKg wqAgZXJyID0gaWRhX3NpbXBsZV9nZXQoJnZpcnRpb19pbmRleF9pZGEsIDAsIDAsIEdGUF9LRVJO RUwpOwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgaWYgKGVyciA8IDApCj4gPiA+ID4gPiA+ID4g LcKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIG91dF9lcnI7Cj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCBkZXYtPmluZGV4ID0gZXJy Owo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgInZpcnRp byV1IiwgZGV2LT5pbmRleCk7Cj4gPiA+ID4gPiA+ID4gQEAgLTM0OSw3ICszNDksOSBAQCBpbnQK PiA+ID4gPiA+ID4gPiByZWdpc3Rlcl92aXJ0aW9fZGV2aWNlKHN0cnVjdCB2aXJ0aW9fZGV2aWNl ICpkZXYpCj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCAvKiBXZSBhbHdheXMgc3RhcnQgYnkg cmVzZXR0aW5nIHRoZSBkZXZpY2UsCj4gPiA+ID4gPiA+ID4gaW4gY2FzZSBhIHByZXZpb3VzCj4g PiA+ID4gPiA+ID4gwqDCoMKgwqDCoMKgICogZHJpdmVyIG1lc3NlZCBpdCB1cC7CoCBUaGlzIGFs c28gdGVzdHMgdGhhdAo+ID4gPiA+ID4gPiA+IGNvZGUgcGF0aCBhIGxpdHRsZS4gKi8KPiA+ID4g PiA+ID4gPiAtwqDCoMKgIGRldi0+Y29uZmlnLT5yZXNldChkZXYpOwo+ID4gPiA+ID4gPiA+ICvC oMKgwqAgZXJyID0gZGV2LT5jb25maWctPnJlc2V0KGRldik7Cj4gPiA+ID4gPiA+ID4gK8KgwqDC oCBpZiAoZXJyKQo+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9pZGE7Cj4g PiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCAvKiBBY2tub3dsZWRnZSB0aGF0IHdlJ3ZlIHNlZW4g dGhlIGRldmljZS4gKi8KPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIHZpcnRpb19hZGRfc3RhdHVz KGRldiwgVklSVElPX0NPTkZJR19TX0FDS05PV0xFREdFKTsKPiA+ID4gPiA+ID4gPiBAQCAtMzYy LDEwICszNjQsMTQgQEAgaW50Cj4gPiA+ID4gPiA+ID4gcmVnaXN0ZXJfdmlydGlvX2RldmljZShz dHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqDCoCAqLwo+ ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgZXJyID0gZGV2aWNlX2FkZCgmZGV2LT5kZXYpOwo+ID4g PiA+ID4gPiA+IMKgwqDCoMKgwqAgaWYgKGVycikKPiA+ID4gPiA+ID4gPiAtwqDCoMKgwqDCoMKg wqAgaWRhX3NpbXBsZV9yZW1vdmUoJnZpcnRpb19pbmRleF9pZGEsIGRldi0+aW5kZXgpOwo+ID4g PiA+ID4gPiA+IC1vdXQ6Cj4gPiA+ID4gPiA+ID4gLcKgwqDCoCBpZiAoZXJyKQo+ID4gPiA+ID4g PiA+IC3CoMKgwqDCoMKgwqDCoCB2aXJ0aW9fYWRkX3N0YXR1cyhkZXYsIFZJUlRJT19DT05GSUdf U19GQUlMRUQpOwo+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9pZGE7Cj4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiA+ICtvdXRfaWRhOgo+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWRhX3Np bXBsZV9yZW1vdmUoJnZpcnRpb19pbmRleF9pZGEsIGRldi0+aW5kZXgpOwo+ID4gPiA+ID4gPiA+ ICtvdXRfZXJyOgo+ID4gPiA+ID4gPiA+ICvCoMKgwqAgdmlydGlvX2FkZF9zdGF0dXMoZGV2LCBW SVJUSU9fQ09ORklHX1NfRkFJTEVEKTsKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIHJldHVybiBl cnI7Cj4gPiA+ID4gPiA+ID4gwqAgfQo+ID4gPiA+ID4gPiA+IMKgIEVYUE9SVF9TWU1CT0xfR1BM KHJlZ2lzdGVyX3ZpcnRpb19kZXZpY2UpOwo+ID4gPiA+ID4gPiA+IEBAIC00MDgsNyArNDE0LDkg QEAgaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZShzdHJ1Y3QKPiA+ID4gPiA+ID4gPiB2aXJ0aW9f ZGV2aWNlICpkZXYpCj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCAvKiBXZSBhbHdheXMgc3Rh cnQgYnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsCj4gPiA+ID4gPiA+ID4gaW4gY2FzZSBhIHByZXZp b3VzCj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoMKgICogZHJpdmVyIG1lc3NlZCBpdCB1cC4gKi8K PiA+ID4gPiA+ID4gPiAtwqDCoMKgIGRldi0+Y29uZmlnLT5yZXNldChkZXYpOwo+ID4gPiA+ID4g PiA+ICvCoMKgwqAgcmV0ID0gZGV2LT5jb25maWctPnJlc2V0KGRldik7Cj4gPiA+ID4gPiA+ID4g K8KgwqDCoCBpZiAocmV0KQo+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsK PiA+ID4gPiA+ID4gPiDCoCDCoMKgwqDCoMKgIC8qIEFja25vd2xlZGdlIHRoYXQgd2UndmUgc2Vl biB0aGUgZGV2aWNlLiAqLwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgdmlydGlvX2FkZF9zdGF0 dXMoZGV2LCBWSVJUSU9fQ09ORklHX1NfQUNLTk9XTEVER0UpOwo+ID4gPiA+ID4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jCj4gPiA+ID4gPiA+ID4gYi9kcml2 ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jCj4gPiA+ID4gPiA+ID4gaW5kZXggNTYxMjhiOWM0NmVi Li4xMmI4ZjA0OGM0OGQgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8v dmlydGlvX21taW8uYwo+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19t bWlvLmMKPiA+ID4gPiA+ID4gPiBAQCAtMjU2LDEyICsyNTYsMTMgQEAgc3RhdGljIHZvaWQKPiA+ ID4gPiA+ID4gPiB2bV9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1OCBz dGF0dXMpCj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCB3cml0ZWwoc3RhdHVzLCB2bV9kZXYtPmJh c2UgKyBWSVJUSU9fTU1JT19TVEFUVVMpOwo+ID4gPiA+ID4gPiA+IMKgIH0KPiA+ID4gPiA+ID4g PiDCoCAtc3RhdGljIHZvaWQgdm1fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4g PiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdm1fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZk ZXYpCj4gPiA+ID4gPiA+ID4gwqAgewo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgc3RydWN0IHZp cnRpb19tbWlvX2RldmljZSAqdm1fZGV2ID0KPiA+ID4gPiA+ID4gPiB0b192aXJ0aW9fbW1pb19k ZXZpY2UodmRldik7Cj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCAvKiAwIHN0YXR1cyBtZWFu cyBhIHJlc2V0LiAqLwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgd3JpdGVsKDAsIHZtX2Rldi0+ YmFzZSArIFZJUlRJT19NTUlPX1NUQVRVUyk7Cj4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4g MDsKPiA+ID4gPiA+ID4gPiDCoCB9Cj4gPiA+ID4gPiA+ID4gwqAgwqAgZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMv dmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKPiA+ID4gPiA+ID4gPiBpbmRleCBkNjJlOTgzNWFl ZWMuLjBiNWQ5NWUzZWZhMSAxMDA2NDQKPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRp by92aXJ0aW9fcGNpX2xlZ2FjeS5jCj4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy92aXJ0aW8v dmlydGlvX3BjaV9sZWdhY3kuYwo+ID4gPiA+ID4gPiA+IEBAIC04OSw3ICs4OSw3IEBAIHN0YXRp YyB2b2lkIHZwX3NldF9zdGF0dXMoc3RydWN0Cj4gPiA+ID4gPiA+ID4gdmlydGlvX2RldmljZSAq dmRldiwgdTggc3RhdHVzKQo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgaW93cml0ZTgoc3RhdHVz LCB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19QQ0lfU1RBVFVTKTsKPiA+ID4gPiA+ID4gPiDCoCB9 Cj4gPiA+ID4gPiA+ID4gwqAgLXN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2 aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHZwX3Jlc2V0KHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+IMKgIHsKPiA+ID4gPiA+ID4gPiDCoMKgwqDC oMKgIHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYp Owo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgLyogMCBzdGF0dXMgbWVhbnMgYSByZXNldC4gKi8K PiA+ID4gPiA+ID4gPiBAQCAtOTksNiArOTksOCBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1 Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIGlvcmVhZDgo dnBfZGV2LT5pb2FkZHIgKyBWSVJUSU9fUENJX1NUQVRVUyk7Cj4gPiA+ID4gPiA+ID4gwqDCoMKg wqDCoCAvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwo+ID4g PiA+ID4gPiA+IMKgwqDCoMKgwqAgdnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTsKPiA+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiDC oCB9Cj4gPiA+ID4gPiA+ID4gwqAgwqAgc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVj dAo+ID4gPiA+ID4gPiA+IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYsIHUxNiB2ZWN0b3IpCj4g PiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJu LmMKPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKPiA+ ID4gPiA+ID4gPiBpbmRleCBmYmQ0ZWJjMDBlYjYuLmNjMzQxMmE5NmExNyAxMDA2NDQKPiA+ID4g PiA+ID4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCj4gPiA+ID4g PiA+ID4gKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwo+ID4gPiA+ID4g PiA+IEBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QK PiA+ID4gPiA+ID4gPiB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1OCBzdGF0dXMpCj4gPiA+ID4gPiA+ ID4gwqDCoMKgwqDCoCB2cF9tb2Rlcm5fc2V0X3N0YXR1cygmdnBfZGV2LT5tZGV2LCBzdGF0dXMp Owo+ID4gPiA+ID4gPiA+IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCAtc3RhdGljIHZvaWQgdnBfcmVz ZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQg dnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gwqAgewo+ ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYg PSB0b192cF9kZXZpY2UodmRldik7Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCBzdHJ1Y3Qgdmly dGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2ID0gJnZwX2Rldi0+bWRldjsKPiA+ID4gPiA+ID4g PiBAQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9f ZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBtc2xlZXAoMSk7 Cj4gPiA+ID4gPiA+ID4gwqDCoMKgwqDCoCAvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRp b24gY2FsbGJhY2tzLiAqLwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgdnBfc3luY2hyb25pemVf dmVjdG9ycyh2ZGV2KTsKPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4g PiA+IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCDCoCBzdGF0aWMgdTE2IHZwX2NvbmZpZ192ZWN0b3Io c3RydWN0Cj4gPiA+ID4gPiA+ID4gdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiwgdTE2IHZlY3Rv cikKPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEu Ywo+ID4gPiA+ID4gPiA+IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwo+ID4gPiA+ID4g PiA+IGluZGV4IGUyOGFjZjQ4MmUwYy4uNWZkNGU2MjdhOWIwIDEwMDY0NAo+ID4gPiA+ID4gPiA+ IC0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmMKPiA+ID4gPiA+ID4gPiArKysgYi9k cml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCj4gPiA+ID4gPiA+ID4gQEAgLTk3LDExICs5Nywx MyBAQCBzdGF0aWMgdm9pZAo+ID4gPiA+ID4gPiA+IHZpcnRpb192ZHBhX3NldF9zdGF0dXMoc3Ry dWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsCj4gPiA+ID4gPiA+ID4gdTggc3RhdHVzKQo+ID4gPiA+ ID4gPiA+IMKgwqDCoMKgwqAgcmV0dXJuIG9wcy0+c2V0X3N0YXR1cyh2ZHBhLCBzdGF0dXMpOwo+ ID4gPiA+ID4gPiA+IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCAtc3RhdGljIHZvaWQgdmlydGlvX3Zk cGFfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gK3N0YXRp YyBpbnQgdmlydGlvX3ZkcGFfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ ID4gPiA+ID4gwqAgewo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAgc3RydWN0IHZkcGFfZGV2aWNl ICp2ZHBhID0gdmRfZ2V0X3ZkcGEodmRldik7Cj4gPiA+ID4gPiA+ID4gwqAgwqDCoMKgwqDCoCB2 ZHBhX3Jlc2V0KHZkcGEpOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJl dHVybiAwOwo+ID4gPiA+ID4gPiA+IMKgIH0KPiA+ID4gPiA+ID4gPiDCoCDCoCBzdGF0aWMgYm9v bCB2aXJ0aW9fdmRwYV9ub3RpZnkoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiA+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCj4gPiA+ID4gPiA+ID4g Yi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAo+ID4gPiA+ID4gPiA+IGluZGV4IDg1MTli M2FlNWQ1Mi4uZDJiMGYxNjk5YTc1IDEwMDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUv bGludXgvdmlydGlvX2NvbmZpZy5oCj4gPiA+ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9saW51eC92 aXJ0aW9fY29uZmlnLmgKPiA+ID4gPiA+ID4gPiBAQCAtNDQsOSArNDQsMTAgQEAgc3RydWN0IHZp cnRpb19zaG1fcmVnaW9uIHsKPiA+ID4gPiA+ID4gPiDCoMKgICrCoMKgwqAgc3RhdHVzOiB0aGUg bmV3IHN0YXR1cyBieXRlCj4gPiA+ID4gPiA+ID4gwqDCoCAqIEByZXNldDogcmVzZXQgdGhlIGRl dmljZQo+ID4gPiA+ID4gPiA+IMKgwqAgKsKgwqDCoCB2ZGV2OiB0aGUgdmlydGlvIGRldmljZQo+ ID4gPiA+ID4gPiA+IC0gKsKgwqDCoCBBZnRlciB0aGlzLCBzdGF0dXMgYW5kIGZlYXR1cmUgbmVn b3RpYXRpb24gbXVzdCBiZSBkb25lIGFnYWluCj4gPiA+ID4gPiA+ID4gKyAqwqDCoMKgIFVwb24g c3VjY2Vzcywgc3RhdHVzIGFuZCBmZWF0dXJlIG5lZ290aWF0aW9uCj4gPiA+ID4gPiA+ID4gbXVz dCBiZSBkb25lIGFnYWluCj4gPiA+ID4gPiA+ID4gwqDCoCAqwqDCoMKgIERldmljZSBtdXN0IG5v dCBiZSByZXNldCBmcm9tIGl0cyB2cS9jb25maWcgY2FsbGJhY2tzLCBvciBpbgo+ID4gPiA+ID4g PiA+IMKgwqAgKsKgwqDCoCBwYXJhbGxlbCB3aXRoIGJlaW5nIGFkZGVkL3JlbW92ZWQuCj4gPiA+ ID4gPiA+ID4gKyAqwqDCoMKgIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yIHN0YXR1cy4K PiA+ID4gPiA+ID4gPiDCoMKgICogQGZpbmRfdnFzOiBmaW5kIHZpcnRxdWV1ZXMgYW5kIGluc3Rh bnRpYXRlIHRoZW0uCj4gPiA+ID4gPiA+ID4gwqDCoCAqwqDCoMKgIHZkZXY6IHRoZSB2aXJ0aW9f ZGV2aWNlCj4gPiA+ID4gPiA+ID4gwqDCoCAqwqDCoMKgIG52cXM6IHRoZSBudW1iZXIgb2Ygdmly dHF1ZXVlcyB0byBmaW5kCj4gPiA+ID4gPiA+ID4gQEAgLTgyLDcgKzgzLDcgQEAgc3RydWN0IHZp cnRpb19jb25maWdfb3BzIHsKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKgIHUzMiAoKmdlbmVyYXRp b24pKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KTsKPiA+ID4gPiA+ID4gPiDCoMKgwqDCoMKg IHU4ICgqZ2V0X3N0YXR1cykoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpOwo+ID4gPiA+ID4g PiA+IMKgwqDCoMKgwqAgdm9pZCAoKnNldF9zdGF0dXMpKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2 ZGV2LCB1OCBzdGF0dXMpOwo+ID4gPiA+ID4gPiA+IC3CoMKgwqAgdm9pZCAoKnJlc2V0KShzdHJ1 Y3QgdmlydGlvX2RldmljZSAqdmRldik7Cj4gPiA+ID4gPiA+ID4gK8KgwqDCoCBpbnQgKCpyZXNl dCkoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpOwo+ID4gPiA+ID4gPiA+IMKgwqDCoMKgwqAg aW50ICgqZmluZF92cXMpKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICosIHVuc2lnbmVkIG52cXMsCj4g PiA+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZpcnRxdWV1ZSAq dnFzW10sIHZxX2NhbGxiYWNrX3QgKmNhbGxiYWNrc1tdLAo+ID4gPiA+ID4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdLCBjb25zdCBib29s ICpjdHgsCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+IAo+ID4gCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlv biBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcK aHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVh bGl6YXRpb24= 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=-15.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_NONE 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 8E55AC43600 for ; Mon, 12 Apr 2021 09:12:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3BAD061207 for ; Mon, 12 Apr 2021 09:12:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239612AbhDLJNK (ORCPT ); Mon, 12 Apr 2021 05:13:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:31206 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239573AbhDLJHj (ORCPT ); Mon, 12 Apr 2021 05:07:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1618218440; 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=AiXpa0oASZwRhvw6y5GnL0ZgWv2QxGq5lcY8I/mGNHI=; b=PqskzrSaA2PYru9sHGbLAhMQxgy6GP0+/SGsKVwA2LUHQa374ipjUifyx5X0AaQnatMTb7 4PVHi1E6kyEoBeiqxuoAGcfNGzA0i6UZU3NKECVq2w1sE706QaZHfpG/DJWJo401LGQu6a bfPiN3Srv7sbX6LAXKQoL4xmCeClniA= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-478-R-_TUBXYOGKn8Q7a10mxsg-1; Mon, 12 Apr 2021 05:07:16 -0400 X-MC-Unique: R-_TUBXYOGKn8Q7a10mxsg-1 Received: by mail-wr1-f71.google.com with SMTP id j24so4143714wra.1 for ; Mon, 12 Apr 2021 02:07:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=AiXpa0oASZwRhvw6y5GnL0ZgWv2QxGq5lcY8I/mGNHI=; b=TXIF1IUVEjfoZbtMcM6BoO3WJQ/zWWLpAsb1MqYevAWLRhCoE9wae9DHuFAfmYAu8z A5nl8Z+ZG1f05L7Rol8G2WIikTLbPHfd0WDaxQrJzhCmyqQJS8R6RhcJsKEfrfclygvW R1zfIlK61VxbcZK/WGFTMi909WBd2k2L3VoZVzXT5tTEq1c+8jUEd8YzIQ/+ZLgBEFPj PTWikpnb+MxSmg9dXo96xNzeDPag1+5c1mufqdDTWOc9prq9CveaXuUi+n6faNd66NfQ /YDJt0zcEey2OwuBS++5SA2QRc5gttP+7y+ihtCBUE2Nh1wLMC5r369gv4/nLusw5Pz2 5AGA== X-Gm-Message-State: AOAM531za+v9Kvt8uQlYmbB1v0ISgjvr02AYMVAFCwcdDmzeaICA6h47 b1nZWIwVNaQFzttLA8ZaFCjLiPHHV9qXyhJPJ0GMLKuqOxFCY3vhcVAHftf8DX1+RJ0ulMLcAFi 3Oo3uFvUfSFTn X-Received: by 2002:adf:d1e8:: with SMTP id g8mr29764517wrd.175.1618218435363; Mon, 12 Apr 2021 02:07:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwEpjOFxkabsuoxqCs9minNXPd2aSkk1nHyc2ILc5/XTRsDFVaCB27nqKfVCJAx03XzFBYvwg== X-Received: by 2002:adf:d1e8:: with SMTP id g8mr29764487wrd.175.1618218435059; Mon, 12 Apr 2021 02:07:15 -0700 (PDT) Received: from redhat.com ([2a10:8006:2281:0:1994:c627:9eac:1825]) by smtp.gmail.com with ESMTPSA id z15sm16504028wrw.38.2021.04.12.02.07.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Apr 2021 02:07:14 -0700 (PDT) Date: Mon, 12 Apr 2021 05:07:11 -0400 From: "Michael S. Tsirkin" To: Max Gurtovoy Cc: Jason Wang , kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, oren@nvidia.com, nitzanc@nvidia.com, cohuck@redhat.com Subject: Re: [PATCH v2 1/3] virtio: update reset callback to return status Message-ID: <20210412050311-mutt-send-email-mst@kernel.org> References: <20210408081109.56537-1-mgurtovoy@nvidia.com> <16fa0e31-a305-3b41-b0d3-ad76aa00177b@redhat.com> <1f134102-4ccb-57e3-858d-3922d851ce8a@nvidia.com> <103ae6fe-1ffc-90a3-09cd-bcbbcbb8eee7@nvidia.com> <7d4599c5-348e-5ca1-8eb6-577d65dc4688@redhat.com> <96742dde-edba-0329-c9c2-b3ac3b28cf1d@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <96742dde-edba-0329-c9c2-b3ac3b28cf1d@nvidia.com> Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org On Sun, Apr 11, 2021 at 12:50:22PM +0300, Max Gurtovoy wrote: > > On 4/9/2021 8:22 AM, Jason Wang wrote: > > > > 在 2021/4/8 下午10:24, Max Gurtovoy 写道: > > > > > > On 4/8/2021 4:14 PM, Jason Wang wrote: > > > > > > > > 在 2021/4/8 下午5:56, Max Gurtovoy 写道: > > > > > > > > > > On 4/8/2021 11:58 AM, Jason Wang wrote: > > > > > > > > > > > > 在 2021/4/8 下午4:11, Max Gurtovoy 写道: > > > > > > > The reset device operation, usually is an operation > > > > > > > that might fail from > > > > > > > various reasons. For example, the controller might > > > > > > > be in a bad state and > > > > > > > can't answer to any request. Usually, the paravirt SW based virtio > > > > > > > devices always succeed in reset operation but this > > > > > > > is not the case for > > > > > > > HW based virtio devices. > > > > > > > > > > > > > > > > > > I would like to know under what condition that the reset > > > > > > operation may fail (except for the case of a bugg > > > > > > guest). > > > > > > > > > > The controller might not be ready or stuck. This is a real > > > > > use case for many PCI devices. > > > > > > > > > > For real devices the FW might be in a bad state and it can > > > > > happen also for paravirt device if you have a bug in the > > > > > controller code or if you entered some error flow (Out of > > > > > memory). > > > > > > > > > > You don't want to be stuck because of one bad device. > > > > > > > > > > > > So the buggy driver can damage the host through various ways, > > > > I'm not sure doing such workaround is worthwhile. > > > > > > do you mean device ? > > > > > > Yes. > > > > > > > > > > sometimes you need to replace device FW and it will work. > > > > > > I don't think it's a workaround. Other protocols, such as NVMe, > > > solved this in the specification. > > > > > > PCI config space and PCI controller are sometimes 2 different > > > components and sometimes the controller is not active, although the > > > device is plugged and seen by the PCI subsystem. > > > > > > So I think we need patch to spec to see if it works first. > > We can't leave the driver to loop forever without allowing next "good" > virtio devices to probe. > > We can in parallel look for spec fixes but for now we must fix the driver. I'd like to narrow the case though. the proper thing would probably be for device to clear the status. Provided it entered some state where it can not do it - is there anything special about the device state that *can* be detected? If yes what is it? > The fix can be using the mechanism introduced in this series or adding an > async probing mechanism. What would that be? > In both solutions, we can't allow looping forever. Multiple minute downtime isn't much better either. I'd like a much shorter timer or even no timer at all, instead verifying that device is alive every X iterations. > > > > > > > > > > > > > > > > > > Note that this driver has been used for real hardware PCI > > > > devices for many years. We don't receive any report of this > > > > before. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This commit is also a preparation for adding a timeout mechanism for > > > > > > > resetting virtio devices. > > > > > > > > > > > > > > Signed-off-by: Max Gurtovoy > > > > > > > --- > > > > > > > > > > > > > > changes from v1: > > > > > > >   - update virtio_ccw.c (Cornelia) > > > > > > >   - update virtio_uml.c > > > > > > >   - update mlxbf-tmfifo.c > > > > > > > > > > > > > > > > > > Note that virtio driver may call reset, so you probably > > > > > > need to convert them. > > > > > > > > > > I'm sure I understand. > > > > > > > > > > Convert to what ? > > > > > > > > > > > > Convert to deal with the possible rest failure. E.g in > > > > virtblk_freeze() we had: > > > > > > > > static int virtblk_freeze(struct virtio_device *vdev) > > > > { > > > >         struct virtio_blk *vblk = vdev->priv; > > > > > > > >         /* Ensure we don't receive any more interrupts */ > > > >         vdev->config->reset(vdev); > > > > ... > > > > > > > > We need fail the freeze here. > > > > > > > > > Agree. > > > > > > > > > > > > > > Another example is the driver remove which is not expected to be > > > > fail. A lot of virtio drivers tries to call reset there. I'm not > > > > sure how hard to deal with the failure in the path of remove > > > > (e.g __device_release_driver tends to ignore the return value of > > > > bus->remove().) > > > > > > I think it can stay as-is and ignore the ->reset return value and > > > continue free the other resources to avoid leakage. > > > > > > The problem is that it's unclear that what kind of behaviour would the > > device do, e.g can it still send interrupts? > > > > That's why we need to formalize the bahviour first if necessary. > > > > Thanks > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > Thanks. > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > > > > > > > --- > > > > > > >   arch/um/drivers/virtio_uml.c             |  4 +++- > > > > > > >   drivers/platform/mellanox/mlxbf-tmfifo.c |  4 +++- > > > > > > >   drivers/remoteproc/remoteproc_virtio.c   |  4 +++- > > > > > > >   drivers/s390/virtio/virtio_ccw.c         |  9 ++++++--- > > > > > > >   drivers/virtio/virtio.c                  | 22 > > > > > > > +++++++++++++++------- > > > > > > >   drivers/virtio/virtio_mmio.c             |  3 ++- > > > > > > >   drivers/virtio/virtio_pci_legacy.c       |  4 +++- > > > > > > >   drivers/virtio/virtio_pci_modern.c       |  3 ++- > > > > > > >   drivers/virtio/virtio_vdpa.c             |  4 +++- > > > > > > >   include/linux/virtio_config.h            |  5 +++-- > > > > > > >   10 files changed, 43 insertions(+), 19 deletions(-) > > > > > > > > > > > > > > diff --git a/arch/um/drivers/virtio_uml.c > > > > > > > b/arch/um/drivers/virtio_uml.c > > > > > > > index 91ddf74ca888..b6e66265ed32 100644 > > > > > > > --- a/arch/um/drivers/virtio_uml.c > > > > > > > +++ b/arch/um/drivers/virtio_uml.c > > > > > > > @@ -827,11 +827,13 @@ static void > > > > > > > vu_set_status(struct virtio_device *vdev, u8 status) > > > > > > >       vu_dev->status = status; > > > > > > >   } > > > > > > >   -static void vu_reset(struct virtio_device *vdev) > > > > > > > +static int vu_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); > > > > > > >         vu_dev->status = 0; > > > > > > > + > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     static void vu_del_vq(struct virtqueue *vq) > > > > > > > diff --git > > > > > > > a/drivers/platform/mellanox/mlxbf-tmfifo.c > > > > > > > b/drivers/platform/mellanox/mlxbf-tmfifo.c > > > > > > > index bbc4e71a16ff..c192b8ac5d9e 100644 > > > > > > > --- a/drivers/platform/mellanox/mlxbf-tmfifo.c > > > > > > > +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c > > > > > > > @@ -980,11 +980,13 @@ static void > > > > > > > mlxbf_tmfifo_virtio_set_status(struct virtio_device > > > > > > > *vdev, > > > > > > >   } > > > > > > >     /* Reset the device. Not much here for now. */ > > > > > > > -static void mlxbf_tmfifo_virtio_reset(struct virtio_device *vdev) > > > > > > > +static int mlxbf_tmfifo_virtio_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct mlxbf_tmfifo_vdev *tm_vdev = > > > > > > > mlxbf_vdev_to_tmfifo(vdev); > > > > > > >         tm_vdev->status = 0; > > > > > > > + > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     /* Read the value of a configuration field. */ > > > > > > > diff --git a/drivers/remoteproc/remoteproc_virtio.c > > > > > > > b/drivers/remoteproc/remoteproc_virtio.c > > > > > > > index 0cc617f76068..ca9573c62c3d 100644 > > > > > > > --- a/drivers/remoteproc/remoteproc_virtio.c > > > > > > > +++ b/drivers/remoteproc/remoteproc_virtio.c > > > > > > > @@ -191,7 +191,7 @@ static void > > > > > > > rproc_virtio_set_status(struct virtio_device *vdev, > > > > > > > u8 status) > > > > > > >       dev_dbg(&vdev->dev, "status: %d\n", status); > > > > > > >   } > > > > > > >   -static void rproc_virtio_reset(struct virtio_device *vdev) > > > > > > > +static int rproc_virtio_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); > > > > > > >       struct fw_rsc_vdev *rsc; > > > > > > > @@ -200,6 +200,8 @@ static void > > > > > > > rproc_virtio_reset(struct virtio_device *vdev) > > > > > > >         rsc->status = 0; > > > > > > >       dev_dbg(&vdev->dev, "reset !\n"); > > > > > > > + > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     /* provide the vdev features as retrieved from the firmware */ > > > > > > > diff --git a/drivers/s390/virtio/virtio_ccw.c > > > > > > > b/drivers/s390/virtio/virtio_ccw.c > > > > > > > index 54e686dca6de..52b32555e746 100644 > > > > > > > --- a/drivers/s390/virtio/virtio_ccw.c > > > > > > > +++ b/drivers/s390/virtio/virtio_ccw.c > > > > > > > @@ -732,14 +732,15 @@ static int > > > > > > > virtio_ccw_find_vqs(struct virtio_device *vdev, > > > > > > > unsigned nvqs, > > > > > > >       return ret; > > > > > > >   } > > > > > > >   -static void virtio_ccw_reset(struct virtio_device *vdev) > > > > > > > +static int virtio_ccw_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct virtio_ccw_device *vcdev = to_vc_device(vdev); > > > > > > >       struct ccw1 *ccw; > > > > > > > +    int ret; > > > > > > >         ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw)); > > > > > > >       if (!ccw) > > > > > > > -        return; > > > > > > > +        return -ENOMEM; > > > > > > >         /* Zero status bits. */ > > > > > > >       vcdev->dma_area->status = 0; > > > > > > > @@ -749,8 +750,10 @@ static void > > > > > > > virtio_ccw_reset(struct virtio_device *vdev) > > > > > > >       ccw->flags = 0; > > > > > > >       ccw->count = 0; > > > > > > >       ccw->cda = 0; > > > > > > > -    ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_RESET); > > > > > > > +    ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_RESET); > > > > > > >       ccw_device_dma_free(vcdev->cdev, ccw, sizeof(*ccw)); > > > > > > > + > > > > > > > +    return ret; > > > > > > >   } > > > > > > >     static u64 virtio_ccw_get_features(struct virtio_device *vdev) > > > > > > > diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c > > > > > > > index 4b15c00c0a0a..ddbfd5b5f3bd 100644 > > > > > > > --- a/drivers/virtio/virtio.c > > > > > > > +++ b/drivers/virtio/virtio.c > > > > > > > @@ -338,7 +338,7 @@ int > > > > > > > register_virtio_device(struct virtio_device *dev) > > > > > > >       /* Assign a unique device index and hence name. */ > > > > > > >       err = ida_simple_get(&virtio_index_ida, 0, 0, GFP_KERNEL); > > > > > > >       if (err < 0) > > > > > > > -        goto out; > > > > > > > +        goto out_err; > > > > > > >         dev->index = err; > > > > > > >       dev_set_name(&dev->dev, "virtio%u", dev->index); > > > > > > > @@ -349,7 +349,9 @@ int > > > > > > > register_virtio_device(struct virtio_device *dev) > > > > > > >         /* We always start by resetting the device, > > > > > > > in case a previous > > > > > > >        * driver messed it up.  This also tests that > > > > > > > code path a little. */ > > > > > > > -    dev->config->reset(dev); > > > > > > > +    err = dev->config->reset(dev); > > > > > > > +    if (err) > > > > > > > +        goto out_ida; > > > > > > >         /* Acknowledge that we've seen the device. */ > > > > > > >       virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); > > > > > > > @@ -362,10 +364,14 @@ int > > > > > > > register_virtio_device(struct virtio_device *dev) > > > > > > >        */ > > > > > > >       err = device_add(&dev->dev); > > > > > > >       if (err) > > > > > > > -        ida_simple_remove(&virtio_index_ida, dev->index); > > > > > > > -out: > > > > > > > -    if (err) > > > > > > > -        virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); > > > > > > > +        goto out_ida; > > > > > > > + > > > > > > > +    return 0; > > > > > > > + > > > > > > > +out_ida: > > > > > > > +    ida_simple_remove(&virtio_index_ida, dev->index); > > > > > > > +out_err: > > > > > > > +    virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); > > > > > > >       return err; > > > > > > >   } > > > > > > >   EXPORT_SYMBOL_GPL(register_virtio_device); > > > > > > > @@ -408,7 +414,9 @@ int virtio_device_restore(struct > > > > > > > virtio_device *dev) > > > > > > >         /* We always start by resetting the device, > > > > > > > in case a previous > > > > > > >        * driver messed it up. */ > > > > > > > -    dev->config->reset(dev); > > > > > > > +    ret = dev->config->reset(dev); > > > > > > > +    if (ret) > > > > > > > +        goto err; > > > > > > >         /* Acknowledge that we've seen the device. */ > > > > > > >       virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); > > > > > > > diff --git a/drivers/virtio/virtio_mmio.c > > > > > > > b/drivers/virtio/virtio_mmio.c > > > > > > > index 56128b9c46eb..12b8f048c48d 100644 > > > > > > > --- a/drivers/virtio/virtio_mmio.c > > > > > > > +++ b/drivers/virtio/virtio_mmio.c > > > > > > > @@ -256,12 +256,13 @@ static void > > > > > > > vm_set_status(struct virtio_device *vdev, u8 status) > > > > > > >       writel(status, vm_dev->base + VIRTIO_MMIO_STATUS); > > > > > > >   } > > > > > > >   -static void vm_reset(struct virtio_device *vdev) > > > > > > > +static int vm_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct virtio_mmio_device *vm_dev = > > > > > > > to_virtio_mmio_device(vdev); > > > > > > >         /* 0 status means a reset. */ > > > > > > >       writel(0, vm_dev->base + VIRTIO_MMIO_STATUS); > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     diff --git a/drivers/virtio/virtio_pci_legacy.c > > > > > > > b/drivers/virtio/virtio_pci_legacy.c > > > > > > > index d62e9835aeec..0b5d95e3efa1 100644 > > > > > > > --- a/drivers/virtio/virtio_pci_legacy.c > > > > > > > +++ b/drivers/virtio/virtio_pci_legacy.c > > > > > > > @@ -89,7 +89,7 @@ static void vp_set_status(struct > > > > > > > virtio_device *vdev, u8 status) > > > > > > >       iowrite8(status, vp_dev->ioaddr + VIRTIO_PCI_STATUS); > > > > > > >   } > > > > > > >   -static void vp_reset(struct virtio_device *vdev) > > > > > > > +static int vp_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct virtio_pci_device *vp_dev = to_vp_device(vdev); > > > > > > >       /* 0 status means a reset. */ > > > > > > > @@ -99,6 +99,8 @@ static void vp_reset(struct virtio_device *vdev) > > > > > > >       ioread8(vp_dev->ioaddr + VIRTIO_PCI_STATUS); > > > > > > >       /* Flush pending VQ/configuration callbacks. */ > > > > > > >       vp_synchronize_vectors(vdev); > > > > > > > + > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     static u16 vp_config_vector(struct > > > > > > > virtio_pci_device *vp_dev, u16 vector) > > > > > > > diff --git a/drivers/virtio/virtio_pci_modern.c > > > > > > > b/drivers/virtio/virtio_pci_modern.c > > > > > > > index fbd4ebc00eb6..cc3412a96a17 100644 > > > > > > > --- a/drivers/virtio/virtio_pci_modern.c > > > > > > > +++ b/drivers/virtio/virtio_pci_modern.c > > > > > > > @@ -158,7 +158,7 @@ static void vp_set_status(struct > > > > > > > virtio_device *vdev, u8 status) > > > > > > >       vp_modern_set_status(&vp_dev->mdev, status); > > > > > > >   } > > > > > > >   -static void vp_reset(struct virtio_device *vdev) > > > > > > > +static int vp_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct virtio_pci_device *vp_dev = to_vp_device(vdev); > > > > > > >       struct virtio_pci_modern_device *mdev = &vp_dev->mdev; > > > > > > > @@ -174,6 +174,7 @@ static void vp_reset(struct virtio_device *vdev) > > > > > > >           msleep(1); > > > > > > >       /* Flush pending VQ/configuration callbacks. */ > > > > > > >       vp_synchronize_vectors(vdev); > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     static u16 vp_config_vector(struct > > > > > > > virtio_pci_device *vp_dev, u16 vector) > > > > > > > diff --git a/drivers/virtio/virtio_vdpa.c > > > > > > > b/drivers/virtio/virtio_vdpa.c > > > > > > > index e28acf482e0c..5fd4e627a9b0 100644 > > > > > > > --- a/drivers/virtio/virtio_vdpa.c > > > > > > > +++ b/drivers/virtio/virtio_vdpa.c > > > > > > > @@ -97,11 +97,13 @@ static void > > > > > > > virtio_vdpa_set_status(struct virtio_device *vdev, > > > > > > > u8 status) > > > > > > >       return ops->set_status(vdpa, status); > > > > > > >   } > > > > > > >   -static void virtio_vdpa_reset(struct virtio_device *vdev) > > > > > > > +static int virtio_vdpa_reset(struct virtio_device *vdev) > > > > > > >   { > > > > > > >       struct vdpa_device *vdpa = vd_get_vdpa(vdev); > > > > > > >         vdpa_reset(vdpa); > > > > > > > + > > > > > > > +    return 0; > > > > > > >   } > > > > > > >     static bool virtio_vdpa_notify(struct virtqueue *vq) > > > > > > > diff --git a/include/linux/virtio_config.h > > > > > > > b/include/linux/virtio_config.h > > > > > > > index 8519b3ae5d52..d2b0f1699a75 100644 > > > > > > > --- a/include/linux/virtio_config.h > > > > > > > +++ b/include/linux/virtio_config.h > > > > > > > @@ -44,9 +44,10 @@ struct virtio_shm_region { > > > > > > >    *    status: the new status byte > > > > > > >    * @reset: reset the device > > > > > > >    *    vdev: the virtio device > > > > > > > - *    After this, status and feature negotiation must be done again > > > > > > > + *    Upon success, status and feature negotiation > > > > > > > must be done again > > > > > > >    *    Device must not be reset from its vq/config callbacks, or in > > > > > > >    *    parallel with being added/removed. > > > > > > > + *    Returns 0 on success or error status. > > > > > > >    * @find_vqs: find virtqueues and instantiate them. > > > > > > >    *    vdev: the virtio_device > > > > > > >    *    nvqs: the number of virtqueues to find > > > > > > > @@ -82,7 +83,7 @@ struct virtio_config_ops { > > > > > > >       u32 (*generation)(struct virtio_device *vdev); > > > > > > >       u8 (*get_status)(struct virtio_device *vdev); > > > > > > >       void (*set_status)(struct virtio_device *vdev, u8 status); > > > > > > > -    void (*reset)(struct virtio_device *vdev); > > > > > > > +    int (*reset)(struct virtio_device *vdev); > > > > > > >       int (*find_vqs)(struct virtio_device *, unsigned nvqs, > > > > > > >               struct virtqueue *vqs[], vq_callback_t *callbacks[], > > > > > > >               const char * const names[], const bool *ctx, > > > > > > > > > > > > > > > > > > > >