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 Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 99680C43334 for ; Thu, 16 Jun 2022 12:21:38 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 31A9741A2A; Thu, 16 Jun 2022 12:21:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gSm2HI8uTLMs; Thu, 16 Jun 2022 12:21:36 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 147AB4090C; Thu, 16 Jun 2022 12:21:36 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E7A86C0039; Thu, 16 Jun 2022 12:21:35 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id ED67CC002D for ; Thu, 16 Jun 2022 12:21:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id CE2C860E4D for ; Thu, 16 Jun 2022 12:21:34 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rKE3lwjo3FVI for ; Thu, 16 Jun 2022 12:21:33 +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.129.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id C4D3360670 for ; Thu, 16 Jun 2022 12:21:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1655382092; 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=tKO9kaIoz02UsmIAowV9+PkxCUTdW7CkFsqbsOOxG00=; b=WDua1ee5npb8//JdC6RZckGEj36+ROsvMsTzfbq32p0mgAvpWitVt1aWfx8WrosVUb9MYZ PTnDAFacpZRpEi5UUAjm2M+9WWUqAz3kvXg5YRRNKr0Yj7SOFYtZ0zOGHRB93WqANIt2Ru I093neYTbsxsC4DBZKZlLOBT/iA+DfU= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-395-wWfnFT6kN5SRTF6T5a8fig-1; Thu, 16 Jun 2022 08:21:31 -0400 X-MC-Unique: wWfnFT6kN5SRTF6T5a8fig-1 Received: by mail-wm1-f70.google.com with SMTP id c185-20020a1c35c2000000b0039db3e56c39so1070502wma.5 for ; Thu, 16 Jun 2022 05:21:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=tKO9kaIoz02UsmIAowV9+PkxCUTdW7CkFsqbsOOxG00=; b=otyyJ2SIKqPm9QfguqMREUzY0u42SYipJz+2EIoZDsm+RbiIj3df8i3q+2qJBKAy43 wj33yZefsmsuay7smBvDBOLLvC2s/GPAO53FjFZ+CUB1QUA9uWYKhia/K1CkpTY+1jwW 5LLmmGoDf3NH3JrKHpgDasTfsqhLP6JtnZV7AiQJ/+851nEj354rQCle4DMX8Wez9IP/ Yb2xeZa8utGOaY1pY+B9E60ogCcRkg92YRbhLopmetTIJrykT3de+Ifri9krTYdkqD3Y wUXXZiZan1uAsTZaBiavU6UW+AI/ftcYiYO24+taPqLxM2in1ClIdz8r9b+lDhP272UG FomA== X-Gm-Message-State: AJIora/42ltvFZlPlZXA/crhkku2d0TF44RcuyPwvbNwGqTn3Batgh3i OH+AIt93h8mTuVrFKmHQ0IJkMg6k+Aq5Jt1xPVUMaKFfd9JA9UnZEUSkRclxqSHQafEoh7bwX2X 96YNg/4NiL3WaQ2hJIM91x0o/qe79Gx2A5TLd1rB4nQ== X-Received: by 2002:a1c:7913:0:b0:39e:72d1:b9b3 with SMTP id l19-20020a1c7913000000b0039e72d1b9b3mr3521243wme.53.1655382090138; Thu, 16 Jun 2022 05:21:30 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vImx8v+Pi0fb3eNoM8UymMi4MsjJuA+BPHWsFLmXTWOlrUWS17EyMKP0suss+nPlbqnZ3UlQ== X-Received: by 2002:a1c:7913:0:b0:39e:72d1:b9b3 with SMTP id l19-20020a1c7913000000b0039e72d1b9b3mr3521223wme.53.1655382089862; Thu, 16 Jun 2022 05:21:29 -0700 (PDT) Received: from redhat.com ([2a03:c5c0:107d:d500:e9ae:3150:6c35:ac38]) by smtp.gmail.com with ESMTPSA id i2-20020adffdc2000000b00213ba4b5d94sm2135823wrs.27.2022.06.16.05.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jun 2022 05:21:29 -0700 (PDT) Date: Thu, 16 Jun 2022 08:21:25 -0400 From: "Michael S. Tsirkin" To: Albert Huang Subject: Re: [PATCH v3] virtio_ring : keep used_wrap_counter in vq->last_used_idx Message-ID: <20220616081812-mutt-send-email-mst@kernel.org> References: <20220616024148-mutt-send-email-mst@kernel.org> <20220616095500.41239-1-huangjie.albert@bytedance.com> MIME-Version: 1.0 In-Reply-To: <20220616095500.41239-1-huangjie.albert@bytedance.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: linux-kernel@vger.kernel.org, yuanzhu@bytedance.com, virtualization@lists.linux-foundation.org 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" T24gVGh1LCBKdW4gMTYsIDIwMjIgYXQgMDU6NTQ6NTlQTSArMDgwMCwgQWxiZXJ0IEh1YW5nIHdy b3RlOgo+IEZyb206ICJodWFuZ2ppZS5hbGJlcnQiIDxodWFuZ2ppZS5hbGJlcnRAYnl0ZWRhbmNl LmNvbT4KPiAKPiB0aGUgdXNlZF93cmFwX2NvdW50ZXIgYW5kIHRoZSB2cS0+bGFzdF91c2VkX2lk eCBtYXkgZ2V0Cj4gb3V0IG9mIHN5bmMgaWYgdGhleSBhcmUgc2VwYXJhdGUgYXNzaWdubWVudO+8 jGFuZCBpbnRlcnJ1cHQKPiBtaWdodCB1c2UgYW4gaW5jb3JyZWN0IHZhbHVlIHRvIGNoZWNrIGZv ciB0aGUgdXNlZCBpbmRleC4KPiAKPiBmb3IgZXhhbXBsZTpPT0IgYWNjZXNzCj4ga3NvZnRpcnFk IG1heSBjb25zdW1lIHRoZSBwYWNrZXQgYW5kIGl0IHdpbGwgY2FsbDoKPiB2aXJ0bmV0X3BvbGwK PiAJLS0+dmlydG5ldF9yZWNlaXZlCj4gCQktLT52aXJ0cXVldWVfZ2V0X2J1Zl9jdHgKPiAJCQkt LT52aXJ0cXVldWVfZ2V0X2J1Zl9jdHhfcGFja2VkCj4gYW5kIGluIHZpcnRxdWV1ZV9nZXRfYnVm X2N0eF9wYWNrZWQ6Cj4gCj4gdnEtPmxhc3RfdXNlZF9pZHggKz0gdnEtPnBhY2tlZC5kZXNjX3N0 YXRlW2lkXS5udW07Cj4gaWYgKHVubGlrZWx5KHZxLT5sYXN0X3VzZWRfaWR4ID49IHZxLT5wYWNr ZWQudnJpbmcubnVtKSkgewo+ICAgICAgICAgIHZxLT5sYXN0X3VzZWRfaWR4IC09IHZxLT5wYWNr ZWQudnJpbmcubnVtOwo+ICAgICAgICAgIHZxLT5wYWNrZWQudXNlZF93cmFwX2NvdW50ZXIgXj0g MTsKPiB9Cj4gCj4gaWYgYXQgdGhlIHNhbWUgdGltZSwgdGhlcmUgY29tZXMgYSB2cmluZyBpbnRl cnJ1cHTvvIxpbiB2cmluZ19pbnRlcnJ1cHQ6Cj4gd2Ugd2lsbCBjYWxsOgo+IHZyaW5nX2ludGVy cnVwdAo+IAktLT5tb3JlX3VzZWQKPiAJCS0tPm1vcmVfdXNlZF9wYWNrZWQKPiAJCQktLT5pc191 c2VkX2Rlc2NfcGFja2VkCj4gaW4gaXNfdXNlZF9kZXNjX3BhY2tlZCwgdGhlIGxhc3RfdXNlZF9p ZHggbWF5YmUgPj0gdnEtPnBhY2tlZC52cmluZy5udW0uCj4gc28gdGhpcyBjb3VsZCBjYXNlIGEg bWVtb3J5IG91dCBvZiBib3VuZHMgYnVnLgo+IAo+IHRoaXMgcGF0Y2ggaXMgdG8ga2VlcCB0aGUg dXNlZF93cmFwX2NvdW50ZXIgaW4gdnEtPmxhc3RfdXNlZF9pZHgKPiBzbyB3ZSBjYW4gZ2V0IHRo ZSBjb3JyZWN0IHZhbHVlIHRvIGNoZWNrIGZvciB1c2VkIGluZGV4IGluIGludGVycnVwdC4KPiAK PiB2Mi0+djM6Cj4gLSBhZGQgaW5saW5lIGZ1bmN0aW9uIHRvIGdldCB1c2VkX3dyYXBfY291bnRl ciBhbmQgbGFzdF91c2VkCj4gLSB3aGVuIHVzZSB2cS0+bGFzdF91c2VkX2lkeCwgb25seSByZWFk IG9uY2UKPiAgIGlmIHZxLT5sYXN0X3VzZWRfaWR4IGlzIHJlYWQgdHdpY2UsIHRoZSB2YWx1ZXMg Y2FuIGJlIGluY29uc2lzdGVudC4KPiAtIHVzZSBsYXN0X3VzZWRfaWR4ICYgfigtKDEgPDwgVlJJ TkdfUEFDS0VEX0VWRU5UX0ZfV1JBUF9DVFIpKQo+ICAgdG8gZ2V0IHRoZSBhbGwgYml0cyBiZWxv dyBWUklOR19QQUNLRURfRVZFTlRfRl9XUkFQX0NUUgo+IAo+IHYxLT52MjoKPiAtIHJldXNlIHRo ZSBWUklOR19QQUNLRURfRVZFTlRfRl9XUkFQX0NUUgo+IC0gUmVtb3ZlIHBhcmFtZXRlciBqdWRn bWVudCBpbiBpc191c2VkX2Rlc2NfcGFja2VkLAo+IGJlY2F1c2UgaXQgY2FuJ3QgYmUgaWxsZWdh bAo+IAo+IFNpZ25lZC1vZmYtYnk6IGh1YW5namllLmFsYmVydCA8aHVhbmdqaWUuYWxiZXJ0QGJ5 dGVkYW5jZS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgfCA3NSAr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDQ3 IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+IGlu ZGV4IDEzYTczNDhjZWRmZi4uYTI1M2Y1MGI4Zjg2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmly dGlvL3ZpcnRpb19yaW5nLmMKPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4g QEAgLTExMSw3ICsxMTEsMTIgQEAgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSB7Cj4gIAkvKiBOdW1i ZXIgd2UndmUgYWRkZWQgc2luY2UgbGFzdCBzeW5jLiAqLwo+ICAJdW5zaWduZWQgaW50IG51bV9h ZGRlZDsKPiAgCj4gLQkvKiBMYXN0IHVzZWQgaW5kZXggd2UndmUgc2Vlbi4gKi8KPiArCS8qIExh c3QgdXNlZCBpbmRleCAgd2UndmUgc2Vlbi4KPiArCSAqIGZvciBzcGxpdCByaW5nLCBpdCBqdXN0 IGNvbnRhaW5zIGxhc3QgdXNlZCBpbmRleAo+ICsJICogZm9yIHBhY2tlZCByaW5nLCBpdCBub3Qg b25seSBjb250YWlucyBsYXN0IHVzZWQgaW5kZXgsIGJ1dCBhbHNvCj4gKwkgKiB1c2VkX3dyYXBf Y291bnRlciwgdGhlIFZSSU5HX1BBQ0tFRF9FVkVOVF9GX1dSQVBfQ1RSIGlzCj4gKwkgKiB0aGUg Yml0IHNoaWZ0IGluIGxhc3RfdXNlZF9pZHgKCgpyZXdvcmQ6Cgpmb3IgcGFja2VkIHJpbmcsIGJp dHMgdXAgdG8gVlJJTkdfUEFDS0VEX0VWRU5UX0ZfV1JBUF9DVFIgaW5jbHVkZSB0aGUKbGFzdCB1 c2VkIGluZGV4LiBCaXRzIGZyb20gVlJJTkdfUEFDS0VEX0VWRU5UX0ZfV1JBUF9DVFIgaW5jbHVk ZSB0aGUKdXNlZCB3cmFwIGNvdW50ZXIuCgo+ICsJICovCj4gIAl1MTYgbGFzdF91c2VkX2lkeDsK PiAgCj4gIAkvKiBIaW50IGZvciBldmVudCBpZHg6IGFscmVhZHkgdHJpZ2dlcmVkIG5vIG5lZWQg dG8gZGlzYWJsZS4gKi8KPiBAQCAtMTU0LDkgKzE1OSw2IEBAIHN0cnVjdCB2cmluZ192aXJ0cXVl dWUgewo+ICAJCQkvKiBEcml2ZXIgcmluZyB3cmFwIGNvdW50ZXIuICovCj4gIAkJCWJvb2wgYXZh aWxfd3JhcF9jb3VudGVyOwo+ICAKPiAtCQkJLyogRGV2aWNlIHJpbmcgd3JhcCBjb3VudGVyLiAq Lwo+IC0JCQlib29sIHVzZWRfd3JhcF9jb3VudGVyOwo+IC0KPiAgCQkJLyogQXZhaWwgdXNlZCBm bGFncy4gKi8KPiAgCQkJdTE2IGF2YWlsX3VzZWRfZmxhZ3M7Cj4gIAo+IEBAIC05NzMsNiArOTc1 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19jcmVhdGVfdmlydHF1ZXVlX3Nw bGl0KAo+ICAvKgo+ICAgKiBQYWNrZWQgcmluZyBzcGVjaWZpYyBmdW5jdGlvbnMgLSAqX3BhY2tl ZCgpLgo+ICAgKi8KPiArc3RhdGljIGlubGluZSBib29sIHBhY2tlZF91c2VkX3dyYXBfY291bnRl cih1MTYgbGFzdF91c2VkX2lkeCkKPiArewo+ICsJcmV0dXJuICEhKGxhc3RfdXNlZF9pZHggJiAo MSA8PCBWUklOR19QQUNLRURfRVZFTlRfRl9XUkFQX0NUUikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIHUxNiBwYWNrZWRfbGFzdF91c2VkKHUxNiBsYXN0X3VzZWRfaWR4KQo+ICt7Cj4gKwly ZXR1cm4gbGFzdF91c2VkX2lkeCAmIH4oLSgxIDw8IFZSSU5HX1BBQ0tFRF9FVkVOVF9GX1dSQVBf Q1RSKSk7Cj4gK30KPiAgCj4gIHN0YXRpYyB2b2lkIHZyaW5nX3VubWFwX2V4dHJhX3BhY2tlZChj b25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwKPiAgCQkJCSAgICAgc3RydWN0IHZyaW5n X2Rlc2NfZXh0cmEgKmV4dHJhKQo+IEBAIC0xNDA2LDggKzE0MTcsMTQgQEAgc3RhdGljIGlubGlu ZSBib29sIGlzX3VzZWRfZGVzY19wYWNrZWQoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAq dnEsCj4gIAo+ICBzdGF0aWMgaW5saW5lIGJvb2wgbW9yZV91c2VkX3BhY2tlZChjb25zdCBzdHJ1 Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSkKPiAgewo+IC0JcmV0dXJuIGlzX3VzZWRfZGVzY19wYWNr ZWQodnEsIHZxLT5sYXN0X3VzZWRfaWR4LAo+IC0JCQl2cS0+cGFja2VkLnVzZWRfd3JhcF9jb3Vu dGVyKTsKPiArCXUxNiBsYXN0X3VzZWQ7Cj4gKwl1MTYgbGFzdF91c2VkX2lkeDsKPiArCWJvb2wg dXNlZF93cmFwX2NvdW50ZXI7Cj4gKwo+ICsJbGFzdF91c2VkX2lkeCA9IHZxLT5sYXN0X3VzZWRf aWR4Owo+ICsJbGFzdF91c2VkID0gcGFja2VkX2xhc3RfdXNlZChsYXN0X3VzZWRfaWR4KTsKPiAr CXVzZWRfd3JhcF9jb3VudGVyID0gcGFja2VkX3VzZWRfd3JhcF9jb3VudGVyKGxhc3RfdXNlZF9p ZHgpOwo+ICsJcmV0dXJuIGlzX3VzZWRfZGVzY19wYWNrZWQodnEsIGxhc3RfdXNlZCwgdXNlZF93 cmFwX2NvdW50ZXIpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCAqdmlydHF1ZXVlX2dldF9idWZf Y3R4X3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gQEAgLTE0MTUsNyArMTQzMiw4IEBA IHN0YXRpYyB2b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9jdHhfcGFja2VkKHN0cnVjdCB2aXJ0cXVl dWUgKl92cSwKPiAgCQkJCQkgIHZvaWQgKipjdHgpCj4gIHsKPiAgCXN0cnVjdCB2cmluZ192aXJ0 cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gLQl1MTYgbGFzdF91c2VkLCBpZDsKPiArCXUxNiBs YXN0X3VzZWQsIGlkLCBsYXN0X3VzZWRfaWR4Owo+ICsJYm9vbCB1c2VkX3dyYXBfY291bnRlcjsK PiAgCXZvaWQgKnJldDsKPiAgCj4gIAlTVEFSVF9VU0UodnEpOwo+IEBAIC0xNDM0LDcgKzE0NTIs OSBAQCBzdGF0aWMgdm9pZCAqdmlydHF1ZXVlX2dldF9idWZfY3R4X3BhY2tlZChzdHJ1Y3Qgdmly dHF1ZXVlICpfdnEsCj4gIAkvKiBPbmx5IGdldCB1c2VkIGVsZW1lbnRzIGFmdGVyIHRoZXkgaGF2 ZSBiZWVuIGV4cG9zZWQgYnkgaG9zdC4gKi8KPiAgCXZpcnRpb19ybWIodnEtPndlYWtfYmFycmll cnMpOwo+ICAKPiAtCWxhc3RfdXNlZCA9IHZxLT5sYXN0X3VzZWRfaWR4Owo+ICsJbGFzdF91c2Vk X2lkeCA9IHZxLT5sYXN0X3VzZWRfaWR4OwoKCkkgdGhpbmsgd2UgbmVlZCBSRUFEX09OQ0UgaGVy ZS4gT3RoZXJ3aXNlIGNvbXBpbGVyIGlzIGZyZWUgdG8gc3RpbGwKZG8gdHdvIHJlYWRzLgoKPiAr CXVzZWRfd3JhcF9jb3VudGVyID0gcGFja2VkX3VzZWRfd3JhcF9jb3VudGVyKGxhc3RfdXNlZF9p ZHgpOwo+ICsJbGFzdF91c2VkID0gcGFja2VkX2xhc3RfdXNlZChsYXN0X3VzZWRfaWR4KTsKPiAg CWlkID0gbGUxNl90b19jcHUodnEtPnBhY2tlZC52cmluZy5kZXNjW2xhc3RfdXNlZF0uaWQpOwo+ ICAJKmxlbiA9IGxlMzJfdG9fY3B1KHZxLT5wYWNrZWQudnJpbmcuZGVzY1tsYXN0X3VzZWRdLmxl bik7Cj4gIAo+IEBAIC0xNDUxLDEyICsxNDcxLDE1IEBAIHN0YXRpYyB2b2lkICp2aXJ0cXVldWVf Z2V0X2J1Zl9jdHhfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSwKPiAgCXJldCA9IHZxLT5w YWNrZWQuZGVzY19zdGF0ZVtpZF0uZGF0YTsKPiAgCWRldGFjaF9idWZfcGFja2VkKHZxLCBpZCwg Y3R4KTsKPiAgCj4gLQl2cS0+bGFzdF91c2VkX2lkeCArPSB2cS0+cGFja2VkLmRlc2Nfc3RhdGVb aWRdLm51bTsKPiAtCWlmICh1bmxpa2VseSh2cS0+bGFzdF91c2VkX2lkeCA+PSB2cS0+cGFja2Vk LnZyaW5nLm51bSkpIHsKPiAtCQl2cS0+bGFzdF91c2VkX2lkeCAtPSB2cS0+cGFja2VkLnZyaW5n Lm51bTsKPiAtCQl2cS0+cGFja2VkLnVzZWRfd3JhcF9jb3VudGVyIF49IDE7Cj4gKwlsYXN0X3Vz ZWQgKz0gdnEtPnBhY2tlZC5kZXNjX3N0YXRlW2lkXS5udW07Cj4gKwlpZiAodW5saWtlbHkobGFz dF91c2VkID49IHZxLT5wYWNrZWQudnJpbmcubnVtKSkgewo+ICsJCWxhc3RfdXNlZCAtPSB2cS0+ cGFja2VkLnZyaW5nLm51bTsKPiArCQl1c2VkX3dyYXBfY291bnRlciBePSAxOwo+ICAJfQo+ICAK PiArCWxhc3RfdXNlZCA9IChsYXN0X3VzZWQgfCAodXNlZF93cmFwX2NvdW50ZXIgPDwgVlJJTkdf UEFDS0VEX0VWRU5UX0ZfV1JBUF9DVFIpKTsKPiArCXZxLT5sYXN0X3VzZWRfaWR4ID0gbGFzdF91 c2VkOwo+ICsKPiAgCS8qCj4gIAkgKiBJZiB3ZSBleHBlY3QgYW4gaW50ZXJydXB0IGZvciB0aGUg bmV4dCBlbnRyeSwgdGVsbCBob3N0Cj4gIAkgKiBieSB3cml0aW5nIGV2ZW50IGluZGV4IGFuZCBm bHVzaCBvdXQgdGhlIHdyaXRlIGJlZm9yZQo+IEBAIC0xNDY1LDkgKzE0ODgsNyBAQCBzdGF0aWMg dm9pZCAqdmlydHF1ZXVlX2dldF9idWZfY3R4X3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEs Cj4gIAlpZiAodnEtPnBhY2tlZC5ldmVudF9mbGFnc19zaGFkb3cgPT0gVlJJTkdfUEFDS0VEX0VW RU5UX0ZMQUdfREVTQykKPiAgCQl2aXJ0aW9fc3RvcmVfbWIodnEtPndlYWtfYmFycmllcnMsCj4g IAkJCQkmdnEtPnBhY2tlZC52cmluZy5kcml2ZXItPm9mZl93cmFwLAo+IC0JCQkJY3B1X3RvX2xl MTYodnEtPmxhc3RfdXNlZF9pZHggfAo+IC0JCQkJCSh2cS0+cGFja2VkLnVzZWRfd3JhcF9jb3Vu dGVyIDw8Cj4gLQkJCQkJIFZSSU5HX1BBQ0tFRF9FVkVOVF9GX1dSQVBfQ1RSKSkpOwo+ICsJCQkJ Y3B1X3RvX2xlMTYodnEtPmxhc3RfdXNlZF9pZHgpKTsKPiAgCj4gIAlMQVNUX0FERF9USU1FX0lO VkFMSUQodnEpOwo+ICAKPiBAQCAtMTQ5OSw5ICsxNTIwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCB2aXJ0cXVldWVfZW5hYmxlX2NiX3ByZXBhcmVfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSkKPiAgCj4gIAlpZiAodnEtPmV2ZW50KSB7Cj4gIAkJdnEtPnBhY2tlZC52cmluZy5kcml2ZXIt Pm9mZl93cmFwID0KPiAtCQkJY3B1X3RvX2xlMTYodnEtPmxhc3RfdXNlZF9pZHggfAo+IC0JCQkJ KHZxLT5wYWNrZWQudXNlZF93cmFwX2NvdW50ZXIgPDwKPiAtCQkJCSBWUklOR19QQUNLRURfRVZF TlRfRl9XUkFQX0NUUikpOwo+ICsJCQljcHVfdG9fbGUxNih2cS0+bGFzdF91c2VkX2lkeCk7Cj4g IAkJLyoKPiAgCQkgKiBXZSBuZWVkIHRvIHVwZGF0ZSBldmVudCBvZmZzZXQgYW5kIGV2ZW50IHdy YXAKPiAgCQkgKiBjb3VudGVyIGZpcnN0IGJlZm9yZSB1cGRhdGluZyBldmVudCBmbGFncy4KPiBA QCAtMTUxOCw4ICsxNTM3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB2aXJ0cXVldWVfZW5hYmxl X2NiX3ByZXBhcmVfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiAgCX0KPiAgCj4gIAlF TkRfVVNFKHZxKTsKPiAtCXJldHVybiB2cS0+bGFzdF91c2VkX2lkeCB8ICgodTE2KXZxLT5wYWNr ZWQudXNlZF93cmFwX2NvdW50ZXIgPDwKPiAtCQkJVlJJTkdfUEFDS0VEX0VWRU5UX0ZfV1JBUF9D VFIpOwo+ICsJcmV0dXJuIHZxLT5sYXN0X3VzZWRfaWR4Owo+ICB9Cj4gIAo+ICBzdGF0aWMgYm9v bCB2aXJ0cXVldWVfcG9sbF9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1MTYgb2ZmX3dy YXApCj4gQEAgLTE1MzcsNyArMTU1NSw3IEBAIHN0YXRpYyBib29sIHZpcnRxdWV1ZV9wb2xsX3Bh Y2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHUxNiBvZmZfd3JhcCkKPiAgc3RhdGljIGJvb2wg dmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEp Cj4gIHsKPiAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gLQl1 MTYgdXNlZF9pZHgsIHdyYXBfY291bnRlcjsKPiArCXUxNiB1c2VkX2lkeCwgd3JhcF9jb3VudGVy LCBsYXN0X3VzZWRfaWR4Owo+ICAJdTE2IGJ1ZnM7Cj4gIAo+ICAJU1RBUlRfVVNFKHZxKTsKPiBA QCAtMTU1MCw5ICsxNTY4LDEwIEBAIHN0YXRpYyBib29sIHZpcnRxdWV1ZV9lbmFibGVfY2JfZGVs YXllZF9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICAJaWYgKHZxLT5ldmVudCkgewo+ ICAJCS8qIFRPRE86IHR1bmUgdGhpcyB0aHJlc2hvbGQgKi8KPiAgCQlidWZzID0gKHZxLT5wYWNr ZWQudnJpbmcubnVtIC0gdnEtPnZxLm51bV9mcmVlKSAqIDMgLyA0Owo+IC0JCXdyYXBfY291bnRl ciA9IHZxLT5wYWNrZWQudXNlZF93cmFwX2NvdW50ZXI7Cj4gKwkJbGFzdF91c2VkX2lkeCA9IHZx LT5sYXN0X3VzZWRfaWR4Owo+ICsJCXdyYXBfY291bnRlciA9IHBhY2tlZF91c2VkX3dyYXBfY291 bnRlcihsYXN0X3VzZWRfaWR4KTsKPiAgCj4gLQkJdXNlZF9pZHggPSB2cS0+bGFzdF91c2VkX2lk eCArIGJ1ZnM7Cj4gKwkJdXNlZF9pZHggPSBwYWNrZWRfbGFzdF91c2VkKGxhc3RfdXNlZF9pZHgp ICsgYnVmczsKPiAgCQlpZiAodXNlZF9pZHggPj0gdnEtPnBhY2tlZC52cmluZy5udW0pIHsKPiAg CQkJdXNlZF9pZHggLT0gdnEtPnBhY2tlZC52cmluZy5udW07Cj4gIAkJCXdyYXBfY291bnRlciBe PSAxOwo+IEBAIC0xNTgyLDkgKzE2MDEsMTAgQEAgc3RhdGljIGJvb2wgdmlydHF1ZXVlX2VuYWJs ZV9jYl9kZWxheWVkX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gIAkgKi8KPiAgCXZp cnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7Cj4gIAo+IC0JaWYgKGlzX3VzZWRfZGVzY19wYWNr ZWQodnEsCj4gLQkJCQl2cS0+bGFzdF91c2VkX2lkeCwKPiAtCQkJCXZxLT5wYWNrZWQudXNlZF93 cmFwX2NvdW50ZXIpKSB7Cj4gKwlsYXN0X3VzZWRfaWR4ID0gdnEtPmxhc3RfdXNlZF9pZHg7CgoK c2FtZSBoZXJlLgoKPiArCXdyYXBfY291bnRlciA9IHBhY2tlZF91c2VkX3dyYXBfY291bnRlcihs YXN0X3VzZWRfaWR4KTsKPiArCXVzZWRfaWR4ID0gcGFja2VkX2xhc3RfdXNlZChsYXN0X3VzZWRf aWR4KTsKPiArCWlmIChpc191c2VkX2Rlc2NfcGFja2VkKHZxLCB1c2VkX2lkeCwgd3JhcF9jb3Vu dGVyKSkgewo+ICAJCUVORF9VU0UodnEpOwo+ICAJCXJldHVybiBmYWxzZTsKPiAgCX0KPiBAQCAt MTY4OSw3ICsxNzA5LDcgQEAgc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0ZV92 aXJ0cXVldWVfcGFja2VkKAo+ICAJdnEtPm5vdGlmeSA9IG5vdGlmeTsKPiAgCXZxLT53ZWFrX2Jh cnJpZXJzID0gd2Vha19iYXJyaWVyczsKPiAgCXZxLT5icm9rZW4gPSB0cnVlOwo+IC0JdnEtPmxh c3RfdXNlZF9pZHggPSAwOwo+ICsJdnEtPmxhc3RfdXNlZF9pZHggPSAwIHwgKDEgPDwgVlJJTkdf UEFDS0VEX0VWRU5UX0ZfV1JBUF9DVFIpOwo+ICAJdnEtPmV2ZW50X3RyaWdnZXJlZCA9IGZhbHNl Owo+ICAJdnEtPm51bV9hZGRlZCA9IDA7Cj4gIAl2cS0+cGFja2VkX3JpbmcgPSB0cnVlOwo+IEBA IC0xNzIwLDcgKzE3NDAsNiBAQCBzdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfY3JlYXRl X3ZpcnRxdWV1ZV9wYWNrZWQoCj4gIAo+ICAJdnEtPnBhY2tlZC5uZXh0X2F2YWlsX2lkeCA9IDA7 Cj4gIAl2cS0+cGFja2VkLmF2YWlsX3dyYXBfY291bnRlciA9IDE7Cj4gLQl2cS0+cGFja2VkLnVz ZWRfd3JhcF9jb3VudGVyID0gMTsKPiAgCXZxLT5wYWNrZWQuZXZlbnRfZmxhZ3Nfc2hhZG93ID0g MDsKPiAgCXZxLT5wYWNrZWQuYXZhaWxfdXNlZF9mbGFncyA9IDEgPDwgVlJJTkdfUEFDS0VEX0RF U0NfRl9BVkFJTDsKPiAgCj4gLS0gCj4gMi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVh bGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZv dW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24= 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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3F15DC43334 for ; Thu, 16 Jun 2022 12:21:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376673AbiFPMVk (ORCPT ); Thu, 16 Jun 2022 08:21:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376631AbiFPMVg (ORCPT ); Thu, 16 Jun 2022 08:21:36 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7756D4A931 for ; Thu, 16 Jun 2022 05:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1655382092; 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=tKO9kaIoz02UsmIAowV9+PkxCUTdW7CkFsqbsOOxG00=; b=WDua1ee5npb8//JdC6RZckGEj36+ROsvMsTzfbq32p0mgAvpWitVt1aWfx8WrosVUb9MYZ PTnDAFacpZRpEi5UUAjm2M+9WWUqAz3kvXg5YRRNKr0Yj7SOFYtZ0zOGHRB93WqANIt2Ru I093neYTbsxsC4DBZKZlLOBT/iA+DfU= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-60-6TPrMxibO4-60ycNDKYhkQ-1; Thu, 16 Jun 2022 08:21:31 -0400 X-MC-Unique: 6TPrMxibO4-60ycNDKYhkQ-1 Received: by mail-wm1-f69.google.com with SMTP id ay28-20020a05600c1e1c00b0039c5cbe76c1so1081691wmb.1 for ; Thu, 16 Jun 2022 05:21:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=tKO9kaIoz02UsmIAowV9+PkxCUTdW7CkFsqbsOOxG00=; b=ESebJSr8cOK0SLFNxKvTrSVCBoDjI+5R3OAyfEZNzvOH8wJuMZmKliTr+YBhqR7loV BJbnG8fJ6oe9UiVZer+XBH1d14wPPeSVXRa+bNfSVat2ABiWq0Y027uwUAtxixBnn06/ aRnAhlDp0ZIamdgdSqZqbWKVgOXTfc3pmyWR17Onbk5arvPlHi1lP+19i1fQiC0GkiMS D691nosvusny8VPOtp6zlgKJ3HycvyieTxhcfMf/0YNbdIutqRlsLLZ6vuUuFYv6qR06 1pVOT4iZvszh3siu/9g8Q7BCXnwyZAXy3x/kXdPv2J2ZYMfVzow35fLBocWhhJHBkNze JvUQ== X-Gm-Message-State: AJIora9xUgoAs6G1lLk4OsJK98TvnI15IOzWt80Heh7Msz8Ayezrb9CT RvxtJClj2QBDoQHWKEA0zhGTKV83op0SFFvfXvRi5hdsaY3N7PMAzispfus7EahxtzTVZsrL194 SO/y7CUFK24bHdMQCU0sai55k X-Received: by 2002:a1c:7913:0:b0:39e:72d1:b9b3 with SMTP id l19-20020a1c7913000000b0039e72d1b9b3mr3521241wme.53.1655382090137; Thu, 16 Jun 2022 05:21:30 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vImx8v+Pi0fb3eNoM8UymMi4MsjJuA+BPHWsFLmXTWOlrUWS17EyMKP0suss+nPlbqnZ3UlQ== X-Received: by 2002:a1c:7913:0:b0:39e:72d1:b9b3 with SMTP id l19-20020a1c7913000000b0039e72d1b9b3mr3521223wme.53.1655382089862; Thu, 16 Jun 2022 05:21:29 -0700 (PDT) Received: from redhat.com ([2a03:c5c0:107d:d500:e9ae:3150:6c35:ac38]) by smtp.gmail.com with ESMTPSA id i2-20020adffdc2000000b00213ba4b5d94sm2135823wrs.27.2022.06.16.05.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jun 2022 05:21:29 -0700 (PDT) Date: Thu, 16 Jun 2022 08:21:25 -0400 From: "Michael S. Tsirkin" To: Albert Huang Cc: yuanzhu@bytedance.com, Jason Wang , virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] virtio_ring : keep used_wrap_counter in vq->last_used_idx Message-ID: <20220616081812-mutt-send-email-mst@kernel.org> References: <20220616024148-mutt-send-email-mst@kernel.org> <20220616095500.41239-1-huangjie.albert@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220616095500.41239-1-huangjie.albert@bytedance.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 16, 2022 at 05:54:59PM +0800, Albert Huang wrote: > From: "huangjie.albert" > > the used_wrap_counter and the vq->last_used_idx may get > out of sync if they are separate assignment,and interrupt > might use an incorrect value to check for the used index. > > for example:OOB access > ksoftirqd may consume the packet and it will call: > virtnet_poll > -->virtnet_receive > -->virtqueue_get_buf_ctx > -->virtqueue_get_buf_ctx_packed > and in virtqueue_get_buf_ctx_packed: > > vq->last_used_idx += vq->packed.desc_state[id].num; > if (unlikely(vq->last_used_idx >= vq->packed.vring.num)) { > vq->last_used_idx -= vq->packed.vring.num; > vq->packed.used_wrap_counter ^= 1; > } > > if at the same time, there comes a vring interrupt,in vring_interrupt: > we will call: > vring_interrupt > -->more_used > -->more_used_packed > -->is_used_desc_packed > in is_used_desc_packed, the last_used_idx maybe >= vq->packed.vring.num. > so this could case a memory out of bounds bug. > > this patch is to keep the used_wrap_counter in vq->last_used_idx > so we can get the correct value to check for used index in interrupt. > > v2->v3: > - add inline function to get used_wrap_counter and last_used > - when use vq->last_used_idx, only read once > if vq->last_used_idx is read twice, the values can be inconsistent. > - use last_used_idx & ~(-(1 << VRING_PACKED_EVENT_F_WRAP_CTR)) > to get the all bits below VRING_PACKED_EVENT_F_WRAP_CTR > > v1->v2: > - reuse the VRING_PACKED_EVENT_F_WRAP_CTR > - Remove parameter judgment in is_used_desc_packed, > because it can't be illegal > > Signed-off-by: huangjie.albert > --- > drivers/virtio/virtio_ring.c | 75 ++++++++++++++++++++++-------------- > 1 file changed, 47 insertions(+), 28 deletions(-) > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > index 13a7348cedff..a253f50b8f86 100644 > --- a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -111,7 +111,12 @@ struct vring_virtqueue { > /* Number we've added since last sync. */ > unsigned int num_added; > > - /* Last used index we've seen. */ > + /* Last used index we've seen. > + * for split ring, it just contains last used index > + * for packed ring, it not only contains last used index, but also > + * used_wrap_counter, the VRING_PACKED_EVENT_F_WRAP_CTR is > + * the bit shift in last_used_idx reword: for packed ring, bits up to VRING_PACKED_EVENT_F_WRAP_CTR include the last used index. Bits from VRING_PACKED_EVENT_F_WRAP_CTR include the used wrap counter. > + */ > u16 last_used_idx; > > /* Hint for event idx: already triggered no need to disable. */ > @@ -154,9 +159,6 @@ struct vring_virtqueue { > /* Driver ring wrap counter. */ > bool avail_wrap_counter; > > - /* Device ring wrap counter. */ > - bool used_wrap_counter; > - > /* Avail used flags. */ > u16 avail_used_flags; > > @@ -973,6 +975,15 @@ static struct virtqueue *vring_create_virtqueue_split( > /* > * Packed ring specific functions - *_packed(). > */ > +static inline bool packed_used_wrap_counter(u16 last_used_idx) > +{ > + return !!(last_used_idx & (1 << VRING_PACKED_EVENT_F_WRAP_CTR)); > +} > + > +static inline u16 packed_last_used(u16 last_used_idx) > +{ > + return last_used_idx & ~(-(1 << VRING_PACKED_EVENT_F_WRAP_CTR)); > +} > > static void vring_unmap_extra_packed(const struct vring_virtqueue *vq, > struct vring_desc_extra *extra) > @@ -1406,8 +1417,14 @@ static inline bool is_used_desc_packed(const struct vring_virtqueue *vq, > > static inline bool more_used_packed(const struct vring_virtqueue *vq) > { > - return is_used_desc_packed(vq, vq->last_used_idx, > - vq->packed.used_wrap_counter); > + u16 last_used; > + u16 last_used_idx; > + bool used_wrap_counter; > + > + last_used_idx = vq->last_used_idx; > + last_used = packed_last_used(last_used_idx); > + used_wrap_counter = packed_used_wrap_counter(last_used_idx); > + return is_used_desc_packed(vq, last_used, used_wrap_counter); > } > > static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > @@ -1415,7 +1432,8 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > void **ctx) > { > struct vring_virtqueue *vq = to_vvq(_vq); > - u16 last_used, id; > + u16 last_used, id, last_used_idx; > + bool used_wrap_counter; > void *ret; > > START_USE(vq); > @@ -1434,7 +1452,9 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > /* Only get used elements after they have been exposed by host. */ > virtio_rmb(vq->weak_barriers); > > - last_used = vq->last_used_idx; > + last_used_idx = vq->last_used_idx; I think we need READ_ONCE here. Otherwise compiler is free to still do two reads. > + used_wrap_counter = packed_used_wrap_counter(last_used_idx); > + last_used = packed_last_used(last_used_idx); > id = le16_to_cpu(vq->packed.vring.desc[last_used].id); > *len = le32_to_cpu(vq->packed.vring.desc[last_used].len); > > @@ -1451,12 +1471,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > ret = vq->packed.desc_state[id].data; > detach_buf_packed(vq, id, ctx); > > - vq->last_used_idx += vq->packed.desc_state[id].num; > - if (unlikely(vq->last_used_idx >= vq->packed.vring.num)) { > - vq->last_used_idx -= vq->packed.vring.num; > - vq->packed.used_wrap_counter ^= 1; > + last_used += vq->packed.desc_state[id].num; > + if (unlikely(last_used >= vq->packed.vring.num)) { > + last_used -= vq->packed.vring.num; > + used_wrap_counter ^= 1; > } > > + last_used = (last_used | (used_wrap_counter << VRING_PACKED_EVENT_F_WRAP_CTR)); > + vq->last_used_idx = last_used; > + > /* > * If we expect an interrupt for the next entry, tell host > * by writing event index and flush out the write before > @@ -1465,9 +1488,7 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DESC) > virtio_store_mb(vq->weak_barriers, > &vq->packed.vring.driver->off_wrap, > - cpu_to_le16(vq->last_used_idx | > - (vq->packed.used_wrap_counter << > - VRING_PACKED_EVENT_F_WRAP_CTR))); > + cpu_to_le16(vq->last_used_idx)); > > LAST_ADD_TIME_INVALID(vq); > > @@ -1499,9 +1520,7 @@ static unsigned int virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > if (vq->event) { > vq->packed.vring.driver->off_wrap = > - cpu_to_le16(vq->last_used_idx | > - (vq->packed.used_wrap_counter << > - VRING_PACKED_EVENT_F_WRAP_CTR)); > + cpu_to_le16(vq->last_used_idx); > /* > * We need to update event offset and event wrap > * counter first before updating event flags. > @@ -1518,8 +1537,7 @@ static unsigned int virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > } > > END_USE(vq); > - return vq->last_used_idx | ((u16)vq->packed.used_wrap_counter << > - VRING_PACKED_EVENT_F_WRAP_CTR); > + return vq->last_used_idx; > } > > static bool virtqueue_poll_packed(struct virtqueue *_vq, u16 off_wrap) > @@ -1537,7 +1555,7 @@ static bool virtqueue_poll_packed(struct virtqueue *_vq, u16 off_wrap) > static bool virtqueue_enable_cb_delayed_packed(struct virtqueue *_vq) > { > struct vring_virtqueue *vq = to_vvq(_vq); > - u16 used_idx, wrap_counter; > + u16 used_idx, wrap_counter, last_used_idx; > u16 bufs; > > START_USE(vq); > @@ -1550,9 +1568,10 @@ static bool virtqueue_enable_cb_delayed_packed(struct virtqueue *_vq) > if (vq->event) { > /* TODO: tune this threshold */ > bufs = (vq->packed.vring.num - vq->vq.num_free) * 3 / 4; > - wrap_counter = vq->packed.used_wrap_counter; > + last_used_idx = vq->last_used_idx; > + wrap_counter = packed_used_wrap_counter(last_used_idx); > > - used_idx = vq->last_used_idx + bufs; > + used_idx = packed_last_used(last_used_idx) + bufs; > if (used_idx >= vq->packed.vring.num) { > used_idx -= vq->packed.vring.num; > wrap_counter ^= 1; > @@ -1582,9 +1601,10 @@ static bool virtqueue_enable_cb_delayed_packed(struct virtqueue *_vq) > */ > virtio_mb(vq->weak_barriers); > > - if (is_used_desc_packed(vq, > - vq->last_used_idx, > - vq->packed.used_wrap_counter)) { > + last_used_idx = vq->last_used_idx; same here. > + wrap_counter = packed_used_wrap_counter(last_used_idx); > + used_idx = packed_last_used(last_used_idx); > + if (is_used_desc_packed(vq, used_idx, wrap_counter)) { > END_USE(vq); > return false; > } > @@ -1689,7 +1709,7 @@ static struct virtqueue *vring_create_virtqueue_packed( > vq->notify = notify; > vq->weak_barriers = weak_barriers; > vq->broken = true; > - vq->last_used_idx = 0; > + vq->last_used_idx = 0 | (1 << VRING_PACKED_EVENT_F_WRAP_CTR); > vq->event_triggered = false; > vq->num_added = 0; > vq->packed_ring = true; > @@ -1720,7 +1740,6 @@ static struct virtqueue *vring_create_virtqueue_packed( > > vq->packed.next_avail_idx = 0; > vq->packed.avail_wrap_counter = 1; > - vq->packed.used_wrap_counter = 1; > vq->packed.event_flags_shadow = 0; > vq->packed.avail_used_flags = 1 << VRING_PACKED_DESC_F_AVAIL; > > -- > 2.31.1