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.5 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,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 ADD6DC433ED for ; Tue, 13 Apr 2021 04:43:08 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 4EF806109D for ; Tue, 13 Apr 2021 04:43:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4EF806109D 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 smtp2.osuosl.org (Postfix) with ESMTP id 0E8A14056D; Tue, 13 Apr 2021 04:43:08 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XKj-YEGW9NCA; Tue, 13 Apr 2021 04:43:06 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTP id 178A5400C1; Tue, 13 Apr 2021 04:43:06 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E1516C000B; Tue, 13 Apr 2021 04:43:05 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 72EF7C000A for ; Tue, 13 Apr 2021 04:43:04 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 61CA640562 for ; Tue, 13 Apr 2021 04:43:04 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Wt0hQ39jdgwd for ; Tue, 13 Apr 2021 04:43:03 +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 [216.205.24.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id C53EA400C1 for ; Tue, 13 Apr 2021 04:43:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1618288981; 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=S+iXXJ/5x8/tPf7HGs16m9I19Y7CqzdjcjGIxYoM9Nc=; b=ZEQUWD7xOLL+f12aatAaOh9x7ivbiS8fz4fge9ABmUmJ/qNRbHVxzDHIyf0gQDJy9ASGVA x1myZS1CIWcCTDdxDdAnCS2fMAoMmyQYjg8MjAhY2wnVLBwZMBm2Mrm28A1n/zx8QKTuRy Hf2rCPBz/1hvPwr82w9eiyBa6oyWyQ4= 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-529-IjF5_gM7MLaBdUfIBzSNqg-1; Tue, 13 Apr 2021 00:42:59 -0400 X-MC-Unique: IjF5_gM7MLaBdUfIBzSNqg-1 Received: by mail-wr1-f69.google.com with SMTP id 75so263142wrl.3 for ; Mon, 12 Apr 2021 21:42:59 -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=S+iXXJ/5x8/tPf7HGs16m9I19Y7CqzdjcjGIxYoM9Nc=; b=uYCwdtwHBLYik5Cr5dSGZ7IxkA92CBZd4YhNUA0++bNakmCbN+ikKPbN7Y/Jhorf7L PDIL191xOthSjPHhOE1BdYaZNDxvXAKdZuZOMsvqXULmXixx2qmNvdvGTT0RnnC3jlYJ M3+BWRuQVLJo1JmAnm/TjnmU0+oRc7V5vROBOi759tzMDIPHxb4O2BK95Jkz3/7dq0RX yKZ8ZN5M1mD2tsALTzSn9wVMX+zS4i8Vp8ABBHljQlwGVyep/bPOVkk6mu/IMhlqKO2R vdByO869aD5V+K7Cem3zQb8Tthj0IYP6jfBfBQD98juBLO5RQEBBBQ07Ich+QuZYePnp R/8w== X-Gm-Message-State: AOAM533Fuq2ROuUzA9Pl5sCbz341Jdhysk3eTdTd+rh4mjYqGx9gVpc3 wUSlkZih/cyD88SA4T377yipHrO1ZXEKJdomdaT0mw+WNeEqOBX/4Gr4hmS5cF+tlduSo8L3lrj cIhswL3i1dTwwNLmy/QxthNaa0IEwhpWG85lWQTLqIw== X-Received: by 2002:a1c:804d:: with SMTP id b74mr2017735wmd.15.1618288978175; Mon, 12 Apr 2021 21:42:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwURkWu3bXhGwKQg1Qy8SFc7lxrsiAtw1HnRRAA6rM9F2lSEB/5IDqhevGM48ZJW7Sxr3IRA== X-Received: by 2002:a1c:804d:: with SMTP id b74mr2017722wmd.15.1618288977879; Mon, 12 Apr 2021 21:42:57 -0700 (PDT) Received: from redhat.com ([2a10:8006:2281:0:1994:c627:9eac:1825]) by smtp.gmail.com with ESMTPSA id v3sm1179193wmj.25.2021.04.12.21.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Apr 2021 21:42:57 -0700 (PDT) Date: Tue, 13 Apr 2021 00:42:54 -0400 From: "Michael S. Tsirkin" To: Max Gurtovoy Subject: Re: [PATCH v2 1/3] virtio: update reset callback to return status Message-ID: <20210413002531-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> <20210408115524-mutt-send-email-mst@kernel.org> <31fa92ca-bce5-b71f-406d-8f3951b2143c@nvidia.com> <20210412080051-mutt-send-email-mst@kernel.org> <20210412171858-mutt-send-email-mst@kernel.org> <10e099a9-2e3d-8c39-138a-17b2674b5389@nvidia.com> MIME-Version: 1.0 In-Reply-To: <10e099a9-2e3d-8c39-138a-17b2674b5389@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" T24gVHVlLCBBcHIgMTMsIDIwMjEgYXQgMDE6NTM6MDJBTSArMDMwMCwgTWF4IEd1cnRvdm95IHdy b3RlOgo+IAo+IE9uIDQvMTMvMjAyMSAxMjoyMyBBTSwgTWljaGFlbCBTLiBUc2lya2luIHdyb3Rl Ogo+ID4gT24gTW9uLCBBcHIgMTIsIDIwMjEgYXQgMDQ6MDM6MDJQTSArMDMwMCwgTWF4IEd1cnRv dm95IHdyb3RlOgo+ID4gPiBPbiA0LzEyLzIwMjEgMzowNCBQTSwgTWljaGFlbCBTLiBUc2lya2lu IHdyb3RlOgo+ID4gPiA+IE9uIE1vbiwgQXByIDEyLCAyMDIxIGF0IDAyOjU1OjI3UE0gKzAzMDAs IE1heCBHdXJ0b3ZveSB3cm90ZToKPiA+ID4gPiA+IE9uIDQvOC8yMDIxIDY6NTYgUE0sIE1pY2hh ZWwgUy4gVHNpcmtpbiB3cm90ZToKPiA+ID4gPiA+ID4gT24gVGh1LCBBcHIgMDgsIDIwMjEgYXQg MTI6NTY6NTJQTSArMDMwMCwgTWF4IEd1cnRvdm95IHdyb3RlOgo+ID4gPiA+ID4gPiA+IE9uIDQv OC8yMDIxIDExOjU4IEFNLCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4g5ZyoIDIw MjEvNC84IOS4i+WNiDQ6MTEsIE1heCBHdXJ0b3ZveSDlhpnpgZM6Cj4gPiA+ID4gPiA+ID4gPiA+ IFRoZSByZXNldCBkZXZpY2Ugb3BlcmF0aW9uLCB1c3VhbGx5IGlzIGFuIG9wZXJhdGlvbiB0aGF0 IG1pZ2h0IGZhaWwgZnJvbQo+ID4gPiA+ID4gPiA+ID4gPiB2YXJpb3VzIHJlYXNvbnMuIEZvciBl eGFtcGxlLCB0aGUgY29udHJvbGxlciBtaWdodCBiZSBpbiBhIGJhZCBzdGF0ZSBhbmQKPiA+ID4g PiA+ID4gPiA+ID4gY2FuJ3QgYW5zd2VyIHRvIGFueSByZXF1ZXN0LiBVc3VhbGx5LCB0aGUgcGFy YXZpcnQgU1cgYmFzZWQgdmlydGlvCj4gPiA+ID4gPiA+ID4gPiA+IGRldmljZXMgYWx3YXlzIHN1 Y2NlZWQgaW4gcmVzZXQgb3BlcmF0aW9uIGJ1dCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IKPiA+ ID4gPiA+ID4gPiA+ID4gSFcgYmFzZWQgdmlydGlvIGRldmljZXMuCj4gPiA+ID4gPiA+ID4gPiBJ IHdvdWxkIGxpa2UgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbiB0aGF0IHRoZSByZXNldCBv cGVyYXRpb24gbWF5Cj4gPiA+ID4gPiA+ID4gPiBmYWlsIChleGNlcHQgZm9yIHRoZSBjYXNlIG9m IGEgYnVnZyBndWVzdCkuCj4gPiA+ID4gPiA+ID4gVGhlIGNvbnRyb2xsZXIgbWlnaHQgbm90IGJl IHJlYWR5IG9yIHN0dWNrLiBUaGlzIGlzIGEgcmVhbCB1c2UgY2FzZSBmb3IgbWFueQo+ID4gPiA+ ID4gPiA+IFBDSSBkZXZpY2VzLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEZvciByZWFs IGRldmljZXMgdGhlIEZXIG1pZ2h0IGJlIGluIGEgYmFkIHN0YXRlIGFuZCBpdCBjYW4gaGFwcGVu IGFsc28gZm9yCj4gPiA+ID4gPiA+ID4gcGFyYXZpcnQgZGV2aWNlIGlmIHlvdSBoYXZlIGEgYnVn IGluIHRoZSBjb250cm9sbGVyIGNvZGUgb3IgaWYgeW91IGVudGVyZWQKPiA+ID4gPiA+ID4gPiBz b21lIGVycm9yIGZsb3cgKE91dCBvZiBtZW1vcnkpLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+IFlvdSBkb24ndCB3YW50IHRvIGJlIHN0dWNrIGJlY2F1c2Ugb2Ygb25lIGJhZCBkZXZpY2Uu Cj4gPiA+ID4gPiA+IE9LIHNvIG1heWJlIHdlIGNhbiBkbyBtb3JlIHRvIGRldGVjdCB0aGUgYmFk IGRldmljZS4KPiA+ID4gPiA+ID4gV29uJ3Qgd2UgZ2V0IGFsbCAxJ3Mgb24gYSByZWFkIGluIHRo aXMgY2FzZT8KPiA+ID4gPiA+IE5vLiBob3cgY2FuIHdlIGd1YXJhbnRlZSBpdCA/Cj4gPiA+ID4g PiAKPiA+ID4gPiBXZWxsIHRoaXMgaXMgd2hhdCB5b3UgdGVuZCB0byBnZXQgaWYgZS5nLiB5b3Ug ZGlzYWJsZSBkZXZpY2UgbWVtb3J5Lgo+ID4gPiA+IAo+ID4gPiA+IEFueXdheSwgeW91IGtub3cg YWJvdXQgaGFyZHdhcmUsIEkgZG9uJ3QgLi4uIEl0J3Mgbm90IHJldHVybmluZyAwIGFmdGVyCj4g PiA+ID4gcmVzZXQgYXMgaXQgc2hvdWxkIC4uLiB3aGF0IGRvZXMgaXQgcmV0dXJuPyBIb3BlZnVs bHkgbm90IHJhbmRvbSBub2lzZSAtCj4gPiA+ID4gSSBkb24ndCB0aGluayBpdCdzIHZlcnkgcHJh Y3RpY2FsIHRvIHdyaXRlIGEgZHJpdmVyIGZvciBhIGRldmljZSB0aGF0Cj4gPiA+ID4gc3RhcnRz IGRvaW5nIHRoYXQgYXQgcmFuZG9tIHRpbWVzIC4uLgo+ID4gPiBUaGUgZGV2aWNlIG1heSByZXR1 cm4gMHg0MCAoTkVFRFNfUkVTRVQpLiBJdCBkb2Vzbid0IGhhdmUgdG8gcmV0dXJuIGFsbCAxJ3Mu Cj4gPiA+IAo+ID4gPiBGb3IgcGFyYXZpcnQgZGV2aWNlcywgdGhpbmsgb2YgYSBzaXR1YXRpb24g dGhhdCB5b3UgY2FuJ3QgYWxsb2NhdGUgc29tZQo+ID4gPiBpbnRlcm5hbCBidWZmZXJzIChtYWxs b2MgZmFpbGVkKSBhbmQgeW91IHdhbnQgdG8gd2FpdCBmb3IgZmV3IHNlY29uZHMgdW50aWwKPiA+ ID4gdGhlIHN5c3RlbSBtZW1vcnkgd2lsbCBmcmVlIHNvbWUgcGFnZXMuCj4gPiA+IAo+ID4gPiBT byB5b3UgbWF5IHJldHVybiBORUVEU19SRVNFVCB0aGF0IGluZGljYXRlcyBzb21lIGVycm9yIHN0 YXRlIG9mIHRoZSBkZXZpY2UuCj4gPiA+IE9uY2UgdGhlIHN5c3RlbSBtZW1vcnkgZnJlZWQgYnkg b3RoZXIgYXBwbGljYXRpb24gZm9yIGV4YW1wbGUsIHlvdXIgaW50ZXJuYWwKPiA+ID4gdmlydGlv IGRldmljZSBtYWxsb2Mgc3VjY2VlZGVkIGFuZCB5b3UgbWF5IHJldHVybiAwLgo+ID4gPiAKPiA+ ID4gSW4gdGhpcyBjYXNlLCB5b3UgZG9uJ3Qgd2FudCB0byBzdGFsbCB0aGUgb3RoZXIgdmlydGlv IGRldmljZXMgdG8gcHJvYmUKPiA+ID4gKHRoZXkgbWlnaHQgYmUgcmVhbCBIVyBkZXZpY2VzIHRo YXQgZHJpdmVuIGJ5IHRoZSBzYW1lIGRyaXZlciksIHJpZ2h0ID8KPiA+IFNvIHRoZSBkZXZpY2Ug aXMgdmVyeSBidXN5IHRoZW4/IE5vdCBzdXJlIGl0J3Mgc21hcnQgdG8ganVzdCBhc3N1bWUKPiA+ IGl0J3Mgc2FmZSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciBpdCB0aGVuIC4uLgo+ ID4gCj4gPiBJIGd1ZXNzIHRoZSBsZXNzb24gaXMgZG9uJ3QgbWFrZSBkZXZpY2UgcmVzZXQgZGVw ZW5kIG9uIG1hbGxvYwo+ID4gb2Ygc29tZSBtZW1vcnk/Cj4gCj4gVGhlIGRldmljZSBpcyBub3Qg cmVhZHkgeWV0LiBBbmQgdGhlIG1hbGxvYyBpcyBqdXN0IG9uZSBleGFtcGxlIEkgZ2F2ZSB5b3UK PiB0byBlbXBoYXNpemUgdGhlIGNhc2UuCj4gCj4gQW5vdGhlciBleGFtcGxlIGNhbiBiZSBhIGJh ZCBGVyBpbnN0YWxsZWQuCgpTdXJlbHkgdGhpcyB3aWxsIHdlZGdlIHRoZSBob3N0IGRldmljZSB0 byB0aGUgcG9pbnQgd2hlcmUgdmRwYSB3b24ndApldmVuIGJlIHByb2JlZD8KCj4gVGhlIGhvc3Qv Z3Vlc3QgZHJpdmVyIGlzIHRyeWluZyB0byBlbmFibGUgdGhlIGRldmljZSBidXQgdGhlIGRldmlj ZSBpcyBub3QKPiByZWFkeS4gVGhpcyBpcyB0aGUgcmVhbCBsaWZlIHVzZSBjYXNlIGFuZCBJIGdh dmUgbWFueSBleGFtcGxlcyBmb3IgcmVhc29ucwo+IGZvciBkZXZpY2Ugbm90IHRvIGJlIHJlYWR5 LiBGb3IgcGFyYXZpcnQgYW5kIEhXIGRldmljZXMuCj4gCj4gRW5kbGVzcyBsb29wIGFuZCBzdGFs bGluZyBuZXh0IGRldmljZXMgcHJvYmUgaXMgbm90IHRoZSB3YXkgdG8gZ28uIFBDSQo+IGRyaXZl cnMgY2FuJ3QgYWxsb3cgdGhpcyB0byBoYXBwZW4uCj4gCj4gVGhpbmsgb2YgYSBzaXR1YXRpb24g dGhhdCBob3N0IGl0J3MgYm9vdGluZyBmcm9tIHZpcnRpby1ibGsgZGV2aWNlIGJ1dCBpdAo+IGhh cyBhbm90aGVyIHZpcnRpby1uZXQgZGV2aWNlIHRoYXQgaGFzIGJhZCBGVyBvciBvdGhlciBpbnRl cm5hbCBlcnJvciAoaXQKPiBkb2Vzbid0IG1hdHRlciB3aGF0IGl0IGlzIGZvciB0aGUgZXhhbXBs ZSkgYW5kIHRoZSB2aXJ0aW8gcGNpIGRyaXZlciBpcwo+IHByb2JpbmcgdmlydGlvLW5ldCBkZXZp Y2UgZmlyc3QuCj4gCj4gVGhlIGhvc3Qgd2lsbCBuZXZlciBib290IHN1Y2Nlc3NmdWxseS4gVGhp cyBpcyBmYXRhbC4KCkl0J3Mgbm90IG5pY2UgZm9yIHN1cmUuIEJ1dCBicm9rZW4gaGFyZHdhcmUg aXMgYnJva2VuIGhhcmR3YXJlLgpUcnkgbm90IHRvIGhhdmUgaXQgaXMgc3RpbGwgYmVzdCBhZHZp Y2UuCk1ha2luZyB2ZXJ5IHN1cmUgdGhpcyB3aWxsIG5ldmVyIHJlZ3Jlc3MgYW55IHVzZWZ1bCBm bG93cyBpcyBoaWdoCnByaW9yaXR5IHRob3VnaC4gIFRodXMgdGhlIGZvY3VzIG9uIGFkZHJlc3Np bmcgc3BlY2lmaWMgaXNzdWVzCm5vdCBqdXN0IGZhbGxpbmcgb3ZlciB0aGUgbW9tZW50IHNvbWV0 aGluZyBzZWVtcyBhIGJpdCBmaXNoeS4KCj4gRXJyb3IgZmxvd3MgYXJlIGNyaXRpY2FsIHdoZW4g d29ya2luZyB3aXRoIHJlYWwgUENJIEhXIGFuZCBJIHVuZGVyc3RhbmQgdGhhdAo+IGluIHBhcmF2 aXJ0IGRldmljZXMgd2l0aCBzdHJvbmcgaHlwZXJ2aXNvciB5b3Ugd2lsbCBiZSBvayBpbiA5OSUg b2YgdGhlIHRpbWUKPiBidXQgeW91IG5lZWQgdG8gYmUgYXdhcmUgYWxzbyBmb3IgYnVncyBhbmQg ZXJyb3IgZmxvd3MgaW4gYm90aCBwYXJhdmlydCBhbmQKPiBIVyB3b3JsZC4KPiAKPiBTbyBmaXJz dCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGlzIGVuZGxlc3MgbG9vcCAod2l0aCB0aGlzIHBhdGNoIHNl dCBvciB3aXRoCj4gYXN5bmMgcHJvYmluZyBtZWNoYW5pc20pIGFuZCBsYXRlciB3ZSBzaG91bGQg dXBkYXRlIHRoZSBzcGVjaWZpY2F0aW9uLgo+IAo+IFRoZSB2aXJ0aW8gd29ybGQgbm93IGlzIG5v dCBvbmx5IGd1ZXN0IGFuZCBwYXJhdmlydCBkZXZpY2VzLiBCYXJlIG1ldGFsCj4gaG9zdHMgc3Rh cnQgdXNpbmcgdmlydGlvIGRldmljZXMgYW5kIGRyaXZlcnMgbW9yZSBhbmQgbW9yZS4KCkV4Y2Vs bGVudCBzbyBjYW4gd2UgcGxlYXNlIHN0b3AgdGFsa2luZyBoeXBvdGhldGljYWxzIGFuZCBkaXNj dXNzIGhvdwpkb2VzIGFjdHVhbCBoYXJkd2FyZSBiZWhhdmUsIGFuZCBob3cgYmVzdCB0byByZWNv dmVyIGluIGVhY2ggY2FzZT8KUmVjb3ZlcmluZyBmcm9tIHdlaXJkIHNjZW5hcmlvdXMgbGlrZSBi YWQgZmlybXdhcmUgaXMgbmljZSB0byBoYXZlIGJ1dApub3QgYXQgcmlzayBvZiBlLmcuIGNvcnJ1 cHRpbmcga2VybmVsIG1lbW9yeS4gV2hpY2ggYmxpbmRseSByZW1vdmluZyB0aGUKZHJpdmVyIHdp dGggYW4gYWN0aXZlIGRldmljZSBoYXMgYSBnb29kIGNoYW5jZSB0byBkby4KCkp1c3QgdG8gc3Ry ZXNzIHRoZSBpbXBvcnRhbmNlIG9mIGFkZHJlc3NpbmcgYWN0dWFsIGlzc3VlcywKaG93IHdhcyB0 aGlzIHBhdGNoIGV2ZW4gdGVzdGVkPyBXb3J0aCBtZW50aW9uaW5nIGluIHRoZSBjb21taXQgbG9n LgoKQW5kIGJ5IHRoZSB3YXksIHRoZXJlIGFyZSBhY3R1YWxseSB1c2UtY2FzZXMgSSBhbSBhd2Fy ZSBvZiB3aGVyZSB3ZSBzcGluCmZvcmV2ZXIgYW5kIHJlYWxseSBzaG91bGQgbm90LCBmb3IgZXhh bXBsZSBpdCB3b3VsZCBiZSBzdXBlciBuaWNlIHRvCnN1cHBvcnQgc3VycHJpc2UgcmVtb3ZhbCBz byBob3N0IGNhbiBkcm9wIHRoZSBkcml2ZXIgYWZ0ZXIgZGV2aWNlIGlzCmdvbmUgd2l0aG91dCB3 YWl0aW5nIGZvciBndWVzdC4gVGhpcyBhbGxvd3MgYWxsb2NhdGluZyB0aGUgZGV2aWNlIHRvCmFu b3RoZXIgVk0uICBJbiB0aGF0IGNhc2UgdG9vLCBhbiBvdXQgb2YgdGhlIGJsdWUgdGltZW91dCBh bmQgYmxpbmRseQphc3N1bWluZyBhbGwgaXMgd2VsbCBpcyBub3QgdGhlIHdheSB0byBnbywgeW91 IG5lZWQgdG8gcHJvYmUgZGV2aWNlIHRvCmNoZWNrIHdoZXRoZXIgaXQncyBkZWFkIG9yIGFsaXZl LgpNYXliZSB5b3VyIGVycm9yIHJlY292ZXJ5IGNhbiBmaXQgaW4gc3VjaCBhIGZyYW1ld29yay4K Cgo+ID4gCj4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBjb21taXQgaXMgYWxzbyBhIHByZXBh cmF0aW9uIGZvciBhZGRpbmcgYSB0aW1lb3V0IG1lY2hhbmlzbSBmb3IKPiA+ID4gPiA+ID4gPiA+ ID4gcmVzZXR0aW5nIHZpcnRpbyBkZXZpY2VzLgo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF4IEd1cnRvdm95IDxtZ3VydG92b3lAbnZpZGlhLmNv bT4KPiA+ID4gPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ ID4gPiBjaGFuZ2VzIGZyb20gdjE6Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIC0gdXBkYXRlIHZp cnRpb19jY3cuYyAoQ29ybmVsaWEpCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIC0gdXBkYXRlIHZp cnRpb191bWwuYwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCAtIHVwZGF0ZSBtbHhiZi10bWZpZm8u Ywo+ID4gPiA+ID4gPiA+ID4gTm90ZSB0aGF0IHZpcnRpbyBkcml2ZXIgbWF5IGNhbGwgcmVzZXQs IHNvIHlvdSBwcm9iYWJseSBuZWVkIHRvIGNvbnZlcnQKPiA+ID4gPiA+ID4gPiA+IHRoZW0uCj4g PiA+ID4gPiA+ID4gSSdtIHN1cmUgSSB1bmRlcnN0YW5kLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiA+IENvbnZlcnQgdG8gd2hhdCA/Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhh bmtzLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gVGhhbmtzCj4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiA+ ID4gICAgwqAgYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgNCArKystCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIGRyaXZlcnMvcGxhdGZvcm0v bWVsbGFub3gvbWx4YmYtdG1maWZvLmMgfMKgIDQgKysrLQo+ID4gPiA+ID4gPiA+ID4gPiAgICDC oCBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY8KgwqAgfMKgIDQgKysrLQo+ ID4gPiA+ID4gPiA+ID4gPiAgICDCoCBkcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuY8Kg wqDCoMKgwqDCoMKgwqAgfMKgIDkgKysrKysrLS0tCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIGRy aXZlcnMvdmlydGlvL3ZpcnRpby5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 IDIyICsrKysrKysrKysrKysrKy0tLS0tLS0KPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgZHJpdmVy cy92aXJ0aW8vdmlydGlvX21taW8uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMyArKy0K PiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3ku Y8KgwqDCoMKgwqDCoCB8wqAgNCArKystCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIGRyaXZlcnMv dmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmPCoMKgwqDCoMKgwqAgfMKgIDMgKystCj4gPiA+ID4g PiA+ID4gPiA+ICAgIMKgIGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgIDQgKysrLQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCBpbmNsdWRlL2xp bnV4L3ZpcnRpb19jb25maWcuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDUgKysrLS0KPiA+ ID4gPiA+ID4gPiA+ID4gICAgwqAgMTAgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwg MTkgZGVsZXRpb25zKC0pCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiBkaWZm IC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92 aXJ0aW9fdW1sLmMKPiA+ID4gPiA+ID4gPiA+ID4gaW5kZXggOTFkZGY3NGNhODg4Li5iNmU2NjI2 NWVkMzIgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvdW0vZHJpdmVycy92aXJ0 aW9fdW1sLmMKPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191 bWwuYwo+ID4gPiA+ID4gPiA+ID4gPiBAQCAtODI3LDExICs4MjcsMTMgQEAgc3RhdGljIHZvaWQg dnVfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZQo+ID4gPiA+ID4gPiA+ID4gPiAqdmRl diwgdTggc3RhdHVzKQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHZ1X2Rldi0+c3Rh dHVzID0gc3RhdHVzOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB9Cj4gPiA+ID4gPiA+ID4gPiA+ ICAgIMKgIC1zdGF0aWMgdm9pZCB2dV9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikK PiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIHsKPiA+ID4gPiA+ID4gPiA+ID4gICAg wqDCoMKgwqDCoCBzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2RldiA9IHRvX3ZpcnRpb191 bWxfZGV2aWNlKHZkZXYpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoMKgwqDCoMKgIHZ1X2Rl di0+c3RhdHVzID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArwqDC oMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB9Cj4gPiA+ID4gPiA+ID4gPiA+ ICAgIMKgIMKgIHN0YXRpYyB2b2lkIHZ1X2RlbF92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiA+ ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4 YmYtdG1maWZvLmMKPiA+ID4gPiA+ID4gPiA+ID4gYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94 L21seGJmLXRtZmlmby5jCj4gPiA+ID4gPiA+ID4gPiA+IGluZGV4IGJiYzRlNzFhMTZmZi4uYzE5 MmI4YWM1ZDllIDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BsYXRmb3Jt L21lbGxhbm94L21seGJmLXRtZmlmby5jCj4gPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMv cGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMKPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTk4 MCwxMSArOTgwLDEzIEBAIHN0YXRpYyB2b2lkCj4gPiA+ID4gPiA+ID4gPiA+IG1seGJmX3RtZmlm b192aXJ0aW9fc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwKPiA+ID4gPiA+ ID4gPiA+ID4gICAgwqAgfQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoCAvKiBSZXNldCB0aGUg ZGV2aWNlLiBOb3QgbXVjaCBoZXJlIGZvciBub3cuICovCj4gPiA+ID4gPiA+ID4gPiA+IC1zdGF0 aWMgdm9pZCBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2 ZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIGludCBtbHhiZl90bWZpZm9fdmlydGlvX3Jl c2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB7 Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgc3RydWN0IG1seGJmX3RtZmlmb192ZGV2 ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ ICAgIMKgIMKgwqDCoMKgwqAgdG1fdmRldi0+c3RhdHVzID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ID4gPiAg ICDCoCB9Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIMKgIC8qIFJlYWQgdGhlIHZhbHVlIG9mIGEg Y29uZmlndXJhdGlvbiBmaWVsZC4gKi8KPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCj4gPiA+ID4gPiA+ID4gPiA+IGIv ZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKPiA+ID4gPiA+ID4gPiA+ID4g aW5kZXggMGNjNjE3Zjc2MDY4Li5jYTk1NzNjNjJjM2QgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+ IC0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCj4gPiA+ID4gPiA+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCj4gPiA+ ID4gPiA+ID4gPiA+IEBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlv X3NldF9zdGF0dXMoc3RydWN0Cj4gPiA+ID4gPiA+ID4gPiA+IHZpcnRpb19kZXZpY2UgKnZkZXYs IHU4IHN0YXR1cykKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCBkZXZfZGJnKCZ2ZGV2 LT5kZXYsICJzdGF0dXM6ICVkXG4iLCBzdGF0dXMpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB9 Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIC1zdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fcmVzZXQo c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgaW50 IHJwcm9jX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ ID4gPiA+ID4gICAgwqAgewo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHN0cnVjdCBy cHJvY192ZGV2ICpydmRldiA9IHZkZXZfdG9fcnZkZXYodmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ ICAgIMKgwqDCoMKgwqAgc3RydWN0IGZ3X3JzY192ZGV2ICpyc2M7Cj4gPiA+ID4gPiA+ID4gPiA+ IEBAIC0yMDAsNiArMjAwLDggQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVj dAo+ID4gPiA+ID4gPiA+ID4gPiB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ID4g PiAgICDCoCDCoMKgwqDCoMKgIHJzYy0+c3RhdHVzID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4gICAg wqDCoMKgwqDCoCBkZXZfZGJnKCZ2ZGV2LT5kZXYsICJyZXNldCAhXG4iKTsKPiA+ID4gPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ ID4gPiAgICDCoCB9Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIMKgIC8qIHByb3ZpZGUgdGhlIHZk ZXYgZmVhdHVyZXMgYXMgcmV0cmlldmVkIGZyb20gdGhlIGZpcm13YXJlICovCj4gPiA+ID4gPiA+ ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYwo+ID4g PiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCj4gPiA+ID4g PiA+ID4gPiA+IGluZGV4IDU0ZTY4NmRjYTZkZS4uNTJiMzI1NTVlNzQ2IDEwMDY0NAo+ID4gPiA+ ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYwo+ID4gPiA+ ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYwo+ID4gPiA+ ID4gPiA+ID4gPiBAQCAtNzMyLDE0ICs3MzIsMTUgQEAgc3RhdGljIGludCB2aXJ0aW9fY2N3X2Zp bmRfdnFzKHN0cnVjdAo+ID4gPiA+ID4gPiA+ID4gPiB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1bnNp Z25lZCBudnFzLAo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4g PiA+ID4gPiA+ID4gPiA+ICAgIMKgIH0KPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgLXN0YXRpYyB2 b2lkIHZpcnRpb19jY3dfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4g PiA+ID4gPiA+ICtzdGF0aWMgaW50IHZpcnRpb19jY3dfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIHsKPiA+ID4gPiA+ID4gPiA+ID4gICAg wqDCoMKgwqDCoCBzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNl KHZkZXYpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHN0cnVjdCBjY3cxICpjY3c7 Cj4gPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaW50IHJldDsKPiA+ID4gPiA+ID4gPiA+ID4gICAg wqAgwqDCoMKgwqDCoCBjY3cgPSBjY3dfZGV2aWNlX2RtYV96YWxsb2ModmNkZXYtPmNkZXYsIHNp emVvZigqY2N3KSk7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgaWYgKCFjY3cpCj4g PiA+ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4gPiA+ID4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAg wqDCoMKgwqDCoCAvKiBaZXJvIHN0YXR1cyBiaXRzLiAqLwo+ID4gPiA+ID4gPiA+ID4gPiAgICDC oMKgwqDCoMKgIHZjZGV2LT5kbWFfYXJlYS0+c3RhdHVzID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4g QEAgLTc0OSw4ICs3NTAsMTAgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19yZXNldChzdHJ1Y3QK PiA+ID4gPiA+ID4gPiA+ID4gdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiA+ID4g ICAgwqDCoMKgwqDCoCBjY3ctPmZsYWdzID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKg wqDCoCBjY3ctPmNvdW50ID0gMDsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCBjY3ct PmNkYSA9IDA7Cj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgY2N3X2lvX2hlbHBlcih2Y2Rldiwg Y2N3LCBWSVJUSU9fQ0NXX0RPSU5HX1JFU0VUKTsKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBy ZXQgPSBjY3dfaW9faGVscGVyKHZjZGV2LCBjY3csIFZJUlRJT19DQ1dfRE9JTkdfUkVTRVQpOwo+ ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIGNjd19kZXZpY2VfZG1hX2ZyZWUodmNkZXYt PmNkZXYsIGNjdywgc2l6ZW9mKCpjY3cpKTsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiA+ID4gPiArwqDCoMKgIHJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIH0KPiA+ ID4gPiA+ID4gPiA+ID4gICAgwqAgwqAgc3RhdGljIHU2NCB2aXJ0aW9fY2N3X2dldF9mZWF0dXJl cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMKPiA+ ID4gPiA+ID4gPiA+ID4gaW5kZXggNGIxNWMwMGMwYTBhLi5kZGJmZDViNWYzYmQgMTAwNjQ0Cj4g PiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCj4gPiA+ID4gPiA+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCj4gPiA+ID4gPiA+ID4gPiA+IEBA IC0zMzgsNyArMzM4LDcgQEAgaW50IHJlZ2lzdGVyX3ZpcnRpb19kZXZpY2Uoc3RydWN0IHZpcnRp b19kZXZpY2UKPiA+ID4gPiA+ID4gPiA+ID4gKmRldikKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDC oMKgwqDCoCAvKiBBc3NpZ24gYSB1bmlxdWUgZGV2aWNlIGluZGV4IGFuZCBoZW5jZSBuYW1lLiAq Lwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIGVyciA9IGlkYV9zaW1wbGVfZ2V0KCZ2 aXJ0aW9faW5kZXhfaWRhLCAwLCAwLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ID4gPiA+ID4gICAg wqDCoMKgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKg IGdvdG8gb3V0Owo+ID4gPiA+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZXJy Owo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoMKgwqDCoMKgIGRldi0+aW5kZXggPSBlcnI7Cj4g PiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgInZp cnRpbyV1IiwgZGV2LT5pbmRleCk7Cj4gPiA+ID4gPiA+ID4gPiA+IEBAIC0zNDksNyArMzQ5LDkg QEAgaW50IHJlZ2lzdGVyX3ZpcnRpb19kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UKPiA+ID4g PiA+ID4gPiA+ID4gKmRldikKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgwqDCoMKgwqDCoCAvKiBX ZSBhbHdheXMgc3RhcnQgYnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIGluIGNhc2UgYSBwcmV2aW91 cwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgwqAgKiBkcml2ZXIgbWVzc2VkIGl0IHVw LsKgIFRoaXMgYWxzbyB0ZXN0cyB0aGF0IGNvZGUgcGF0aCBhCj4gPiA+ID4gPiA+ID4gPiA+IGxp dHRsZS4gKi8KPiA+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBkZXYtPmNvbmZpZy0+cmVzZXQoZGV2 KTsKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBlcnIgPSBkZXYtPmNvbmZpZy0+cmVzZXQoZGV2 KTsKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBpZiAoZXJyKQo+ID4gPiA+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAgZ290byBvdXRfaWRhOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoMKg wqDCoMKgIC8qIEFja25vd2xlZGdlIHRoYXQgd2UndmUgc2VlbiB0aGUgZGV2aWNlLiAqLwo+ID4g PiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHZpcnRpb19hZGRfc3RhdHVzKGRldiwgVklSVElP X0NPTkZJR19TX0FDS05PV0xFREdFKTsKPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTM2MiwxMCArMzY0 LDE0IEBAIGludCByZWdpc3Rlcl92aXJ0aW9fZGV2aWNlKHN0cnVjdAo+ID4gPiA+ID4gPiA+ID4g PiB2aXJ0aW9fZGV2aWNlICpkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqDCoCAq Lwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIGVyciA9IGRldmljZV9hZGQoJmRldi0+ ZGV2KTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCBpZiAoZXJyKQo+ID4gPiA+ID4g PiA+ID4gPiAtwqDCoMKgwqDCoMKgwqAgaWRhX3NpbXBsZV9yZW1vdmUoJnZpcnRpb19pbmRleF9p ZGEsIGRldi0+aW5kZXgpOwo+ID4gPiA+ID4gPiA+ID4gPiAtb3V0Ogo+ID4gPiA+ID4gPiA+ID4g PiAtwqDCoMKgIGlmIChlcnIpCj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoCB2aXJ0 aW9fYWRkX3N0YXR1cyhkZXYsIFZJUlRJT19DT05GSUdfU19GQUlMRUQpOwo+ID4gPiA+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfaWRhOwo+ID4gPiA+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gPiA+ID4gK291dF9pZGE6Cj4gPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWRhX3Np bXBsZV9yZW1vdmUoJnZpcnRpb19pbmRleF9pZGEsIGRldi0+aW5kZXgpOwo+ID4gPiA+ID4gPiA+ ID4gPiArb3V0X2VycjoKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCB2aXJ0aW9fYWRkX3N0YXR1 cyhkZXYsIFZJUlRJT19DT05GSUdfU19GQUlMRUQpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKg wqDCoMKgIHJldHVybiBlcnI7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIH0KPiA+ID4gPiA+ID4g PiA+ID4gICAgwqAgRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfdmlydGlvX2RldmljZSk7Cj4g PiA+ID4gPiA+ID4gPiA+IEBAIC00MDgsNyArNDE0LDkgQEAgaW50IHZpcnRpb19kZXZpY2VfcmVz dG9yZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDC oMKgwqDCoMKgIC8qIFdlIGFsd2F5cyBzdGFydCBieSByZXNldHRpbmcgdGhlIGRldmljZSwgaW4g Y2FzZSBhIHByZXZpb3VzCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqDCoCAqIGRyaXZl ciBtZXNzZWQgaXQgdXAuICovCj4gPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgZGV2LT5jb25maWct PnJlc2V0KGRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0ID0gZGV2LT5jb25maWct PnJlc2V0KGRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWYgKHJldCkKPiA+ID4gPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDC oCDCoMKgwqDCoMKgIC8qIEFja25vd2xlZGdlIHRoYXQgd2UndmUgc2VlbiB0aGUgZGV2aWNlLiAq Lwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHZpcnRpb19hZGRfc3RhdHVzKGRldiwg VklSVElPX0NPTkZJR19TX0FDS05PV0xFREdFKTsKPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19tbWlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f bW1pby5jCj4gPiA+ID4gPiA+ID4gPiA+IGluZGV4IDU2MTI4YjljNDZlYi4uMTJiOGYwNDhjNDhk IDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1p by5jCj4gPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19tbWlvLmMK PiA+ID4gPiA+ID4gPiA+ID4gQEAgLTI1NiwxMiArMjU2LDEzIEBAIHN0YXRpYyB2b2lkIHZtX3Nl dF9zdGF0dXMoc3RydWN0IHZpcnRpb19kZXZpY2UKPiA+ID4gPiA+ID4gPiA+ID4gKnZkZXYsIHU4 IHN0YXR1cykKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCB3cml0ZWwoc3RhdHVzLCB2 bV9kZXYtPmJhc2UgKyBWSVJUSU9fTU1JT19TVEFUVVMpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDC oCB9Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIC1zdGF0aWMgdm9pZCB2bV9yZXNldChzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdm1fcmVz ZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIHsK PiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCBzdHJ1Y3QgdmlydGlvX21taW9fZGV2aWNl ICp2bV9kZXYgPSB0b192aXJ0aW9fbW1pb19kZXZpY2UodmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ ICAgIMKgIMKgwqDCoMKgwqAgLyogMCBzdGF0dXMgbWVhbnMgYSByZXNldC4gKi8KPiA+ID4gPiA+ ID4gPiA+ID4gICAgwqDCoMKgwqDCoCB3cml0ZWwoMCwgdm1fZGV2LT5iYXNlICsgVklSVElPX01N SU9fU1RBVFVTKTsKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiA+ ID4gPiA+ID4gICAgwqAgfQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoCBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwo+ID4gPiA+ID4gPiA+ID4gPiBiL2Ry aXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKPiA+ID4gPiA+ID4gPiA+ID4gaW5kZXgg ZDYyZTk4MzVhZWVjLi4wYjVkOTVlM2VmYTEgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLSBh L2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKPiA+ID4gPiA+ID4gPiA+ID4gKysr IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwo+ID4gPiA+ID4gPiA+ID4gPiBA QCAtODksNyArODksNyBAQCBzdGF0aWMgdm9pZCB2cF9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9f ZGV2aWNlCj4gPiA+ID4gPiA+ID4gPiA+ICp2ZGV2LCB1OCBzdGF0dXMpCj4gPiA+ID4gPiA+ID4g PiA+ICAgIMKgwqDCoMKgwqAgaW93cml0ZTgoc3RhdHVzLCB2cF9kZXYtPmlvYWRkciArIFZJUlRJ T19QQ0lfU1RBVFVTKTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgfQo+ID4gPiA+ID4gPiA+ID4g PiAgICDCoCAtc3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYp Cj4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2 aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB7Cj4gPiA+ID4gPiA+ID4gPiA+ICAg IMKgwqDCoMKgwqAgc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZp Y2UodmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgLyogMCBzdGF0dXMgbWVh bnMgYSByZXNldC4gKi8KPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTk5LDYgKzk5LDggQEAgc3RhdGlj IHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4g PiA+ICAgIMKgwqDCoMKgwqAgaW9yZWFkOCh2cF9kZXYtPmlvYWRkciArIFZJUlRJT19QQ0lfU1RB VFVTKTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCAvKiBGbHVzaCBwZW5kaW5nIFZR L2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDC oMKgIHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAg fQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoCBzdGF0aWMgdTE2IHZwX2NvbmZpZ192ZWN0b3Io c3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYsCj4gPiA+ID4gPiA+ID4gPiA+IHUxNiB2 ZWN0b3IpCj4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0 aW9fcGNpX21vZGVybi5jCj4gPiA+ID4gPiA+ID4gPiA+IGIvZHJpdmVycy92aXJ0aW8vdmlydGlv X3BjaV9tb2Rlcm4uYwo+ID4gPiA+ID4gPiA+ID4gPiBpbmRleCBmYmQ0ZWJjMDBlYjYuLmNjMzQx MmE5NmExNyAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8vdmly dGlvX3BjaV9tb2Rlcm4uYwo+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby92 aXJ0aW9fcGNpX21vZGVybi5jCj4gPiA+ID4gPiA+ID4gPiA+IEBAIC0xNTgsNyArMTU4LDcgQEAg c3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZQo+ID4gPiA+ID4g PiA+ID4gPiAqdmRldiwgdTggc3RhdHVzKQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKg IHZwX21vZGVybl9zZXRfc3RhdHVzKCZ2cF9kZXYtPm1kZXYsIHN0YXR1cyk7Cj4gPiA+ID4gPiA+ ID4gPiA+ICAgIMKgIH0KPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgLXN0YXRpYyB2b2lkIHZwX3Jl c2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGlj IGludCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ID4gPiA+ID4gPiA+ ID4gICAgwqAgewo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHN0cnVjdCB2aXJ0aW9f cGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwo+ID4gPiA+ID4gPiA+ID4g PiAgICDCoMKgwqDCoMKgIHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYgPSAm dnBfZGV2LT5tZGV2Owo+ID4gPiA+ID4gPiA+ID4gPiBAQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRp YyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ ID4gPiAgICDCoMKgwqDCoMKgwqDCoMKgwqAgbXNsZWVwKDEpOwo+ID4gPiA+ID4gPiA+ID4gPiAg ICDCoMKgwqDCoMKgIC8qIEZsdXNoIHBlbmRpbmcgVlEvY29uZmlndXJhdGlvbiBjYWxsYmFja3Mu ICovCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgdnBfc3luY2hyb25pemVfdmVjdG9y cyh2ZGV2KTsKPiA+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiA+ID4g PiA+ID4gICAgwqAgfQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCDCoCBzdGF0aWMgdTE2IHZwX2Nv bmZpZ192ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYsCj4gPiA+ID4gPiA+ ID4gPiA+IHUxNiB2ZWN0b3IpCj4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpcnRpby92aXJ0aW9fdmRwYS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwo+ID4g PiA+ID4gPiA+ID4gPiBpbmRleCBlMjhhY2Y0ODJlMGMuLjVmZDRlNjI3YTliMCAxMDA2NDQKPiA+ ID4gPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwo+ID4gPiA+ ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCj4gPiA+ID4gPiA+ ID4gPiA+IEBAIC05NywxMSArOTcsMTMgQEAgc3RhdGljIHZvaWQgdmlydGlvX3ZkcGFfc2V0X3N0 YXR1cyhzdHJ1Y3QKPiA+ID4gPiA+ID4gPiA+ID4gdmlydGlvX2RldmljZSAqdmRldiwgdTggc3Rh dHVzKQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgwqDCoMKgIHJldHVybiBvcHMtPnNldF9zdGF0 dXModmRwYSwgc3RhdHVzKTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqAgfQo+ID4gPiA+ID4gPiA+ ID4gPiAgICDCoCAtc3RhdGljIHZvaWQgdmlydGlvX3ZkcGFfcmVzZXQoc3RydWN0IHZpcnRpb19k ZXZpY2UgKnZkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHZpcnRpb192ZHBhX3Jl c2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB7 Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBh ID0gdmRfZ2V0X3ZkcGEodmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgIMKgwqDCoMKgwqAg dmRwYV9yZXNldCh2ZHBhKTsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiAr wqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoCB9Cj4gPiA+ID4gPiA+ID4g PiA+ICAgIMKgIMKgIHN0YXRpYyBib29sIHZpcnRpb192ZHBhX25vdGlmeShzdHJ1Y3QgdmlydHF1 ZXVlICp2cSkKPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmly dGlvX2NvbmZpZy5oCj4gPiA+ID4gPiA+ID4gPiA+IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29u ZmlnLmgKPiA+ID4gPiA+ID4gPiA+ID4gaW5kZXggODUxOWIzYWU1ZDUyLi5kMmIwZjE2OTlhNzUg MTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZp Zy5oCj4gPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5o Cj4gPiA+ID4gPiA+ID4gPiA+IEBAIC00NCw5ICs0NCwxMCBAQCBzdHJ1Y3QgdmlydGlvX3NobV9y ZWdpb24gewo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgICrCoMKgwqAgc3RhdHVzOiB0aGUgbmV3 IHN0YXR1cyBieXRlCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqAgKiBAcmVzZXQ6IHJlc2V0IHRo ZSBkZXZpY2UKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoCAqwqDCoMKgIHZkZXY6IHRoZSB2aXJ0 aW8gZGV2aWNlCj4gPiA+ID4gPiA+ID4gPiA+IC0gKsKgwqDCoCBBZnRlciB0aGlzLCBzdGF0dXMg YW5kIGZlYXR1cmUgbmVnb3RpYXRpb24gbXVzdCBiZSBkb25lIGFnYWluCj4gPiA+ID4gPiA+ID4g PiA+ICsgKsKgwqDCoCBVcG9uIHN1Y2Nlc3MsIHN0YXR1cyBhbmQgZmVhdHVyZSBuZWdvdGlhdGlv biBtdXN0IGJlIGRvbmUgYWdhaW4KPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoCAqwqDCoMKgIERl dmljZSBtdXN0IG5vdCBiZSByZXNldCBmcm9tIGl0cyB2cS9jb25maWcgY2FsbGJhY2tzLCBvciBp bgo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgICrCoMKgwqAgcGFyYWxsZWwgd2l0aCBiZWluZyBh ZGRlZC9yZW1vdmVkLgo+ID4gPiA+ID4gPiA+ID4gPiArICrCoMKgwqAgUmV0dXJucyAwIG9uIHN1 Y2Nlc3Mgb3IgZXJyb3Igc3RhdHVzLgo+ID4gPiA+ID4gPiA+ID4gPiAgICDCoMKgICogQGZpbmRf dnFzOiBmaW5kIHZpcnRxdWV1ZXMgYW5kIGluc3RhbnRpYXRlIHRoZW0uCj4gPiA+ID4gPiA+ID4g PiA+ICAgIMKgwqAgKsKgwqDCoCB2ZGV2OiB0aGUgdmlydGlvX2RldmljZQo+ID4gPiA+ID4gPiA+ ID4gPiAgICDCoMKgICrCoMKgwqAgbnZxczogdGhlIG51bWJlciBvZiB2aXJ0cXVldWVzIHRvIGZp bmQKPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTgyLDcgKzgzLDcgQEAgc3RydWN0IHZpcnRpb19jb25m aWdfb3BzIHsKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoCB1MzIgKCpnZW5lcmF0aW9u KShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDC oMKgwqAgdTggKCpnZXRfc3RhdHVzKShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7Cj4gPiA+ ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgdm9pZCAoKnNldF9zdGF0dXMpKHN0cnVjdCB2aXJ0 aW9fZGV2aWNlICp2ZGV2LCB1OCBzdGF0dXMpOwo+ID4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIHZv aWQgKCpyZXNldCkoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpOwo+ID4gPiA+ID4gPiA+ID4g PiArwqDCoMKgIGludCAoKnJlc2V0KShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7Cj4gPiA+ ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqAgaW50ICgqZmluZF92cXMpKHN0cnVjdCB2aXJ0aW9f ZGV2aWNlICosIHVuc2lnbmVkIG52cXMsCj4gPiA+ID4gPiA+ID4gPiA+ICAgIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2aXJ0cXVldWUgKnZxc1tdLCB2cV9jYWxsYmFja190ICpj YWxsYmFja3NbXSwKPiA+ID4gPiA+ID4gPiA+ID4gICAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10sIGNvbnN0IGJvb2wgKmN0eCwKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1h aWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRw czovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXph dGlvbg== 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.8 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_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 51F2AC433B4 for ; Tue, 13 Apr 2021 04:43:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 279136109D for ; Tue, 13 Apr 2021 04:43:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230078AbhDMEnV (ORCPT ); Tue, 13 Apr 2021 00:43:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:35303 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230011AbhDMEnV (ORCPT ); Tue, 13 Apr 2021 00:43:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1618288981; 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=S+iXXJ/5x8/tPf7HGs16m9I19Y7CqzdjcjGIxYoM9Nc=; b=ZEQUWD7xOLL+f12aatAaOh9x7ivbiS8fz4fge9ABmUmJ/qNRbHVxzDHIyf0gQDJy9ASGVA x1myZS1CIWcCTDdxDdAnCS2fMAoMmyQYjg8MjAhY2wnVLBwZMBm2Mrm28A1n/zx8QKTuRy Hf2rCPBz/1hvPwr82w9eiyBa6oyWyQ4= 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-368-_U-ED1DANfWMLdSYLenRAw-1; Tue, 13 Apr 2021 00:42:59 -0400 X-MC-Unique: _U-ED1DANfWMLdSYLenRAw-1 Received: by mail-wr1-f69.google.com with SMTP id m5so260949wrr.8 for ; Mon, 12 Apr 2021 21:42:59 -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=S+iXXJ/5x8/tPf7HGs16m9I19Y7CqzdjcjGIxYoM9Nc=; b=VulLmcsoIN5GJvcxMHB9IMbujWVPP6eD3vfhUr8bfkEx88netcmeVDBkvfaJrrVFnx 9pQbmpri9CmDgXvHs8Ch6r63nEcW9G99qumSNkjhvlk3TJJMZ3oVEmBq7lsou4QnfvFI 9ASnQ8UNUbcx4wdHwqRiLvvaF7tsCvMMfTqes/lFe7iLxoS2UDiAxuSyzMYVlkzItVdJ SUDxVz3+c4MKT2FbZo4zi90pLXDyGVBFtEzYUtjvu2IXtxd4AvX7nQWULHJwl31AETDU cZhCFDIrgaasVu7jv1jitSn5z5e97huQFxyZ88hpfcK4FUJ2zJREUx1OZkW2imkKTiBq M7eQ== X-Gm-Message-State: AOAM531Ot93HHG4gJBZelSZqcwx6rAmQ7FXv/c/y0XyuEDhKpFQTvZdJ j0K/7rUzhg0CYaoxbpXBeta9aNsbq/6xb7qaJGSSb1XLDHCyRZ7M3pTE+PTgQUPZZplS5vKq/Tr PKMf/Tdfs0Q+S X-Received: by 2002:a1c:804d:: with SMTP id b74mr2017741wmd.15.1618288978184; Mon, 12 Apr 2021 21:42:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwURkWu3bXhGwKQg1Qy8SFc7lxrsiAtw1HnRRAA6rM9F2lSEB/5IDqhevGM48ZJW7Sxr3IRA== X-Received: by 2002:a1c:804d:: with SMTP id b74mr2017722wmd.15.1618288977879; Mon, 12 Apr 2021 21:42:57 -0700 (PDT) Received: from redhat.com ([2a10:8006:2281:0:1994:c627:9eac:1825]) by smtp.gmail.com with ESMTPSA id v3sm1179193wmj.25.2021.04.12.21.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Apr 2021 21:42:57 -0700 (PDT) Date: Tue, 13 Apr 2021 00:42:54 -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: <20210413002531-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> <20210408115524-mutt-send-email-mst@kernel.org> <31fa92ca-bce5-b71f-406d-8f3951b2143c@nvidia.com> <20210412080051-mutt-send-email-mst@kernel.org> <20210412171858-mutt-send-email-mst@kernel.org> <10e099a9-2e3d-8c39-138a-17b2674b5389@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <10e099a9-2e3d-8c39-138a-17b2674b5389@nvidia.com> Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org On Tue, Apr 13, 2021 at 01:53:02AM +0300, Max Gurtovoy wrote: > > On 4/13/2021 12:23 AM, Michael S. Tsirkin wrote: > > On Mon, Apr 12, 2021 at 04:03:02PM +0300, Max Gurtovoy wrote: > > > On 4/12/2021 3:04 PM, Michael S. Tsirkin wrote: > > > > On Mon, Apr 12, 2021 at 02:55:27PM +0300, Max Gurtovoy wrote: > > > > > On 4/8/2021 6:56 PM, Michael S. Tsirkin wrote: > > > > > > On Thu, Apr 08, 2021 at 12:56:52PM +0300, Max Gurtovoy wrote: > > > > > > > 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. > > > > > > OK so maybe we can do more to detect the bad device. > > > > > > Won't we get all 1's on a read in this case? > > > > > No. how can we guarantee it ? > > > > > > > > > Well this is what you tend to get if e.g. you disable device memory. > > > > > > > > Anyway, you know about hardware, I don't ... It's not returning 0 after > > > > reset as it should ... what does it return? Hopefully not random noise - > > > > I don't think it's very practical to write a driver for a device that > > > > starts doing that at random times ... > > > The device may return 0x40 (NEEDS_RESET). It doesn't have to return all 1's. > > > > > > For paravirt devices, think of a situation that you can't allocate some > > > internal buffers (malloc failed) and you want to wait for few seconds until > > > the system memory will free some pages. > > > > > > So you may return NEEDS_RESET that indicates some error state of the device. > > > Once the system memory freed by other application for example, your internal > > > virtio device malloc succeeded and you may return 0. > > > > > > In this case, you don't want to stall the other virtio devices to probe > > > (they might be real HW devices that driven by the same driver), right ? > > So the device is very busy then? Not sure it's smart to just assume > > it's safe to free all memory allocated for it then ... > > > > I guess the lesson is don't make device reset depend on malloc > > of some memory? > > The device is not ready yet. And the malloc is just one example I gave you > to emphasize the case. > > Another example can be a bad FW installed. Surely this will wedge the host device to the point where vdpa won't even be probed? > The host/guest driver is trying to enable the device but the device is not > ready. This is the real life use case and I gave many examples for reasons > for device not to be ready. For paravirt and HW devices. > > Endless loop and stalling next devices probe is not the way to go. PCI > drivers can't allow this to happen. > > Think of a situation that host it's booting from virtio-blk device but it > has another virtio-net device that has bad FW or other internal error (it > doesn't matter what it is for the example) and the virtio pci driver is > probing virtio-net device first. > > The host will never boot successfully. This is fatal. It's not nice for sure. But broken hardware is broken hardware. Try not to have it is still best advice. Making very sure this will never regress any useful flows is high priority though. Thus the focus on addressing specific issues not just falling over the moment something seems a bit fishy. > Error flows are critical when working with real PCI HW and I understand that > in paravirt devices with strong hypervisor you will be ok in 99% of the time > but you need to be aware also for bugs and error flows in both paravirt and > HW world. > > So first we need to handle this endless loop (with this patch set or with > async probing mechanism) and later we should update the specification. > > The virtio world now is not only guest and paravirt devices. Bare metal > hosts start using virtio devices and drivers more and more. Excellent so can we please stop talking hypotheticals and discuss how does actual hardware behave, and how best to recover in each case? Recovering from weird scenarious like bad firmware is nice to have but not at risk of e.g. corrupting kernel memory. Which blindly removing the driver with an active device has a good chance to do. Just to stress the importance of addressing actual issues, how was this patch even tested? Worth mentioning in the commit log. And by the way, there are actually use-cases I am aware of where we spin forever and really should not, for example it would be super nice to support surprise removal so host can drop the driver after device is gone without waiting for guest. This allows allocating the device to another VM. In that case too, an out of the blue timeout and blindly assuming all is well is not the way to go, you need to probe device to check whether it's dead or alive. Maybe your error recovery can fit in such a framework. > > > > > > > > > > > > > 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 ? > > > > > > > > > > > > > > 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,