From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v10 2/7] hw/vfio/platform: vfio-platform skeleton Date: Tue, 17 Feb 2015 10:56:37 +0000 Message-ID: <87fva4ztzu.fsf@linaro.org> References: <1423799232-10816-1-git-send-email-eric.auger@linaro.org> <1423799232-10816-3-git-send-email-eric.auger@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 4676E45CB7 for ; Tue, 17 Feb 2015 05:51:18 -0500 (EST) 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 dS-BrZpgLfdi for ; Tue, 17 Feb 2015 05:51:16 -0500 (EST) Received: from socrates.bennee.com (static.88-198-71-155.clients.your-server.de [88.198.71.155]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 907F545CA5 for ; Tue, 17 Feb 2015 05:51:16 -0500 (EST) In-reply-to: <1423799232-10816-3-git-send-email-eric.auger@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: Eric Auger 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 CkVyaWMgQXVnZXIgPGVyaWMuYXVnZXJAbGluYXJvLm9yZz4gd3JpdGVzOgoKPiBNaW5pbWFsIFZG SU8gcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gc3VwcG9ydGluZyByZWdpc3RlciBzcGFjZQo+IHVz ZXIgbWFwcGluZyBidXQgbm90IElSUSBhc3NpZ25tZW50Lgo+Cj4gU2lnbmVkLW9mZi1ieTogS2lt IFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAbGluYXJvLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBFcmlj IEF1Z2VyIDxlcmljLmF1Z2VyQGxpbmFyby5vcmc+CgpTZWUgY29tbWVudHMgaW5saW5lLgoKPHNu aXA+Cj4gKy8qKgo+ICsgKiB2ZmlvX3BvcHVsYXRlX2RldmljZSAtIGluaXRpYWxpemUgTU1JTyBy ZWdpb24gYW5kIElSUQo+ICsgKiBAdmJhc2VkZXY6IHRoZSBWRklPIGRldmljZQo+ICsgKgo+ICsg KiBxdWVyeSB0aGUgVkZJTyBkZXZpY2UgZm9yIGV4cG9zZWQgTU1JTyByZWdpb25zIGFuZCBJUlEg YW5kCj4gKyAqIHBvcHVsYXRlIHRoZSBhc3NvY2lhdGVkIGZpZWxkcyBpbiB0aGUgZGV2aWNlIHN0 cnVjdAo+ICsgKi8KPiArc3RhdGljIGludCB2ZmlvX3BvcHVsYXRlX2RldmljZShWRklPRGV2aWNl ICp2YmFzZWRldikKPiArewo+ICsgICAgc3RydWN0IHZmaW9fcmVnaW9uX2luZm8gcmVnX2luZm8g PSB7IC5hcmdzeiA9IHNpemVvZihyZWdfaW5mbykgfTsKClRoaXMgY291bGQgYmUgaW5zaWRlIHRo ZSBmb3IgYmxvY2suCgo+ICsgICAgaW50IGksIHJldCA9IC0xOwo+ICsgICAgVkZJT1BsYXRmb3Jt RGV2aWNlICp2ZGV2ID0KPiArICAgICAgICBjb250YWluZXJfb2YodmJhc2VkZXYsIFZGSU9QbGF0 Zm9ybURldmljZSwgdmJhc2VkZXYpOwo+ICsKPiArICAgIGlmICghKHZiYXNlZGV2LT5mbGFncyAm IFZGSU9fREVWSUNFX0ZMQUdTX1BMQVRGT1JNKSkgewo+ICsgICAgICAgIGVycm9yX3JlcG9ydCgi dmZpbzogVW0sIHRoaXMgaXNuJ3QgYSBwbGF0Zm9ybSBkZXZpY2UiKTsKPiArICAgICAgICBnb3Rv IGVycm9yOwo+ICsgICAgfQo+ICsKPiArICAgIHZkZXYtPnJlZ2lvbnMgPSBnX21hbGxvYzAoc2l6 ZW9mKFZGSU9SZWdpb24gKikgKgo+IHZiYXNlZGV2LT5udW1fcmVnaW9ucyk7CgpJIG1heSBoYXZl IGNvbnNpZGVyZWQgYSBnX21hbGxvYzBfbiBidXQgSSBzZWUgdGhhdCdzIG5vdCBhY3R1YWxseSB1 c2VkCmluIHRoZSByZXN0IG9mIHRoZSBjb2RlIChuZXdlciBnbGliPykuCgo+ICsKPiArICAgIGZv ciAoaSA9IDA7IGkgPCB2YmFzZWRldi0+bnVtX3JlZ2lvbnM7IGkrKykgewo+ICsgICAgICAgIHZk ZXYtPnJlZ2lvbnNbaV0gPSBnX21hbGxvYzAoc2l6ZW9mKFZGSU9SZWdpb24pKTsKCkFuIGludGVy bWVkaWF0ZSBWRklPUmVnaW9uICpwdHIgaGVyZSB3b3VsZCBoYXZlIHNhdmVkIGEgYnVuY2ggb2Yg dHlwaW5nCmxhdGVyIG9uIDstKSAKCj4gKyAgICAgICAgcmVnX2luZm8uaW5kZXggPSBpOwo+ICsg ICAgICAgIHJldCA9IGlvY3RsKHZiYXNlZGV2LT5mZCwgVkZJT19ERVZJQ0VfR0VUX1JFR0lPTl9J TkZPLCAmcmVnX2luZm8pOwo+ICsgICAgICAgIGlmIChyZXQpIHsKPiArICAgICAgICAgICAgZXJy b3JfcmVwb3J0KCJ2ZmlvOiBFcnJvciBnZXR0aW5nIHJlZ2lvbiAlZCBpbmZvOiAlbSIsIGkpOwo+ ICsgICAgICAgICAgICBnb3RvIGVycm9yOwo+ICsgICAgICAgIH0KPiArICAgICAgICB2ZGV2LT5y ZWdpb25zW2ldLT5mbGFncyA9IHJlZ19pbmZvLmZsYWdzOwo+ICsgICAgICAgIHZkZXYtPnJlZ2lv bnNbaV0tPnNpemUgPSByZWdfaW5mby5zaXplOwo+ICsgICAgICAgIHZkZXYtPnJlZ2lvbnNbaV0t PmZkX29mZnNldCA9IHJlZ19pbmZvLm9mZnNldDsKPiArICAgICAgICB2ZGV2LT5yZWdpb25zW2ld LT5uciA9IGk7Cj4gKyAgICAgICAgdmRldi0+cmVnaW9uc1tpXS0+dmJhc2VkZXYgPSB2YmFzZWRl djsKPiArCj4gKyAgICAgICAgdHJhY2VfdmZpb19wbGF0Zm9ybV9wb3B1bGF0ZV9yZWdpb25zKHZk ZXYtPnJlZ2lvbnNbaV0tPm5yLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGxvbmcpdmRldi0+cmVnaW9uc1tpXS0+ZmxhZ3MsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodW5zaWduZWQgbG9uZyl2ZGV2LT5yZWdpb25zW2ldLT5zaXplLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmRldi0+cmVnaW9uc1tpXS0+dmJhc2VkZXYtPmZkLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdmRldi0+cmVnaW9uc1tp XS0+ZmRfb2Zmc2V0KTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArZXJyb3I6Cj4g KyAgICBmb3IgKGkgPSAwOyBpIDwgdmJhc2VkZXYtPm51bV9yZWdpb25zOyBpKyspIHsKPiArICAg ICAgICBnX2ZyZWUodmRldi0+cmVnaW9uc1tpXSk7Cj4gKyAgICB9Cj4gKyAgICBnX2ZyZWUodmRl di0+cmVnaW9ucyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBzcGVjaWFsaXpl ZCBmdW5jdGlvbnMgb2ZyIFZGSU8gUGxhdGZvcm0gZGV2aWNlcyAqLwo+ICtzdGF0aWMgVkZJT0Rl dmljZU9wcyB2ZmlvX3BsYXRmb3JtX29wcyA9IHsKPiArICAgIC52ZmlvX2NvbXB1dGVfbmVlZHNf cmVzZXQgPSB2ZmlvX3BsYXRmb3JtX2NvbXB1dGVfbmVlZHNfcmVzZXQsCj4gKyAgICAudmZpb19o b3RfcmVzZXRfbXVsdGkgPSB2ZmlvX3BsYXRmb3JtX2hvdF9yZXNldF9tdWx0aSwKPiArICAgIC52 ZmlvX3BvcHVsYXRlX2RldmljZSA9IHZmaW9fcG9wdWxhdGVfZGV2aWNlLAo+ICt9Owo+ICsKPiAr LyoqCj4gKyAqIHZmaW9fYmFzZV9kZXZpY2VfaW5pdCAtIGltcGxlbWVudHMgc29tZSBvZiB0aGUg VkZJTyBtZWNoYW5pY3MKPiArICogQHZiYXNlZGV2OiB0aGUgVkZJTyBkZXZpY2UKPiArICoKPiAr ICogcmV0cmlldmVzIHRoZSBncm91cCB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8gYW5kIGdldCB0aGUg ZGV2aWNlIGZkCj4gKyAqIHJldHVybnMgdGhlIFZGSU8gZGV2aWNlIGZkCj4gKyAqIHByZWNvbmRp dGlvbjogdGhlIGRldmljZSBuYW1lIG11c3QgYmUgaW5pdGlhbGl6ZWQKPiArICovCj4gK3N0YXRp YyBpbnQgdmZpb19iYXNlX2RldmljZV9pbml0KFZGSU9EZXZpY2UgKnZiYXNlZGV2KQo+ICt7Cj4g KyAgICBWRklPR3JvdXAgKmdyb3VwOwo+ICsgICAgVkZJT0RldmljZSAqdmJhc2VkZXZfaXRlcjsK PiArICAgIGNoYXIgcGF0aFtQQVRIX01BWF0sIGlvbW11X2dyb3VwX3BhdGhbUEFUSF9NQVhdLCAq Z3JvdXBfbmFtZTsKPiArICAgIHNzaXplX3QgbGVuOwo+ICsgICAgc3RydWN0IHN0YXQgc3Q7Cj4g KyAgICBpbnQgZ3JvdXBpZDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgLyogbmFtZSBtdXN0 IGJlIHNldCBwcmlvciB0byB0aGUgY2FsbCAqLwo+ICsgICAgaWYgKCF2YmFzZWRldi0+bmFtZSkg ewo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIENoZWNr IHRoYXQgdGhlIGhvc3QgZGV2aWNlIGV4aXN0cyAqLwo+ICsgICAgc25wcmludGYocGF0aCwgc2l6 ZW9mKHBhdGgpLCAiL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy8lcy8iLAo+ICsgICAgICAgICAg ICAgdmJhc2VkZXYtPm5hbWUpOwo+ICsKPiArICAgIGlmIChzdGF0KHBhdGgsICZzdCkgPCAwKSB7 Cj4gKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2ZmlvOiBlcnJvcjogbm8gc3VjaCBob3N0IGRldmlj ZTogJXMiLCBwYXRoKTsKPiArICAgICAgICByZXR1cm4gLWVycm5vOwo+ICsgICAgfQo+ICsKPiAr ICAgIHN0cm5jYXQocGF0aCwgImlvbW11X2dyb3VwIiwgc2l6ZW9mKHBhdGgpIC0gc3RybGVuKHBh dGgpIC0gMSk7CgpDb25zaWRlciBnX3N0cmxjYXQgd2hpY2ggaGFzIG5pY2VyIG1heCBsZW5ndGgg c2VtYW50aWNzLgoKPiArICAgIGxlbiA9IHJlYWRsaW5rKHBhdGgsIGlvbW11X2dyb3VwX3BhdGgs IHNpemVvZihwYXRoKSk7Cj4gKyAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IHNpemVvZihwYXRo KSkgewoKcmVhZGxpbmsgc2hvdWxkIG5ldmVyIHJlcG9ydCBtb3JlIHRoYW4gc2l6ZW9mKHBhdGgp IGFsdGhvdWdoIHRoYXQgd2lsbAppbmRpY2F0ZSBhIEVOQU1FVE9PTE9ORy4KCj4gKyAgICAgICAg ZXJyb3JfcmVwb3J0KCJ2ZmlvOiBlcnJvciBubyBpb21tdV9ncm91cCBmb3IgZGV2aWNlIik7Cj4g KyAgICAgICAgcmV0dXJuIGxlbiA8IDAgPyAtZXJybm8gOiBFTkFNRVRPT0xPTkc7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaW9tbXVfZ3JvdXBfcGF0aFtsZW5dID0gMDsKPiArICAgIGdyb3VwX25hbWUg PSBiYXNlbmFtZShpb21tdV9ncm91cF9wYXRoKTsKPiArCj4gKyAgICBpZiAoc3NjYW5mKGdyb3Vw X25hbWUsICIlZCIsICZncm91cGlkKSAhPSAxKSB7Cj4gKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2 ZmlvOiBlcnJvciByZWFkaW5nICVzOiAlbSIsIHBhdGgpOwo+ICsgICAgICAgIHJldHVybiAtZXJy bm87Cj4gKyAgICB9Cj4gKwo+ICsgICAgdHJhY2VfdmZpb19wbGF0Zm9ybV9iYXNlX2RldmljZV9p bml0KHZiYXNlZGV2LT5uYW1lLCBncm91cGlkKTsKPiArCj4gKyAgICBncm91cCA9IHZmaW9fZ2V0 X2dyb3VwKGdyb3VwaWQsICZhZGRyZXNzX3NwYWNlX21lbW9yeSk7Cj4gKyAgICBpZiAoIWdyb3Vw KSB7Cj4gKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2ZmlvOiBmYWlsZWQgdG8gZ2V0IGdyb3VwICVk IiwgZ3JvdXBpZCk7Cj4gKyAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMiLCB2YmFzZWRldi0+bmFtZSk7Cj4g Kwo+ICsgICAgUUxJU1RfRk9SRUFDSCh2YmFzZWRldl9pdGVyLCAmZ3JvdXAtPmRldmljZV9saXN0 LCBuZXh0KSB7Cj4gKyAgICAgICAgaWYgKHN0cmNtcCh2YmFzZWRldl9pdGVyLT5uYW1lLCB2YmFz ZWRldi0+bmFtZSkgPT0gMCkgewo+ICsgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInZmaW86IGVy cm9yOiBkZXZpY2UgJXMgaXMgYWxyZWFkeSBhdHRhY2hlZCIsIHBhdGgpOwo+ICsgICAgICAgICAg ICB2ZmlvX3B1dF9ncm91cChncm91cCk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgcmV0ID0gdmZpb19nZXRfZGV2aWNlKGdyb3VwLCBw YXRoLCB2YmFzZWRldik7Cj4gKyAgICBpZiAocmV0KSB7Cj4gKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJ2ZmlvOiBmYWlsZWQgdG8gZ2V0IGRldmljZSAlcyIsIHBhdGgpOwo+ICsgICAgICAgIHZmaW9f cHV0X2dyb3VwKGdyb3VwKTsKPiArICAgIH0KPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiB2ZmlvX21hcF9yZWdpb24gLSBpbml0aWFsaXplIHRoZSAyIG1yIChtbWFwcGVk IG9uIG9wcykgZm9yIGEKPiArICogZ2l2ZW4gaW5kZXgKPiArICogQHZkZXY6IHRoZSBWRklPIHBs YXRmb3JtIGRldmljZQo+ICsgKiBAbnI6IHRoZSBpbmRleCBvZiB0aGUgcmVnaW9uCj4gKyAqCj4g KyAqIGluaXQgdGhlIHRvcCBtZW1vcnkgcmVnaW9uIGFuZCB0aGUgbW1hcHBlZCBtZW1yb3kgcmVn aW9uIGJlbmVhdGgKPiArICogVkZJT1BsYXRmb3JtRGV2aWNlIGlzIHVzZWQgc2luY2UgVkZJT0Rl dmljZSBpcyBub3QgYSBRT00gT2JqZWN0Cj4gKyAqIGFuZCBjb3VsZCBub3QgYmUgcGFzc2VkIHRv IG1lbW9yeSByZWdpb24gZnVuY3Rpb25zCj4gKyovCj4gK3N0YXRpYyB2b2lkIHZmaW9fbWFwX3Jl Z2lvbihWRklPUGxhdGZvcm1EZXZpY2UgKnZkZXYsIGludCBucikKPiArewo+ICsgICAgVkZJT1Jl Z2lvbiAqcmVnaW9uID0gdmRldi0+cmVnaW9uc1tucl07Cj4gKyAgICB1bnNpZ25lZCBzaXplID0g cmVnaW9uLT5zaXplOwo+ICsgICAgY2hhciBuYW1lWzY0XTsKPiArCj4gKyAgICBpZiAoIXNpemUp IHsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgc25wcmludGYobmFtZSwg c2l6ZW9mKG5hbWUpLCAiVkZJTyAlcyByZWdpb24gJWQiLAo+ICsgICAgICAgICAgICAgdmRldi0+ dmJhc2VkZXYubmFtZSwgbnIpOwo+ICsKPiArICAgIC8qIEEgInNsb3ciIHJlYWQvd3JpdGUgbWFw cGluZyB1bmRlcmxpZXMgYWxsIHJlZ2lvbnMgKi8KPiArICAgIG1lbW9yeV9yZWdpb25faW5pdF9p bygmcmVnaW9uLT5tZW0sIE9CSkVDVCh2ZGV2KSwgJnZmaW9fcmVnaW9uX29wcywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICByZWdpb24sIG5hbWUsIHNpemUpOwo+ICsKPiArICAgIHN0cm5j YXQobmFtZSwgIiBtbWFwIiwgc2l6ZW9mKG5hbWUpIC0gc3RybGVuKG5hbWUpIC0gMSk7CgphZ2Fp biBjb25zaWRlciBnX3N0cmxjYXQKCj4gKwo+ICsgICAgaWYgKHZmaW9fbW1hcF9yZWdpb24oT0JK RUNUKHZkZXYpLCByZWdpb24sICZyZWdpb24tPm1lbSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICZyZWdpb24tPm1tYXBfbWVtLCAmcmVnaW9uLT5tbWFwLCBzaXplLCAwLCBuYW1lKSkgewo+ ICsgICAgICAgIGVycm9yX3JlcG9ydCgiJXMgdW5zdXBwb3J0ZWQuIFBlcmZvcm1hbmNlIG1heSBi ZSBzbG93IiwgbmFtZSk7Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB2ZmlvX3BsYXRm b3JtX3JlYWxpemUgIC0gdGhlIGRldmljZSByZWFsaXplIGZ1bmN0aW9uCj4gKyAqIEBkZXY6IGRl dmljZSBzdGF0ZSBwb2ludGVyCj4gKyAqIEBlcnJwOiBlcnJvcgo+ICsgKgo+ICsgKiBpbml0aWFs aXplIHRoZSBkZXZpY2UsIGl0cyBtZW1vcnkgcmVnaW9ucyBhbmQgSVJRIHN0cnVjdHVyZXMKPiAr ICogSVJRIGFyZSBzdGFydGVkIHNlcGFyYXRlbHkKPiArICovCj4gK3N0YXRpYyB2b2lkIHZmaW9f cGxhdGZvcm1fcmVhbGl6ZShEZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVycnApCj4gK3sKPiAr ICAgIFZGSU9QbGF0Zm9ybURldmljZSAqdmRldiA9IFZGSU9fUExBVEZPUk1fREVWSUNFKGRldik7 Cj4gKyAgICBTeXNCdXNEZXZpY2UgKnNiZGV2ID0gU1lTX0JVU19ERVZJQ0UoZGV2KTsKPiArICAg IFZGSU9EZXZpY2UgKnZiYXNlZGV2ID0gJnZkZXYtPnZiYXNlZGV2Owo+ICsgICAgaW50IGksIHJl dDsKPiArCj4gKyAgICB2YmFzZWRldi0+dHlwZSA9IFZGSU9fREVWSUNFX1RZUEVfUExBVEZPUk07 Cj4gKyAgICB2YmFzZWRldi0+b3BzID0gJnZmaW9fcGxhdGZvcm1fb3BzOwo+ICsKPiArICAgIHRy YWNlX3ZmaW9fcGxhdGZvcm1fcmVhbGl6ZSh2YmFzZWRldi0+bmFtZSwgdmRldi0+Y29tcGF0KTsK PiArCj4gKyAgICByZXQgPSB2ZmlvX2Jhc2VfZGV2aWNlX2luaXQodmJhc2VkZXYpOwo+ICsgICAg aWYgKHJldCkgewo+ICsgICAgICAgIGVycm9yX3NldGcoZXJycCwgInZmaW86IHZmaW9fYmFzZV9k ZXZpY2VfaW5pdCBmYWlsZWQgZm9yICVzIiwKPiArICAgICAgICAgICAgICAgICAgIHZiYXNlZGV2 LT5uYW1lKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpID0g MDsgaSA8IHZiYXNlZGV2LT5udW1fcmVnaW9uczsgaSsrKSB7Cj4gKyAgICAgICAgdmZpb19tYXBf cmVnaW9uKHZkZXYsIGkpOwo+ICsgICAgICAgIHN5c2J1c19pbml0X21taW8oc2JkZXYsICZ2ZGV2 LT5yZWdpb25zW2ldLT5tZW0pOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgVk1T dGF0ZURlc2NyaXB0aW9uIHZmaW9fcGxhdGZvcm1fdm1zdGF0ZSA9IHsKPiArICAgIC5uYW1lID0g VFlQRV9WRklPX1BMQVRGT1JNLAo+ICsgICAgLnVubWlncmF0YWJsZSA9IDEsCj4gK307Cj4gKwo+ ICtzdGF0aWMgUHJvcGVydHkgdmZpb19wbGF0Zm9ybV9kZXZfcHJvcGVydGllc1tdID0gewo+ICsg ICAgREVGSU5FX1BST1BfU1RSSU5HKCJob3N0IiwgVkZJT1BsYXRmb3JtRGV2aWNlLCB2YmFzZWRl di5uYW1lKSwKPiArICAgIERFRklORV9QUk9QX0VORF9PRl9MSVNUKCksCj4gK307Cj4gKwo+ICtz dGF0aWMgdm9pZCB2ZmlvX3BsYXRmb3JtX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNzLCB2 b2lkICpkYXRhKQo+ICt7Cj4gKyAgICBEZXZpY2VDbGFzcyAqZGMgPSBERVZJQ0VfQ0xBU1Moa2xh c3MpOwo+ICsKPiArICAgIGRjLT5yZWFsaXplID0gdmZpb19wbGF0Zm9ybV9yZWFsaXplOwo+ICsg ICAgZGMtPnByb3BzID0gdmZpb19wbGF0Zm9ybV9kZXZfcHJvcGVydGllczsKPiArICAgIGRjLT52 bXNkID0gJnZmaW9fcGxhdGZvcm1fdm1zdGF0ZTsKPiArICAgIGRjLT5kZXNjID0gIlZGSU8tYmFz ZWQgcGxhdGZvcm0gZGV2aWNlIGFzc2lnbm1lbnQiOwo+ICsgICAgc2V0X2JpdChERVZJQ0VfQ0FU RUdPUllfTUlTQywgZGMtPmNhdGVnb3JpZXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgVHlw ZUluZm8gdmZpb19wbGF0Zm9ybV9kZXZfaW5mbyA9IHsKPiArICAgIC5uYW1lID0gVFlQRV9WRklP X1BMQVRGT1JNLAo+ICsgICAgLnBhcmVudCA9IFRZUEVfU1lTX0JVU19ERVZJQ0UsCj4gKyAgICAu aW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihWRklPUGxhdGZvcm1EZXZpY2UpLAo+ICsgICAgLmNsYXNz X2luaXQgPSB2ZmlvX3BsYXRmb3JtX2NsYXNzX2luaXQsCj4gKyAgICAuY2xhc3Nfc2l6ZSA9IHNp emVvZihWRklPUGxhdGZvcm1EZXZpY2VDbGFzcyksCj4gKyAgICAuYWJzdHJhY3QgICA9IHRydWUs Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCByZWdpc3Rlcl92ZmlvX3BsYXRmb3JtX2Rldl90eXBl KHZvaWQpCj4gK3sKPiArICAgIHR5cGVfcmVnaXN0ZXJfc3RhdGljKCZ2ZmlvX3BsYXRmb3JtX2Rl dl9pbmZvKTsKPiArfQo+ICsKPiArdHlwZV9pbml0KHJlZ2lzdGVyX3ZmaW9fcGxhdGZvcm1fZGV2 X3R5cGUpCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcvdmZpby92ZmlvLWNvbW1vbi5oIGIvaW5j bHVkZS9ody92ZmlvL3ZmaW8tY29tbW9uLmgKPiBpbmRleCA1ZjM2NzliLi4yZDFkOGIzIDEwMDY0 NAo+IC0tLSBhL2luY2x1ZGUvaHcvdmZpby92ZmlvLWNvbW1vbi5oCj4gKysrIGIvaW5jbHVkZS9o dy92ZmlvL3ZmaW8tY29tbW9uLmgKPiBAQCAtNDMsNiArNDMsNyBAQAo+ICAKPiAgZW51bSB7Cj4g ICAgICBWRklPX0RFVklDRV9UWVBFX1BDSSA9IDAsCj4gKyAgICBWRklPX0RFVklDRV9UWVBFX1BM QVRGT1JNID0gMSwKPiAgfTsKPiAgCj4gIHR5cGVkZWYgc3RydWN0IFZGSU9SZWdpb24gewo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2h3L3ZmaW8vdmZpby1wbGF0Zm9ybS5oIGIvaW5jbHVkZS9ody92 ZmlvL3ZmaW8tcGxhdGZvcm0uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uMzM4ZjBjNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2h3L3ZmaW8vdmZpby1w bGF0Zm9ybS5oCj4gQEAgLTAsMCArMSw0NCBAQAo+ICsvKgo+ICsgKiB2ZmlvIGJhc2VkIGRldmlj ZSBhc3NpZ25tZW50IHN1cHBvcnQgLSBwbGF0Zm9ybSBkZXZpY2VzCj4gKyAqCj4gKyAqIENvcHly aWdodCBMaW5hcm8gTGltaXRlZCwgMjAxNAo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgS2lt IFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAbGluYXJvLm9yZz4KPiArICoKPiArICogVGhpcyB3b3Jr IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAg U2VlCj4gKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCj4g KyAqCj4gKyAqIEJhc2VkIG9uIHZmaW8gYmFzZWQgUENJIGRldmljZSBhc3NpZ25tZW50IHN1cHBv cnQ6Cj4gKyAqICBDb3B5cmlnaHQgUmVkIEhhdCwgSW5jLiAyMDEyCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBIV19WRklPX1ZGSU9fUExBVEZPUk1fSAo+ICsjZGVmaW5lIEhXX1ZGSU9fVkZJT19QTEFU Rk9STV9ICj4gKwo+ICsjaW5jbHVkZSAiaHcvc3lzYnVzLmgiCj4gKyNpbmNsdWRlICJody92Zmlv L3ZmaW8tY29tbW9uLmgiCj4gKwo+ICsjZGVmaW5lIFRZUEVfVkZJT19QTEFURk9STSAidmZpby1w bGF0Zm9ybSIKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZGSU9QbGF0Zm9ybURldmljZSB7Cj4gKyAg ICBTeXNCdXNEZXZpY2Ugc2JkZXY7Cj4gKyAgICBWRklPRGV2aWNlIHZiYXNlZGV2OyAvKiBub3Qg YSBRT00gb2JqZWN0ICovCj4gKyAgICBWRklPUmVnaW9uICoqcmVnaW9uczsKPiArICAgIGNoYXIg KmNvbXBhdDsgLyogY29tcGF0aWJpbGl0eSBzdHJpbmcgKi8KPiArfSBWRklPUGxhdGZvcm1EZXZp Y2U7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWRklPUGxhdGZvcm1EZXZpY2VDbGFzcyB7Cj4gKyAg ICAvKjwgcHJpdmF0ZSA+Ki8KPiArICAgIFN5c0J1c0RldmljZUNsYXNzIHBhcmVudF9jbGFzczsK PiArICAgIC8qPCBwdWJsaWMgPiovCj4gK30gVkZJT1BsYXRmb3JtRGV2aWNlQ2xhc3M7Cj4gKwo+ ICsjZGVmaW5lIFZGSU9fUExBVEZPUk1fREVWSUNFKG9iaikgXAo+ICsgICAgIE9CSkVDVF9DSEVD SyhWRklPUGxhdGZvcm1EZXZpY2UsIChvYmopLCBUWVBFX1ZGSU9fUExBVEZPUk0pCj4gKyNkZWZp bmUgVkZJT19QTEFURk9STV9ERVZJQ0VfQ0xBU1Moa2xhc3MpIFwKPiArICAgICBPQkpFQ1RfQ0xB U1NfQ0hFQ0soVkZJT1BsYXRmb3JtRGV2aWNlQ2xhc3MsIChrbGFzcyksIFRZUEVfVkZJT19QTEFU Rk9STSkKPiArI2RlZmluZSBWRklPX1BMQVRGT1JNX0RFVklDRV9HRVRfQ0xBU1Mob2JqKSBcCj4g KyAgICAgT0JKRUNUX0dFVF9DTEFTUyhWRklPUGxhdGZvcm1EZXZpY2VDbGFzcywgKG9iaiksIFRZ UEVfVkZJT19QTEFURk9STSkKPiArCj4gKyNlbmRpZiAvKkhXX1ZGSU9fVkZJT19QTEFURk9STV9I Ki8KPiBkaWZmIC0tZ2l0IGEvdHJhY2UtZXZlbnRzIGIvdHJhY2UtZXZlbnRzCj4gaW5kZXggZjg3 YjA3Ny4uZDM2ODVjOSAxMDA2NDQKPiAtLS0gYS90cmFjZS1ldmVudHMKPiArKysgYi90cmFjZS1l dmVudHMKPiBAQCAtMTU1Niw2ICsxNTU2LDE4IEBAIHZmaW9fcHV0X2dyb3VwKGludCBmZCkgImNs b3NlIGdyb3VwLT5mZD0lZCIKPiAgdmZpb19nZXRfZGV2aWNlKGNvbnN0IGNoYXIgKiBuYW1lLCB1 bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgdW5zaWduZWQgaW50 IG51bV9pcnFzKSAiRGV2aWNlICVzIGZsYWdzOiAldSwgcmVnaW9uczogJXUsIGlycXM6ICV1Igo+ ICB2ZmlvX3B1dF9iYXNlX2RldmljZShpbnQgZmQpICJjbG9zZSB2ZGV2LT5mZD0lZCIKPiAgCj4g KyMgaHcvdmZpby9wbGF0Zm9ybS5jCj4gK3ZmaW9fcGxhdGZvcm1fZW9pKGludCBwaW4sIGludCBm ZCkgIkVPSSBJUlEgcGluICVkIChmZD0lZCkiCj4gK3ZmaW9fcGxhdGZvcm1fbW1hcF9zZXRfZW5h YmxlZChib29sIGVuYWJsZWQpICJmYXN0IHBhdGggPSAlZCIKPiArdmZpb19wbGF0Zm9ybV9pbnRw X21tYXBfZW5hYmxlKGludCBwaW4pICJJUlEgIyVkIHN0aWxsIGFjdGl2ZSwgc3RheSBpbiBzbG93 IHBhdGgiCj4gK3ZmaW9fcGxhdGZvcm1faW50cF9pbnRlcnJ1cHQoaW50IHBpbiwgaW50IGZkKSAi SGFuZGxlIElSUSAjJWQgKGZkID0gJWQpIgo+ICt2ZmlvX3BsYXRmb3JtX3BvcHVsYXRlX2ludGVy cnVwdHMoaW50IHBpbiwgaW50IGNvdW50LCBpbnQgZmxhZ3MpICItIElSUSBpbmRleCAlZDogY291 bnQgJWQsIGZsYWdzPTB4JXgiCj4gK3ZmaW9fcGxhdGZvcm1fcG9wdWxhdGVfcmVnaW9ucyhpbnQg cmVnaW9uX2luZGV4LCB1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50 IGZkLCB1bnNpZ25lZCBsb25nIG9mZnNldCkgIi0gcmVnaW9uICVkIGZsYWdzID0gMHglbHgsIHNp emUgPSAweCVseCwgZmQ9ICVkLCBvZmZzZXQgPSAweCVseCIKPiArdmZpb19wbGF0Zm9ybV9iYXNl X2RldmljZV9pbml0KGNoYXIgKm5hbWUsIGludCBncm91cGlkKSAiJXMgYmVsb25ncyB0byBncm91 cCAjJWQiCj4gK3ZmaW9fcGxhdGZvcm1fcmVhbGl6ZShjaGFyICpuYW1lLCBjaGFyICpjb21wYXQp ICJ2ZmlvIGRldmljZSAlcywgY29tcGF0ID0gJXMiCj4gK3ZmaW9faW50cF9pbnRlcnJ1cHRfc2V0 X3BlbmRpbmcoaW50IGluZGV4KSAiaXJxICVkIGlzIHNldCBQRU5ESU5HIgo+ICt2ZmlvX3BsYXRm b3JtX2VvaV9oYW5kbGVfcGVuZGluZyhpbnQgaW5kZXgpICJoYW5kbGUgUEVORElORyBJUlEgJWQi Cj4gKwo+ICAjaHcvYWNwaS9tZW1vcnlfaG90cGx1Zy5jCj4gIG1ocF9hY3BpX2ludmFsaWRfc2xv dF9zZWxlY3RlZCh1aW50MzJfdCBzbG90KSAiMHglIlBSSXgzMgo+ICBtaHBfYWNwaV9yZWFkX2Fk ZHJfbG8odWludDMyX3Qgc2xvdCwgdWludDMyX3QgYWRkcikgInNsb3RbMHglIlBSSXgzMiJdIGFk ZHIgbG86IDB4JSJQUkl4MzIKCi0tIApBbGV4IEJlbm7DqWUKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18Ka3ZtYXJtIG1haWxpbmcgbGlzdAprdm1hcm1AbGlz dHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBzOi8vbGlzdHMuY3MuY29sdW1iaWEuZWR1L21haWxtYW4v bGlzdGluZm8va3ZtYXJtCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42275) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNfpe-0005yo-2X for qemu-devel@nongnu.org; Tue, 17 Feb 2015 05:56:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YNfpa-0000cU-Qu for qemu-devel@nongnu.org; Tue, 17 Feb 2015 05:56:46 -0500 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:40725 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNfpa-0000Za-Gm for qemu-devel@nongnu.org; Tue, 17 Feb 2015 05:56:42 -0500 References: <1423799232-10816-1-git-send-email-eric.auger@linaro.org> <1423799232-10816-3-git-send-email-eric.auger@linaro.org> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1423799232-10816-3-git-send-email-eric.auger@linaro.org> Date: Tue, 17 Feb 2015 10:56:37 +0000 Message-ID: <87fva4ztzu.fsf@linaro.org> MIME-Version: 1.0 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: Eric Auger 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 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 -- Alex BennĂ©e