From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [Intel-gfx] [PATCH v4 1/2] drm: Use srcu to protect drm_device.unplugged Date: Wed, 28 Mar 2018 09:20:12 +0200 Message-ID: <20180328072012.GD14155@phenom.ffwll.local> References: <1522219661-26827-1-git-send-email-andr2000@gmail.com> <1522219661-26827-2-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75F606E141 for ; Wed, 28 Mar 2018 07:20:16 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id h76so2899953wme.4 for ; Wed, 28 Mar 2018 00:20:16 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1522219661-26827-2-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, konrad.wilk@oracle.com, airlied@linux.ie, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXIgMjgsIDIwMTggYXQgMDk6NDc6NDBBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gRnJvbTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5v cmc+Cj4gCj4gVXNlIHNyY3UgdG8gcHJvdGVjdCBkcm1fZGV2aWNlLnVucGx1Z2dlZCBpbiBhIHJh Y2UgZnJlZSBtYW5uZXIuCj4gRHJpdmVycyBjYW4gdXNlIGRybV9kZXZfZW50ZXIoKS9kcm1fZGV2 X2V4aXQoKSB0byBwcm90ZWN0IGFuZCBtYXJrCj4gc2VjdGlvbnMgcHJldmVudGluZyBhY2Nlc3Mg dG8gZGV2aWNlIHJlc291cmNlcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlCj4gYWZ0ZXIgdGhlIGRl dmljZSBpcyBnb25lLgo+IAo+IFN1Z2dlc3RlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0 cm9ubmVzLm9yZz4KPiBSZXZpZXdlZC1ieTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtz YW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IFRlc3RlZC1ieTogT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IENjOiBpbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCgpXaGVuIHlvdSBhcHBseS9mb3J3YXJkIGEgcGF0Y2gg d2UgYWxzbyBuZWVkIHlvdXIgcy1vLWIgbGluZSwgZXZlbiBpZiB5b3UKY2hhbmdlZCBub3RoaW5n LiBzb2IgbmVlZHMgdG8gcmVmbGVjdCB0aGUgZnVsbCByZWNvcmQgb2YgZXZlcnlvbmUgd2hvCmhh bmRsZWQgYSBwYXRjaCBmcm9tIGF1dGhvciB0byB3aGVuIGl0IGZpbmFsbHkgbGFuZHMgaW4gZ2l0 LgotRGFuaWVsCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgfCA1NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ICBpbmNsdWRlL2RybS9k cm1fZGV2aWNlLmggIHwgIDkgKysrKysrKy0KPiAgaW5jbHVkZS9kcm0vZHJtX2Rydi5oICAgICB8 IDE1ICsrKysrKysrKy0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCAx MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiBpbmRleCBhMWI5MzM4NzM2ZTMuLjMyYTgz YjQxYWI2MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+IEBAIC0zMiw2ICszMiw3IEBACj4gICNpbmNsdWRl IDxsaW51eC9tb2R1bGVwYXJhbS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KPiAgI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KPiAgCj4gICNp bmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiBAQCAtNzUs NiArNzYsOCBAQCBzdGF0aWMgYm9vbCBkcm1fY29yZV9pbml0X2NvbXBsZXRlID0gZmFsc2U7Cj4g IAo+ICBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZHJtX2RlYnVnZnNfcm9vdDsKPiAgCj4gK0RFRklO RV9TVEFUSUNfU1JDVShkcm1fdW5wbHVnX3NyY3UpOwo+ICsKPiAgLyoKPiAgICogRFJNIE1pbm9y cwo+ICAgKiBBIERSTSBkZXZpY2UgY2FuIHByb3ZpZGUgc2V2ZXJhbCBjaGFyLWRldiBpbnRlcmZh Y2VzIG9uIHRoZSBEUk0tTWFqb3IuIEVhY2gKPiBAQCAtMzE4LDE4ICszMjEsNTEgQEAgdm9pZCBk cm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0wo ZHJtX3B1dF9kZXYpOwo+ICAKPiAtc3RhdGljIHZvaWQgZHJtX2RldmljZV9zZXRfdW5wbHVnZ2Vk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gKy8qKgo+ICsgKiBkcm1fZGV2X2VudGVyIC0gRW50 ZXIgZGV2aWNlIGNyaXRpY2FsIHNlY3Rpb24KPiArICogQGRldjogRFJNIGRldmljZQo+ICsgKiBA aWR4OiBQb2ludGVyIHRvIGluZGV4IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIG1hdGNoaW5n IGRybV9kZXZfZXhpdCgpCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgYW5kIHByb3Rl Y3RzIHRoZSBiZWdpbm5pbmcgb2YgYSBzZWN0aW9uIHRoYXQgc2hvdWxkIG5vdAo+ICsgKiBiZSBl bnRlcmVkIGFmdGVyIHRoZSBkZXZpY2UgaGFzIGJlZW4gdW5wbHVnZ2VkLiBUaGUgc2VjdGlvbiBl bmQgaXMgbWFya2VkCj4gKyAqIHdpdGggZHJtX2Rldl9leGl0KCkuIENhbGxzIHRvIHRoaXMgZnVu Y3Rpb24gY2FuIGJlIG5lc3RlZC4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVHJ1ZSBpZiBp dCBpcyBPSyB0byBlbnRlciB0aGUgc2VjdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgo+ICsgKi8KPiAr Ym9vbCBkcm1fZGV2X2VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCAqaWR4KQo+ICt7 Cj4gKwkqaWR4ID0gc3JjdV9yZWFkX2xvY2soJmRybV91bnBsdWdfc3JjdSk7Cj4gKwo+ICsJaWYg KGRldi0+dW5wbHVnZ2VkKSB7Cj4gKwkJc3JjdV9yZWFkX3VubG9jaygmZHJtX3VucGx1Z19zcmN1 LCAqaWR4KTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChkcm1fZGV2X2VudGVyKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1f ZGV2X2V4aXQgLSBFeGl0IGRldmljZSBjcml0aWNhbCBzZWN0aW9uCj4gKyAqIEBpZHg6IGluZGV4 IHJldHVybmVkIGZyb20gZHJtX2Rldl9lbnRlcigpCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24g bWFya3MgdGhlIGVuZCBvZiBhIHNlY3Rpb24gdGhhdCBzaG91bGQgbm90IGJlIGVudGVyZWQgYWZ0 ZXIKPiArICogdGhlIGRldmljZSBoYXMgYmVlbiB1bnBsdWdnZWQuCj4gKyAqLwo+ICt2b2lkIGRy bV9kZXZfZXhpdChpbnQgaWR4KQo+ICB7Cj4gLQlzbXBfd21iKCk7Cj4gLQlhdG9taWNfc2V0KCZk ZXYtPnVucGx1Z2dlZCwgMSk7Cj4gKwlzcmN1X3JlYWRfdW5sb2NrKCZkcm1fdW5wbHVnX3NyY3Us IGlkeCk7Cj4gIH0KPiArRVhQT1JUX1NZTUJPTChkcm1fZGV2X2V4aXQpOwo+ICAKPiAgLyoqCj4g ICAqIGRybV9kZXZfdW5wbHVnIC0gdW5wbHVnIGEgRFJNIGRldmljZQo+ICAgKiBAZGV2OiBEUk0g ZGV2aWNlCj4gICAqCj4gICAqIFRoaXMgdW5wbHVncyBhIGhvdHBsdWdnYWJsZSBEUk0gZGV2aWNl LCB3aGljaCBtYWtlcyBpdCBpbmFjY2Vzc2libGUgdG8KPiAtICogdXNlcnNwYWNlIG9wZXJhdGlv bnMuIEVudHJ5LXBvaW50cyBjYW4gdXNlIGRybV9kZXZfaXNfdW5wbHVnZ2VkKCkuIFRoaXMKPiAr ICogdXNlcnNwYWNlIG9wZXJhdGlvbnMuIEVudHJ5LXBvaW50cyBjYW4gdXNlIGRybV9kZXZfZW50 ZXIoKSBhbmQKPiArICogZHJtX2Rldl9leGl0KCkgdG8gcHJvdGVjdCBkZXZpY2UgcmVzb3VyY2Vz IGluIGEgcmFjZSBmcmVlIG1hbm5lci4gVGhpcwo+ICAgKiBlc3NlbnRpYWxseSB1bnJlZ2lzdGVy cyB0aGUgZGV2aWNlIGxpa2UgZHJtX2Rldl91bnJlZ2lzdGVyKCksIGJ1dCBjYW4gYmUKPiAgICog Y2FsbGVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCBvcGVuIHVzZXJzIG9mIEBkZXYuCj4gICAqLwo+ IEBAIC0zMzgsMTAgKzM3NCwxOCBAQCB2b2lkIGRybV9kZXZfdW5wbHVnKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gIAlkcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTsKPiAgCj4gIAltdXRleF9sb2Nr KCZkcm1fZ2xvYmFsX211dGV4KTsKPiAtCWRybV9kZXZpY2Vfc2V0X3VucGx1Z2dlZChkZXYpOwo+ ICAJaWYgKGRldi0+b3Blbl9jb3VudCA9PSAwKQo+ICAJCWRybV9kZXZfcHV0KGRldik7Cj4gIAlt dXRleF91bmxvY2soJmRybV9nbG9iYWxfbXV0ZXgpOwo+ICsKPiArCS8qCj4gKwkgKiBBZnRlciBz eW5jaHJvbml6aW5nIGFueSBjcml0aWNhbCByZWFkIHNlY3Rpb24gaXMgZ3VhcmFudGVlZCB0byBz ZWUKPiArCSAqIHRoZSBuZXcgdmFsdWUgb2YgLT51bnBsdWdnZWQsIGFuZCBhbnkgY3JpdGljYWwg c2VjdGlvbiB3aGljaCBtaWdodAo+ICsJICogc3RpbGwgaGF2ZSBzZWVuIHRoZSBvbGQgdmFsdWUg b2YgLT51bnBsdWdnZWQgaXMgZ3VhcmFudGVlZCB0byBoYXZlCj4gKwkgKiBmaW5pc2hlZC4KPiAr CSAqLwo+ICsJZGV2LT51bnBsdWdnZWQgPSB0cnVlOwo+ICsJc3luY2hyb25pemVfc3JjdSgmZHJt X3VucGx1Z19zcmN1KTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kZXZfdW5wbHVnKTsKPiAg Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaCBiL2luY2x1ZGUvZHJtL2Ry bV9kZXZpY2UuaAo+IGluZGV4IDdjNGZhMzJmM2ZjNi4uM2EwZWFjMjg4NWI3IDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kZXZp Y2UuaAo+IEBAIC00Niw3ICs0NiwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7Cj4gIAkvKiBjdXJy ZW50bHkgYWN0aXZlIG1hc3RlciBmb3IgdGhpcyBkZXZpY2UuIFByb3RlY3RlZCBieSBtYXN0ZXJf bXV0ZXggKi8KPiAgCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7Cj4gIAo+IC0JYXRvbWljX3Qg dW5wbHVnZ2VkOwkJCS8qKjwgRmxhZyB3aGV0aGVyIGRldiBpcyBkZWFkICovCj4gKwkvKioKPiAr CSAqIEB1bnBsdWdnZWQ6Cj4gKwkgKgo+ICsJICogRmxhZyB0byB0ZWxsIGlmIHRoZSBkZXZpY2Ug aGFzIGJlZW4gdW5wbHVnZ2VkLgo+ICsJICogU2VlIGRybV9kZXZfZW50ZXIoKSBhbmQgZHJtX2Rl dl9pc191bnBsdWdnZWQoKS4KPiArCSAqLwo+ICsJYm9vbCB1bnBsdWdnZWQ7Cj4gKwo+ICAJc3Ry dWN0IGlub2RlICphbm9uX2lub2RlOwkJLyoqPCBpbm9kZSBmb3IgcHJpdmF0ZSBhZGRyZXNzLXNw YWNlICovCj4gIAljaGFyICp1bmlxdWU7CQkJCS8qKjwgdW5pcXVlIG5hbWUgb2YgdGhlIGRldmlj ZSAqLwo+ICAJLypAfSAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHJ2LmggYi9p bmNsdWRlL2RybS9kcm1fZHJ2LmgKPiBpbmRleCBkMjNkY2RkMWJkOTUuLjdlNTQ1ZjVmOTRkMyAx MDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiArKysgYi9pbmNsdWRlL2RybS9k cm1fZHJ2LmgKPiBAQCAtNjI0LDYgKzYyNCw4IEBAIHZvaWQgZHJtX2Rldl9nZXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gIHZvaWQgZHJtX2Rldl9wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gIHZvaWQgZHJtX2Rldl91bnJlZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgdm9p ZCBkcm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArYm9vbCBkcm1fZGV2X2Vu dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCAqaWR4KTsKPiArdm9pZCBkcm1fZGV2X2V4 aXQoaW50IGlkeCk7Cj4gIHZvaWQgZHJtX2Rldl91bnBsdWcoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gIAo+ICAvKioKPiBAQCAtNjM1LDExICs2MzcsMTYgQEAgdm9pZCBkcm1fZGV2X3VucGx1 ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgICogdW5wbHVnZ2VkLCB0aGVzZSB0d28gZnVu Y3Rpb25zIGd1YXJhbnRlZSB0aGF0IGFueSBzdG9yZSBiZWZvcmUgY2FsbGluZwo+ICAgKiBkcm1f ZGV2X3VucGx1ZygpIGlzIHZpc2libGUgdG8gY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGFmdGVy IGl0IGNvbXBsZXRlcwo+ICAgKi8KPiAtc3RhdGljIGlubGluZSBpbnQgZHJtX2Rldl9pc191bnBs dWdnZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArc3RhdGljIGlubGluZSBib29sIGRybV9k ZXZfaXNfdW5wbHVnZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAtCWludCByZXQg PSBhdG9taWNfcmVhZCgmZGV2LT51bnBsdWdnZWQpOwo+IC0Jc21wX3JtYigpOwo+IC0JcmV0dXJu IHJldDsKPiArCWludCBpZHg7Cj4gKwo+ICsJaWYgKGRybV9kZXZfZW50ZXIoZGV2LCAmaWR4KSkg ewo+ICsJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiAgfQo+ICAKPiAgCj4gLS0gCj4gMi43LjQKPiAKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5n IGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752444AbeC1HUR (ORCPT ); Wed, 28 Mar 2018 03:20:17 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:53134 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751070AbeC1HUQ (ORCPT ); Wed, 28 Mar 2018 03:20:16 -0400 X-Google-Smtp-Source: AIpwx4944iHmWx17jSklLbGPSOsd1fPhzDibTfkz8uSQAnAtj8O0RbU/pWMhydU8cUrwttSLnu209g== Date: Wed, 28 Mar 2018 09:20:12 +0200 From: Daniel Vetter To: Oleksandr Andrushchenko Cc: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, intel-gfx@lists.freedesktop.org, Noralf =?iso-8859-1?Q?Tr=F8nnes?= Subject: Re: [Intel-gfx] [PATCH v4 1/2] drm: Use srcu to protect drm_device.unplugged Message-ID: <20180328072012.GD14155@phenom.ffwll.local> Mail-Followup-To: Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, intel-gfx@lists.freedesktop.org, Noralf =?iso-8859-1?Q?Tr=F8nnes?= References: <1522219661-26827-1-git-send-email-andr2000@gmail.com> <1522219661-26827-2-git-send-email-andr2000@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1522219661-26827-2-git-send-email-andr2000@gmail.com> X-Operating-System: Linux phenom 4.15.0-1-amd64 User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Mar 28, 2018 at 09:47:40AM +0300, Oleksandr Andrushchenko wrote: > From: Noralf Trønnes > > Use srcu to protect drm_device.unplugged in a race free manner. > Drivers can use drm_dev_enter()/drm_dev_exit() to protect and mark > sections preventing access to device resources that are not available > after the device is gone. > > Suggested-by: Daniel Vetter > Signed-off-by: Noralf Trønnes > Reviewed-by: Oleksandr Andrushchenko > Tested-by: Oleksandr Andrushchenko > Cc: intel-gfx@lists.freedesktop.org When you apply/forward a patch we also need your s-o-b line, even if you changed nothing. sob needs to reflect the full record of everyone who handled a patch from author to when it finally lands in git. -Daniel > --- > drivers/gpu/drm/drm_drv.c | 54 ++++++++++++++++++++++++++++++++++++++++++----- > include/drm/drm_device.h | 9 +++++++- > include/drm/drm_drv.h | 15 +++++++++---- > 3 files changed, 68 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index a1b9338736e3..32a83b41ab61 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -32,6 +32,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -75,6 +76,8 @@ static bool drm_core_init_complete = false; > > static struct dentry *drm_debugfs_root; > > +DEFINE_STATIC_SRCU(drm_unplug_srcu); > + > /* > * DRM Minors > * A DRM device can provide several char-dev interfaces on the DRM-Major. Each > @@ -318,18 +321,51 @@ void drm_put_dev(struct drm_device *dev) > } > EXPORT_SYMBOL(drm_put_dev); > > -static void drm_device_set_unplugged(struct drm_device *dev) > +/** > + * drm_dev_enter - Enter device critical section > + * @dev: DRM device > + * @idx: Pointer to index that will be passed to the matching drm_dev_exit() > + * > + * This function marks and protects the beginning of a section that should not > + * be entered after the device has been unplugged. The section end is marked > + * with drm_dev_exit(). Calls to this function can be nested. > + * > + * Returns: > + * True if it is OK to enter the section, false otherwise. > + */ > +bool drm_dev_enter(struct drm_device *dev, int *idx) > +{ > + *idx = srcu_read_lock(&drm_unplug_srcu); > + > + if (dev->unplugged) { > + srcu_read_unlock(&drm_unplug_srcu, *idx); > + return false; > + } > + > + return true; > +} > +EXPORT_SYMBOL(drm_dev_enter); > + > +/** > + * drm_dev_exit - Exit device critical section > + * @idx: index returned from drm_dev_enter() > + * > + * This function marks the end of a section that should not be entered after > + * the device has been unplugged. > + */ > +void drm_dev_exit(int idx) > { > - smp_wmb(); > - atomic_set(&dev->unplugged, 1); > + srcu_read_unlock(&drm_unplug_srcu, idx); > } > +EXPORT_SYMBOL(drm_dev_exit); > > /** > * drm_dev_unplug - unplug a DRM device > * @dev: DRM device > * > * This unplugs a hotpluggable DRM device, which makes it inaccessible to > - * userspace operations. Entry-points can use drm_dev_is_unplugged(). This > + * userspace operations. Entry-points can use drm_dev_enter() and > + * drm_dev_exit() to protect device resources in a race free manner. This > * essentially unregisters the device like drm_dev_unregister(), but can be > * called while there are still open users of @dev. > */ > @@ -338,10 +374,18 @@ void drm_dev_unplug(struct drm_device *dev) > drm_dev_unregister(dev); > > mutex_lock(&drm_global_mutex); > - drm_device_set_unplugged(dev); > if (dev->open_count == 0) > drm_dev_put(dev); > mutex_unlock(&drm_global_mutex); > + > + /* > + * After synchronizing any critical read section is guaranteed to see > + * the new value of ->unplugged, and any critical section which might > + * still have seen the old value of ->unplugged is guaranteed to have > + * finished. > + */ > + dev->unplugged = true; > + synchronize_srcu(&drm_unplug_srcu); > } > EXPORT_SYMBOL(drm_dev_unplug); > > diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h > index 7c4fa32f3fc6..3a0eac2885b7 100644 > --- a/include/drm/drm_device.h > +++ b/include/drm/drm_device.h > @@ -46,7 +46,14 @@ struct drm_device { > /* currently active master for this device. Protected by master_mutex */ > struct drm_master *master; > > - atomic_t unplugged; /**< Flag whether dev is dead */ > + /** > + * @unplugged: > + * > + * Flag to tell if the device has been unplugged. > + * See drm_dev_enter() and drm_dev_is_unplugged(). > + */ > + bool unplugged; > + > struct inode *anon_inode; /**< inode for private address-space */ > char *unique; /**< unique name of the device */ > /*@} */ > diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h > index d23dcdd1bd95..7e545f5f94d3 100644 > --- a/include/drm/drm_drv.h > +++ b/include/drm/drm_drv.h > @@ -624,6 +624,8 @@ void drm_dev_get(struct drm_device *dev); > void drm_dev_put(struct drm_device *dev); > void drm_dev_unref(struct drm_device *dev); > void drm_put_dev(struct drm_device *dev); > +bool drm_dev_enter(struct drm_device *dev, int *idx); > +void drm_dev_exit(int idx); > void drm_dev_unplug(struct drm_device *dev); > > /** > @@ -635,11 +637,16 @@ void drm_dev_unplug(struct drm_device *dev); > * unplugged, these two functions guarantee that any store before calling > * drm_dev_unplug() is visible to callers of this function after it completes > */ > -static inline int drm_dev_is_unplugged(struct drm_device *dev) > +static inline bool drm_dev_is_unplugged(struct drm_device *dev) > { > - int ret = atomic_read(&dev->unplugged); > - smp_rmb(); > - return ret; > + int idx; > + > + if (drm_dev_enter(dev, &idx)) { > + drm_dev_exit(idx); > + return false; > + } > + > + return true; > } > > > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch