From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Auger Subject: Re: [PATCH v10 2/7] hw/vfio/platform: vfio-platform skeleton Date: Fri, 13 Mar 2015 10:28:13 +0100 Message-ID: <5502ADAD.9000808@linaro.org> References: <1423799232-10816-1-git-send-email-eric.auger@linaro.org> <1423799232-10816-3-git-send-email-eric.auger@linaro.org> <87fva4ztzu.fsf@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 4B3AA487A8 for ; Fri, 13 Mar 2015 05:24:11 -0400 (EDT) Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1QgRhzlW1FDq for ; Fri, 13 Mar 2015 05:24:09 -0400 (EDT) Received: from mail-wg0-f46.google.com (mail-wg0-f46.google.com [74.125.82.46]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id ADF7348799 for ; Fri, 13 Mar 2015 05:24:09 -0400 (EDT) Received: by wggx13 with SMTP id x13so21878273wgg.12 for ; Fri, 13 Mar 2015 02:30:34 -0700 (PDT) In-Reply-To: <87fva4ztzu.fsf@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: =?UTF-8?B?QWxleCBCZW5uw6ll?= Cc: eric.auger@st.com, patches@linaro.org, Kim Phillips , qemu-devel@nongnu.org, alex.williamson@redhat.com, pbonzini@redhat.com, feng.wu@intel.com, kvmarm@lists.cs.columbia.edu List-Id: kvmarm@lists.cs.columbia.edu SGkgQWxleCwKClRoYW5rIHlvdSBmb3IgeW91ciByZXZpZXcgYW5kIHRoZSBSLWIgb24gNS83ICYg Ny83LgoKUGxlYXNlIGFwb2xvZ2l6ZSBmb3IgdGhlIGxvbmcgZGVsYXkgaW4gcmVzcG9uc2UsIG1v c3RseSBkdWUgdG8gbXkKdmFjYXRpb24gOi0oCgpJIHRvb2sgaW50byBhY2NvdW50IGFsbCB0aGUg Y29tbWVudHMgYmVsb3cKCkJlc3QgUmVnYXJkcwoKRXJpYwpPbiAwMi8xNy8yMDE1IDExOjU2IEFN LCBBbGV4IEJlbm7DqWUgd3JvdGU6Cj4gCj4gRXJpYyBBdWdlciA8ZXJpYy5hdWdlckBsaW5hcm8u b3JnPiB3cml0ZXM6Cj4gCj4+IE1pbmltYWwgVkZJTyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBz dXBwb3J0aW5nIHJlZ2lzdGVyIHNwYWNlCj4+IHVzZXIgbWFwcGluZyBidXQgbm90IElSUSBhc3Np Z25tZW50Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0Bs aW5hcm8ub3JnPgo+PiBTaWduZWQtb2ZmLWJ5OiBFcmljIEF1Z2VyIDxlcmljLmF1Z2VyQGxpbmFy by5vcmc+Cj4gCj4gU2VlIGNvbW1lbnRzIGlubGluZS4KPiAKPiA8c25pcD4KPj4gKy8qKgo+PiAr ICogdmZpb19wb3B1bGF0ZV9kZXZpY2UgLSBpbml0aWFsaXplIE1NSU8gcmVnaW9uIGFuZCBJUlEK Pj4gKyAqIEB2YmFzZWRldjogdGhlIFZGSU8gZGV2aWNlCj4+ICsgKgo+PiArICogcXVlcnkgdGhl IFZGSU8gZGV2aWNlIGZvciBleHBvc2VkIE1NSU8gcmVnaW9ucyBhbmQgSVJRIGFuZAo+PiArICog cG9wdWxhdGUgdGhlIGFzc29jaWF0ZWQgZmllbGRzIGluIHRoZSBkZXZpY2Ugc3RydWN0Cj4+ICsg Ki8KPj4gK3N0YXRpYyBpbnQgdmZpb19wb3B1bGF0ZV9kZXZpY2UoVkZJT0RldmljZSAqdmJhc2Vk ZXYpCj4+ICt7Cj4+ICsgICAgc3RydWN0IHZmaW9fcmVnaW9uX2luZm8gcmVnX2luZm8gPSB7IC5h cmdzeiA9IHNpemVvZihyZWdfaW5mbykgfTsKPiAKPiBUaGlzIGNvdWxkIGJlIGluc2lkZSB0aGUg Zm9yIGJsb2NrLgo+IAo+PiArICAgIGludCBpLCByZXQgPSAtMTsKPj4gKyAgICBWRklPUGxhdGZv cm1EZXZpY2UgKnZkZXYgPQo+PiArICAgICAgICBjb250YWluZXJfb2YodmJhc2VkZXYsIFZGSU9Q bGF0Zm9ybURldmljZSwgdmJhc2VkZXYpOwo+PiArCj4+ICsgICAgaWYgKCEodmJhc2VkZXYtPmZs YWdzICYgVkZJT19ERVZJQ0VfRkxBR1NfUExBVEZPUk0pKSB7Cj4+ICsgICAgICAgIGVycm9yX3Jl cG9ydCgidmZpbzogVW0sIHRoaXMgaXNuJ3QgYSBwbGF0Zm9ybSBkZXZpY2UiKTsKPj4gKyAgICAg ICAgZ290byBlcnJvcjsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICB2ZGV2LT5yZWdpb25zID0gZ19t YWxsb2MwKHNpemVvZihWRklPUmVnaW9uICopICoKPj4gdmJhc2VkZXYtPm51bV9yZWdpb25zKTsK PiAKPiBJIG1heSBoYXZlIGNvbnNpZGVyZWQgYSBnX21hbGxvYzBfbiBidXQgSSBzZWUgdGhhdCdz IG5vdCBhY3R1YWxseSB1c2VkCj4gaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgKG5ld2VyIGdsaWI/ KS4KPiAKPj4gKwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCB2YmFzZWRldi0+bnVtX3JlZ2lvbnM7 IGkrKykgewo+PiArICAgICAgICB2ZGV2LT5yZWdpb25zW2ldID0gZ19tYWxsb2MwKHNpemVvZihW RklPUmVnaW9uKSk7Cj4gCj4gQW4gaW50ZXJtZWRpYXRlIFZGSU9SZWdpb24gKnB0ciBoZXJlIHdv dWxkIGhhdmUgc2F2ZWQgYSBidW5jaCBvZiB0eXBpbmcKPiBsYXRlciBvbiA7LSkgCj4gCj4+ICsg ICAgICAgIHJlZ19pbmZvLmluZGV4ID0gaTsKPj4gKyAgICAgICAgcmV0ID0gaW9jdGwodmJhc2Vk ZXYtPmZkLCBWRklPX0RFVklDRV9HRVRfUkVHSU9OX0lORk8sICZyZWdfaW5mbyk7Cj4+ICsgICAg ICAgIGlmIChyZXQpIHsKPj4gKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidmZpbzogRXJyb3Ig Z2V0dGluZyByZWdpb24gJWQgaW5mbzogJW0iLCBpKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZXJy b3I7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgdmRldi0+cmVnaW9uc1tpXS0+ZmxhZ3MgPSBy ZWdfaW5mby5mbGFnczsKPj4gKyAgICAgICAgdmRldi0+cmVnaW9uc1tpXS0+c2l6ZSA9IHJlZ19p bmZvLnNpemU7Cj4+ICsgICAgICAgIHZkZXYtPnJlZ2lvbnNbaV0tPmZkX29mZnNldCA9IHJlZ19p bmZvLm9mZnNldDsKPj4gKyAgICAgICAgdmRldi0+cmVnaW9uc1tpXS0+bnIgPSBpOwo+PiArICAg ICAgICB2ZGV2LT5yZWdpb25zW2ldLT52YmFzZWRldiA9IHZiYXNlZGV2Owo+PiArCj4+ICsgICAg ICAgIHRyYWNlX3ZmaW9fcGxhdGZvcm1fcG9wdWxhdGVfcmVnaW9ucyh2ZGV2LT5yZWdpb25zW2ld LT5uciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyl2ZGV2 LT5yZWdpb25zW2ldLT5mbGFncywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5z aWduZWQgbG9uZyl2ZGV2LT5yZWdpb25zW2ldLT5zaXplLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZkZXYtPnJlZ2lvbnNbaV0tPnZiYXNlZGV2LT5mZCwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyl2ZGV2LT5yZWdpb25zW2ldLT5mZF9vZmZz ZXQpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArZXJyb3I6Cj4+ICsgICAg Zm9yIChpID0gMDsgaSA8IHZiYXNlZGV2LT5udW1fcmVnaW9uczsgaSsrKSB7Cj4+ICsgICAgICAg IGdfZnJlZSh2ZGV2LT5yZWdpb25zW2ldKTsKPj4gKyAgICB9Cj4+ICsgICAgZ19mcmVlKHZkZXYt PnJlZ2lvbnMpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qIHNwZWNpYWxp emVkIGZ1bmN0aW9ucyBvZnIgVkZJTyBQbGF0Zm9ybSBkZXZpY2VzICovCj4+ICtzdGF0aWMgVkZJ T0RldmljZU9wcyB2ZmlvX3BsYXRmb3JtX29wcyA9IHsKPj4gKyAgICAudmZpb19jb21wdXRlX25l ZWRzX3Jlc2V0ID0gdmZpb19wbGF0Zm9ybV9jb21wdXRlX25lZWRzX3Jlc2V0LAo+PiArICAgIC52 ZmlvX2hvdF9yZXNldF9tdWx0aSA9IHZmaW9fcGxhdGZvcm1faG90X3Jlc2V0X211bHRpLAo+PiAr ICAgIC52ZmlvX3BvcHVsYXRlX2RldmljZSA9IHZmaW9fcG9wdWxhdGVfZGV2aWNlLAo+PiArfTsK Pj4gKwo+PiArLyoqCj4+ICsgKiB2ZmlvX2Jhc2VfZGV2aWNlX2luaXQgLSBpbXBsZW1lbnRzIHNv bWUgb2YgdGhlIFZGSU8gbWVjaGFuaWNzCj4+ICsgKiBAdmJhc2VkZXY6IHRoZSBWRklPIGRldmlj ZQo+PiArICoKPj4gKyAqIHJldHJpZXZlcyB0aGUgZ3JvdXAgdGhlIGRldmljZSBiZWxvbmdzIHRv IGFuZCBnZXQgdGhlIGRldmljZSBmZAo+PiArICogcmV0dXJucyB0aGUgVkZJTyBkZXZpY2UgZmQK Pj4gKyAqIHByZWNvbmRpdGlvbjogdGhlIGRldmljZSBuYW1lIG11c3QgYmUgaW5pdGlhbGl6ZWQK Pj4gKyAqLwo+PiArc3RhdGljIGludCB2ZmlvX2Jhc2VfZGV2aWNlX2luaXQoVkZJT0RldmljZSAq dmJhc2VkZXYpCj4+ICt7Cj4+ICsgICAgVkZJT0dyb3VwICpncm91cDsKPj4gKyAgICBWRklPRGV2 aWNlICp2YmFzZWRldl9pdGVyOwo+PiArICAgIGNoYXIgcGF0aFtQQVRIX01BWF0sIGlvbW11X2dy b3VwX3BhdGhbUEFUSF9NQVhdLCAqZ3JvdXBfbmFtZTsKPj4gKyAgICBzc2l6ZV90IGxlbjsKPj4g KyAgICBzdHJ1Y3Qgc3RhdCBzdDsKPj4gKyAgICBpbnQgZ3JvdXBpZDsKPj4gKyAgICBpbnQgcmV0 Owo+PiArCj4+ICsgICAgLyogbmFtZSBtdXN0IGJlIHNldCBwcmlvciB0byB0aGUgY2FsbCAqLwo+ PiArICAgIGlmICghdmJhc2VkZXYtPm5hbWUpIHsKPj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogQ2hlY2sgdGhhdCB0aGUgaG9zdCBkZXZpY2UgZXhp c3RzICovCj4+ICsgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3N5cy9idXMvcGxh dGZvcm0vZGV2aWNlcy8lcy8iLAo+PiArICAgICAgICAgICAgIHZiYXNlZGV2LT5uYW1lKTsKPj4g Kwo+PiArICAgIGlmIChzdGF0KHBhdGgsICZzdCkgPCAwKSB7Cj4+ICsgICAgICAgIGVycm9yX3Jl cG9ydCgidmZpbzogZXJyb3I6IG5vIHN1Y2ggaG9zdCBkZXZpY2U6ICVzIiwgcGF0aCk7Cj4+ICsg ICAgICAgIHJldHVybiAtZXJybm87Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgc3RybmNhdChwYXRo LCAiaW9tbXVfZ3JvdXAiLCBzaXplb2YocGF0aCkgLSBzdHJsZW4ocGF0aCkgLSAxKTsKPiAKPiBD b25zaWRlciBnX3N0cmxjYXQgd2hpY2ggaGFzIG5pY2VyIG1heCBsZW5ndGggc2VtYW50aWNzLgo+ IAo+PiArICAgIGxlbiA9IHJlYWRsaW5rKHBhdGgsIGlvbW11X2dyb3VwX3BhdGgsIHNpemVvZihw YXRoKSk7Cj4+ICsgICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSBzaXplb2YocGF0aCkpIHsKPiAK PiByZWFkbGluayBzaG91bGQgbmV2ZXIgcmVwb3J0IG1vcmUgdGhhbiBzaXplb2YocGF0aCkgYWx0 aG91Z2ggdGhhdCB3aWxsCj4gaW5kaWNhdGUgYSBFTkFNRVRPT0xPTkcuCj4gCj4+ICsgICAgICAg IGVycm9yX3JlcG9ydCgidmZpbzogZXJyb3Igbm8gaW9tbXVfZ3JvdXAgZm9yIGRldmljZSIpOwo+ PiArICAgICAgICByZXR1cm4gbGVuIDwgMCA/IC1lcnJubyA6IEVOQU1FVE9PTE9ORzsKPj4gKyAg ICB9Cj4+ICsKPj4gKyAgICBpb21tdV9ncm91cF9wYXRoW2xlbl0gPSAwOwo+PiArICAgIGdyb3Vw X25hbWUgPSBiYXNlbmFtZShpb21tdV9ncm91cF9wYXRoKTsKPj4gKwo+PiArICAgIGlmIChzc2Nh bmYoZ3JvdXBfbmFtZSwgIiVkIiwgJmdyb3VwaWQpICE9IDEpIHsKPj4gKyAgICAgICAgZXJyb3Jf cmVwb3J0KCJ2ZmlvOiBlcnJvciByZWFkaW5nICVzOiAlbSIsIHBhdGgpOwo+PiArICAgICAgICBy ZXR1cm4gLWVycm5vOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHRyYWNlX3ZmaW9fcGxhdGZvcm1f YmFzZV9kZXZpY2VfaW5pdCh2YmFzZWRldi0+bmFtZSwgZ3JvdXBpZCk7Cj4+ICsKPj4gKyAgICBn cm91cCA9IHZmaW9fZ2V0X2dyb3VwKGdyb3VwaWQsICZhZGRyZXNzX3NwYWNlX21lbW9yeSk7Cj4+ ICsgICAgaWYgKCFncm91cCkgewo+PiArICAgICAgICBlcnJvcl9yZXBvcnQoInZmaW86IGZhaWxl ZCB0byBnZXQgZ3JvdXAgJWQiLCBncm91cGlkKTsKPj4gKyAgICAgICAgcmV0dXJuIC1FTk9FTlQ7 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMi LCB2YmFzZWRldi0+bmFtZSk7Cj4+ICsKPj4gKyAgICBRTElTVF9GT1JFQUNIKHZiYXNlZGV2X2l0 ZXIsICZncm91cC0+ZGV2aWNlX2xpc3QsIG5leHQpIHsKPj4gKyAgICAgICAgaWYgKHN0cmNtcCh2 YmFzZWRldl9pdGVyLT5uYW1lLCB2YmFzZWRldi0+bmFtZSkgPT0gMCkgewo+PiArICAgICAgICAg ICAgZXJyb3JfcmVwb3J0KCJ2ZmlvOiBlcnJvcjogZGV2aWNlICVzIGlzIGFscmVhZHkgYXR0YWNo ZWQiLCBwYXRoKTsKPj4gKyAgICAgICAgICAgIHZmaW9fcHV0X2dyb3VwKGdyb3VwKTsKPj4gKyAg ICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsgICAg cmV0ID0gdmZpb19nZXRfZGV2aWNlKGdyb3VwLCBwYXRoLCB2YmFzZWRldik7Cj4+ICsgICAgaWYg KHJldCkgewo+PiArICAgICAgICBlcnJvcl9yZXBvcnQoInZmaW86IGZhaWxlZCB0byBnZXQgZGV2 aWNlICVzIiwgcGF0aCk7Cj4+ICsgICAgICAgIHZmaW9fcHV0X2dyb3VwKGdyb3VwKTsKPj4gKyAg ICB9Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiB2ZmlvX21h cF9yZWdpb24gLSBpbml0aWFsaXplIHRoZSAyIG1yIChtbWFwcGVkIG9uIG9wcykgZm9yIGEKPj4g KyAqIGdpdmVuIGluZGV4Cj4+ICsgKiBAdmRldjogdGhlIFZGSU8gcGxhdGZvcm0gZGV2aWNlCj4+ ICsgKiBAbnI6IHRoZSBpbmRleCBvZiB0aGUgcmVnaW9uCj4+ICsgKgo+PiArICogaW5pdCB0aGUg dG9wIG1lbW9yeSByZWdpb24gYW5kIHRoZSBtbWFwcGVkIG1lbXJveSByZWdpb24gYmVuZWF0aAo+ PiArICogVkZJT1BsYXRmb3JtRGV2aWNlIGlzIHVzZWQgc2luY2UgVkZJT0RldmljZSBpcyBub3Qg YSBRT00gT2JqZWN0Cj4+ICsgKiBhbmQgY291bGQgbm90IGJlIHBhc3NlZCB0byBtZW1vcnkgcmVn aW9uIGZ1bmN0aW9ucwo+PiArKi8KPj4gK3N0YXRpYyB2b2lkIHZmaW9fbWFwX3JlZ2lvbihWRklP UGxhdGZvcm1EZXZpY2UgKnZkZXYsIGludCBucikKPj4gK3sKPj4gKyAgICBWRklPUmVnaW9uICpy ZWdpb24gPSB2ZGV2LT5yZWdpb25zW25yXTsKPj4gKyAgICB1bnNpZ25lZCBzaXplID0gcmVnaW9u LT5zaXplOwo+PiArICAgIGNoYXIgbmFtZVs2NF07Cj4+ICsKPj4gKyAgICBpZiAoIXNpemUpIHsK Pj4gKyAgICAgICAgcmV0dXJuOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHNucHJpbnRmKG5hbWUs IHNpemVvZihuYW1lKSwgIlZGSU8gJXMgcmVnaW9uICVkIiwKPj4gKyAgICAgICAgICAgICB2ZGV2 LT52YmFzZWRldi5uYW1lLCBucik7Cj4+ICsKPj4gKyAgICAvKiBBICJzbG93IiByZWFkL3dyaXRl IG1hcHBpbmcgdW5kZXJsaWVzIGFsbCByZWdpb25zICovCj4+ICsgICAgbWVtb3J5X3JlZ2lvbl9p bml0X2lvKCZyZWdpb24tPm1lbSwgT0JKRUNUKHZkZXYpLCAmdmZpb19yZWdpb25fb3BzLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24sIG5hbWUsIHNpemUpOwo+PiArCj4+ICsg ICAgc3RybmNhdChuYW1lLCAiIG1tYXAiLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSkgLSAx KTsKPiAKPiBhZ2FpbiBjb25zaWRlciBnX3N0cmxjYXQKPiAKPj4gKwo+PiArICAgIGlmICh2Zmlv X21tYXBfcmVnaW9uKE9CSkVDVCh2ZGV2KSwgcmVnaW9uLCAmcmVnaW9uLT5tZW0sCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgJnJlZ2lvbi0+bW1hcF9tZW0sICZyZWdpb24tPm1tYXAsIHNp emUsIDAsIG5hbWUpKSB7Cj4+ICsgICAgICAgIGVycm9yX3JlcG9ydCgiJXMgdW5zdXBwb3J0ZWQu IFBlcmZvcm1hbmNlIG1heSBiZSBzbG93IiwgbmFtZSk7Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ ICsvKioKPj4gKyAqIHZmaW9fcGxhdGZvcm1fcmVhbGl6ZSAgLSB0aGUgZGV2aWNlIHJlYWxpemUg ZnVuY3Rpb24KPj4gKyAqIEBkZXY6IGRldmljZSBzdGF0ZSBwb2ludGVyCj4+ICsgKiBAZXJycDog ZXJyb3IKPj4gKyAqCj4+ICsgKiBpbml0aWFsaXplIHRoZSBkZXZpY2UsIGl0cyBtZW1vcnkgcmVn aW9ucyBhbmQgSVJRIHN0cnVjdHVyZXMKPj4gKyAqIElSUSBhcmUgc3RhcnRlZCBzZXBhcmF0ZWx5 Cj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIHZmaW9fcGxhdGZvcm1fcmVhbGl6ZShEZXZpY2VTdGF0 ZSAqZGV2LCBFcnJvciAqKmVycnApCj4+ICt7Cj4+ICsgICAgVkZJT1BsYXRmb3JtRGV2aWNlICp2 ZGV2ID0gVkZJT19QTEFURk9STV9ERVZJQ0UoZGV2KTsKPj4gKyAgICBTeXNCdXNEZXZpY2UgKnNi ZGV2ID0gU1lTX0JVU19ERVZJQ0UoZGV2KTsKPj4gKyAgICBWRklPRGV2aWNlICp2YmFzZWRldiA9 ICZ2ZGV2LT52YmFzZWRldjsKPj4gKyAgICBpbnQgaSwgcmV0Owo+PiArCj4+ICsgICAgdmJhc2Vk ZXYtPnR5cGUgPSBWRklPX0RFVklDRV9UWVBFX1BMQVRGT1JNOwo+PiArICAgIHZiYXNlZGV2LT5v cHMgPSAmdmZpb19wbGF0Zm9ybV9vcHM7Cj4+ICsKPj4gKyAgICB0cmFjZV92ZmlvX3BsYXRmb3Jt X3JlYWxpemUodmJhc2VkZXYtPm5hbWUsIHZkZXYtPmNvbXBhdCk7Cj4+ICsKPj4gKyAgICByZXQg PSB2ZmlvX2Jhc2VfZGV2aWNlX2luaXQodmJhc2VkZXYpOwo+PiArICAgIGlmIChyZXQpIHsKPj4g KyAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLCAidmZpbzogdmZpb19iYXNlX2RldmljZV9pbml0IGZh aWxlZCBmb3IgJXMiLAo+PiArICAgICAgICAgICAgICAgICAgIHZiYXNlZGV2LT5uYW1lKTsKPj4g KyAgICAgICAgcmV0dXJuOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCB2 YmFzZWRldi0+bnVtX3JlZ2lvbnM7IGkrKykgewo+PiArICAgICAgICB2ZmlvX21hcF9yZWdpb24o dmRldiwgaSk7Cj4+ICsgICAgICAgIHN5c2J1c19pbml0X21taW8oc2JkZXYsICZ2ZGV2LT5yZWdp b25zW2ldLT5tZW0pOwo+PiArICAgIH0KPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IFZNU3Rh dGVEZXNjcmlwdGlvbiB2ZmlvX3BsYXRmb3JtX3Ztc3RhdGUgPSB7Cj4+ICsgICAgLm5hbWUgPSBU WVBFX1ZGSU9fUExBVEZPUk0sCj4+ICsgICAgLnVubWlncmF0YWJsZSA9IDEsCj4+ICt9Owo+PiAr Cj4+ICtzdGF0aWMgUHJvcGVydHkgdmZpb19wbGF0Zm9ybV9kZXZfcHJvcGVydGllc1tdID0gewo+ PiArICAgIERFRklORV9QUk9QX1NUUklORygiaG9zdCIsIFZGSU9QbGF0Zm9ybURldmljZSwgdmJh c2VkZXYubmFtZSksCj4+ICsgICAgREVGSU5FX1BST1BfRU5EX09GX0xJU1QoKSwKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIHZmaW9fcGxhdGZvcm1fY2xhc3NfaW5pdChPYmplY3RDbGFzcyAq a2xhc3MsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICsgICAgRGV2aWNlQ2xhc3MgKmRjID0gREVWSUNF X0NMQVNTKGtsYXNzKTsKPj4gKwo+PiArICAgIGRjLT5yZWFsaXplID0gdmZpb19wbGF0Zm9ybV9y ZWFsaXplOwo+PiArICAgIGRjLT5wcm9wcyA9IHZmaW9fcGxhdGZvcm1fZGV2X3Byb3BlcnRpZXM7 Cj4+ICsgICAgZGMtPnZtc2QgPSAmdmZpb19wbGF0Zm9ybV92bXN0YXRlOwo+PiArICAgIGRjLT5k ZXNjID0gIlZGSU8tYmFzZWQgcGxhdGZvcm0gZGV2aWNlIGFzc2lnbm1lbnQiOwo+PiArICAgIHNl dF9iaXQoREVWSUNFX0NBVEVHT1JZX01JU0MsIGRjLT5jYXRlZ29yaWVzKTsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGNvbnN0IFR5cGVJbmZvIHZmaW9fcGxhdGZvcm1fZGV2X2luZm8gPSB7Cj4+ICsg ICAgLm5hbWUgPSBUWVBFX1ZGSU9fUExBVEZPUk0sCj4+ICsgICAgLnBhcmVudCA9IFRZUEVfU1lT X0JVU19ERVZJQ0UsCj4+ICsgICAgLmluc3RhbmNlX3NpemUgPSBzaXplb2YoVkZJT1BsYXRmb3Jt RGV2aWNlKSwKPj4gKyAgICAuY2xhc3NfaW5pdCA9IHZmaW9fcGxhdGZvcm1fY2xhc3NfaW5pdCwK Pj4gKyAgICAuY2xhc3Nfc2l6ZSA9IHNpemVvZihWRklPUGxhdGZvcm1EZXZpY2VDbGFzcyksCj4+ ICsgICAgLmFic3RyYWN0ICAgPSB0cnVlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgcmVn aXN0ZXJfdmZpb19wbGF0Zm9ybV9kZXZfdHlwZSh2b2lkKQo+PiArewo+PiArICAgIHR5cGVfcmVn aXN0ZXJfc3RhdGljKCZ2ZmlvX3BsYXRmb3JtX2Rldl9pbmZvKTsKPj4gK30KPj4gKwo+PiArdHlw ZV9pbml0KHJlZ2lzdGVyX3ZmaW9fcGxhdGZvcm1fZGV2X3R5cGUpCj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2h3L3ZmaW8vdmZpby1jb21tb24uaCBiL2luY2x1ZGUvaHcvdmZpby92ZmlvLWNvbW1v bi5oCj4+IGluZGV4IDVmMzY3OWIuLjJkMWQ4YjMgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvaHcv dmZpby92ZmlvLWNvbW1vbi5oCj4+ICsrKyBiL2luY2x1ZGUvaHcvdmZpby92ZmlvLWNvbW1vbi5o Cj4+IEBAIC00Myw2ICs0Myw3IEBACj4+ICAKPj4gIGVudW0gewo+PiAgICAgIFZGSU9fREVWSUNF X1RZUEVfUENJID0gMCwKPj4gKyAgICBWRklPX0RFVklDRV9UWVBFX1BMQVRGT1JNID0gMSwKPj4g IH07Cj4+ICAKPj4gIHR5cGVkZWYgc3RydWN0IFZGSU9SZWdpb24gewo+PiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9ody92ZmlvL3ZmaW8tcGxhdGZvcm0uaCBiL2luY2x1ZGUvaHcvdmZpby92ZmlvLXBs YXRmb3JtLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uMzM4ZjBj Ngo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2luY2x1ZGUvaHcvdmZpby92ZmlvLXBsYXRmb3Jt LmgKPj4gQEAgLTAsMCArMSw0NCBAQAo+PiArLyoKPj4gKyAqIHZmaW8gYmFzZWQgZGV2aWNlIGFz c2lnbm1lbnQgc3VwcG9ydCAtIHBsYXRmb3JtIGRldmljZXMKPj4gKyAqCj4+ICsgKiBDb3B5cmln aHQgTGluYXJvIExpbWl0ZWQsIDIwMTQKPj4gKyAqCj4+ICsgKiBBdXRob3JzOgo+PiArICogIEtp bSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGxpbmFyby5vcmc+Cj4+ICsgKgo+PiArICogVGhpcyB3 b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAy LiAgU2VlCj4+ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5 Lgo+PiArICoKPj4gKyAqIEJhc2VkIG9uIHZmaW8gYmFzZWQgUENJIGRldmljZSBhc3NpZ25tZW50 IHN1cHBvcnQ6Cj4+ICsgKiAgQ29weXJpZ2h0IFJlZCBIYXQsIEluYy4gMjAxMgo+PiArICovCj4+ ICsKPj4gKyNpZm5kZWYgSFdfVkZJT19WRklPX1BMQVRGT1JNX0gKPj4gKyNkZWZpbmUgSFdfVkZJ T19WRklPX1BMQVRGT1JNX0gKPj4gKwo+PiArI2luY2x1ZGUgImh3L3N5c2J1cy5oIgo+PiArI2lu Y2x1ZGUgImh3L3ZmaW8vdmZpby1jb21tb24uaCIKPj4gKwo+PiArI2RlZmluZSBUWVBFX1ZGSU9f UExBVEZPUk0gInZmaW8tcGxhdGZvcm0iCj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IFZGSU9QbGF0 Zm9ybURldmljZSB7Cj4+ICsgICAgU3lzQnVzRGV2aWNlIHNiZGV2Owo+PiArICAgIFZGSU9EZXZp Y2UgdmJhc2VkZXY7IC8qIG5vdCBhIFFPTSBvYmplY3QgKi8KPj4gKyAgICBWRklPUmVnaW9uICoq cmVnaW9uczsKPj4gKyAgICBjaGFyICpjb21wYXQ7IC8qIGNvbXBhdGliaWxpdHkgc3RyaW5nICov Cj4+ICt9IFZGSU9QbGF0Zm9ybURldmljZTsKPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgVkZJT1Bs YXRmb3JtRGV2aWNlQ2xhc3Mgewo+PiArICAgIC8qPCBwcml2YXRlID4qLwo+PiArICAgIFN5c0J1 c0RldmljZUNsYXNzIHBhcmVudF9jbGFzczsKPj4gKyAgICAvKjwgcHVibGljID4qLwo+PiArfSBW RklPUGxhdGZvcm1EZXZpY2VDbGFzczsKPj4gKwo+PiArI2RlZmluZSBWRklPX1BMQVRGT1JNX0RF VklDRShvYmopIFwKPj4gKyAgICAgT0JKRUNUX0NIRUNLKFZGSU9QbGF0Zm9ybURldmljZSwgKG9i aiksIFRZUEVfVkZJT19QTEFURk9STSkKPj4gKyNkZWZpbmUgVkZJT19QTEFURk9STV9ERVZJQ0Vf Q0xBU1Moa2xhc3MpIFwKPj4gKyAgICAgT0JKRUNUX0NMQVNTX0NIRUNLKFZGSU9QbGF0Zm9ybURl dmljZUNsYXNzLCAoa2xhc3MpLCBUWVBFX1ZGSU9fUExBVEZPUk0pCj4+ICsjZGVmaW5lIFZGSU9f UExBVEZPUk1fREVWSUNFX0dFVF9DTEFTUyhvYmopIFwKPj4gKyAgICAgT0JKRUNUX0dFVF9DTEFT UyhWRklPUGxhdGZvcm1EZXZpY2VDbGFzcywgKG9iaiksIFRZUEVfVkZJT19QTEFURk9STSkKPj4g Kwo+PiArI2VuZGlmIC8qSFdfVkZJT19WRklPX1BMQVRGT1JNX0gqLwo+PiBkaWZmIC0tZ2l0IGEv dHJhY2UtZXZlbnRzIGIvdHJhY2UtZXZlbnRzCj4+IGluZGV4IGY4N2IwNzcuLmQzNjg1YzkgMTAw NjQ0Cj4+IC0tLSBhL3RyYWNlLWV2ZW50cwo+PiArKysgYi90cmFjZS1ldmVudHMKPj4gQEAgLTE1 NTYsNiArMTU1NiwxOCBAQCB2ZmlvX3B1dF9ncm91cChpbnQgZmQpICJjbG9zZSBncm91cC0+ZmQ9 JWQiCj4+ICB2ZmlvX2dldF9kZXZpY2UoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGludCBm bGFncywgdW5zaWduZWQgaW50IG51bV9yZWdpb25zLCB1bnNpZ25lZCBpbnQgbnVtX2lycXMpICJE ZXZpY2UgJXMgZmxhZ3M6ICV1LCByZWdpb25zOiAldSwgaXJxczogJXUiCj4+ICB2ZmlvX3B1dF9i YXNlX2RldmljZShpbnQgZmQpICJjbG9zZSB2ZGV2LT5mZD0lZCIKPj4gIAo+PiArIyBody92Zmlv L3BsYXRmb3JtLmMKPj4gK3ZmaW9fcGxhdGZvcm1fZW9pKGludCBwaW4sIGludCBmZCkgIkVPSSBJ UlEgcGluICVkIChmZD0lZCkiCj4+ICt2ZmlvX3BsYXRmb3JtX21tYXBfc2V0X2VuYWJsZWQoYm9v bCBlbmFibGVkKSAiZmFzdCBwYXRoID0gJWQiCj4+ICt2ZmlvX3BsYXRmb3JtX2ludHBfbW1hcF9l bmFibGUoaW50IHBpbikgIklSUSAjJWQgc3RpbGwgYWN0aXZlLCBzdGF5IGluIHNsb3cgcGF0aCIK Pj4gK3ZmaW9fcGxhdGZvcm1faW50cF9pbnRlcnJ1cHQoaW50IHBpbiwgaW50IGZkKSAiSGFuZGxl IElSUSAjJWQgKGZkID0gJWQpIgo+PiArdmZpb19wbGF0Zm9ybV9wb3B1bGF0ZV9pbnRlcnJ1cHRz KGludCBwaW4sIGludCBjb3VudCwgaW50IGZsYWdzKSAiLSBJUlEgaW5kZXggJWQ6IGNvdW50ICVk LCBmbGFncz0weCV4Igo+PiArdmZpb19wbGF0Zm9ybV9wb3B1bGF0ZV9yZWdpb25zKGludCByZWdp b25faW5kZXgsIHVuc2lnbmVkIGxvbmcgZmxhZywgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZmQs IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSAiLSByZWdpb24gJWQgZmxhZ3MgPSAweCVseCwgc2l6ZSA9 IDB4JWx4LCBmZD0gJWQsIG9mZnNldCA9IDB4JWx4Igo+PiArdmZpb19wbGF0Zm9ybV9iYXNlX2Rl dmljZV9pbml0KGNoYXIgKm5hbWUsIGludCBncm91cGlkKSAiJXMgYmVsb25ncyB0byBncm91cCAj JWQiCj4+ICt2ZmlvX3BsYXRmb3JtX3JlYWxpemUoY2hhciAqbmFtZSwgY2hhciAqY29tcGF0KSAi dmZpbyBkZXZpY2UgJXMsIGNvbXBhdCA9ICVzIgo+PiArdmZpb19pbnRwX2ludGVycnVwdF9zZXRf cGVuZGluZyhpbnQgaW5kZXgpICJpcnEgJWQgaXMgc2V0IFBFTkRJTkciCj4+ICt2ZmlvX3BsYXRm b3JtX2VvaV9oYW5kbGVfcGVuZGluZyhpbnQgaW5kZXgpICJoYW5kbGUgUEVORElORyBJUlEgJWQi Cj4+ICsKPj4gICNody9hY3BpL21lbW9yeV9ob3RwbHVnLmMKPj4gIG1ocF9hY3BpX2ludmFsaWRf c2xvdF9zZWxlY3RlZCh1aW50MzJfdCBzbG90KSAiMHglIlBSSXgzMgo+PiAgbWhwX2FjcGlfcmVh ZF9hZGRyX2xvKHVpbnQzMl90IHNsb3QsIHVpbnQzMl90IGFkZHIpICJzbG90WzB4JSJQUkl4MzIi XSBhZGRyIGxvOiAweCUiUFJJeDMyCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1 bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9r dm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53172) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YWLvT-00030s-6q for qemu-devel@nongnu.org; Fri, 13 Mar 2015 05:30:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YWLvP-0004IS-SZ for qemu-devel@nongnu.org; Fri, 13 Mar 2015 05:30:39 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:43332) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YWLvP-0004II-F0 for qemu-devel@nongnu.org; Fri, 13 Mar 2015 05:30:35 -0400 Received: by widem10 with SMTP id em10so4357313wid.2 for ; Fri, 13 Mar 2015 02:30:34 -0700 (PDT) Message-ID: <5502ADAD.9000808@linaro.org> Date: Fri, 13 Mar 2015 10:28:13 +0100 From: Eric Auger MIME-Version: 1.0 References: <1423799232-10816-1-git-send-email-eric.auger@linaro.org> <1423799232-10816-3-git-send-email-eric.auger@linaro.org> <87fva4ztzu.fsf@linaro.org> In-Reply-To: <87fva4ztzu.fsf@linaro.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v10 2/7] hw/vfio/platform: vfio-platform skeleton List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?QWxleCBCZW5uw6ll?= Cc: peter.maydell@linaro.org, eric.auger@st.com, patches@linaro.org, Kim Phillips , qemu-devel@nongnu.org, agraf@suse.de, alex.williamson@redhat.com, pbonzini@redhat.com, b.reynal@virtualopensystems.com, feng.wu@intel.com, kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org Hi Alex, Thank you for your review and the R-b on 5/7 & 7/7. Please apologize for the long delay in response, mostly due to my vacation :-( I took into account all the comments below Best Regards Eric On 02/17/2015 11:56 AM, Alex BennĂ©e wrote: > > Eric Auger writes: > >> Minimal VFIO platform implementation supporting register space >> user mapping but not IRQ assignment. >> >> Signed-off-by: Kim Phillips >> Signed-off-by: Eric Auger > > See comments inline. > > >> +/** >> + * vfio_populate_device - initialize MMIO region and IRQ >> + * @vbasedev: the VFIO device >> + * >> + * query the VFIO device for exposed MMIO regions and IRQ and >> + * populate the associated fields in the device struct >> + */ >> +static int vfio_populate_device(VFIODevice *vbasedev) >> +{ >> + struct vfio_region_info reg_info = { .argsz = sizeof(reg_info) }; > > This could be inside the for block. > >> + int i, ret = -1; >> + VFIOPlatformDevice *vdev = >> + container_of(vbasedev, VFIOPlatformDevice, vbasedev); >> + >> + if (!(vbasedev->flags & VFIO_DEVICE_FLAGS_PLATFORM)) { >> + error_report("vfio: Um, this isn't a platform device"); >> + goto error; >> + } >> + >> + vdev->regions = g_malloc0(sizeof(VFIORegion *) * >> vbasedev->num_regions); > > I may have considered a g_malloc0_n but I see that's not actually used > in the rest of the code (newer glib?). > >> + >> + for (i = 0; i < vbasedev->num_regions; i++) { >> + vdev->regions[i] = g_malloc0(sizeof(VFIORegion)); > > An intermediate VFIORegion *ptr here would have saved a bunch of typing > later on ;-) > >> + reg_info.index = i; >> + ret = ioctl(vbasedev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); >> + if (ret) { >> + error_report("vfio: Error getting region %d info: %m", i); >> + goto error; >> + } >> + vdev->regions[i]->flags = reg_info.flags; >> + vdev->regions[i]->size = reg_info.size; >> + vdev->regions[i]->fd_offset = reg_info.offset; >> + vdev->regions[i]->nr = i; >> + vdev->regions[i]->vbasedev = vbasedev; >> + >> + trace_vfio_platform_populate_regions(vdev->regions[i]->nr, >> + (unsigned long)vdev->regions[i]->flags, >> + (unsigned long)vdev->regions[i]->size, >> + vdev->regions[i]->vbasedev->fd, >> + (unsigned long)vdev->regions[i]->fd_offset); >> + } >> + >> + return 0; >> +error: >> + for (i = 0; i < vbasedev->num_regions; i++) { >> + g_free(vdev->regions[i]); >> + } >> + g_free(vdev->regions); >> + return ret; >> +} >> + >> +/* specialized functions ofr VFIO Platform devices */ >> +static VFIODeviceOps vfio_platform_ops = { >> + .vfio_compute_needs_reset = vfio_platform_compute_needs_reset, >> + .vfio_hot_reset_multi = vfio_platform_hot_reset_multi, >> + .vfio_populate_device = vfio_populate_device, >> +}; >> + >> +/** >> + * vfio_base_device_init - implements some of the VFIO mechanics >> + * @vbasedev: the VFIO device >> + * >> + * retrieves the group the device belongs to and get the device fd >> + * returns the VFIO device fd >> + * precondition: the device name must be initialized >> + */ >> +static int vfio_base_device_init(VFIODevice *vbasedev) >> +{ >> + VFIOGroup *group; >> + VFIODevice *vbasedev_iter; >> + char path[PATH_MAX], iommu_group_path[PATH_MAX], *group_name; >> + ssize_t len; >> + struct stat st; >> + int groupid; >> + int ret; >> + >> + /* name must be set prior to the call */ >> + if (!vbasedev->name) { >> + return -EINVAL; >> + } >> + >> + /* Check that the host device exists */ >> + snprintf(path, sizeof(path), "/sys/bus/platform/devices/%s/", >> + vbasedev->name); >> + >> + if (stat(path, &st) < 0) { >> + error_report("vfio: error: no such host device: %s", path); >> + return -errno; >> + } >> + >> + strncat(path, "iommu_group", sizeof(path) - strlen(path) - 1); > > Consider g_strlcat which has nicer max length semantics. > >> + len = readlink(path, iommu_group_path, sizeof(path)); >> + if (len <= 0 || len >= sizeof(path)) { > > readlink should never report more than sizeof(path) although that will > indicate a ENAMETOOLONG. > >> + error_report("vfio: error no iommu_group for device"); >> + return len < 0 ? -errno : ENAMETOOLONG; >> + } >> + >> + iommu_group_path[len] = 0; >> + group_name = basename(iommu_group_path); >> + >> + if (sscanf(group_name, "%d", &groupid) != 1) { >> + error_report("vfio: error reading %s: %m", path); >> + return -errno; >> + } >> + >> + trace_vfio_platform_base_device_init(vbasedev->name, groupid); >> + >> + group = vfio_get_group(groupid, &address_space_memory); >> + if (!group) { >> + error_report("vfio: failed to get group %d", groupid); >> + return -ENOENT; >> + } >> + >> + snprintf(path, sizeof(path), "%s", vbasedev->name); >> + >> + QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { >> + if (strcmp(vbasedev_iter->name, vbasedev->name) == 0) { >> + error_report("vfio: error: device %s is already attached", path); >> + vfio_put_group(group); >> + return -EBUSY; >> + } >> + } >> + ret = vfio_get_device(group, path, vbasedev); >> + if (ret) { >> + error_report("vfio: failed to get device %s", path); >> + vfio_put_group(group); >> + } >> + return ret; >> +} >> + >> +/** >> + * vfio_map_region - initialize the 2 mr (mmapped on ops) for a >> + * given index >> + * @vdev: the VFIO platform device >> + * @nr: the index of the region >> + * >> + * init the top memory region and the mmapped memroy region beneath >> + * VFIOPlatformDevice is used since VFIODevice is not a QOM Object >> + * and could not be passed to memory region functions >> +*/ >> +static void vfio_map_region(VFIOPlatformDevice *vdev, int nr) >> +{ >> + VFIORegion *region = vdev->regions[nr]; >> + unsigned size = region->size; >> + char name[64]; >> + >> + if (!size) { >> + return; >> + } >> + >> + snprintf(name, sizeof(name), "VFIO %s region %d", >> + vdev->vbasedev.name, nr); >> + >> + /* A "slow" read/write mapping underlies all regions */ >> + memory_region_init_io(®ion->mem, OBJECT(vdev), &vfio_region_ops, >> + region, name, size); >> + >> + strncat(name, " mmap", sizeof(name) - strlen(name) - 1); > > again consider g_strlcat > >> + >> + if (vfio_mmap_region(OBJECT(vdev), region, ®ion->mem, >> + ®ion->mmap_mem, ®ion->mmap, size, 0, name)) { >> + error_report("%s unsupported. Performance may be slow", name); >> + } >> +} >> + >> +/** >> + * vfio_platform_realize - the device realize function >> + * @dev: device state pointer >> + * @errp: error >> + * >> + * initialize the device, its memory regions and IRQ structures >> + * IRQ are started separately >> + */ >> +static void vfio_platform_realize(DeviceState *dev, Error **errp) >> +{ >> + VFIOPlatformDevice *vdev = VFIO_PLATFORM_DEVICE(dev); >> + SysBusDevice *sbdev = SYS_BUS_DEVICE(dev); >> + VFIODevice *vbasedev = &vdev->vbasedev; >> + int i, ret; >> + >> + vbasedev->type = VFIO_DEVICE_TYPE_PLATFORM; >> + vbasedev->ops = &vfio_platform_ops; >> + >> + trace_vfio_platform_realize(vbasedev->name, vdev->compat); >> + >> + ret = vfio_base_device_init(vbasedev); >> + if (ret) { >> + error_setg(errp, "vfio: vfio_base_device_init failed for %s", >> + vbasedev->name); >> + return; >> + } >> + >> + for (i = 0; i < vbasedev->num_regions; i++) { >> + vfio_map_region(vdev, i); >> + sysbus_init_mmio(sbdev, &vdev->regions[i]->mem); >> + } >> +} >> + >> +static const VMStateDescription vfio_platform_vmstate = { >> + .name = TYPE_VFIO_PLATFORM, >> + .unmigratable = 1, >> +}; >> + >> +static Property vfio_platform_dev_properties[] = { >> + DEFINE_PROP_STRING("host", VFIOPlatformDevice, vbasedev.name), >> + DEFINE_PROP_END_OF_LIST(), >> +}; >> + >> +static void vfio_platform_class_init(ObjectClass *klass, void *data) >> +{ >> + DeviceClass *dc = DEVICE_CLASS(klass); >> + >> + dc->realize = vfio_platform_realize; >> + dc->props = vfio_platform_dev_properties; >> + dc->vmsd = &vfio_platform_vmstate; >> + dc->desc = "VFIO-based platform device assignment"; >> + set_bit(DEVICE_CATEGORY_MISC, dc->categories); >> +} >> + >> +static const TypeInfo vfio_platform_dev_info = { >> + .name = TYPE_VFIO_PLATFORM, >> + .parent = TYPE_SYS_BUS_DEVICE, >> + .instance_size = sizeof(VFIOPlatformDevice), >> + .class_init = vfio_platform_class_init, >> + .class_size = sizeof(VFIOPlatformDeviceClass), >> + .abstract = true, >> +}; >> + >> +static void register_vfio_platform_dev_type(void) >> +{ >> + type_register_static(&vfio_platform_dev_info); >> +} >> + >> +type_init(register_vfio_platform_dev_type) >> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h >> index 5f3679b..2d1d8b3 100644 >> --- a/include/hw/vfio/vfio-common.h >> +++ b/include/hw/vfio/vfio-common.h >> @@ -43,6 +43,7 @@ >> >> enum { >> VFIO_DEVICE_TYPE_PCI = 0, >> + VFIO_DEVICE_TYPE_PLATFORM = 1, >> }; >> >> typedef struct VFIORegion { >> diff --git a/include/hw/vfio/vfio-platform.h b/include/hw/vfio/vfio-platform.h >> new file mode 100644 >> index 0000000..338f0c6 >> --- /dev/null >> +++ b/include/hw/vfio/vfio-platform.h >> @@ -0,0 +1,44 @@ >> +/* >> + * vfio based device assignment support - platform devices >> + * >> + * Copyright Linaro Limited, 2014 >> + * >> + * Authors: >> + * Kim Phillips >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2. See >> + * the COPYING file in the top-level directory. >> + * >> + * Based on vfio based PCI device assignment support: >> + * Copyright Red Hat, Inc. 2012 >> + */ >> + >> +#ifndef HW_VFIO_VFIO_PLATFORM_H >> +#define HW_VFIO_VFIO_PLATFORM_H >> + >> +#include "hw/sysbus.h" >> +#include "hw/vfio/vfio-common.h" >> + >> +#define TYPE_VFIO_PLATFORM "vfio-platform" >> + >> +typedef struct VFIOPlatformDevice { >> + SysBusDevice sbdev; >> + VFIODevice vbasedev; /* not a QOM object */ >> + VFIORegion **regions; >> + char *compat; /* compatibility string */ >> +} VFIOPlatformDevice; >> + >> +typedef struct VFIOPlatformDeviceClass { >> + /*< private >*/ >> + SysBusDeviceClass parent_class; >> + /*< public >*/ >> +} VFIOPlatformDeviceClass; >> + >> +#define VFIO_PLATFORM_DEVICE(obj) \ >> + OBJECT_CHECK(VFIOPlatformDevice, (obj), TYPE_VFIO_PLATFORM) >> +#define VFIO_PLATFORM_DEVICE_CLASS(klass) \ >> + OBJECT_CLASS_CHECK(VFIOPlatformDeviceClass, (klass), TYPE_VFIO_PLATFORM) >> +#define VFIO_PLATFORM_DEVICE_GET_CLASS(obj) \ >> + OBJECT_GET_CLASS(VFIOPlatformDeviceClass, (obj), TYPE_VFIO_PLATFORM) >> + >> +#endif /*HW_VFIO_VFIO_PLATFORM_H*/ >> diff --git a/trace-events b/trace-events >> index f87b077..d3685c9 100644 >> --- a/trace-events >> +++ b/trace-events >> @@ -1556,6 +1556,18 @@ vfio_put_group(int fd) "close group->fd=%d" >> vfio_get_device(const char * name, unsigned int flags, unsigned int num_regions, unsigned int num_irqs) "Device %s flags: %u, regions: %u, irqs: %u" >> vfio_put_base_device(int fd) "close vdev->fd=%d" >> >> +# hw/vfio/platform.c >> +vfio_platform_eoi(int pin, int fd) "EOI IRQ pin %d (fd=%d)" >> +vfio_platform_mmap_set_enabled(bool enabled) "fast path = %d" >> +vfio_platform_intp_mmap_enable(int pin) "IRQ #%d still active, stay in slow path" >> +vfio_platform_intp_interrupt(int pin, int fd) "Handle IRQ #%d (fd = %d)" >> +vfio_platform_populate_interrupts(int pin, int count, int flags) "- IRQ index %d: count %d, flags=0x%x" >> +vfio_platform_populate_regions(int region_index, unsigned long flag, unsigned long size, int fd, unsigned long offset) "- region %d flags = 0x%lx, size = 0x%lx, fd= %d, offset = 0x%lx" >> +vfio_platform_base_device_init(char *name, int groupid) "%s belongs to group #%d" >> +vfio_platform_realize(char *name, char *compat) "vfio device %s, compat = %s" >> +vfio_intp_interrupt_set_pending(int index) "irq %d is set PENDING" >> +vfio_platform_eoi_handle_pending(int index) "handle PENDING IRQ %d" >> + >> #hw/acpi/memory_hotplug.c >> mhp_acpi_invalid_slot_selected(uint32_t slot) "0x%"PRIx32 >> mhp_acpi_read_addr_lo(uint32_t slot, uint32_t addr) "slot[0x%"PRIx32"] addr lo: 0x%"PRIx32 >