From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [RFC v2] virtio: support packed ring Date: Tue, 17 Apr 2018 05:37:19 +0300 Message-ID: <20180417053526-mutt-send-email-mst@kernel.org> References: <20180401141216.8969-1-tiwei.bie@intel.com> <20180413071529.f4esh654dakodf4f@debian> <8dee7d62-ac0b-54ba-6bec-4bc4a6fb34e9@redhat.com> <20180417051343-mutt-send-email-mst@kernel.org> <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Jason Wang Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com List-Id: virtualization@lists.linuxfoundation.org T24gVHVlLCBBcHIgMTcsIDIwMTggYXQgMTA6MjQ6MzJBTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiAKPiBPbiAyMDE45bm0MDTmnIgxN+aXpSAxMDoxNywgTWljaGFlbCBTLiBUc2lya2lu IHdyb3RlOgo+ID4gT24gVHVlLCBBcHIgMTcsIDIwMTggYXQgMTA6MTE6NThBTSArMDgwMCwgSmFz b24gV2FuZyB3cm90ZToKPiA+ID4gCj4gPiA+IE9uIDIwMTjlubQwNOaciDEz5pelIDE1OjE1LCBU aXdlaSBCaWUgd3JvdGU6Cj4gPiA+ID4gT24gRnJpLCBBcHIgMTMsIDIwMTggYXQgMTI6MzA6MjRQ TSArMDgwMCwgSmFzb24gV2FuZyB3cm90ZToKPiA+ID4gPiA+IE9uIDIwMTjlubQwNOaciDAx5pel IDIyOjEyLCBUaXdlaSBCaWUgd3JvdGU6Cj4gPiA+ID4gPiA+IEhlbGxvIGV2ZXJ5b25lLAo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhpcyBSRkMgaW1wbGVtZW50cyBwYWNrZWQgcmluZyBzdXBw b3J0IGZvciB2aXJ0aW8gZHJpdmVyLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhlIGNvZGUg d2FzIHRlc3RlZCB3aXRoIERQREsgdmhvc3QgKHRlc3RwbWQvdmhvc3QtUE1EKSBpbXBsZW1lbnRl ZAo+ID4gPiA+ID4gPiBieSBKZW5zIGF0IGh0dHA6Ly9kcGRrLm9yZy9tbC9hcmNoaXZlcy9kZXYv MjAxOC1KYW51YXJ5LzA4OTQxNy5odG1sCj4gPiA+ID4gPiA+IE1pbm9yIGNoYW5nZXMgYXJlIG5l ZWRlZCBmb3IgdGhlIHZob3N0IGNvZGUsIGUuZy4gdG8ga2ljayB0aGUgZ3Vlc3QuCj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiBUT0RPOgo+ID4gPiA+ID4gPiAtIFJlZmluZW1lbnRzIGFuZCBidWcg Zml4ZXM7Cj4gPiA+ID4gPiA+IC0gU3BsaXQgaW50byBzbWFsbCBwYXRjaGVzOwo+ID4gPiA+ID4g PiAtIFRlc3QgaW5kaXJlY3QgZGVzY3JpcHRvciBzdXBwb3J0Owo+ID4gPiA+ID4gPiAtIFRlc3Qv Zml4IGV2ZW50IHN1cHByZXNzaW9uIHN1cHBvcnQ7Cj4gPiA+ID4gPiA+IC0gVGVzdCBkZXZpY2Vz IG90aGVyIHRoYW4gbmV0Owo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gUkZDIHYxIC0+IFJGQyB2 MjoKPiA+ID4gPiA+ID4gLSBBZGQgaW5kaXJlY3QgZGVzY3JpcHRvciBzdXBwb3J0IC0gY29tcGls ZSB0ZXN0IG9ubHk7Cj4gPiA+ID4gPiA+IC0gQWRkIGV2ZW50IHN1cHByZXNzaW9uIHN1cHBydCAt IGNvbXBpbGUgdGVzdCBvbmx5Owo+ID4gPiA+ID4gPiAtIE1vdmUgdnJpbmdfcGFja2VkX2luaXQo KSBvdXQgb2YgdWFwaSAoSmFzb24sIE1TVCk7Cj4gPiA+ID4gPiA+IC0gTWVyZ2UgdHdvIGxvb3Bz IGludG8gb25lIGluIHZpcnRxdWV1ZV9hZGRfcGFja2VkKCkgKEphc29uKTsKPiA+ID4gPiA+ID4g LSBTcGxpdCB2cmluZ191bm1hcF9vbmUoKSBmb3IgcGFja2VkIHJpbmcgYW5kIHNwbGl0IHJpbmcg KEphc29uKTsKPiA+ID4gPiA+ID4gLSBBdm9pZCB1c2luZyAnJScgb3BlcmF0b3IgKEphc29uKTsK PiA+ID4gPiA+ID4gLSBSZW5hbWUgZnJlZV9oZWFkIC0+IG5leHRfYXZhaWxfaWR4IChKYXNvbik7 Cj4gPiA+ID4gPiA+IC0gQWRkIGNvbW1lbnRzIGZvciB2aXJ0aW9fd21iKCkgaW4gdmlydHF1ZXVl X2FkZF9wYWNrZWQoKSAoSmFzb24pOwo+ID4gPiA+ID4gPiAtIFNvbWUgb3RoZXIgcmVmaW5lbWVu dHMgYW5kIGJ1ZyBmaXhlczsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFRoYW5rcyEKPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGlu dGVsLmNvbT4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ICAgICBkcml2ZXJzL3ZpcnRpby92 aXJ0aW9fcmluZy5jICAgICAgIHwgMTA5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0KPiA+ID4gPiA+ID4gICAgIGluY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCAgICAgICAg fCAgICA4ICstCj4gPiA+ID4gPiA+ICAgICBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2NvbmZp Zy5oIHwgICAxMiArLQo+ID4gPiA+ID4gPiAgICAgaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19y aW5nLmggICB8ICAgNjEgKysKPiA+ID4gPiA+ID4gICAgIDQgZmlsZXMgY2hhbmdlZCwgOTgwIGlu c2VydGlvbnMoKyksIDE5NSBkZWxldGlvbnMoLSkKPiA+ID4gPiBbLi4uXQo+IAo+IFsuLi5dCj4g Cj4gPiA+ID4gPiBJdCBsb29rcyB0byBtZSB3ZSBzaG91bGQgZXhhbWluZSBSSU5HX0VWRU5UX0ZM QUdTX0RFU0MgaW4gZGVzY19ldmVudF9mbGFncwo+ID4gPiA+ID4gaW5zdGVhZCBvZiB2cS0+ZXZl bnQgaGVyZS4gU3BlYyBkb2VzIG5vdCBmb3JjZXMgdG8gdXNlIGV2ZW5mX29mZiBhbmQKPiA+ID4g PiA+IGV2ZW50X3dyYXAgaWYgZXZlbnQgaW5kZXggaXMgZW5hYmxlZC4KPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiArCQkvLyBGSVhNRTogZml4IHRoaXMhCj4gPiA+ID4gPiA+ICsJCW5lZWRzX2tpY2sg PSAoKG9mZl93cmFwID4+IDE1KSA9PSB2cS0+d3JhcF9jb3VudGVyKSAmJgo+ID4gPiA+ID4gPiAr CQkJICAgICB2cmluZ19uZWVkX2V2ZW50KG9mZl93cmFwICYgfigxPDwxNSksIG5ldywgb2xkKTsK PiA+ID4gPiA+IFdoeSBuZWVkIGEgJiBoZXJlPwo+ID4gPiA+IEJlY2F1c2Ugd3JhcF9jb3VudGVy ICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gb2ZmX3dyYXApCj4gPiA+ID4gaXNuJ3QgcGFy dCBvZiB0aGUgaW5kZXguCj4gPiA+ID4gCj4gPiA+ID4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gPiA+ IE5lZWQgYSBzbXBfcm1iKCkgdG8gbWFrZSBzdXJlIGRlc2NfZXZlbnRfZmxhZ3Mgd2FzIGNoZWNr ZWQgYmVmb3JlIGZsYWdzLgo+ID4gPiA+IEkgZG9uJ3QgZ2V0IHlvdXIgcG9pbnQsIGlmIG15IHVu ZGVyc3RhbmRpbmcgaXMgY29ycmVjdCwKPiA+ID4gPiBkZXNjX2V2ZW50X2ZsYWdzIGlzIHZxLT52 cmluZ19wYWNrZWQuZGV2aWNlLT5mbGFncy4gU28KPiA+ID4gPiB3aGF0J3MgdGhlICJmbGFncyI/ Cj4gPiA+IFNvcnJ5LCBJIG1lYW4gd2UgbmVlZCBjaGVjayBkZXZpY2UuZmxhZ3MgYmVmb3JlIG9m Zl93YXJwLiBTbyBpdCBuZWVkcyBhbgo+ID4gPiBzbXBfcm1iKCkgaW4gdGhlIG1pZGRsZS4KPiA+ IEl0J3MgYmVzdCB0byBqdXN0IHJlYWQgYWxsIGZsYWdzIGF0b21pY2FsbHkgYXMgdTMyLgo+IAo+ IFllcyBpdCBpcy4KPiAKPiA+IAo+ID4gPiBJdCBsb29rcyB0byBtZSB0aGVyZSdzIG5vIGd1YXJh bnRlZSB0aGF0Cj4gPiA+IFZSSU5HX0VWRU5UX0ZfREVTQyBpcyBzZXQgaWYgZXZlbnQgaW5kZXgg aXMgc3VwcG9ydGVkLgo+ID4gPiAKPiA+ID4gPiA+ID4gKwkJbmVlZHNfa2ljayA9ICh2cS0+dnJp bmdfcGFja2VkLmRldmljZS0+ZmxhZ3MgIT0KPiA+ID4gPiA+ID4gKwkJCSAgICAgIGNwdV90b192 aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0VWRU5UX0ZfRElTQUJMRSkpOwo+ID4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ID4gKwlFTkRfVVNFKHZxKTsKPiA+ID4gPiA+ID4gKwlyZXR1cm4gbmVlZHNf a2ljazsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiBbLi4uXQo+ID4gPiA+ID4gPiArc3RhdGljIGlu dCBkZXRhY2hfYnVmX3BhY2tlZChzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQg aW50IGhlYWQsCj4gPiA+ID4gPiA+ICsJCQkgICAgICB2b2lkICoqY3R4KQo+ID4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gPiArCXN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyAqZGVzYzsKPiA+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgaSwgajsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCS8qIENs ZWFyIGRhdGEgcHRyLiAqLwo+ID4gPiA+ID4gPiArCXZxLT5kZXNjX3N0YXRlW2hlYWRdLmRhdGEg PSBOVUxMOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJaSA9IGhlYWQ7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gKwlmb3IgKGogPSAwOyBqIDwgdnEtPmRlc2Nfc3RhdGVbaGVhZF0ubnVt OyBqKyspIHsKPiA+ID4gPiA+ID4gKwkJZGVzYyA9ICZ2cS0+dnJpbmdfcGFja2VkLmRlc2NbaV07 Cj4gPiA+ID4gPiA+ICsJCXZyaW5nX3VubWFwX29uZV9wYWNrZWQodnEsIGRlc2MpOwo+ID4gPiA+ ID4gPiArCQlkZXNjLT5mbGFncyA9IDB4MDsKPiA+ID4gPiA+IExvb2tzIGxpa2UgdGhpcyBpcyB1 bm5lY2Vzc2FyeS4KPiA+ID4gPiBJdCdzIHNhZmVyIHRvIHplcm8gaXQuIElmIHdlIGRvbid0IHpl cm8gaXQsIGFmdGVyIHdlCj4gPiA+ID4gY2FsbCB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWZf cGFja2VkKCkgd2hpY2ggY2FsbHMKPiA+ID4gPiB0aGlzIGZ1bmN0aW9uLCB0aGUgZGVzYyBpcyBz dGlsbCBhdmFpbGFibGUgdG8gdGhlCj4gPiA+ID4gZGV2aWNlLgo+ID4gPiBXZWxsIGRldGFjaF91 bnVzZWRfYnVmX3BhY2tlZCgpIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZGV2aWNlIGlzIHN0b3Bw ZWQsCj4gPiA+IG90aGVyd2lzZSBldmVuIGlmIHlvdSB0cnkgdG8gY2xlYXIsIHRoZXJlIHdpbGwg c3RpbGwgYmUgYSB3aW5kb3cgdGhhdCBkZXZpY2UKPiA+ID4gbWF5IHVzZSBpdC4KPiA+ID4gCj4g PiA+ID4gPiA+ICsJCWkrKzsKPiA+ID4gPiA+ID4gKwkJaWYgKGkgPj0gdnEtPnZyaW5nX3BhY2tl ZC5udW0pCj4gPiA+ID4gPiA+ICsJCQlpID0gMDsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gWy4u Ll0KPiA+ID4gPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCB2aXJ0cXVldWVfZW5hYmxlX2NiX3ByZXBh cmVfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ ID4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ID4gPiA+ID4g PiArCXUxNiBsYXN0X3VzZWRfaWR4LCB3cmFwX2NvdW50ZXIsIG9mZl93cmFwOwo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsJU1RBUlRfVVNFKHZxKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArCWxhc3RfdXNlZF9pZHggPSB2cS0+bGFzdF91c2VkX2lkeDsKPiA+ID4gPiA+ID4gKwl3cmFw X2NvdW50ZXIgPSB2cS0+d3JhcF9jb3VudGVyOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJ aWYgKGxhc3RfdXNlZF9pZHggPiB2cS0+bmV4dF9hdmFpbF9pZHgpCj4gPiA+ID4gPiA+ICsJCXdy YXBfY291bnRlciBePSAxOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJb2ZmX3dyYXAgPSBs YXN0X3VzZWRfaWR4IHwgKHdyYXBfY291bnRlciA8PCAxNSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKwkvKiBXZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhl biBjaGVjayBpZiB0aGVyZSB3YXMKPiA+ID4gPiA+ID4gKwkgKiBtb3JlIHRvIGRvLiAqLwo+ID4g PiA+ID4gPiArCS8qIERlcGVuZGluZyBvbiB0aGUgVklSVElPX1JJTkdfRl9FVkVOVF9JRFggZmVh dHVyZSwgd2UgbmVlZCB0bwo+ID4gPiA+ID4gPiArCSAqIGVpdGhlciBjbGVhciB0aGUgZmxhZ3Mg Yml0IG9yIHBvaW50IHRoZSBldmVudCBpbmRleCBhdCB0aGUgbmV4dAo+ID4gPiA+ID4gPiArCSAq IGVudHJ5LiBBbHdheXMgZG8gYm90aCB0byBrZWVwIGNvZGUgc2ltcGxlLiAqLwo+ID4gPiA+ID4g PiArCWlmICh2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID09IFZSSU5HX0VWRU5UX0ZfRElTQUJMRSkg ewo+ID4gPiA+ID4gPiArCQl2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID0gdnEtPmV2ZW50ID8gVlJJ TkdfRVZFTlRfRl9ERVNDOgo+ID4gPiA+ID4gPiArCQkJCQkJICAgICBWUklOR19FVkVOVF9GX0VO QUJMRTsKPiA+ID4gPiA+ID4gKwkJdnEtPnZyaW5nX3BhY2tlZC5kcml2ZXItPmZsYWdzID0gY3B1 X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwKPiA+ID4gPiA+ID4gKwkJCQkJCQl2cS0+ZXZlbnRfZmxh Z3Nfc2hhZG93KTsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiBBIHNtcF93bWIoKSBpcyBtaXNz ZWQgaGVyZT8KPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiArCXZxLT52cmluZ19wYWNrZWQuZHJpdmVy LT5vZmZfd3JhcCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIG9mZl93cmFwKTsKPiA+ID4g PiA+IEFuZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGl0IGxvb2tzIHRvIG1lIHdyaXRlIGEgVlJJ TkdfRVZFTlRfRl9FTkFCTEUgaXMKPiA+ID4gPiA+IHN1ZmZpY2llbnQgaGVyZS4KPiA+ID4gPiBJ IGRpZG4ndCB0aGluayBtdWNoIHdoZW4gaW1wbGVtZW50aW5nIHRoZSBldmVudCBzdXBwcmVzc2lv bgo+ID4gPiA+IGZvciBwYWNrZWQgcmluZyBwcmV2aW91c2x5LiBBZnRlciBJIHNhdyB5b3VyIGNv bW1lbnRzLCBJIGZvdW5kCj4gPiA+ID4gc29tZXRoaW5nIG5ldy4gSW5kZWVkLCB1bmxpa2UgdGhl IHNwbGl0IHJpbmcsIGZvciB0aGUgcGFja2VkCj4gPiA+ID4gcmluZywgc3BlYyBkb2Vzbid0IHNh eSB3ZSBtdXN0IHVzZSBWUklOR19FVkVOVF9GX0RFU0Mgd2hlbgo+ID4gPiA+IEVWRU5UX0lEWCBp cyBuZWdvdGlhdGVkLiBTbyBkbyB5b3UgdGhpbmsgYmVsb3cgdGhvdWdodCBpcwo+ID4gPiA+IHJp Z2h0IG9yIG1ha2VzIHNlbnNlPwo+ID4gPiA+IAo+ID4gPiA+IC0gRm9yIHZpcnRxdWV1ZV9lbmFi bGVfY2JfcHJlcGFyZSgpLCB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlCj4gPiA+ID4gICAgIHRoZSBy aW5nIGJ5IHNldHRpbmcgZmxhZ3MgdG8gVlJJTkdfRVZFTlRfRl9FTkFCTEUgaW4gYW55Cj4gPiA+ ID4gICAgIGNhc2UuCj4gPiA+ID4gCj4gPiA+ID4gLSBXZSB3aWxsIHRyeSB0byB1c2UgVlJJTkdf RVZFTlRfRl9ERVNDIChpZiBFVkVOVF9JRFggaXMKPiA+ID4gPiAgICAgbmVnb3RpYXRlZCkgb25s eSB3aGVuIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGludGVycnVwdHMKPiA+ID4gPiAgICAgdmlydHF1 ZXVlX2VuYWJsZV9jYl9kZWxheWVkKCkuCj4gPiA+IFRoaXMgbG9va3MgZ29vZCB0byBtZS4KPiA+ IEkgc3VzcGVjdCB0aGlzIHdpbGwgbGVhZCB0byBleHRyYSBpbnRlcnJ1cHRzIGlmIGhvc3QgaXMg ZmFzdC4KPiA+IFNvIEkgdGhpbmsgZm9yIG5vdyB3ZSBzaG91bGQgYWx3YXlzIHVzZSBWUklOR19F VkVOVF9GX0RFU0MKPiA+IGlmIEVWRU5UX0lEWCBpcyBuZWdvdGlhdGVkLgo+IAo+IFJpZ2h0LCBz byBpZiB0aGlzIGlzIHRydWUsIG1heWJlIHdlJ2QgYmV0dGVyIGZvcmNlIHRoaXMgaW4gdGhlIHNw ZWM/Cj4gCj4gVGhhbmtzCgpJIGRpZCBjb25zaWRlciB0aGlzLgoKV2h5IGl0IGlzIHRoZSB3YXkg aXQgaXM6CgotIGlmIHdlIGFsbG93IERJU0FCTEUgaXQgc2VlbXMgbmljZXIgdG8gYWxsb3cgRU5B QkxFIGFzIHdlbGwKZm9yIHN5bW1ldHJ5LgoKLSBFTkFCTEUgaXMgaGFuZHkgZm9yIGhhcmR3YXJl IG9mZmxvYWQgZGV2aWNlcwp3aGVyZSBraWNrcyBkbyBub3QgdHJpZ2dlciBhbiBleGl0IHNvIG5v dCB3b3J0aCBib3RoZXIKd2l0aCwgYnV0IGludGVycnVwdHMgc3RpbGwgc2xvdyB0aGUgc3lzdGVt IGRvd24gc28KZXZlbnQgaW5kZXggbWlnaHQgYmUgd29ydGggaXQuCgo+ID4gCj4gPiBWUklOR19F VkVOVF9GX0RJU0FCTEUgbWFrZXMgbW9yZSBzZW5zZSB0byBtZS4KPiA+IAo+IAo+IFsuLi5dCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0 aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9y ZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0 dWFsaXphdGlvbg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752060AbeDQChV (ORCPT ); Mon, 16 Apr 2018 22:37:21 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:52572 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751060AbeDQChU (ORCPT ); Mon, 16 Apr 2018 22:37:20 -0400 Date: Tue, 17 Apr 2018 05:37:19 +0300 From: "Michael S. Tsirkin" To: Jason Wang Cc: Tiwei Bie , wexu@redhat.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, jfreimann@redhat.com Subject: Re: [RFC v2] virtio: support packed ring Message-ID: <20180417053526-mutt-send-email-mst@kernel.org> References: <20180401141216.8969-1-tiwei.bie@intel.com> <20180413071529.f4esh654dakodf4f@debian> <8dee7d62-ac0b-54ba-6bec-4bc4a6fb34e9@redhat.com> <20180417051343-mutt-send-email-mst@kernel.org> <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Apr 17, 2018 at 10:24:32AM +0800, Jason Wang wrote: > > > On 2018年04月17日 10:17, Michael S. Tsirkin wrote: > > On Tue, Apr 17, 2018 at 10:11:58AM +0800, Jason Wang wrote: > > > > > > On 2018年04月13日 15:15, Tiwei Bie wrote: > > > > On Fri, Apr 13, 2018 at 12:30:24PM +0800, Jason Wang wrote: > > > > > On 2018年04月01日 22:12, Tiwei Bie wrote: > > > > > > Hello everyone, > > > > > > > > > > > > This RFC implements packed ring support for virtio driver. > > > > > > > > > > > > The code was tested with DPDK vhost (testpmd/vhost-PMD) implemented > > > > > > by Jens at http://dpdk.org/ml/archives/dev/2018-January/089417.html > > > > > > Minor changes are needed for the vhost code, e.g. to kick the guest. > > > > > > > > > > > > TODO: > > > > > > - Refinements and bug fixes; > > > > > > - Split into small patches; > > > > > > - Test indirect descriptor support; > > > > > > - Test/fix event suppression support; > > > > > > - Test devices other than net; > > > > > > > > > > > > RFC v1 -> RFC v2: > > > > > > - Add indirect descriptor support - compile test only; > > > > > > - Add event suppression supprt - compile test only; > > > > > > - Move vring_packed_init() out of uapi (Jason, MST); > > > > > > - Merge two loops into one in virtqueue_add_packed() (Jason); > > > > > > - Split vring_unmap_one() for packed ring and split ring (Jason); > > > > > > - Avoid using '%' operator (Jason); > > > > > > - Rename free_head -> next_avail_idx (Jason); > > > > > > - Add comments for virtio_wmb() in virtqueue_add_packed() (Jason); > > > > > > - Some other refinements and bug fixes; > > > > > > > > > > > > Thanks! > > > > > > > > > > > > Signed-off-by: Tiwei Bie > > > > > > --- > > > > > > drivers/virtio/virtio_ring.c | 1094 +++++++++++++++++++++++++++++------- > > > > > > include/linux/virtio_ring.h | 8 +- > > > > > > include/uapi/linux/virtio_config.h | 12 +- > > > > > > include/uapi/linux/virtio_ring.h | 61 ++ > > > > > > 4 files changed, 980 insertions(+), 195 deletions(-) > > > > [...] > > [...] > > > > > > It looks to me we should examine RING_EVENT_FLAGS_DESC in desc_event_flags > > > > > instead of vq->event here. Spec does not forces to use evenf_off and > > > > > event_wrap if event index is enabled. > > > > > > > > > > > + // FIXME: fix this! > > > > > > + needs_kick = ((off_wrap >> 15) == vq->wrap_counter) && > > > > > > + vring_need_event(off_wrap & ~(1<<15), new, old); > > > > > Why need a & here? > > > > Because wrap_counter (the most significant bit in off_wrap) > > > > isn't part of the index. > > > > > > > > > > + } else { > > > > > Need a smp_rmb() to make sure desc_event_flags was checked before flags. > > > > I don't get your point, if my understanding is correct, > > > > desc_event_flags is vq->vring_packed.device->flags. So > > > > what's the "flags"? > > > Sorry, I mean we need check device.flags before off_warp. So it needs an > > > smp_rmb() in the middle. > > It's best to just read all flags atomically as u32. > > Yes it is. > > > > > > It looks to me there's no guarantee that > > > VRING_EVENT_F_DESC is set if event index is supported. > > > > > > > > > + needs_kick = (vq->vring_packed.device->flags != > > > > > > + cpu_to_virtio16(_vq->vdev, VRING_EVENT_F_DISABLE)); > > > > > > + } > > > > > > + END_USE(vq); > > > > > > + return needs_kick; > > > > > > +} > > > > [...] > > > > > > +static int detach_buf_packed(struct vring_virtqueue *vq, unsigned int head, > > > > > > + void **ctx) > > > > > > +{ > > > > > > + struct vring_packed_desc *desc; > > > > > > + unsigned int i, j; > > > > > > + > > > > > > + /* Clear data ptr. */ > > > > > > + vq->desc_state[head].data = NULL; > > > > > > + > > > > > > + i = head; > > > > > > + > > > > > > + for (j = 0; j < vq->desc_state[head].num; j++) { > > > > > > + desc = &vq->vring_packed.desc[i]; > > > > > > + vring_unmap_one_packed(vq, desc); > > > > > > + desc->flags = 0x0; > > > > > Looks like this is unnecessary. > > > > It's safer to zero it. If we don't zero it, after we > > > > call virtqueue_detach_unused_buf_packed() which calls > > > > this function, the desc is still available to the > > > > device. > > > Well detach_unused_buf_packed() should be called after device is stopped, > > > otherwise even if you try to clear, there will still be a window that device > > > may use it. > > > > > > > > > + i++; > > > > > > + if (i >= vq->vring_packed.num) > > > > > > + i = 0; > > > > > > + } > > > > [...] > > > > > > +static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > > > > > +{ > > > > > > + struct vring_virtqueue *vq = to_vvq(_vq); > > > > > > + u16 last_used_idx, wrap_counter, off_wrap; > > > > > > + > > > > > > + START_USE(vq); > > > > > > + > > > > > > + last_used_idx = vq->last_used_idx; > > > > > > + wrap_counter = vq->wrap_counter; > > > > > > + > > > > > > + if (last_used_idx > vq->next_avail_idx) > > > > > > + wrap_counter ^= 1; > > > > > > + > > > > > > + off_wrap = last_used_idx | (wrap_counter << 15); > > > > > > + > > > > > > + /* We optimistically turn back on interrupts, then check if there was > > > > > > + * more to do. */ > > > > > > + /* Depending on the VIRTIO_RING_F_EVENT_IDX feature, we need to > > > > > > + * either clear the flags bit or point the event index at the next > > > > > > + * entry. Always do both to keep code simple. */ > > > > > > + if (vq->event_flags_shadow == VRING_EVENT_F_DISABLE) { > > > > > > + vq->event_flags_shadow = vq->event ? VRING_EVENT_F_DESC: > > > > > > + VRING_EVENT_F_ENABLE; > > > > > > + vq->vring_packed.driver->flags = cpu_to_virtio16(_vq->vdev, > > > > > > + vq->event_flags_shadow); > > > > > > + } > > > > > A smp_wmb() is missed here? > > > > > > > > > > > + vq->vring_packed.driver->off_wrap = cpu_to_virtio16(_vq->vdev, off_wrap); > > > > > And according to the spec, it looks to me write a VRING_EVENT_F_ENABLE is > > > > > sufficient here. > > > > I didn't think much when implementing the event suppression > > > > for packed ring previously. After I saw your comments, I found > > > > something new. Indeed, unlike the split ring, for the packed > > > > ring, spec doesn't say we must use VRING_EVENT_F_DESC when > > > > EVENT_IDX is negotiated. So do you think below thought is > > > > right or makes sense? > > > > > > > > - For virtqueue_enable_cb_prepare(), we just need to enable > > > > the ring by setting flags to VRING_EVENT_F_ENABLE in any > > > > case. > > > > > > > > - We will try to use VRING_EVENT_F_DESC (if EVENT_IDX is > > > > negotiated) only when we want to delay the interrupts > > > > virtqueue_enable_cb_delayed(). > > > This looks good to me. > > I suspect this will lead to extra interrupts if host is fast. > > So I think for now we should always use VRING_EVENT_F_DESC > > if EVENT_IDX is negotiated. > > Right, so if this is true, maybe we'd better force this in the spec? > > Thanks I did consider this. Why it is the way it is: - if we allow DISABLE it seems nicer to allow ENABLE as well for symmetry. - ENABLE is handy for hardware offload devices where kicks do not trigger an exit so not worth bother with, but interrupts still slow the system down so event index might be worth it. > > > > VRING_EVENT_F_DISABLE makes more sense to me. > > > > [...]