From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleg Nesterov Subject: Re: [PATCH 1/1] signals: kill block_all_signals() and unblock_all_signals() Date: Tue, 15 Sep 2015 18:41:58 +0200 Message-ID: <20150915164158.GA21741@redhat.com> References: <20150827162505.GA7885@redhat.com> <20150827162529.GA7893@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id BEA166E01F for ; Tue, 15 Sep 2015 09:44:51 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150827162529.GA7893@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrew Morton , Dave Airlie Cc: Richard Weinberger , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org cGluZyA7KQoKQW5kcmV3LCBzaG91bGQgSSByZS1zZW5kIHRoaXMgcGF0Y2g/IEl0IHdhcyBhY2tl ZCBieSBEYW5pZWwgYW5kIERhdmUKZG9lc24ndCBvYmplY3QuCgpEYXZlLCBJJ2xsIGFwcHJlY2lh dGUgaXQgaWYgeW91IGFjayBpdCBleHBsaWNpdGx5LgoKCk9uIDA4LzI3LCBPbGVnIE5lc3Rlcm92 IHdyb3RlOgo+Cj4gSXQgaXMgaGFyZGx5IHBvc3NpYmxlIHRvIGVudW1lcmF0ZSBhbGwgcHJvYmxl bXMgd2l0aCBibG9ja19hbGxfc2lnbmFscygpCj4gYW5kIHVuYmxvY2tfYWxsX3NpZ25hbHMoKS4g SnVzdCBmb3IgZXhhbXBsZSwKPiAKPiAxLiBibG9ja19hbGxfc2lnbmFscyhTSUdTVE9QL2V0Yykg c2ltcGx5IGNhbid0IGhlbHAgaWYgdGhlIGNhbGxlciBpcwo+ICAgIG11bHRpdGhyZWFkZWQuIEFu b3RoZXIgdGhyZWFkIGNhbiBkZXF1ZXVlIHRoZSBzaWduYWwgYW5kIGZvcmNlIHRoZQo+ICAgIGdy b3VwIHN0b3AuCj4gCj4gMi4gRXZlbiBpcyB0aGUgY2FsbGVyIGlzIHNpbmdsZS10aHJlYWRlZCwg aXQgd2lsbCAic3RvcCIgYW55d2F5LiBJdAo+ICAgIHdpbGwgbm90IHNsZWVwLCBidXQgaXQgd2ls bCBzcGluIGluIGtlcm5lbCBzcGFjZSB1bnRpbCBTSUdDT05UIG9yCj4gICAgU0lHS0lMTC4KPiAK PiBBbmQgYSBsb3QgbW9yZS4gSW4gc2hvcnQsIHRoaXMgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayBh dCBhbGwsIGF0IGxlYXN0Cj4gdGhlIGxhc3QgMTArIHllYXJzLgo+IAo+IFNpZ25lZC1vZmYtYnk6 IE9sZWcgTmVzdGVyb3YgPG9sZWdAcmVkaGF0LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L2RybV9sb2NrLmMgfCAgIDQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g IGluY2x1ZGUvZHJtL2RybVAuaCAgICAgICAgIHwgICAgMSAtCj4gIGluY2x1ZGUvbGludXgvc2No ZWQuaCAgICAgIHwgICAgNyArLS0tLS0KPiAga2VybmVsL3NpZ25hbC5jICAgICAgICAgICAgfCAg IDUxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDQgZmls ZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2xv Y2suYwo+IGluZGV4IGY4NjEzNjEuLjQ0NzdiODcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9sb2NrLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2xvY2suYwo+IEBAIC0z OCw4ICszOCw2IEBACj4gICNpbmNsdWRlICJkcm1fbGVnYWN5LmgiCj4gICNpbmNsdWRlICJkcm1f aW50ZXJuYWwuaCIKPiAgCj4gLXN0YXRpYyBpbnQgZHJtX25vdGlmaWVyKHZvaWQgKnByaXYpOwo+ IC0KPiAgc3RhdGljIGludCBkcm1fbG9ja190YWtlKHN0cnVjdCBkcm1fbG9ja19kYXRhICpsb2Nr X2RhdGEsIHVuc2lnbmVkIGludCBjb250ZXh0KTsKPiAgCj4gIC8qKgo+IEBAIC0xMTUsMTQgKzEx Myw4IEBAIGludCBkcm1fbGVnYWN5X2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKPiAgCSAqIHJlYWxseSBwcm9iYWJseSBub3QgdGhlIGNvcnJlY3QgYW5zd2VyIGJ1dCBs ZXRzIHVzIGRlYnVnIHhrYgo+ICAgCSAqIHhzZXJ2ZXIgZm9yIG5vdyAqLwo+ICAJaWYgKCFmaWxl X3ByaXYtPmlzX21hc3Rlcikgewo+IC0JCXNpZ2VtcHR5c2V0KCZkZXYtPnNpZ21hc2spOwo+IC0J CXNpZ2FkZHNldCgmZGV2LT5zaWdtYXNrLCBTSUdTVE9QKTsKPiAtCQlzaWdhZGRzZXQoJmRldi0+ c2lnbWFzaywgU0lHVFNUUCk7Cj4gLQkJc2lnYWRkc2V0KCZkZXYtPnNpZ21hc2ssIFNJR1RUSU4p Owo+IC0JCXNpZ2FkZHNldCgmZGV2LT5zaWdtYXNrLCBTSUdUVE9VKTsKPiAgCQlkZXYtPnNpZ2Rh dGEuY29udGV4dCA9IGxvY2stPmNvbnRleHQ7Cj4gIAkJZGV2LT5zaWdkYXRhLmxvY2sgPSBtYXN0 ZXItPmxvY2suaHdfbG9jazsKPiAtCQlibG9ja19hbGxfc2lnbmFscyhkcm1fbm90aWZpZXIsIGRl diwgJmRldi0+c2lnbWFzayk7Cj4gIAl9Cj4gIAo+ICAJaWYgKGRldi0+ZHJpdmVyLT5kbWFfcXVp ZXNjZW50ICYmIChsb2NrLT5mbGFncyAmIF9EUk1fTE9DS19RVUlFU0NFTlQpKQo+IEBAIC0xNjMs NyArMTU1LDYgQEAgaW50IGRybV9sZWdhY3lfdW5sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV8KPiAgCQkvKiBGSVhNRTogU2hvdWxk IHJlYWxseSBiYWlsIG91dCBoZXJlLiAqLwo+ICAJfQo+ICAKPiAtCXVuYmxvY2tfYWxsX3NpZ25h bHMoKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBAIC0yODIsMzggKzI3Myw2IEBAIGludCBk cm1fbGVnYWN5X2xvY2tfZnJlZShzdHJ1Y3QgZHJtX2xvY2tfZGF0YSAqbG9ja19kYXRhLCB1bnNp Z25lZCBpbnQgY29udGV4dCkKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIElmIHdlIGdldCBoZXJlLCBp dCBtZWFucyB0aGF0IHRoZSBwcm9jZXNzIGhhcyBjYWxsZWQgRFJNX0lPQ1RMX0xPQ0sKPiAtICog d2l0aG91dCBjYWxsaW5nIERSTV9JT0NUTF9VTkxPQ0suCj4gLSAqCj4gLSAqIElmIHRoZSBsb2Nr IGlzIG5vdCBoZWxkLCB0aGVuIGxldCB0aGUgc2lnbmFsIHByb2NlZWQgYXMgdXN1YWwuICBJZiB0 aGUgbG9jawo+IC0gKiBpcyBoZWxkLCB0aGVuIHNldCB0aGUgY29udGVuZGVkIGZsYWcgYW5kIGtl ZXAgdGhlIHNpZ25hbCBibG9ja2VkLgo+IC0gKgo+IC0gKiBccGFyYW0gcHJpdiBwb2ludGVyIHRv IGEgZHJtX2RldmljZSBzdHJ1Y3R1cmUuCj4gLSAqIFxyZXR1cm4gb25lIGlmIHRoZSBzaWduYWwg c2hvdWxkIGJlIGRlbGl2ZXJlZCBub3JtYWxseSwgb3IgemVybyBpZiB0aGUKPiAtICogc2lnbmFs IHNob3VsZCBiZSBibG9ja2VkLgo+IC0gKi8KPiAtc3RhdGljIGludCBkcm1fbm90aWZpZXIodm9p ZCAqcHJpdikKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXY7Cj4gLQlzdHJ1 Y3QgZHJtX2h3X2xvY2sgKmxvY2sgPSBkZXYtPnNpZ2RhdGEubG9jazsKPiAtCXVuc2lnbmVkIGlu dCBvbGQsIG5ldywgcHJldjsKPiAtCj4gLQkvKiBBbGxvdyBzaWduYWwgZGVsaXZlcnkgaWYgbG9j ayBpc24ndCBoZWxkICovCj4gLQlpZiAoIWxvY2sgfHwgIV9EUk1fTE9DS19JU19IRUxEKGxvY2st PmxvY2spCj4gLQkgICAgfHwgX0RSTV9MT0NLSU5HX0NPTlRFWFQobG9jay0+bG9jaykgIT0gZGV2 LT5zaWdkYXRhLmNvbnRleHQpCj4gLQkJcmV0dXJuIDE7Cj4gLQo+IC0JLyogT3RoZXJ3aXNlLCBz ZXQgZmxhZyB0byBmb3JjZSBjYWxsIHRvCj4gLQkgICBkcm1VbmxvY2sgKi8KPiAtCWRvIHsKPiAt CQlvbGQgPSBsb2NrLT5sb2NrOwo+IC0JCW5ldyA9IG9sZCB8IF9EUk1fTE9DS19DT05UOwo+IC0J CXByZXYgPSBjbXB4Y2hnKCZsb2NrLT5sb2NrLCBvbGQsIG5ldyk7Cj4gLQl9IHdoaWxlIChwcmV2 ICE9IG9sZCk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyoqCj4gICAqIFRoaXMgZnVuY3Rp b24gcmV0dXJucyBpbW1lZGlhdGVseSBhbmQgdGFrZXMgdGhlIGh3IGxvY2sKPiAgICogd2l0aCB0 aGUga2VybmVsIGNvbnRleHQgaWYgaXQgaXMgZnJlZSwgb3RoZXJ3aXNlIGl0IGdldHMgdGhlIGhp Z2hlc3QgcHJpb3JpdHkgd2hlbiBhbmQgaWYKPiAgICogaXQgaXMgZXZlbnR1YWxseSByZWxlYXNl ZC4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5o Cj4gaW5kZXggNjJjNDA3Ny4uMDg1OWMzNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1Q LmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKPiBAQCAtODE1LDcgKzgxNSw2IEBAIHN0cnVj dCBkcm1fZGV2aWNlIHsKPiAgCj4gIAlzdHJ1Y3QgZHJtX3NnX21lbSAqc2c7CS8qKjwgU2NhdHRl ciBnYXRoZXIgbWVtb3J5ICovCj4gIAl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOyAgICAgICAgICAg ICAgICAgIC8qKjwgTnVtYmVyIG9mIENSVENzIG9uIHRoaXMgZGV2aWNlICovCj4gLQlzaWdzZXRf dCBzaWdtYXNrOwo+ICAKPiAgCXN0cnVjdCB7Cj4gIAkJaW50IGNvbnRleHQ7Cj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAo+IGluZGV4 IDI2YTJlNjEuLmYxOTJjZmUgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCj4g KysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCj4gQEAgLTE0ODksOSArMTQ4OSw3IEBAIHN0cnVj dCB0YXNrX3N0cnVjdCB7Cj4gIAo+ICAJdW5zaWduZWQgbG9uZyBzYXNfc3Nfc3A7Cj4gIAlzaXpl X3Qgc2FzX3NzX3NpemU7Cj4gLQlpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdik7Cj4gLQl2b2lk ICpub3RpZmllcl9kYXRhOwo+IC0Jc2lnc2V0X3QgKm5vdGlmaWVyX21hc2s7Cj4gKwo+ICAJc3Ry dWN0IGNhbGxiYWNrX2hlYWQgKnRhc2tfd29ya3M7Cj4gIAo+ICAJc3RydWN0IGF1ZGl0X2NvbnRl eHQgKmF1ZGl0X2NvbnRleHQ7Cj4gQEAgLTIzODIsOSArMjM4MCw2IEBAIHN0YXRpYyBpbmxpbmUg aW50IGRlcXVldWVfc2lnbmFsX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHNpZ3NldF90 ICptYXNrLCBzCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1leHRlcm4gdm9pZCBibG9ja19h bGxfc2lnbmFscyhpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdiksIHZvaWQgKnByaXYsCj4gLQkJ CSAgICAgIHNpZ3NldF90ICptYXNrKTsKPiAtZXh0ZXJuIHZvaWQgdW5ibG9ja19hbGxfc2lnbmFs cyh2b2lkKTsKPiAgZXh0ZXJuIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAq IHApOwo+ICBleHRlcm4gaW50IHNlbmRfc2lnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBz dHJ1Y3QgdGFza19zdHJ1Y3QgKik7Cj4gIGV4dGVybiBpbnQgZm9yY2Vfc2lnc2VndihpbnQsIHN0 cnVjdCB0YXNrX3N0cnVjdCAqKTsKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2Vy bmVsL3NpZ25hbC5jCj4gaW5kZXggZDUxYzVkZC4uYTVmNGY4NSAxMDA2NDQKPiAtLS0gYS9rZXJu ZWwvc2lnbmFsLmMKPiArKysgYi9rZXJuZWwvc2lnbmFsLmMKPiBAQCAtNTA4LDQxICs1MDgsNiBA QCBpbnQgdW5oYW5kbGVkX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZykK PiAgCXJldHVybiAhdHNrLT5wdHJhY2U7Cj4gIH0KPiAgCj4gLS8qCj4gLSAqIE5vdGlmeSB0aGUg c3lzdGVtIHRoYXQgYSBkcml2ZXIgd2FudHMgdG8gYmxvY2sgYWxsIHNpZ25hbHMgZm9yIHRoaXMK PiAtICogcHJvY2VzcywgYW5kIHdhbnRzIHRvIGJlIG5vdGlmaWVkIGlmIGFueSBzaWduYWxzIGF0 IGFsbCB3ZXJlIHRvIGJlCj4gLSAqIHNlbnQvYWN0ZWQgdXBvbi4gIElmIHRoZSBub3RpZmllciBy b3V0aW5lIHJldHVybnMgbm9uLXplcm8sIHRoZW4gdGhlCj4gLSAqIHNpZ25hbCB3aWxsIGJlIGFj dGVkIHVwb24gYWZ0ZXIgYWxsLiAgSWYgdGhlIG5vdGlmaWVyIHJvdXRpbmUgcmV0dXJucyAwLAo+ IC0gKiB0aGVuIHRoZW4gc2lnbmFsIHdpbGwgYmUgYmxvY2tlZC4gIE9ubHkgb25lIGJsb2NrIHBl ciBwcm9jZXNzIGlzCj4gLSAqIGFsbG93ZWQuICBwcml2IGlzIGEgcG9pbnRlciB0byBwcml2YXRl IGRhdGEgdGhhdCB0aGUgbm90aWZpZXIgcm91dGluZQo+IC0gKiBjYW4gdXNlIHRvIGRldGVybWlu ZSBpZiB0aGUgc2lnbmFsIHNob3VsZCBiZSBibG9ja2VkIG9yIG5vdC4KPiAtICovCj4gLXZvaWQK PiAtYmxvY2tfYWxsX3NpZ25hbHMoaW50ICgqbm90aWZpZXIpKHZvaWQgKnByaXYpLCB2b2lkICpw cml2LCBzaWdzZXRfdCAqbWFzaykKPiAtewo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCj4g LQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwo+ IC0JY3VycmVudC0+bm90aWZpZXJfbWFzayA9IG1hc2s7Cj4gLQljdXJyZW50LT5ub3RpZmllcl9k YXRhID0gcHJpdjsKPiAtCWN1cnJlbnQtPm5vdGlmaWVyID0gbm90aWZpZXI7Cj4gLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Cj4gLX0K PiAtCj4gLS8qIE5vdGlmeSB0aGUgc3lzdGVtIHRoYXQgYmxvY2tpbmcgaGFzIGVuZGVkLiAqLwo+ IC0KPiAtdm9pZAo+IC11bmJsb2NrX2FsbF9zaWduYWxzKHZvaWQpCj4gLXsKPiAtCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQt PnNpZ2xvY2ssIGZsYWdzKTsKPiAtCWN1cnJlbnQtPm5vdGlmaWVyID0gTlVMTDsKPiAtCWN1cnJl bnQtPm5vdGlmaWVyX2RhdGEgPSBOVUxMOwo+IC0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKPiAtCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsK PiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgY29sbGVjdF9zaWduYWwoaW50IHNpZywgc3RydWN0IHNp Z3BlbmRpbmcgKmxpc3QsIHNpZ2luZm9fdCAqaW5mbykKPiAgewo+ICAJc3RydWN0IHNpZ3F1ZXVl ICpxLCAqZmlyc3QgPSBOVUxMOwo+IEBAIC01ODUsMTkgKzU1MCw4IEBAIHN0YXRpYyBpbnQgX19k ZXF1ZXVlX3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2ss Cj4gIHsKPiAgCWludCBzaWcgPSBuZXh0X3NpZ25hbChwZW5kaW5nLCBtYXNrKTsKPiAgCj4gLQlp ZiAoc2lnKSB7Cj4gLQkJaWYgKGN1cnJlbnQtPm5vdGlmaWVyKSB7Cj4gLQkJCWlmIChzaWdpc21l bWJlcihjdXJyZW50LT5ub3RpZmllcl9tYXNrLCBzaWcpKSB7Cj4gLQkJCQlpZiAoIShjdXJyZW50 LT5ub3RpZmllcikoY3VycmVudC0+bm90aWZpZXJfZGF0YSkpIHsKPiAtCQkJCQljbGVhcl90aHJl YWRfZmxhZyhUSUZfU0lHUEVORElORyk7Cj4gLQkJCQkJcmV0dXJuIDA7Cj4gLQkJCQl9Cj4gLQkJ CX0KPiAtCQl9Cj4gLQo+ICsJaWYgKHNpZykKPiAgCQljb2xsZWN0X3NpZ25hbChzaWcsIHBlbmRp bmcsIGluZm8pOwo+IC0JfQo+IC0KPiAgCXJldHVybiBzaWc7Cj4gIH0KPiAgCj4gQEAgLTI0ODgs OSArMjQ0Miw2IEBAIEVYUE9SVF9TWU1CT0woZm9yY2Vfc2lnKTsKPiAgRVhQT1JUX1NZTUJPTChz ZW5kX3NpZyk7Cj4gIEVYUE9SVF9TWU1CT0woc2VuZF9zaWdfaW5mbyk7Cj4gIEVYUE9SVF9TWU1C T0woc2lncHJvY21hc2spOwo+IC1FWFBPUlRfU1lNQk9MKGJsb2NrX2FsbF9zaWduYWxzKTsKPiAt RVhQT1JUX1NZTUJPTCh1bmJsb2NrX2FsbF9zaWduYWxzKTsKPiAtCj4gIAo+ICAvKgo+ICAgKiBT eXN0ZW0gY2FsbCBlbnRyeSBwb2ludHMuCj4gLS0gCj4gMS41LjUuMQo+IAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752826AbbIOQpH (ORCPT ); Tue, 15 Sep 2015 12:45:07 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53778 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752060AbbIOQov (ORCPT ); Tue, 15 Sep 2015 12:44:51 -0400 Date: Tue, 15 Sep 2015 18:41:58 +0200 From: Oleg Nesterov To: Andrew Morton , Dave Airlie Cc: Richard Weinberger , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/1] signals: kill block_all_signals() and unblock_all_signals() Message-ID: <20150915164158.GA21741@redhat.com> References: <20150827162505.GA7885@redhat.com> <20150827162529.GA7893@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150827162529.GA7893@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ping ;) Andrew, should I re-send this patch? It was acked by Daniel and Dave doesn't object. Dave, I'll appreciate it if you ack it explicitly. On 08/27, Oleg Nesterov wrote: > > It is hardly possible to enumerate all problems with block_all_signals() > and unblock_all_signals(). Just for example, > > 1. block_all_signals(SIGSTOP/etc) simply can't help if the caller is > multithreaded. Another thread can dequeue the signal and force the > group stop. > > 2. Even is the caller is single-threaded, it will "stop" anyway. It > will not sleep, but it will spin in kernel space until SIGCONT or > SIGKILL. > > And a lot more. In short, this interface doesn't work at all, at least > the last 10+ years. > > Signed-off-by: Oleg Nesterov > --- > drivers/gpu/drm/drm_lock.c | 41 ----------------------------------- > include/drm/drmP.h | 1 - > include/linux/sched.h | 7 +----- > kernel/signal.c | 51 +------------------------------------------- > 4 files changed, 2 insertions(+), 98 deletions(-) > > diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c > index f861361..4477b87 100644 > --- a/drivers/gpu/drm/drm_lock.c > +++ b/drivers/gpu/drm/drm_lock.c > @@ -38,8 +38,6 @@ > #include "drm_legacy.h" > #include "drm_internal.h" > > -static int drm_notifier(void *priv); > - > static int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context); > > /** > @@ -115,14 +113,8 @@ int drm_legacy_lock(struct drm_device *dev, void *data, > * really probably not the correct answer but lets us debug xkb > * xserver for now */ > if (!file_priv->is_master) { > - sigemptyset(&dev->sigmask); > - sigaddset(&dev->sigmask, SIGSTOP); > - sigaddset(&dev->sigmask, SIGTSTP); > - sigaddset(&dev->sigmask, SIGTTIN); > - sigaddset(&dev->sigmask, SIGTTOU); > dev->sigdata.context = lock->context; > dev->sigdata.lock = master->lock.hw_lock; > - block_all_signals(drm_notifier, dev, &dev->sigmask); > } > > if (dev->driver->dma_quiescent && (lock->flags & _DRM_LOCK_QUIESCENT)) > @@ -163,7 +155,6 @@ int drm_legacy_unlock(struct drm_device *dev, void *data, struct drm_file *file_ > /* FIXME: Should really bail out here. */ > } > > - unblock_all_signals(); > return 0; > } > > @@ -282,38 +273,6 @@ int drm_legacy_lock_free(struct drm_lock_data *lock_data, unsigned int context) > } > > /** > - * If we get here, it means that the process has called DRM_IOCTL_LOCK > - * without calling DRM_IOCTL_UNLOCK. > - * > - * If the lock is not held, then let the signal proceed as usual. If the lock > - * is held, then set the contended flag and keep the signal blocked. > - * > - * \param priv pointer to a drm_device structure. > - * \return one if the signal should be delivered normally, or zero if the > - * signal should be blocked. > - */ > -static int drm_notifier(void *priv) > -{ > - struct drm_device *dev = priv; > - struct drm_hw_lock *lock = dev->sigdata.lock; > - unsigned int old, new, prev; > - > - /* Allow signal delivery if lock isn't held */ > - if (!lock || !_DRM_LOCK_IS_HELD(lock->lock) > - || _DRM_LOCKING_CONTEXT(lock->lock) != dev->sigdata.context) > - return 1; > - > - /* Otherwise, set flag to force call to > - drmUnlock */ > - do { > - old = lock->lock; > - new = old | _DRM_LOCK_CONT; > - prev = cmpxchg(&lock->lock, old, new); > - } while (prev != old); > - return 0; > -} > - > -/** > * This function returns immediately and takes the hw lock > * with the kernel context if it is free, otherwise it gets the highest priority when and if > * it is eventually released. > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 62c4077..0859c35 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -815,7 +815,6 @@ struct drm_device { > > struct drm_sg_mem *sg; /**< Scatter gather memory */ > unsigned int num_crtcs; /**< Number of CRTCs on this device */ > - sigset_t sigmask; > > struct { > int context; > diff --git a/include/linux/sched.h b/include/linux/sched.h > index 26a2e61..f192cfe 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1489,9 +1489,7 @@ struct task_struct { > > unsigned long sas_ss_sp; > size_t sas_ss_size; > - int (*notifier)(void *priv); > - void *notifier_data; > - sigset_t *notifier_mask; > + > struct callback_head *task_works; > > struct audit_context *audit_context; > @@ -2382,9 +2380,6 @@ static inline int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, s > return ret; > } > > -extern void block_all_signals(int (*notifier)(void *priv), void *priv, > - sigset_t *mask); > -extern void unblock_all_signals(void); > extern void release_task(struct task_struct * p); > extern int send_sig_info(int, struct siginfo *, struct task_struct *); > extern int force_sigsegv(int, struct task_struct *); > diff --git a/kernel/signal.c b/kernel/signal.c > index d51c5dd..a5f4f85 100644 > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -508,41 +508,6 @@ int unhandled_signal(struct task_struct *tsk, int sig) > return !tsk->ptrace; > } > > -/* > - * Notify the system that a driver wants to block all signals for this > - * process, and wants to be notified if any signals at all were to be > - * sent/acted upon. If the notifier routine returns non-zero, then the > - * signal will be acted upon after all. If the notifier routine returns 0, > - * then then signal will be blocked. Only one block per process is > - * allowed. priv is a pointer to private data that the notifier routine > - * can use to determine if the signal should be blocked or not. > - */ > -void > -block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask) > -{ > - unsigned long flags; > - > - spin_lock_irqsave(¤t->sighand->siglock, flags); > - current->notifier_mask = mask; > - current->notifier_data = priv; > - current->notifier = notifier; > - spin_unlock_irqrestore(¤t->sighand->siglock, flags); > -} > - > -/* Notify the system that blocking has ended. */ > - > -void > -unblock_all_signals(void) > -{ > - unsigned long flags; > - > - spin_lock_irqsave(¤t->sighand->siglock, flags); > - current->notifier = NULL; > - current->notifier_data = NULL; > - recalc_sigpending(); > - spin_unlock_irqrestore(¤t->sighand->siglock, flags); > -} > - > static void collect_signal(int sig, struct sigpending *list, siginfo_t *info) > { > struct sigqueue *q, *first = NULL; > @@ -585,19 +550,8 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask, > { > int sig = next_signal(pending, mask); > > - if (sig) { > - if (current->notifier) { > - if (sigismember(current->notifier_mask, sig)) { > - if (!(current->notifier)(current->notifier_data)) { > - clear_thread_flag(TIF_SIGPENDING); > - return 0; > - } > - } > - } > - > + if (sig) > collect_signal(sig, pending, info); > - } > - > return sig; > } > > @@ -2488,9 +2442,6 @@ EXPORT_SYMBOL(force_sig); > EXPORT_SYMBOL(send_sig); > EXPORT_SYMBOL(send_sig_info); > EXPORT_SYMBOL(sigprocmask); > -EXPORT_SYMBOL(block_all_signals); > -EXPORT_SYMBOL(unblock_all_signals); > - > > /* > * System call entry points. > -- > 1.5.5.1 >